Como bloquear bots com nginx

1

Eu tenho um aplicativo Rails em execução no nginx na plataforma aws elastic beanstalk. Eu verifiquei o nginx / access.log e encontrei um número de pedidos suspeitos de GET assim:

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"

Tenho certeza de que esses são bots, como bloquear essas solicitações suspeitas com o nginx?

Editar:

Aparentemente, essa é uma prática chamada spam de referência. Leia mais aqui. link

    
por Ryan.lay 24.07.2016 / 06:46

1 resposta

7

Parece um Samsung Galaxy usando uma entrada de DNS desatualizada para m.facebook.com; -)

Bem, se você der uma olhada no seu access.log, encontrará muitas solicitações como /pma , /webadmin , /admin/config.php , /w00tw00t , /vtigercrm e assim por diante. Parece que há alguns bots verificando versões antigas / vulneráveis de softwares de código aberto bem conhecidos como o phpmyadmin, o wordpress ou qualquer outra coisa.

Como não gostamos muito disso, tentamos mantê-los fora. Na primeira vez, adicionamos apenas alguns locais ao nosso nginx-config, enviando um erro 404 nas solicitações que correspondiam a uma entrada de uma lista preenchida manualmente. Isso foi bom para confundi-los, mas realmente não diminuiu a quantidade de "pedidos ruins". Mais tarde, movemos a lista para "fail2ban". Sempre que uma solicitação GET apareceu em access.log com um dos nossos URIs predefinidos, o IP do cliente foi bloqueado por 48 horas pelo iptables. já que não conseguiam mais acessar nosso servidor, isso ajudou muito. Você só precisa instalar o fail2ban, adicionar um filtro (no debian em /etc/fil2an/filter.d/xxx.conf) com uma lista simples de valores regex e adicionar o filtro ao jail.conf.

Por exemplo, /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 =

Adicionado em /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

Você também pode pensar em outra maneira de filtrar esses bots. Se você adicionar o código de status ao formato de log de acesso do nginx, será possível configurar o fail2ban / filter.conf para bloquear usuários com mais de 10 404 erros por minuto - ou algo assim.

Mas você deve ter em mente que pode bloquear "bons" usuários, se a configuração do fail2ban não for boa o suficiente.

    
por 24.07.2016 / 13:02

Tags