Um pouco sobre IPtables

IPtables é um firewall a nível de pacotes e funciona baseado no endereço/porta de origem/destino do pacote, prioridade etc. Ele funciona através da comparação de regras para saber se um pacote tem ou não permissão para passar. Em firewalls mais restritivos, o pacote é bloqueado e registrado para que o administrador do sistema tenha conhecimento sobre o que está acontecendo em seu sistema.

[ Hits: 62.715 ]

Por: Douglas Q. dos Santos em 08/12/2012 | Blog: http://wiki.douglasqsantos.com.br


Opções e parâmetros do IPtables



Opções do IPtables

"-v" ou "--verbose" → Esta opção mostra o modo detalhado e é usada principalmente com a opção "-L" ou "--list".

Vamos a um exemplo da opção "-v":

# iptables -t filter -L -v
Chain INPUT (policy ACCEPT 53295 packets, 125M bytes)
 pkts bytes target     prot opt in     out     source       destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source       destination

Chain OUTPUT (policy ACCEPT 42001 packets, 6130K bytes)
 pkts bytes target     prot opt in     out     source       destination

Agora vamos ver um exemplo de listagem de regras sem o "-v", para notarmos a diferença:

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source       destination

Chain FORWARD (policy ACCEPT)
target     prot opt source       destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source       destination

"-x" ou "--xact" → Trabalha em conjunto com o "-v", porém nos mostra as informações de contadores em formato de bytes.

Vamos a um exemplo desta opção:

# iptables -t filter -L -v -x
Chain INPUT (policy ACCEPT 58750 packets, 134020765 bytes)
    pkts      bytes target     prot opt in     out     source     destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source     destination

Chain OUTPUT (policy ACCEPT 46828 packets, 6913584 bytes)
    pkts      bytes target     prot opt in     out     source     destination

"-n" ou "--numeric" → Esta opção nos mostra informações em formato numérico ao invés de resolver via DNS.

Vamos ver um exemplo do uso do "-n". Vamos criar uma regra e depois listar sem o "-n", e depois com o "-n":

# iptables -A FORWARD -p tcp -m multiport --dports 22,25,110,143,443,993,995 -s www.terra.com.br -j ACCEPT

Vamos listar a regra:

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source            destination

Chain FORWARD (policy ACCEPT)
target     prot opt source            destination
ACCEPT     tcp  --  www.terra.com.br  anywhere    multiport dports ssh,smtp,pop3,imap2,https,imaps,pop3s

Chain OUTPUT (policy ACCEPT)
target     prot opt source            destination

Como pode ser notado, sem passarmos a opção "-n", os valores são mapeados para nomes. Agora vamos utilizar a opção "-n" na listagem das regras:

# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source          destination

Chain FORWARD (policy ACCEPT)
target     prot opt source          destination
ACCEPT     tcp  --  200.154.56.80   0.0.0.0/0    multiport dports 22,25,110,143,443,993,995

Chain OUTPUT (policy ACCEPT)
target     prot opt source          destination
Em um firewall com muitas regras, aconselho sempre usar a opção "-n", pois economizamos tempo nas listagens.

"--line-number" → Esta opção mostra o número das regras.

Vamos ver um exemplo de listagem de regras:

# iptables -L --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source            destination

Chain FORWARD (policy ACCEPT)
num  target     prot opt source            destination
1    ACCEPT     tcp  --  www.terra.com.br  anywhere    multiport dports ssh,smtp,pop3,imap2,https,imaps,pop3s

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source            destination

Como pode ser notado, na chain FORWARD temos somente uma regra, e na primeira coluna da esquerda, temos o número 1, que é o número desta regra.

"-m" ou "--modprobe" → Esta opção carrega um módulo do IPtables.

Vamos ver um exemplo de uso dessa opção. Aqui vamos carregar o módulo de multiport do IPtables, que nos possibilita utilizar mais de uma porta na mesma regra:

# iptables -t filter -A INPUT -p tcp -m multiport --dport 80,23 -j ACCEPT

Parâmetros genéricos

"-p" ou "--protocol" → Este parâmetro informa o protocolo utilizado na regra.

Vamos a um exemplo de uso deste parâmetro:

# iptables -t filter -A INPUT -p tcp -j ACCEPT

No exemplo acima, informamos para o IPtables que o protocolo utilizado na regra vai ser o TCP.

"-s" ou "--src" ou "--source" → Este parâmetro indica a origem dos pacotes.

Vamos à um exemplo deste parâmetro:

# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -j ACCEPT

Acima, informamos ao IPtables que a regra se aplica na origem: 10.0.0.0/24

"-d" ou "--dst" ou "--destination" → Este parâmetro indica o destino do pacote.

Vamos a um exemplo do uso do parâmetro "-d":

# iptables -t filter -A INPUT -p tcp -d 10.0.0.0/24 -j ACCEPT

No exemplo acima, informamos ao IPtables que esta regra aplica-se ao destino: 10.0.0.0/24

"-i" ou "--in-interface" → Este parâmetro especifica a interface de entrada de um pacote.

Vamos a um exemplo do uso deste parâmetro:

# iptables -t filter -A INPUT -p tcp -i eth0 -j ACCEPT

No exemplo acima, informamos ao IPtables que esta regra aplica-se à interface de entrada: eth0

"-o" ou "--out-interface" → Este parâmetro especifica a interface de saída de um pacote.

Vamos a um exemplo do uso deste parâmetro:

# iptables -t filter -A INPUT -p tcp -o eth0 -j ACCEPT

No exemplo acima, informamos que esta regra aplica-se à interface de saída: eth0

"-j" ou "--jump" → Este parâmetro determina qual ação vai ser tomada por uma regra.

Vamos a um exemplo do uso deste parâmetro:

# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

No exemplo acima, informamos ao IPtables que a ação a ser tomada é dropar (bloquear) os pacotes para a porta 22.

Página anterior     Próxima página

Páginas do artigo
   1. Um pouco de história
   2. Adicionando e inserindo regras
   3. Deletando e substituindo regra
   4. Listando e limpando regras
   5. Zerando contadores - Criando chain
   6. Renomeando e deletando chain - Política default
   7. Opções e parâmetros do IPtables
   8. Ações padrões
   9. Usando o IPtables
   10. NAT
   11. Utilizando MASQUERADING
Outros artigos deste autor

Bind9 slave em chroot no Debian Lenny

Alta disponibilidade com Debian Lenny + Heartbeat + DRBD8 + OCFS2 + MONIT + LVS

Debian Lenny com Kernel 2.6.28 + Layer7 + Firewall

Apache em chroot + MySQL + PHP + mod_security + mod_evasive + vsftpd + Fail2ban + Debian Squeeze

Bind9 em chroot no Debian Lenny

Leitura recomendada

Firewall admin: administração do iptables

Firewall Linux - Roteamento avançado usando iproute2 e iptables (load balance)

Script de Firewall com redirecionamento de portas em Linux Debian

IPFire - Um Firewall Open Source

Servidor seguro com Bridge, Snort e Guardian

  
Comentários
[1] Comentário enviado por fabio em 08/12/2012 - 10:39h

Se esse aqui é "Um pouco sobre IPtables", fico imaginando como seria o artigo "Um muito sobre IPtables" :)

Meus parabéns, ótimo artigo!

[2] Comentário enviado por douglas_dksh em 10/12/2012 - 13:12h

Obrigado,

O pior que isso ai é a base para poder se virar com o iptables.

Tem muito mais que pode ser abordado :D

[3] Comentário enviado por removido em 10/12/2012 - 17:08h

Realmente @fabio, fico imaginando também. Está ótimo o artigo.

['s]

[4] Comentário enviado por phrich em 10/12/2012 - 19:16h

Muito bom o artigo, está de parabéns!

[5] Comentário enviado por thyagobrasileiro em 11/12/2012 - 10:19h

PQP, seu blog é do caralh$#$@#@#%@

Bem organizado e aborda tudo, bem limpo e sem propagandas!!!
http://www.douglas.wiki.br


Otimo artigo!!

[6] Comentário enviado por douglas_dksh em 11/12/2012 - 11:31h

Obrigado galera :D

[7] Comentário enviado por dalveson em 11/12/2012 - 13:03h

douglashx otimo artigo,
veja se vc poderia me da uma ajuda, tenho o seguinte:
meu sistema é web e tem o ip 1.2.3.4 e roda porta 443, queria utilizar o modulos TOS junto com MANGLE para dar prioridade a este ip antes de qualquer outra conexao na minha rede 192.168.0.0/24 para upload e download sabe dizer como faço isso pois ja tentei, pesquisei bastante e ainda nao consegui
abraços

[8] Comentário enviado por douglas_dksh em 11/12/2012 - 13:41h

E ai colega,

Tipo de Prioridade TOS

Espera Mínima 0×10 ou 16
Máximo Processamento 0×08 ou 8
Máxima Confiança 0×04 ou 4
Custo Mínimo 0×02 ou 2
Prioridade Normal 0×00 ou 0

Conforme tabela acima, a Espera mínima tem a maior prioridade entre todos,

Se o servidor web estiver virado direto para a internet você pode fazer da seguinte forma

#Para Liberar o acesso na porta 443 com Máximo Processamento na entrada
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j TOS --set-tos 8

#Para Liberar o acesso na porta 443 com Máximo Processamento na saída
iptables -t mangle -A POSTROUTING -p tcp --dport 443 -j TOS --set-tos 8


#Se o servidor web estiver atras de um fw no fw tem que configurar da seguinte forma

#Para Liberar o acesso de origem da maquina 1.2.3.4 na porta 443 com Máximo Processamento
iptables -t mangle -A FORWARD -p tcp --dport 443 -s 1.2.3.4 -j TOS --set-tos 8

#Para Liberar o acesso de destino a maquina 1.2.3.4 na porta 443 com Máximo Processamento
iptables -t mangle -A FORWARD -p tcp --dport 443 -d 1.2.3.4 -j TOS --set-tos 8


Caso você queira utilizar a espera miníma troque o --set-tos 8 por --set-tos 10


[9] Comentário enviado por andrericsouza em 11/12/2012 - 13:50h

ótimo artigo

[10] Comentário enviado por dalveson em 11/12/2012 - 15:12h


[8] Comentário enviado por douglashx em 11/12/2012 - 13:41h:

E ai colega,

Tipo de Prioridade TOS

Espera Mínima 0×10 ou 16
Máximo Processamento 0×08 ou 8
Máxima Confiança 0×04 ou 4
Custo Mínimo 0×02 ou 2
Prioridade Normal 0×00 ou 0

Conforme tabela acima, a Espera mínima tem a maior prioridade entre todos,

Se o servidor web estiver virado direto para a internet você pode fazer da seguinte forma

#Para Liberar o acesso na porta 443 com Máximo Processamento na entrada
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j TOS --set-tos 8

#Para Liberar o acesso na porta 443 com Máximo Processamento na saída
iptables -t mangle -A POSTROUTING -p tcp --dport 443 -j TOS --set-tos 8


#Se o servidor web estiver atras de um fw no fw tem que configurar da seguinte forma

#Para Liberar o acesso de origem da maquina 1.2.3.4 na porta 443 com Máximo Processamento
iptables -t mangle -A FORWARD -p tcp --dport 443 -s 1.2.3.4 -j TOS --set-tos 8

#Para Liberar o acesso de destino a maquina 1.2.3.4 na porta 443 com Máximo Processamento
iptables -t mangle -A FORWARD -p tcp --dport 443 -d 1.2.3.4 -j TOS --set-tos 8


Caso você queira utilizar a espera miníma troque o --set-tos 8 por --set-tos 10



*na realidade o servidor 1.2.3.4 nao ta minha rede interna, esta em 1 cidade diferente, entao bastaria eu usar?
#Para Liberar o acesso de origem da maquina 1.2.3.4 na porta 443 com Máximo Processamento
iptables -t mangle -A FORWARD -p tcp --dport 443 -s 1.2.3.4 -j TOS --set-tos 8

#Para Liberar o acesso de destino a maquina 1.2.3.4 na porta 443 com Máximo Processamento
iptables -t mangle -A FORWARD -p tcp --dport 443 -d 1.2.3.4 -j TOS --set-tos 8

*outra coisa, não é necessario fazer referencia a chain INPUT o OUTPUT tambem?

*outra duvida se eu quero que o sistema com ip 1.2.3.4 me de respostas mais rapidas aos usuarios, eu devo configura-lo com qual dos parametros TOS:
Espera Mínima 0×10 ou 16
Máximo Processamento 0×08 ou 8

*e a ultima duvida como voce faz para saber que realmente o ip 1.2.3.4 esta com o TOS configurado corretamente?
aqui eu criava uma regra de log e começava a monitorar com cat e sempre me mostrava um TOS diferente do que eu tinha configurado, por isso sempre achei que tinha algo errado.

[11] Comentário enviado por douglas_dksh em 11/12/2012 - 15:32h

Você usaria com o FORWARD

e liberaria as regras na tabela filter para o FORWARD desse servidor de origem e destino, pois INPUT seria se fosse no servidor local, e OUTPUT saida do servidor local com isso você vai precisar somente da FORWARD para repasse.

iptables -t filter -A FORWARD -p tcp --dport 443 -d 1.2.3.4 -j TOS --set-tos 8

dai a regra de mangle para priorizar os pacotes

iptables -t mangle -A FORWARD -p tcp --dport 443 -d 1.2.3.4 -j TOS --set-tos 8

A espera mínima o seu pacote vai entrar logo em processamento mais não vai ter prioridade de processamento sobre os outros, no 8 temos o processamento máximo possível.

Para saber se está configurado certo mande listar com as flags vão aparecer em hexadecimal.
iptables -t mangle -L -n -v

[12] Comentário enviado por danilotm em 12/12/2012 - 11:17h

Parabéns Douglas, agora que voltarei a utilizar o IPTABLES que tanto gostava me deparo com este artigo, muito bem explicado e organizado.
Obrigado e um grande abraço!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts