如何使用 iptables 仅允许端口的子网

如何使用 iptables 仅允许端口的子网

我想要做的是丢弃发往特定 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 地址。

相关内容