Tutorial de IPTables para limitar a sobrecarga gerada por crawlers em servidores webAutores:
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 hitcountProvavelmente 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ãoO 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.htmlhttp://thiemonagel.de/2006/02/preventing-brute-force-attacks-using-iptables-recent-matching/http://www.thatsgeeky.com/2011/02/escalating-consequences-with-iptables/