Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Slackware na Veia
Por hellanio
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Iptables + módulo recent
Linux user
melphos
19/10/2006
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.
Por: Ivan de oliveira Santos | Blog: http://www.hitk.com.br
[ Hits: 37719 ]
Conceito: 9.9   6 voto(s)6 voto(s)6 voto(s)6 voto(s)6 voto(s) + quero dar nota ao artigo

Introdução

Iptables Recent


Basicamente o módulo recent faz o que o nome mesmo diz, cria uma tabela dinâmica com endereços IPs "recentes", ou melhor, setados por você. Mas o interessante é que você pode mudar uma regra dinamicamente. Como? Vou explicar.

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 seqü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).

Próxima página >>




Páginas do artigo

Outros artigos deste autor
Nenhum artigo encontrado.

Leitura recomendada

Comentários
[1] Comentário enviado por fabio em 19/10/2006 - 03:53h:

Cara, muito bom esse recurso. Excelente artigo, já está nos meus favoritos :)

um abraço

[2] Comentário enviado por tatototino em 19/10/2006 - 07:26h:

Muito bom, parabéns!
Depois vou testá-lo!
Até mais!

[3] Comentário enviado por Flare em 19/10/2006 - 09:41h:

Parabens, muito bom o artigo
:)

[4] Comentário enviado por eudson em 19/10/2006 - 10:16h:

Kra muito interessante mesmo, ha um bom tempo eu estava atraz desse recurso!!!

Já ta na minha lista de estudos!

[5] Comentário enviado por davidsonbhz em 19/10/2006 - 10:35h:

Gostei! Bem explicado e com exemplos práticos. Vou testar por aqui

[6] Comentário enviado por peregrino em 19/10/2006 - 17:39h:

cara muito bom mesmo parabens so gostaria que tivesse uma continuação desse ou ter mais algumas opções boas como esta

falow

[7] Comentário enviado por jakovski em 19/10/2006 - 21:02h:

parabems bem lega !!!


[8] Comentário enviado por segundow em 19/10/2006 - 21:54h:

Melphos....
gostei muito do seu artigo, muito útil e rico para a comunidade. Vou testar essa funcionalidade aqui, eu particularmente não a conhecia. Já até pensei na possibilidade de fazer tratamento nas regras para os clientes que não possuem IP fixo (será um benção)!
Você conhece mais algum artigo ou poderia nos passar mais algum documento para enriquecimento sobre o recent?

Grande abraço

Segundow

[9] Comentário enviado por melphos em 14/11/2006 - 13:25h:

Então campeão,

O módulo recent é pouco documentado mesmo, já vi muitas coisas nele na grande rede mas a maioria para bloquear ataques de brute force. No próprio site da netfilter.org tem apenas o que complementei no artigo, descrição de cada item.
O que você pode fazer é junta-lo com outros módulos, por exemplo:

Módulo time:
iptables -N HourSSH
iptables -A INPUT -p tcp -m time --timestart 09:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri -m state --state NEW -m recent --set --name HourSSH --dport 22 -i eth1 -j HourSSH

iptables -A HourSSH -p tcp -m state --state NEW -m recent --check --name HourSSH --seconds 60 --hitcount 3 -j DROP

Bloqueio no período das 9h as 18h que o SSH fique liberado, e se tentarem se conectar mais de 2 vezes em um período de tempo de 60 segundos, será bloqueado o seu acesso.

Da para usar a imaginação !!!

Boa sorte,
Ivan Santos

[10] Comentário enviado por acelere em 06/12/2006 - 20:09h:

Pois é Melphos,
adicionei as regras que vc postou mas elas não conseguiram barrar ataques ao ssh2.
Acho que o problema é que o ssh2 usa outras portas além da 22. O meu log contem várias linhas com:

... failed password for invalid user ZZZ from xxx.ccc.xxx.ccc port 47653 ssh2

Claro que o numero 47653 varia bastante.

Tentei uma vasculhada para saber se as portas do ssh2 eram padrão, mas não achei um "port range".

Vc tem alguma dica de regra que barre esse tipo de ataque?

Valeu,

acelere

[11] Comentário enviado por melphos em 07/12/2006 - 12:05h:

Olá campeão,

Este artigo se aplica a qualquer tipo de versão do SSH, principalmente a versão 2 do SSH. E o SSH versão 2, não usa outros ranges de portas igual ao ftp por exemplo. Se não está bloqueando você deve verificar suas regras anteriores, ver se tem alguma regra que está liberando o ataque.

Para deixar um pouco mais claro, essa porta 47653, não é a porta que o SSH está escutando, e sim a porta que o ataque está originando. Basicamente, é a porta de origem.

Voltando ao artigo, a um detalhe que descobri esses dias quando fui instalar alguns firewall's no cliente. Seguinte, para distribuições como Suse, Red Hat, essas regras precisam estar em uma ordem correta, ou melhor dizendo, precisa criar uma CHAIN para enviar os pacotes com destino a porta 22 para está CHAIN e tratar com o módulo recent dentro dela, e depois voltar a CHAIN de origem. Pode ser isto que está acontecendo no seu caso.

Qualquer coisa,
Não exite em comunicar,
Abraços e boa sorte,
Ivan Santos

[12] Comentário enviado por acelere em 12/12/2006 - 08:26h:

Ok,
Vamos ver se eu consigo:
1) crio a CHAIN:
iptables -N melphos
2) mando para esta CHAIN os pacotes da porta 22:
iptables -A melphos -p TCP --dport 22 --syn -j ACCEPT

E depois?
Como eu coloco o filtro usando o recent dentro dessa CHAIN?
Como os outros pacotes passam por esta CHAIN?
Como eu faço para voltar à CHAIN de origem?

Sei que isso não é um tutorial de iptables, mas acho que completa o seu artigo!

Grato,

acelere

[13] Comentário enviado por elgio em 29/08/2007 - 10:48h:

Meu amigo!
Muito bom este teu artigo.

Eu tinha, amadoramente, tentado bloquear este force brute SSH com limit, limitando a 10/m. Problema: meus usuários legítimos acabavam não conseguindo logar-se por que o limite já tinha estourado. Ai eu abri uma porta alternativa para eles e divulguei...

Mas agora, com o modulo recent, lendo teu artigo eu fiz:

# Aceita de um mesmo IP somente 3 por minuto
iptables -A INPUT -i eth0 -p tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -m recent --update --seconds 60 --hitcount 3 --name SSH -j REJECT

# mesmo tendo passado pela regra acima (3 por minuto), aceita somente 30 por dia
iptables -A INPUT -i eth0 -p tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -m recent --set --name SSH2
iptables -A INPUT -i eth0 -p tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -m recent --update --seconds 86400 --hitcount 30 --name SSH2 -j REJECT

A ideia é limitar 3 por minuto, mas se o cara vai no ritmo, tentando até 30 por dia (outra lista) ai ele fica na geladeira por 24 horas! Se o robozinho do cara respeitar o 3/min, em 10 min ele estoura o segundo limite e dançou! Só amanhã!

Pus no ar agora.



[14] Comentário enviado por melphos em 29/08/2007 - 11:00h:

Olá Elgio,

Muito bom as regras, você usou as várias possibilidades do módulo recent. Parabéns !!!

abraços,
melphos

[15] Comentário enviado por leliocampos em 19/09/2007 - 14:25h:

Boa tarde

Você testou o ultimo exemplo, o de ping. Eu tentei de tudo, até gerar log, ele gera, mas não libera o acesso na porta 22.

No aguardo,
Lélio

[16] Comentário enviado por k4mus em 26/11/2007 - 12:58h:

Parabens amigo ..otimo artigo..

>>Ctrl+d<<

[17] Comentário enviado por k4mus em 26/11/2007 - 13:17h:

..Na regra dois do brute force: ah um errinho na escrita: :)

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: "

(--rchek - correçao --rcheck)

..nas explicaçao abaixo esta falanco ..mas, so pra constar mesmo :)


abraço galera


..abraços!!!

[18] Comentário enviado por melphos em 26/11/2007 - 15:01h:

leliocampos,

Como nestes exemplos não usei CHAINs, fica ai a dica para que em sistemas, por exemplo, derivados do Red Hat, as regras dêem certo. Se for derivados do Debian, tente criar CHAINs para essas regras mesmo.

Abraços,
Melphos

[19] Comentário enviado por melphos em 26/11/2007 - 15:03h:

Olá k4mus,

Obrigado pelo elogio e muito obrigado pela correção, as vezes na correria, ou na madrugada, que é quando sobra o tempinho, o sono fala mais alto.

VALEU MESMO PELA CORREÇÃO !!

Abração,
Melphos

[20] Comentário enviado por balani em 30/01/2008 - 00:04h:

Excelente artigo, estou me aprofundando em firewall, e a cada dia venho me surpreendo com o nivel dos artigos postados aki no VOL.

Seu artigo vai dar problema com o Greenpeace, pq ele não quebra apenas um galho mais uma floresta inteira...rsrsrs

Parabens!!!

E VIVA A LIBERDADE, VIVA O LINUX

[21] Comentário enviado por demattos em 01/02/2008 - 18:24h:

Boa Noite, muito bom o artigo, mas gostaria de saber o seguinte, tenho aqui uma rede de computadores wireless usando minha internet ou seja compartilho com 20 (casas)computadores, eu queria era limitar somente 2 conexcoes dor ip a internet, vc saberia se com estes recurso do iptables e possivel fazer isto


Obrigado

[22] Comentário enviado por melphos em 01/02/2008 - 20:47h:

balani,

He he he ... obrigado. Estou fazendo um outro artigo sobre performance no iptables, onde irei falar um pouco sobre "Connection tracking", memória., /pro/sys/net/ipv4/*, sobre passos ideais e customizações em uma instalação de um firewall, como por exemplo, permissões, particionamento, sistema de arquivos, etc. E irei dar uma "chamiscada" nas integrações dos módulos.

Faça muitos testes, entenda como funciona o módulo recent, mas vá a fundo mesmo, tente entender o que é feito por trás de uma regra.

qualquer problema, pode entrar em contato: melphos@gmail.com

Abraços e muito sucesso,
Melphos

[23] Comentário enviado por anonymous em 22/12/2009 - 08:09h:

Mt show! Já adicionei em favoritos

[24] Comentário enviado por brizao em 28/07/2010 - 00:01h:

um negócio interessante também seria utilizar o programa fail2ban que faz a mesma coisa e no diretório /etc/fail2ban/jail.conf que é onde se configura o tempo de banimento, os protocolos e serviços que serão enjaulados em caso de tentativa de força bruta..


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.