Iptables - Módulo recent

Introdução

Basicamente o módulo recent faz o que o nome mesmo diz, cria uma tabela dinâmica com endereços IPs "recentes" que obedeçam uma determinada regra.
Criar regras como, por exemplo, manter a porta 5900 (VNC Client) fechada e liberá-la quando um pessoa mandar 3 pacotes syn para as portas 1, 2 e 3, respectivamente, deixando assim a porta fechada e quando quiser é apenas enviar um telnet básico nas portas definidas que será aberta para o seu ip. Se alguém tentar fazer um portscanner não conseguirá nada, porque a porta estará fechada.
Bloquear uma tentativa de Brute Force pelas suas tentativas freqüentes de mandar um pacote syn para o firewall. Um exemplo disso é a utilização do brutus ou um simples shell script fazendo um laço com o expect tentando se logar no porta 22 (SSH)

# iptables -m recent -help
.....
recent v1.3.5 options:

[!] --set
Add source address to list, always matches.
[!] --rcheck
Match if source address in list.
[!] --update
Match if source address in list, also update last-seen time.
[!] --remove
Match if source address in list, also removes that address from list.
--seconds seconds
For check and update commands above.
Specifies that the match will only occur if source address last seen within the last 'seconds' seconds.
--hitcount hits
For check and update commands above.
Specifies that the match will only occur if source address seen hits times. May be used in conjunction with the seconds option.
--rttl
For check and update commands above.
Specifies that the match will only occur if the source address and the TTL match between this packet and the one which was set.
Useful if you have problems with people spoofing their source address in order to DoS you via this module.
--name name
Name of the recent list to be used. DEFAULT used if none given.
--rsource
Match/Save the source address of each packet in the recent list table (default).
--rdest
Match/Save the destination address of each packet in the recent list table
      

 

Exemplo - Block Brute Force in FTP

Simples regra para limitar a 2 conexões em um espaço de tempo de 300 segundos. Se o ip tentar se conectar mais de duas vezes em menos de 300 segundos, a conexão dele será bloqueada. E após este tempo (300 segundos) será liberada novamente (vale lembrar, que é feito balacemento de carga, então o numero de tentativas é multiplicada pelo numero de maquinas no sistema).

iptables -F
iptables -A INPUT -p tcp -s 10.24.70.0/24 -j ACCEPT
iptables -A INPUT -p tcp -s 10.24.71.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent --set --name FTPBLOCK
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent --update --seconds 300 \
--hitcount 3 --name FTPBLOCK -j LOG --log-level alert --log-prefix "FTP SCAN blocked: "
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent --update --seconds 300 \
--hitcount 3 --name FTPBLOCK -j DROP

Descrição do exemplo

iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent --set --name FTPBLOCK

Verifique na tabela de entrada (-A INPUT) quando chegar um pacote de nova conexão (-m state NEW) na porta 21 (--dport 21), ative o módulo recent (-m recent) e se não existir, crie uma tabela de nome FTPBLOCK (--name FTPBLOCK)

iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent --update --seconds 300 \
--hitcount 3 --name FTPBLOCK -j LOG --log-level alert --log-prefix "FTP SCAN blocked: "

Verifique na tabela de entrada (-A INPUT) quando chegar um pacote de nova conexão (-m state NEW) na porta 21 (--dport 21), ative o módulo recent (-m recent) e verifique (--update) se na tabela FTPBLOCK (--name FTPBLOCK) existe a entrada do ip de origem, se existir, verifique se este tem três (3) entradas (--hitcount 3) em menos de 5 minutos (--seconds 300), se for verdade, adicione uma entrada de nome "FTP SCAN blocked" no arquivo de log com nivel de alerta (--log-level alert) no syslog do kernel.

iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent --update --seconds 300 \
--hitcount 3 --name FTPBLOCK -j DROP

Verifique na tabela de entrada (-A INPUT) quando chegar um pacote de nova conexão (-m state NEW) na porta 21 (--dport 21), ative o módulo recent (-m recent) e verifique (--update) se na tabela FTPBLOCK (--name FTPBLOCK) existe a entrada do ip de origem, se existir, verifique se este tem três (3) entradas (--hitcount 3) em menos de 5 minutos (--seconds 300), se for verdade,recuse (DROP) o pacote .

Teste do modulo recent

Neste exemplo , basta fazer 3 tentativas de conexão ao ftp e verá que ficará bloqueado, para ver a lista de ips bloqueados:

cat /proc/net/ipt_recent/FTPBLOCK

Contato | ©2008 JEMJ Informatica