Iptables + módulo recent
Como este módulo está se difundindo bastante ultimamente, resolvi escrever um pequeno artigo descrevendo esse poderoso recurso que o iptables nos oferece. Com ele você poderá criar regras dinâmicas com uma determinada resposta ou ação quando ativada.
Parte 3: Exemplo1 - Brute force
Agora com os comandos já descritos, colocarei alguns exemplos. Para deixar simples a interpretação a cada linha do iptables, explicarei cada item após, colocando um R (regra) na frente da regra e um E (explicação) na frente da explicação.
1. Simples regra para limitar a 2 conexões em um espaço de tempo de 120 segundos. Se o ip tentar se conectar mais de duas vezes em menos de 120 segundos, a conexão dele será bloqueada. E após este tempo (120 segundos) será liberada novamente.
R. iptables -A INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set --name sshlimita -j RETURN
E. Verifique na tabela de entrada (-A INPUT) quando chegar um pacote de nova conexão (-m state NEW) vindo da interface da minha rede interna (-i eth0) com direção a porta 22 (--dport 22), ative o módulo recent (-m recent) e se não existir, crie uma tabela de nome sshlimita (--name sshlimita) e volte para a tabela INPUT e continue analisando as próximas regras (-j RETURN).
R. iptables -A INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --name sshlimita --rchek --seconds 120 --hitcount 3 -j LOG --log-prefix "SSHLimitaConn: "
E. Verifique na tabela de entrada (-A INPUT) quando chegar um pacote de nova conexão (-m state NEW) vindo da interface da minha rede interna (-i eth0) com direção a porta 22 (--dport 22), ative o módulo recent (-m recent) e verifique (--rcheck) se na tabela sshlimita (--name sshlimita) existe a entrada do ip de origem, se existir, verifique se este tem três (3) entradas (--hitcount 3) em menos de 2 minutos (--seconds 120), se for verdade, adicione uma entrada de nome "SSHLimitaConn" no arquivo de log que diz respeito as mensagens do kernel. Pode verificar em /etc/syslog.conf.
R. iptables -A INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --name sshlimita --rcheck --seconds 120 --hitcount 3 -j DROP
E. Verifique na tabela de entrada (-A INPUT) quando chegar um pacote de nova conexão (-m state NEW) vindo da interface da minha rede interna (-i eth0) com direção a porta 22 (--dport 22), ative o módulo recent (-m recent) e verifique (--rcheck) se na tabela sshlimita (--name sshlimita) existe a entrada do ip de origem, se existir, verifique se este tem três (3) entradas (--hitcount 3) em menos de 2 minutos (--seconds 120), se for verdade, drope a tentativa de conexão.
1. Simples regra para limitar a 2 conexões em um espaço de tempo de 120 segundos. Se o ip tentar se conectar mais de duas vezes em menos de 120 segundos, a conexão dele será bloqueada. E após este tempo (120 segundos) será liberada novamente.
R. iptables -A INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set --name sshlimita -j RETURN
E. Verifique na tabela de entrada (-A INPUT) quando chegar um pacote de nova conexão (-m state NEW) vindo da interface da minha rede interna (-i eth0) com direção a porta 22 (--dport 22), ative o módulo recent (-m recent) e se não existir, crie uma tabela de nome sshlimita (--name sshlimita) e volte para a tabela INPUT e continue analisando as próximas regras (-j RETURN).
R. iptables -A INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --name sshlimita --rchek --seconds 120 --hitcount 3 -j LOG --log-prefix "SSHLimitaConn: "
E. Verifique na tabela de entrada (-A INPUT) quando chegar um pacote de nova conexão (-m state NEW) vindo da interface da minha rede interna (-i eth0) com direção a porta 22 (--dport 22), ative o módulo recent (-m recent) e verifique (--rcheck) se na tabela sshlimita (--name sshlimita) existe a entrada do ip de origem, se existir, verifique se este tem três (3) entradas (--hitcount 3) em menos de 2 minutos (--seconds 120), se for verdade, adicione uma entrada de nome "SSHLimitaConn" no arquivo de log que diz respeito as mensagens do kernel. Pode verificar em /etc/syslog.conf.
R. iptables -A INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --name sshlimita --rcheck --seconds 120 --hitcount 3 -j DROP
E. Verifique na tabela de entrada (-A INPUT) quando chegar um pacote de nova conexão (-m state NEW) vindo da interface da minha rede interna (-i eth0) com direção a porta 22 (--dport 22), ative o módulo recent (-m recent) e verifique (--rcheck) se na tabela sshlimita (--name sshlimita) existe a entrada do ip de origem, se existir, verifique se este tem três (3) entradas (--hitcount 3) em menos de 2 minutos (--seconds 120), se for verdade, drope a tentativa de conexão.
um abraço