IPtables e seus módulos

Como muitos devem saber o iptables é um firewall muito poderoso, nos permitindo criar regras baseadas desde IP de origem/destino a regras complexas que analisem o estado da conexão etc. Vou listar exemplos de uso de alguns módulos que possam vir a serem interessantes na hora de uma configuração de firewall iptables.

[ Hits: 8.920 ]

Por: rafael oliveira em 21/03/2016


Introdução



Como muitos devem saber o iptables é um firewall muito poderoso, nos permitindo criar regras baseadas desde IP de origem/destino a regras complexas que analisem o estado da conexão etc.

Vou listar exemplos de uso de alguns módulos que possam vir a serem interessantes na hora de uma configuração de firewall iptables.

Sempre que desejamos usar um módulo devemos usar a opção " -m nome_modulo ".

MULTIPORT

Nos permite criar regras especificando várias portas.
  • --dports = portas de destino
  • --sports = portas de origem
  • --ports = portas de origem ou destino

Ex.:

# iptables -A INPUT -i eth0 -s 192.168.0.0/24 -m multiport -p tcp --dports 22,23 -j ACCEPT

Libera SSH e TELNET p/ 192.168.0.0/24 entrando pela eth0.

# iptables -A INPUT -i eth0 - 192.168.0.0/24 -m multiport -p udp --dports 53,67 -j ACCEPT

Libera DNS e DHCP p/ 192.168.0.0/24 entrando pela eth0.

IPRANGE

Nos permite utilizar intervalos de IPs.
  • --src-range = range de origem
  • --dst-range = range de destino

Ex.:

# iptables -A INPUT -i eth3 -m iprange --src-range 192.168.56.10-192.168.56.50 -j ACCEPT

Libera conexões vindo dos IPs 192.168.56.10 até o 192.168.56.50 entrando pela eth3.

CONNLIMIT

Limite de conexões simultâneas.
  • --connlimit-upto = relaciona a regra caso o numero de conexões seja IGUAL ou MENOR ao valor definido
  • --connlimit-above = relaciona a regra caso o numero de conexões seja MAIOR ou IGUAL ao valor definido
  • --connlimit-mask = número de BITS DA MÁSCARA DE REDE quando usado para limitar toda uma rede

Ex.:

# iptables -A INPUT -i eth3 -s 192.168.56.0/24 -p tcp --dport 22 --syn -m connlimit --connlimit-upto 1 -j ACCEPT

Libera 1 única conexão por IP na porta 22 (SSH) através da eth3 com origem 192.168.56.0/24.

STRING

Analisa regras com base em palavras ou expressões contidas no payload do pacote.
  • --string = expressão/palavra
  • --icase = não diferencia letras maiúsculas de minúsculas
  • --algo {bm|kmp} = tipo do algorítimo de análise de strings

Os parâmetros abaixo determinam em que parte do datagrama está a expressão que deseja buscar:
  • --from = a partir de
  • --to = até

Ex.:

# iptables -A INPUT -m string --string "youtube" --icase --from 0 --to 65535 --algo bm -j DROP

Analisa todo o pacote que contenha "youtube" entrando no firewall de qualquer origem em qualquer interface e o bloqueia.

Obs.: isso não é firewall de camada de 7 (aplicação), portanto não deve ser usado como tal...

TIME

Criar regras baseadas em dias, horas ou segundos.
  • --timestart = hora inicial
  • --timestop = hora final
  • --weekdays = dias da semana. Valores possíveis: Mon, Tue, Wed, Thu, Fri, Sat, ou podem ser usados números dos respectivos dias da semana 1 a 7
  • --monthdays = dias do mês. Valores possíveis de 1 a 31

Ex.:

# iptables -A INPUT -i eth3 -s 192.168.56.0/24 -p tcp --dport 22 -m time --timestart 14:00 --timestop 16:00 --weekdays 6,7 -j ACCEPT

Libera conexões vindo de eth3 com origem 192.168.56.0/24 nos dias de SÁBADO E DOMINGO entre as 14:00 e 16:00 horas com destino a porta 22(SSH).

STATE

Analisa o estado de conexão.
  • --state {NEW,ESTABLISHED,RELATED,INVALID,UNTRACKED}

Ex.:

# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Libera conexões estabelecidas e relacionadas.

# iptables -I INPUT -m state --state INVALID -j DROP

Bloqueia qualquer conexão com estado INVÁLIDO.

RECENT

Criar regras dinâmicas.
  • -m recent
  • --set = adiciona IP a lista
  • --rsource = adiciona IP de origem a lista
  • --rdest = adiciona IP de destino a lista
  • --rcheck = checa se o IP esta na lista
  • --update = semelhante ao "--rcheck" contudo ele atualiza o timestamp desse IP na lista
  • --seconds = o "--rcheck" ou "--update" analisa o conteúdo da lista e verifica se o IP incluso está dentro do tempo especificado, dessa forma o firewall decide qual a ação com "-j". Usado em conjunto com --rcheck ou --update
  • --hitcount = o "--rcheck" ou "--update" analisa o conteúdo da lista e verifica a quantidade de pacotes recebidos para determinado IP e se é MAIOR ou IGUAL ao definido na regra. Usado em conjunto com --rcheck ou --update

Ex.:

Realizando PORT KNOCKING com módulo "recent":

Vamos supor que seu firewall está com política padrão na chain INPUT como DROP então...

# iptables -R INPUT 3 -p tcp --dport 22 -m recent --rcheck --name SSH_LIBERADO --seconds 10 -j ACCEPT
# iptables -R INPUT 4 -p tcp --dport 1234 -m recent --set --name SSH_LIBERADO


Libera conexão na porta 22 (SSH) caso o IP esteja na lista "SSH_LIBERADO" (primeira regra)... para isso precisamos enviar uma flag SYN na porta 1234 (segunda regra), então a partir daí o IP será incluído á lista SSH_LIBERADO e terá 10 segundos para conectar, caso contrário a porta será fechada novamente.

Obs.: com essa regra não precisamos liberar o SSH para todo mundo e o liberamos de forma dinâmica.

Bloqueio de PORT SCAN:

# iptables -I INPUT -m recent --update --hitcount 4 --name PORT_SCAN --seconds 600 -j DROP
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -m recent --set --name PORT_SCAN


Toda conexão EXCETO as relacionadas às regras 2 e 3 entrarão na lista PORT_SCAN e caso determinado IP atinja a quantidade de pacotes recebidos defino na opção "--hitcount" e conste na lista PORT_SCAN, esse IP será bloqueado por 600 segundos.

Maiores informações "man iptables" ou acessem:
   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Configuração de Servidor BIND 9

Leitura recomendada

Servidor de log no Debian com Syslog-ng

Capturando e-mails da rede com Mailsnarf

SSH completo (passo a passo)

5 comandos que ninguém nunca deve executar no Linux

Soluções para Acesso Remoto Seguro com SSH

  
Comentários
[1] Comentário enviado por wagnerfs em 22/03/2016 - 00:42h

Muito bom. Parabéns por compartilhar o conhecimento.
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782

[2] Comentário enviado por rafaelgrinder em 23/03/2016 - 20:55h


[1] Comentário enviado por K666 em 22/03/2016 - 00:42h

Muito bom. Parabéns por compartilhar o conhecimento.
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782



Muito obrigado K666 , é assim que tem que ser, tudo em prol do conhecimento

[3] Comentário enviado por marcelll0 em 24/03/2016 - 07:29h

Rafael,

Ótimo ! Ótimo ! Ótimo !

Obrigado mesmo por compartilhar conosco seu conhecimento

Meus Parabéns!



[4] Comentário enviado por filipi_saci em 24/03/2016 - 07:34h

Muito bom o Artigo Rafael!

Parabéns cara....


[5] Comentário enviado por removido em 24/03/2016 - 13:46h

Belo tutorial.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[6] Comentário enviado por sanojonas em 24/03/2016 - 14:21h

Parabéns! Muito bom!

[7] Comentário enviado por fabsalopes em 24/03/2016 - 16:48h

Parabéns, muito bom !!

[8] Comentário enviado por rafaelgrinder em 25/03/2016 - 23:06h

Agradeço !!!

Em breve pretendo criar um artigo sobre iptables mais aprofundado, envolvendo até mesmo load balance no linux e outros temas relacionados ao iptables

Valeu

[9] Comentário enviado por italoguedes em 28/03/2016 - 08:23h

Vale salientar que o iptables não é um firewall e sim um filtro! Que na minha opinião,o mais poderoso entre todos! Ele faz parte de um firewall, mas seu papel é filtrar! Ótimo artigo, abraço a todos.

[10] Comentário enviado por rafaelgrinder em 28/03/2016 - 17:55h


[9] Comentário enviado por italoguedes em 28/03/2016 - 08:23h

Vale salientar que o iptables não é um firewall e sim um filtro! Que na minha opinião,o mais poderoso entre todos! Ele faz parte de um firewall, mas seu papel é filtrar! Ótimo artigo, abraço a todos.


De fato italoguedes , o iptables é uma ferramenta user space usada para manipular as regras e trabalhar em conjunto com o módulo netfilter...
Mas como a ideia era mostrar mais a prática em resumo do uso de alguns módulos, não foquei muito no conceito de iptables.

Mas valeu a força . com certeza agregou valor!!!
Valeu

[11] Comentário enviado por Romulo-Souza em 31/03/2016 - 11:09h

Parabéns, muito bom mesmo, bem explicado e fácil de entender, principalmente pra quem ta vendo pela primeira vez.

[12] Comentário enviado por GlauberAnjos em 18/04/2017 - 00:28h

Muito bom o artigo!
Parabéns!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts