我在aws弹性beanstalk平台上有一个运行在nginx上的Rails应用程序。 我检查了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"
我相当肯定,这些是机器人,我怎么用nginx阻止这些可疑的请求?
编辑:
显然这是一种被称为转介垃圾邮件的做法。 在这里阅读更多。 https://www.wikiwand.com/en/Referer_spam
看起来像一个三星银河使用过时的dns-entry为m.facebook.com 😉
那么,如果你看看你的access.log,你会发现很多请求,如/pma , /webadmin , /w00tw00t /admin/config.php /w00tw00t /admin/config.php , /w00tw00t /admin/config.php , /vtigercrm等等。 似乎有几个机器人检查着名的开源软件,如phpmyadmin,wordpress或其他的旧/脆弱版本。
由于我们不太喜欢这个,我们试图阻止他们。 第一次,我们只添加了几个位置到我们的nginx-config,发送一个与手动填充列表匹配的请求的错误404。 这是很好的混淆他们,但并没有真正减less“坏请求”的数量。 稍后,我们将列表移至“fail2ban”。 每当access.log上出现一个GET请求时,我们使用一个预定义的URI,客户端IP被iptables阻塞了48个小时。 因为他们无法再访问我们的服务器,这非常有帮助。 你只需要安装fail2ban,用一个简单的regex值列表添加一个filter(在/etc/fil2an/filter.d/xxx.conf的debian上),并将filter添加到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 =
在/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
你也可以考虑另一种方法来过滤这些机器人。 如果将状态码添加到nginx访问日志格式中,您可以设置fail2ban / filter.conf来阻止每分钟有超过10个404错误的用户 – 或者类似的东西。
但是你必须记住,如果你的fail2banconfiguration不够好,它可能会阻塞“好”的用户。