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

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

Servidor Jabber com Openfire + MySQL + Debian Lenny

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

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

Bind9 slave em chroot no Debian Lenny

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

Leitura recomendada

Análise da distribuição Mandrake Security

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

Abrindo "passagem" para clientes de correio

Script de Firewall com redirecionamento de portas em Linux Debian

Entendendo TCP/IP (Parte 5) - Portas TCP/UDP

  
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