我有一台在同一个子网中带有 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