Bloqueando PortScanners com IPTABLES

Publicado por Bruno em 27/11/2015

[ Hits: 12.141 ]

Blog: https://www.linkedin.com/in/bruno-kammers-87612994/

 


Bloqueando PortScanners com IPTABLES



Quem nunca se deparou com port scanners em seus logs? Pois é, isto incomoda e pode até ser perigoso. De forma simples, é possível bloqueá-los. :)

Notei um certo número de scans de portas em um firewall e resolvi correr atrás de algo para bloqueá-los.

Tive umas ideias loucas, que atenderam minha necessidade perfeitamente. Não é em tempo real, mas você pode usar sua imaginação para analisar da maneira que você quiser.

Cenário:
  • CentOS 64 bits (testado nas versões 5 e 6, porém deve ser válido para 7 e com alguns ajustes é possível realizar o esquema em likes-debian).
  • Interface WAN - ETH1
  • Firewall - IPTABLES

Mãos a obra.

Você deve adicionar em seu script de firewall (se já não tiver), regras para logar scanners de portas:

iptables -N SCANNER
iptables -A SCANNER -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FW: port scanner: "
iptables -A SCANNER -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i eth1 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL NONE -i eth1 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL ALL -i eth1 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i eth1 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i eth1 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i eth1 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i eth1 -j SCANNER

Com isto, irá aparecer em seus logs os endereços válidos que tentaram realizar alguma análise na sua interface WAN;

# /var/log/messages | dmesg

Aí vem a sacada!

Eu analiso o LOG em busca de port scanners e bloqueio com IPTABLES! Se o endereço já estiver bloqueado, nada é realizado.

No meu caso, trabalhei no diretório /opt.

Vamos ao script (simples e funcional):

extdrop.sh

#!/bin/bash -x

cd /opt

dmesg | grep "port scanner" | awk '{print $7}' | cut -d= -f 2 | sort -u > badip.txt
iptables -nvL > regras.txt


for i in `cat badip.txt`
do
   if ! grep -Fq "$i" regras.txt
   then
      echo "BLOQUEANDO   $i"
      iptables -A INPUT -s $i -i eth1 -j DROP
   else
      echo "$i   JA ESTAVA BLOQUEADO... "
   fi
done

Pronto, basta dar permissão de execução no arquivo e adicionar um agendamento no CRONTAB.

# chmod 770 /opt/extdrop.sh

A repetição da análise no crontab vai depender do seu cenário. Não faz mal nenhum rodar muitas vezes, pois é leve.

Acho que de 1 em 1 hora está bom.

00 * * * * root sh /opt/extdrop.sh >> /opt/extdrop.log

Considerações finais

Com este simples script, você bloqueia IPs que realizarem scans em seu firewall.

Mas cuidado, se você precisar fazer um scan no firewall fora da rede interna, o IP válido que realizou o scan será bloqueado!

Essas regras ficam em memória, caso você execute o seu script de firewall novamente (provavelmente ele limpa as regras ativas e aplica as configuradas novamente) estes bloqueios serão desfeitos temporariamente, mas voltarão a ser bloqueados na próxima análise que estiver configurado no crontab.

Abraços!

Outras dicas deste autor

Desativando Chaveiro de Sessão no Deepin OS

Capturando range de IP via terminal

Instalando Firefox Quantum no Deepin OS

Instalando Astah Community no Deepin OS

Leitura recomendada

Instalação de proxy autenticado com Squid

Dicionário de sinônimos Micha Elvis

Qual distribuição utilizar

Servidor tftpd-hpa com put e get

Instalando Beryl no Slackware Linux 12

  

Comentários
[1] Comentário enviado por conectadohost em 28/11/2015 - 09:26h

excelente dica, eu apenas faria uma modificação se fosse para meu próprio uso, colocaria a opção de receber por e-mail uma vez por dia a lista dos ips bloqueados, apenas para ter um controle.

---> A arte de programar consiste na arte de organizar e dominar a complexidade.
---> Dijkstra <---



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts