阻止所有恶意的Nginx与fail2ban的连接

分享于 

3分钟阅读

互联网

 

问题:

为了尝试减少传入连接的数量,我重新配置了Nginx (对于明显的恶意请求):


keepalive_requests 0;


keepalive_timeout 0;



return 444;



(...)



error_page 400 500 502 503 504 =444 /444.html;



location /444.html {


 return 444;


}



没有响应,下一个连接或请求不会立即发送,nginx不会返回任何对攻击者有用的信息。

因为他们经常扫描端口,所以我在fail2ban中增加了一个过滤器,它禁止所有端口和协议,以避免进一步的连接:


enabled = true


maxretry = 1


bantime = 1d


port = all


banaction = %(banaction_allports)s[blocktype=DROP,protocol=all]



但现在我注意到,Nginx在收集越来越多的已建立连接,而不是关闭它们,它们都是被fail2ban阻止的连接。

一方面,这有效地减少了尝试次数,但另一方面,我现在必须重新启动Nginx,然后清除所有这些被阻塞但是开放的连接。


答案1:

我认为fail2ban是解决你问题的最佳方法,不幸的是,fail2ban只有有限的日志分析,没有第七层协议分析的功能。

如果没有特定的要求,我建议在Web服务器前面使用一些外部Web应用程序防火墙。

您有时间并且想玩得开心,我强烈建议您看一下以下用于nginx的模块。-ModSecurity

一切都取决于你想要阻止的恶意连接类型,ModSecurity应该满足你的需要,但阻止所有恶意连接显然是不可能的。


答案2:

你还可以尝试更改拒绝fail2ban中连接的方式,例如,尝试REJECT --reject-with tcp-reset而不是DROP

你也可以用tcpkill或cutter延长fail2ban的行动,参见https://github.com/fail2ban/fail2ban/issues/2107#issuecomment-379722469示例。


答案3

首先,我强烈建议配置你的iptables

如果被人经常扫描端口,则应丢弃除特定端口(例如22,80,443等)以外的所有流量。



Block  Nginx  mal  Connections  Blocking  mali  
相关文章