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

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


Ações padrões



ACCEPT

Está ação permite a passagem de pacotes.

Vamos a um exemplo desta ação:

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

Na regra acima, passamos ao IPtables para ele aceitar pacotes do protocolo TCP.

DROP

Esta ação bloqueia a passagem de pacotes.

Vamos a um exemplo desta ação:

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

Na regra acima, passamos ao IPtables para ele bloquear pacotes do protocolo TCP.

REJECT

Esta ação é similar ao DROP, porém, retorna um erro ICMP (o padrão é: port-unreachable).

Vamos a dois exemplos do uso desta ação:

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

Na regra acima, passamos ao IPtables para dropar pacotes, porém, retornar o port-unreachable.

# iptables -t filter -A INPUT -p tcp -j REJECT reject-with tcp-reject

Na regra acima, passamos ao IPtables para dropar o pacote e retornar uma mensagem TCP RST.

RETURN

Esta ação retorna o processo para chain anterior.

Vamos ver um exemplo do uso desta ação:

# iptables -A INPUT -j ACCEPT
# iptables -A INPUT -s host.com.br -d localhost -j RETURN
# iptables -A INPUT -d localhost -j DROP


Na regra acima, o pacote vai passar pela primeira regra e chegar à segunda, onde existe o alvo RETURN, então, retornará para a primeira regra onde será aceita.

LOG

Esta ação é utilizada para registrar eventos de log.

Vamos ver um exemplo desta opção:

# iptables -t filter -A INPUT -j LOG

Na regra acima, o IPtables irá gerar log de todas as entradas na chain de INPUT, as mensagens são logadas no arquivo /var/log/messages por padrão, com prioridade de WARN.

Podemos também utilizar a opção de descrição para os logs como exemplo:

# iptables -t filter -A INPUT -p tcp --dport 22 -j LOG --log-prefix "ACESSO SSH "

Na regra acima, nós mandamos o IPtables gerar logs de acesso à porta 22 e colocar a descrição de ACESSO SSH nos arquivos de logs.

Outra opção interessante é que podemos manipular o nível da mensagem que são os níveis do syslog. Podemos utilizar esta opção da seguinte forma:

# iptables -t filter -A INPUT -p tcp --dport 22 -j LOG --log-level crit

Também podemos combinar as opções de log, como exemplo:

# iptables -t filter -A INPUT -p tcp --dport 22 -j LOG --log-prefix "ACESSO SSH " --log-level crit

Obs.: Temos que, primeiro gerar o log, para depois liberar ou bloquear o acesso a uma determinada regra como o exemplo abaixo, vamos logar o acesso do SSH e liberar ele:

# iptables -t filter -A INPUT -p tcp --dport 22 -j LOG --log-prefix "ACESSO SSH " --log-level crit
# iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT


Um outro parâmetro que vou passar, que acho muito interessante, é o de comentário nas regras do IPtables. Vamos a um exemplo de uma regra sem comentário:

# iptables -t filter -A FORWARD -p tcp --dport 22 -s 172.17.0.250 -j ACCEPT

Agora vamos listar a nossa regra:

# iptables -L -n -v
Chain INPUT (policy ACCEPT 111 packets, 465K 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
    0     0 ACCEPT     tcp  --  *      *       172.17.0.250 0.0.0.0/0     tcp dpt:22

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

Como pode ser notado, temos a nossa regra. Porém, se eu estiver em algum cliente com muitas máquinas, como eu vou me lembrar de quem é a máquina 172.17.0.250? Com isso, vamos utilizar a opção de comentário na regra. Limpe a sua regra e vamos criar ela novamente agora com comentário:

# iptables -t filter -A FORWARD -p tcp --dport 22 -s 172.17.0.250 -j ACCEPT -m comment --comment "maquina do Diretor"

Agora vamos listar as nossas regras novamente:

# iptables -L -n -v
Chain INPUT (policy ACCEPT 66 packets, 266K 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
    0     0 ACCEPT     tcp  --  *      *       172.17.0.250 0.0.0.0/0    tcp dpt:22 /* maquina do Diretor */

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

Como pode ser notado, depois do número da porta, temos o comentário para a regra. Com isso facilita muito a vida em uma listagem de regras. Mas comente apenas regras importantes para a sua listagem não ficar muito suja.

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

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

Servidor Jabber com Openfire + MySQL + Debian Lenny

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

Bind9 em chroot no Debian Lenny

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

Leitura recomendada

Utilizando a ferramenta Iptstate

Bloqueando programas P2P com iptables

Como construir um firewall de baixo custo para sua empresa (parte 2)

Fusion Firewall - Uma alternativa para Firewall-Proxy gerenciado via web

Balanceamento de carga entre 2 placas de rede

  
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$#[email protected]#@#%@

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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts