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!