我想要做的是丢弃发往特定 UDP 端口的所有数据包,除了来自我的安全子网 10.8.0.0/24 的数据包。
iptables -t nat -A --src 10.8.0.0/24 -p udp --destination-port 63210 -j ACCEPT
我收到此错误:Bad argument: 10.8.0.0/24
我不明白为什么这不起作用......
- 为什么这个命令说 IP 是坏参数?
- 如何丢弃子网外的任何其他数据包?
- 我应该使用 NAT 表吗?
- 如何实现这一点?
我找到了这样的解决方案:
更新
iptables -N xchain
iptables -A xchain --source 10.8.0.0/24 -j ACCEPT
iptables -A xchain -j DROP
iptables -I INPUT -p udp --dport 63210 -j xchain
应用此功能后,我无法从任何 IP 访问端口...
问题 我在 tun0 接口上设置了 OpenVPN 服务器,像这样将数据包转发到 eth0:
iptables -I FORWARD -i tun0 -o eth0 \
-s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED \
-j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 \
-s 10.8.0.0/24 -j MASQUERADE
问题是,如何捕获 tun0 流量并过滤它,而不是 eth0,其中 IP 变得真实。
答案1
在第一个例子中,您使用了“--src”,这是不正确的,您应该使用--source 或 -s。
在第二个示例中,您正在创建一个名为“xchain”的新链,并在那里过滤数据包。但是,如果您不将来自其他链的数据包指向遍历 xchain,则这些过滤器将永远不会匹配。
此外,您已将数据包从 INPUT 链发送到 xchain:
# iptables -I INPUT -j xchain
此规则只会将目的地为运行 iptables 的主机的数据包发送到 xchain。如果您的主机是网络路由器,您还应该从 FILTER 链发送数据包:
# iptables -I FILTER -j xchain
注意:我已将您的 -A 更改为 -I,这将规则置于规则列表的顶部,这意味着它肯定会被遍历。