Linux IPTables - 忽略 IP 地址范围

Linux IPTables - 忽略 IP 地址范围

我目前正在公共服务器上修改一些 IPtables 规则,但遇到了一些困境。目标是执行以下操作:

  1. 速率限制主机每分钟可以建立的 SSH 连接数量
  2. 对于使用内部 IP 地址 (172.21-30.xx) 的所有主机,让它们跳过规则 #1

我的第一个想法是设置一个初始规则,即“接受 172.21-30.0.0/16 范围内的所有 IP 地址”。但是,这不会丢弃所有不在此范围内的数据包吗?我需要允许所有连接,只需选择受速率限制的连接即可。有没有办法配置 LOGDROP 的源(见下文)以应用于除以 172.21-30 开头的范围之外的所有范围?

目前的规则是:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
LOGDROP    tcp  --  anywhere             anywhere            tcp dpt:ssh state NEW recent: UPDATE seconds: 60 hit_count: 4 name: DEFAULT side: source
           tcp  --  anywhere             anywhere            tcp dpt:ssh state NEW recent: SET name: DEFAULT side: source

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain LOGDROP (1 references)
target     prot opt source               destination
LOG        all  --  anywhere             anywhere            limit: avg 2/min burst 5 LOG level warning prefix `Possible SSH Attack '
DROP       all  --  anywhere             anywhere

感谢您的任何帮助。亚伦

答案1

你最初的直觉是正确的。第一条规则应该是“允许来自此源范围的所有数据包”,然后是“计量传入数据包”规则。 IPTABLES 规则按照它们出现的顺序进行评估,第一场比赛获胜。我唯一会做的不同的事情是使 INPUT 策略 DROP,而不是在 LOGDROP 链的末尾有一个显式的 DROP 规则。不过,这纯粹是个人喜好。它真正所做的只是当你用人眼阅读它时,一条链中少了一条规则。

相关内容