quinta-feira, 13 de março de 2008

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

Nenhum comentário: