我想要做的是丢弃发往特定 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
不要尝试阻止 NAT 表,而要尝试 FORWARD 表。
iptables -A FORWARD --src 10.8.0.0/24 -p udp --目标端口 63210 -j ACCEPT
iptables -A FORWARD -p udp --目标端口 63210 -j DROP
这将接受您局域网的数据包,并丢弃通过路由器转发的所有其他数据包(对于此端口) - 即使涉及 NAT。请注意,它不会捕获在路由器本身上发起或终止的请求,为此您将使用 INPUT 和/或 OUTPUT,而不是转发链。
前向链在 NAT 链之前进行解析,因此您可以在其中匹配源 IP 地址和目标 IP 地址。