如果来自 IP 的命中次数超过阈值,则丢弃每个 IP 的数据包

如果来自 IP 的命中次数超过阈值,则丢弃每个 IP 的数据包

现在,如果某个 IP 在一分钟内向我的主机发出 5 次请求,我想阻止该 IP(或丢弃来自该 IP 的数据包)。该怎么做?您能告诉我关于所述问题应该使用什么工具或命令吗?

经过搜索,我找到了带有 -m 限制模块的 iptables。但是它不考虑 IP 地址。也就是说,如果我将端口 22 上的限制设置为 5,即每 60 秒命中 5 次,那么无论源 IP 是什么(无论是单个 IP 还是 5 台不同的机器),如果有 5 次命中命中服务器,这将阻止连接。我还遇到了 tc 来调整流量带宽,但我不确定这是否是我应该查看的工具。

请通过发布链接和解决方案来帮助我。我总是喜欢阅读更多内容。

提前致谢。

更新:我不能在这里使用 fail2ban,因为 fail2ban 要求日志中存在某种已知格式的日期和时间。但 freeswitch 的日志并非如此。

答案1

好的,我找到了我的问题的答案,并在这里分享,以便其他人从中受益(即使浏览量并没有说明这一点:))。

我的解决方案是利用 iptables 和 fail2ban 来解决相关问题。

  1. 启动并运行防火墙。不要忘记打开 freeswitch 所需的端口,以便成功执行 VoIP 操作:

    firewall-cmd --add-port=5080-5081/tcp --add-port=5060-5061/tcp --add-port=5066/tcp --add-port=8080-8082/tcp --add-port=7443/tcp --add-port=16384-32768/udp
    

仅此一步就可以过滤掉大量攻击,因为大多数攻击都是通过 UDP 和 TCP 预期端口进行的。

  1. 要求 iptables 在连接到信令端口时存储 tcp 连接相关信息:

    iptables -I INPUT 5 -i eth0 -p tcp -m multiport --dports 5080,5081,5060,5061,7443,5066,8080:8082 -m recent --set --name FREESWITCH_BADGUY -j ACCEP
    iptables -I INPUT 5 -i eth0 -p tcp -m recent --update --hitcount 1 --seconds 120 --name FREESWITCH_BADGUY -j LOG --log-prefix "FREESWITCH BAD: " --log-level info
    

笔记INPUT 链中的索引/顺序 5。我使用 5 是因为它正好位于接受所列端口上的连接的规则之前(来自第一步中的命令)。因此,您应该将它们放在第一步中的规则之前但在 fail2ban ssh 规则之后的任何位置。

  1. 在以下位置创建一个新的 fail2ban 过滤器/etc/fail2ban/filter.d/freeswitch-customized.conf

    [Definition]
    
    failregex = FREESWITCH BAD.*SRC=<HOST>
    
    ignoreregex =
    
  2. 添加以下内容/etc/fail2ban/jail.local:(将日志路径更改为系统日志文件。我的是/var/log/messages。但在您的情况下也可以是,例如/var/log/syslog)。

    [freeswitch-customized]
    
    enabled = true
    port = 5060,5061,5080,5081,7443,5066
    logpath = /var/log/messages
    filter = freeswitch-customzied
    
  3. 重新启动fail2ban:

    systemctl restart fail2ban
    

这对我有用。

相关内容