如何在 iptables 中仅允许某些 IP 地址并阻止所有其他 IP 地址连接?
为了允许我输入以下命令
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
我应该怎么做才能阻止?
答案1
需要记住的是,防火墙规则是按照列出的顺序进行检查的。当触发允许或禁止数据包或连接的规则时,内核将停止处理链。
假设您当前的防火墙仅具有该单个规则(例如使用iptables-save
或检查iptables -L -v -n --line-numbers
):
您需要附加第二条规则,指示防火墙如何处理与第一条规则不匹配的流量。
没有更具体的匹配规则的规则将匹配任何内容以及非常短的内容:
iptables -A -j REJECT
就足够了。
检查一下iptables-save
,你应该会看到一个类似于这样的最小防火墙:
[root@host ~]# iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.1 -j ACCEPT
-A INPUT -j REJECT
COMMIT
当触发允许或禁止数据包或连接的规则时,内核将停止处理链。
附录:当没有触发任何规则时政策在链上设置的策略会被应用。因此,除了在当前配置的末尾添加阻止所有内容的规则外,您还可以设置/更改输入链上的策略来实现相同的目的:
iptables -P INPUT DROP
和
[root@host ~]# iptables-save
*filter
:INPUT DROP[0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.1 -j ACCEPT
COMMIT