阻止 IP 范围,同时接受该范围内的 IP 之一

阻止 IP 范围,同时接受该范围内的 IP 之一

我们想要阻止 IP 范围,但同时只允许该范围内的一个 IP。通过搜索我们发现了这一点:

 $ sudo iptables -A INPUT -s <ALLOWED_IP> -j ACCEPT
 $ sudo iptables -A OUTPUT -d <ALLOWED_IP> -j ACCEPT

 $ sudo iptables -I INPUT -m iprange --src-range <NOT_ALLOWED_RANGE> -j DROP

但它不起作用。我们也尝试颠倒顺序,但仍然不起作用:

 $ sudo iptables -I INPUT -m iprange --src-range <NOT_ALLOWED_RANGE> -j DROP

 $ sudo iptables -A INPUT -s <ALLOWED_IP> -j ACCEPT
 $ sudo iptables -A OUTPUT -d <ALLOWED_IP> -j ACCEPT

我们可能做错了什么?

答案1

因此,正如评论中提到的,顺序很重要!

为了安全起见,netfilter 鼓励更改删除链iptables的策略INPUT,这样您就只允许您想要的 IP 地址或范围。

-I要回答您的问题,您首先需要使用指示您要将规则放在顶部的标志来允许所需的 IP 地址。

iptables -I INPUT -s SOURCE_IP -j ACCEPT 
iptables -A INPUT -m iprange --src-range SRC_RANGE/CIDR -j DROP

iptables第一条规则中适用,这意味着顶部的规则将始终获胜。

DENY  (this rule wins)
 |
ALLOW 

答案2

-I一般来说,对于这种情况没有真正需要使用选项。按以下顺序制定规则:

-A INPUT -s ALLOWED_IP -j ACCEPT 
-A INPUT -s FORBIDDEN_IP_RANGE -j DROP

仅允许来自 中的连接,ALLOWED_IP同时拒绝来自 中其他地址的连接FORBIDDEN_IP_RANGE

问题在于主题启动器-I在错误的位置使用了选项 - 对于DROP操作,因此在这两种情况下DROP操作都被放置在顶部。

内容如下man iptables

-I, --insert chain [rulenum] 规则规范

在选定的链中插入一个或多个规则作为给定的规则编号。因此,如果规则编号为 1,则将一条或多条规则插入到链的头部。如果未指定规则编号,这也是默认值。

因此,-I不使用规则编号就默认使用规则编号 1。您应该小心这种使用,因为它可能会破坏更复杂的防火墙配置的逻辑。

相关内容