18.190.156.212@hermano.com.br:~$ ls ./tutoriais/iptables

..   00-iptables-recent.txt  

18.190.156.212@hermano.com.br:~$ cat ./tutoriais/iptables/00-iptables-recent.txt

Tutorial de IPTables para limitar a sobrecarga gerada por crawlers em servidores web

Autores:
Hermano Pereira
Oeslei Taborda Ribas
Data: 02/02/2012

1) Introdução:

Quando do lado cliente é ativada uma ferramenta de crawler (rastreador), este pode sobrecarregar o servidor web ou até mesmo coletar informações em grande quantidade. Como resultado dessas atividades, o servidor pode não responder adequadamente aos usuários normais ou, pior, permitir que atacantes coletem informações do sítio com o intuito de montar listas de SPAM, por exemplo. Para isso o IPTables pode ser usado como uma ferramenta que visa ao menos reduzir esse tipo de ação, o objetivo deste tutorial é demonstrar como isso pode ser feito usando o módulo xt_recent/ipt_recent do IPTables.


2) Configurando IPTables:

Sugestão: não faça testes em servidor de produção. Primeiro faça seus testes em uma estação separada.

Remover todas as regras e chains:
iptables -F
iptables -X
Verifique:
iptables -L -n -v

Criar as chains, uma para limitar acessos e outra para a lista negra:
iptables -N limitaracesso
iptables -N listanegra
Verifique:
iptables -L -n -v

Regras para a listanegra
iptables -A listanegra -m recent --name listanegra --set
iptables -A listanegra -j REJECT

Regras para limitar os acessos, onde serão permitidos no máximo 50 acessos dentro de 5 minutos. Além disso, se a regra não for obedecida, irá colocar o endereço do requisitante em lista negra.
iptables -A INPUT -d 10.0.0.15 -p tcp --dport 80 --syn -j limitaracesso
iptables -A limitaracesso -m recent --set --name contador
iptables -A limitaracesso -m recent --update --name contador --seconds 300 --hitcount 50 -j listanegra
Considere 10.0.0.15 o endereço ip do servidor HTTP.

Verifique:
iptables -L -n -v

Verifique a lista negra:
cat /proc/net/xt_recent/listanegra
(ou ipt_recent)

3) Limitação de hitcount

Provavelmente o hitcount será carregado pelo kernel com contador igual a 20. Para alterar:

Crie o arquivo se não existir, configure o hitcount que pode ser no máximo 255:
vi /etc/modprobe.d/options (dependendo pode ser options.conf)
options xt_recent ip_pkt_list_tot=100

Remova as regras que usam o módulo recent:
iptables -F
iptables -X

Se o módulo xt_recent/ipt_recent foi carregado anteriormente:
lsmod | egrep recent
... então remova:
rmmod xt_recent

Carregar novamente o módulo:
modprobe xt_recent

Verifique:
cat /sys/module/xt_recent/parameters/ip_pkt_list_tot

Execute o passo 2 novamente.

4) Conclusão

O uso do módulo (ipt/xt)_recent do iptables permite limitar o número de acessos por endereço IP, evitando a sobrecarga de servidores web causados por crawlers.


5) Referências:

http://www.microhowto.info/howto/limit_the_rate_of_inbound_tcp_connections_using_iptables.html

http://thiemonagel.de/2006/02/preventing-brute-force-attacks-using-iptables-recent-matching/

http://www.thatsgeeky.com/2011/02/escalating-consequences-with-iptables/



18.190.156.212@hermano.com.br:~$ clear_