我有一个 Rails 应用程序在 aws 弹性 beantalk 平台上的 nginx 上运行。我检查了 nginx/access.log 并发现了一些可疑的 GET 请求,如下所示:
SUSPICIOUS_URL == '#m. #face #book #.com'
172.31.17.148 - - [24/Jul/2016:04:02:37 +0000] "GET /bisnis/read/2439204/beredar-di-medsos-bi-bantah-keluarkan-uang-pecahan-rp-200-ribu HTTP/1.1" 301 5
"http://SUSPICIOUS_URL/" "Mozilla/5.0 (Linux; Android 5.1.1; SM-E700H Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2
704.81 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/86.0.0.19.69;]" "175.141.68.34"
172.31.17.148 - - [24/Jul/2016:04:02:37 +0000] "GET /bisnis/read/2439204/beredar-di-medsos-bi-bantah-keluarkan-uang-pecahan-rp-200-ribu HTTP/1.1" 301 5
"http://SUSPICIOUS_URL/" "Mozilla/5.0 (Linux; Android 5.1.1; SM-E700H Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2
704.81 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/86.0.0.19.69;]" "175.141.68.34"
172.31.17.148 - - [24/Jul/2016:04:02:37 +0000] "GET /bisnis/read/2439204/beredar-di-medsos-bi-bantah-keluarkan-uang-pecahan-rp-200-ribu HTTP/1.1" 301 5
"http://SUSPICIOUS_URL/" "Mozilla/5.0 (Linux; Android 5.1.1; SM-E700H Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2
704.81 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/86.0.0.19.69;]" "175.141.68.34"
172.31.17.148 - - [24/Jul/2016:04:02:37 +0000] "GET /bisnis/read/2439204/beredar-di-medsos-bi-bantah-keluarkan-uang-pecahan-rp-200-ribu HTTP/1.1" 301 5
"http://SUSPICIOUS_URL/" "Mozilla/5.0 (Linux; Android 5.1.1; SM-E700H Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2
704.81 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/86.0.0.19.69;]" "175.141.68.34"
172.31.17.148 - - [24/Jul/2016:04:02:38 +0000] "GET /bisnis/read/2439204/beredar-di-medsos-bi-bantah-keluarkan-uang-pecahan-rp-200-ribu HTTP/1.1" 301 5
"http://SUSPICIOUS_URL/" "Mozilla/5.0 (Linux; Android 5.1.1; SM-E700H Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2
704.81 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/86.0.0.19.69;]" "175.141.68.34"
172.31.17.148 - - [24/Jul/2016:04:02:38 +0000] "GET /bisnis/read/2439204/beredar-di-medsos-bi-bantah-keluarkan-uang-pecahan-rp-200-ribu HTTP/1.1" 301 5
"http://SUSPICIOUS_URL/" "Mozilla/5.0 (Linux; Android 5.1.1; SM-E700H Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2
704.81 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/86.0.0.19.69;]" "175.141.68.34"
172.31.17.148 - - [24/Jul/2016:04:02:38 +0000] "GET /bisnis/read/2439204/beredar-di-medsos-bi-bantah-keluarkan-uang-pecahan-rp-200-ribu HTTP/1.1" 301 5
"http:/SUSPICIOUS_URL/" "Mozilla/5.0 (Linux; Android 5.1.1; SM-E700H Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2
704.81 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/86.0.0.19.69;]" "175.141.68.34"
Run Code Online (Sandbox Code Playgroud)
我很确定这些是机器人,我如何使用 nginx 阻止这些可疑请求?
编辑:
显然,这是一种称为推荐垃圾邮件的做法。在这里阅读更多。https://www.wikiwand.com/en/Referer_spam
看起来像三星 Galaxy 使用过时的 dns-entry for m.facebook.com ;-)
好吧,如果你看看你的access.log的,你会发现很多类似的请求/pma,/webadmin,/admin/config.php,/w00tw00t,/vtigercrm等。似乎有一些机器人在检查着名开源软件的旧/易受攻击版本,如 phpmyadmin、wordpress 或其他东西。
由于我们不太喜欢那样,所以我们试图将它们拒之门外。第一次,我们只向我们的 nginx-config 添加了几个位置,在与手动填充列表中的条目匹配的请求上发送错误 404。这很好混淆了他们,但并没有真正减少“不良请求”的数量。后来,我们将列表移至“fail2ban”。每当带有我们预定义 URI 之一的 GET 请求出现在 access.log 上时,客户端 IP 就会被 iptables 阻止 48 小时。由于他们无法再访问我们的服务器,这非常有帮助。您只需要安装fail2ban,添加一个过滤器(在/etc/fil2an/filter.d/xxx.conf 的debian 上),其中包含一个简单的正则表达式值列表,并将过滤器添加到jail.conf。
例如, /etc/fail2ban/filter.d/nginx-bots.conf:
[INCLUDES]
[Definition]
failregex = ^<HOST> - .* "GET /?/phpmyadmin/
^<HOST> - .* "GET /?/phpMyAdmin/
^<HOST> - .* "GET /?/pma/
^<HOST> - .* "GET /?/PMA/
^<HOST> - .* "GET /?/sqlmanager/
^<HOST> - .* "GET /?/phpmyadmin-?2/
^<HOST> - .* "GET /?/phpMyAdmin-?2/
^<HOST> - .* "GET /?/mysqlmanager/
^<HOST> - .* "GET /?/webadmin/
^<HOST> - .* "GET /?/php-my-admin/
^<HOST> - .* "GET /?/myadmin
^<HOST> - .* "GET /?/MyAdmin
^<HOST> - .* "GET /?/cgi-bin/
^<HOST> - .* "POST /?/%%
^<HOST> - .* "GET /admin/config.php
^<HOST> - .* "GET /idssvc/iesvc
^<HOST> - .* "GET /vtigercrm/
^<HOST> - .* "GET /wstats/wstats
^<HOST> - .* "GET /CluJaNul/
^<HOST> - .* "GET /bynazi/
^<HOST> - .* "GET /invoker/
^<HOST> - .* "GET \\x
^<HOST> - .* "GET /jmx-console/
^<HOST> - .* "GET /zecmd/
^<HOST> - .* "GET /?/manager/html/upload
^<HOST> - .* "GET /w00tw00t
^<HOST> - .* "GET /muieblackcat
ignoreregex =
Run Code Online (Sandbox Code Playgroud)
添加于/etc/fail2ban/jail.conf:
[nginx-bots]
enable = true
port = http,https
filter = nginx-bots
logpath = /var/log/nginx/access.log*
maxretry = 1
bantime = 172800
findtime = 86400
Run Code Online (Sandbox Code Playgroud)
您还可以考虑另一种方法来过滤掉这些机器人。如果您将状态代码添加到 nginx 访问日志格式,您可以设置 fail2ban/filter.conf 以阻止每分钟超过 10 404 错误的用户 - 或类似的东西。
但是您必须记住,如果您的 fail2ban 配置不够好,它可能会阻止“好”用户。
| 归档时间: |
|
| 查看次数: |
2314 次 |
| 最近记录: |