如何使用 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

在第一个例子中,您使用了“--src”,这是不正确的,您应该使用--source 或 -s。

在第二个示例中,您正在创建一个名为“xchain”的新链,并在那里过滤数据包。但是,如果您不将来自其他链的数据包指向遍历 xchain,则这些过滤器将永远不会匹配。

此外,您已将数据包从 INPUT 链发送到 xchain:

# iptables -I INPUT -j xchain

此规则只会将目的地为运行 iptables 的主机的数据包发送到 xchain。如果您的主机是网络路由器,您还应该从 FILTER 链发送数据包:

# iptables -I FILTER -j xchain

注意:我已将您的 -A 更改为 -I,这将规则置于规则列表的顶部,这意味着它肯定会被遍历。

相关内容