A Priscila (@MayogaX) foi uma das pessoas que reclamou que eu tinha uma seção aqui sobre bancos de dados, mas nada escrito. Acho que finalmente chegou o momento de ter alguma coisa ;-)
Mantenho o maravilhoso e ultra moderno encurtador eri.cx, que agora passou a sofrer ataques constantes. Chato? É, mas ataque na Internet já virou lugar comum. Então temos de estar preparados. Sempre. O foco só mudou, pois antes esse tipo de ataque vinha por mail, com os SPAMs.
Entre os muitos scripts que tenho, tem um que verifica por alguns padrões de palavras como "cialis", "tramadol", "xanax" e "taladafil". Não tenho idéia do que sejam. Aliás o "xanax" dá uma certa idéia.
O que me faz pensar que esses links não são legítimos? Perfil de tráfego. São links que o número de cliques aumenta muito rápido. Com isso eu tenho uns scripts que fazem algumas verificações, inclusive com palavras chaves como essas. Se o link entra nesse perfil, eu removo pra uma tabela chamada "quarantine", salvando exatamente o formato de entrada. Em seguida eu troco pro meu próprio site. É uma propaganda subversiva, mas é mais legítimo que permitir que as pessoas caiam nesse truques.
Hoje eu resolvi dar uma olhada nos ataques, aliás nos logs dos ataques, e procurar um perfil. Então eu precisava pegar os IPs e procurar um padrão. Basicamente pegar via SQL os IPs, e fazer um count() na quantidade de vezes que apareciam e apenas mostrar aqueles que um padrão acima do normal.
O resultado foi esse aqui:
mysql> select ip, count(ip) as ip_count from quarantine group by ip having count(ip) > 10 order by count(ip) desc;
+---------------+----------+
| ip | ip_count |
+---------------+----------+
| 173.44.37.250 | 168 |
| 96.47.224.50 | 139 |
| 173.44.37.226 | 136 |
| 173.44.37.242 | 121 |
| 96.47.224.42 | 118 |
| 96.47.225.82 | 117 |
| 173.44.37.234 | 115 |
| 96.47.225.74 | 112 |
| 96.47.225.66 | 110 |
| 96.47.224.58 | 100 |
| 213.5.66.88 | 89 |
| 96.47.225.162 | 71 |
| 96.47.225.170 | 69 |
| 96.47.225.186 | 69 |
| 96.47.225.178 | 67 |
+---------------+----------+
15 rows in set (0.01 sec)
Com isso foi fácil ver um padrão claro de ataque de apenas alguns ranges IPs. Bastou uma pequena adição ao iptables pra acabar com a farra.