为什么我的 iptables 脚本不能正常工作?

为什么我的 iptables 脚本不能正常工作?

我有一台在同一个子网中带有 2 个接口的 PC。我需要阻止从一个 IP 到一个接口的所有流量。此外,我需要在两个接口上接受来自该子网中每个 IP 的连接。

有人能告诉我我做错了什么吗?

这是我的脚本。

iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i eth0 -s 192.168.8.0/24 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.8.0/24 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.8.32 -j DROP

答案1

这是因为如果您使用iptables -A,您添加的规则将被放在链的末尾。只要一条规则匹配,iptables 就会执行操作(DROP、ACCEPT)并停止处理其余规则。

就你的情况而言,只要 IP192.168.8.32到达 iptables,它就会看到规则192.168.8.0/24 -j ACCEPT,IP 与规则匹配,并且它接受连接。规则DROP永远不会被评估。

你必须把DROP规则放在第一位,然后ACCEPT才是规则。

答案2

首先,你应该DROP在开始时就制定更精确的规则。否则,更全局的ACCEPT规则将优先。

其次,如果您有同一子网的 2 个传入接口,则您应该DROP为这两个传入接口制定规则。

以下是我的建议:

iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i eth0 -s 192.168.8.32 -j DROP
iptables -A INPUT -i eth1 -s 192.168.8.32 -j DROP
iptables -A INPUT -i eth0 -s 192.168.8.0/24 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.8.0/24 -j ACCEPT

相关内容