IPTables不会立即使用ipset阻止IP

Fog*_*oon 5 security iptables nginx

我有以下IPTablesIPSet作为规则源阻断攻击IP,但是当我增加一个攻击IPIPSet,在我的nginx访问日志,我仍然看到攻击的连续访问IP。大约3到5分钟后,IP被阻止。

iptables

~$ sudo iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 317K packets, 230M bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     106K 6004K DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set Blacklist src

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set Blacklist src

Chain OUTPUT (policy ACCEPT 350K packets, 58M bytes)
num   pkts bytes target     prot opt in     out     source               destination
Run Code Online (Sandbox Code Playgroud)

ipset

sudo ipset -L
Name: Blacklist
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536 timeout 60
Size in memory: 13280
References: 2
Members:
xxx.xxx.xxx.xxx(attacker ip) timeout 0
Run Code Online (Sandbox Code Playgroud)

我不知道为什么规则没有立即生效,这使我发疯,就像攻击者在嘲笑我一样。

我在选项中添加ipsetiptables规则,该-I选项应将规则保持在第一位置。所以也许可以解决这个问题Chain INPUT(policy Accept)

请帮帮我,非常感谢。

顺便说一句。

我用于Nginx+Djano/uWSGI部署我的应用程序,并使用Shell脚本分析nginx日志以将邪恶ip放入Blacklist ipset

cns*_*nst 4

防火墙规则可能不会立即阻止流量的原因可能是由于数据包的状态检查。

\n\n

防火墙分析到达线路的每个数据包可能效率很低,因此,出于性能原因,用户创建的规则通常仅适用于建立连接的初始数据包(称为 TCP\' s SYN, SYN+ ACK, ACK) \xe2\x80\x94 随后,该连接将自动列入白名单(更准确地说,是原始规则创建的状态被列入白名单),直到终止( )FIN

\n\n

这里可能发生的情况是,由于 nginx 擅长的管道化和保持活动连接,单个连接可能用于发出和处理多个独立的 HTTP 请求。

\n\n

因此,为了解决这个问题,您可以在 nginx 中禁用管道和保持活动(这不是一个好主意,因为它会影响性能),或者删除现有的白名单连接,例如,使用类似tcpdrop(8)on *BSD \xe2\x80\x94 当然也必须有一个 Linux 等效工具。

\n\n

但是,如果您只是遇到单个客户端执行过多请求的问题,从而导致后端超载,那么适当的操作过程可能是根据 IP 地址对客户端进行速率限制limit-req,并使用nginx标准指令的帮助。(但请注意,您的某些客户可能使用运营商级 NAT,因此请注意应用限制的程度,以确保误报不会成为问题。)

\n