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: 63.538 ]

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


Zerando contadores - Criando chain



Zerando os contadores

"-Z" ou "--zero" → Esta ação zera os contadores do nosso controle do firewall.

Vamos listar as nossas regras no firewall:

# iptables -L -v
Chain INPUT (policy ACCEPT 4030 packets, 5678K 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 3037 packets, 858K bytes)
 pkts bytes target     prot opt in     out     source       destination

Como pode ser notado, temos alguns contadores em nosso firewall, que são os pacotes aceitos e a quantidade em bytes. Então, podemos zerar esses contadores da seguinte forma:

# iptables -Z

Agora vamos listar as regras novamente:

# iptables -L -v
Chain INPUT (policy ACCEPT 2 packets, 298 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 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Como pode ser notado, os contadores já mudaram de valores, porém, entre o tempo de eu limpar as regras e listar novamente, já tinham passado 2 pacotes pelo meu firewall.

Temos ainda a opção de limpar somente uma chain, vamos limpar somente a chain de OUTPUT, como exemplo:

# iptables -Z OUTPUT

Agora vamos listar as regras novamente:

# iptables -L -v
Chain INPUT (policy ACCEPT 11 packets, 834 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 1 packets, 52 bytes)
 pkts bytes target     prot opt in     out     source               destination

Como pode ser notado, a chain de INPUT está com um valor bem maior do que o da chain OUTPUT que acabamos de limpar.

Agora, se quisermos zerar todos os contadores da tabela NAT, podemos fazer da seguinte forma:

# iptables -t nat -Z

Criando uma nova chain

"-N" ou "--new-chain" → Esta ação cria uma nova chain personalizada.

Vamos criar, como exemplo, a chain internet, que vai servir para cadastrarmos os usuários com acesso à Internet sem passar por proxy:

# iptables -N internet

Como já explicado anteriormente, se não especificarmos uma tabela, o IPtables assume por padrão a tabela filter. Vamos ver um exemplo especificando a tabela aonde desejamos criar a chain:

# iptables -t filter -N internet

Até o momento nós somente trabalhamos com a chain INPUT, que controla o fluxo de entrada.

Agora criamos a chain internet, onde vamos cadastrar os IPs dos clientes que vão sair para a Internet sem utilizar o proxy. Mas como funciona essa chain? Nós cadastramos o que precisamos nela, depois inserimos ela em alguma chain padrão, por exemplo a chain INPUT.

Vamos cadastrar um cliente na nossa nova chain:

# iptables -A internet -s 10.0.0.20 -j ACCEPT

O primeiro passo já está OK, inserimos alguns dados em nossa nova chain, e agora? Agora precisamos fazer uma chamada para essa chain na chain INPUT:

# iptables -A INPUT -j internet

Vamos listar as nossas regras:

# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    internet   all  --  0.0.0.0/0          0.0.0.0/0

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

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

Chain internet (1 references)
num  target     prot opt source               destination
1    ACCEPT     all  --  10.0.0.20        0.0.0.0/0

Note o nosso fluxo, agora a primeira regra da chain INPUT é direcionada para a nossa chain internet, então, vai ser executado tudo que estiver na chain internet e depois vai ser retornado para a 2ª regra da chain INPUT.

Agora, pense que foi pedido para inserir mais uma máquina na regra de não passar pelo proxy, o que precisamos fazer então é o seguinte:

# iptables -A internet -s 10.0.0.21 -j ACCEPT

Vamos listar as regras novamente:

# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    internet   all  --  0.0.0.0/0          0.0.0.0/0

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

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

Chain internet (1 references)
num  target     prot opt source               destination
1    ACCEPT     all  --  10.0.0.20       0.0.0.0/0
2    ACCEPT     all  --  10.0.0.21       0.0.0.0/0

Com isso o firewall vai ler a chain INPUT e vai notar que a primeira regra é ir para a chain internet e executar o que estiver lá, depois, voltar para a regra número 2 na chain INPUT e continuar o seu fluxo.

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

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

Debian Lenny com Kernel 2.6.28 + Layer7 + Firewall

Debian + Postfix + MySQL + PostfixAdmin + MailScanner + Webmail + Quotas

Bonding para Heartbeat + Bonding para DRBD + OCFS2 + Debian Squeeze

Bind9 slave em chroot no Debian Lenny

Leitura recomendada

Squid + iptables (método ninja)

Balanceamento de link + redundância

Addon URL Filter - Filtrando URLs no seu firewall

Configurando o iptables-p2p no Slackware

Usando o PF - Packet Filter

  
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