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

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


Adicionando e inserindo regras



Adicionando uma regra

"-A" ou "--append" → Esta ação insere uma nova regra no controle do firewall na sequência da cadeia.

Vamos ver um exemplo do uso da ação "-A". Na regra abaixo, vamos efetuar a liberação do acesso à porta 22 SSH, as regras sempre vão seguir o padrão informado abaixo:

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

Explicando: Aqui adicionamos uma regra na tabela de filtragem "filter" na chain "INPUT", que é a chain que controla o tráfego de entrada. No protocolo TCP, na porta 22, que é a porta padrão de SSH e com a opção "-j" nós informamos ao IPtables o que deve ser feito, ou seja, DROP bloqueia o acesso.

Obs.: Na regra acima utilizamos a tabela filter, que é para a filtragem de pacotes, especificamos ela para o IPtables com a opção "-t filter", porém, se não informarmos a tabela com a opção "-t filter", o IPtables assume por padrão que a tabela a ser utilizada vai ser a filter, no caso de que seja necessário a utilização de outra tabela, temos que especificar para o IPtables a tabela com a opção "-t nome_tabela".

Agora vamos listar a nossa regra do IPtables:

# iptables -L INPUT -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source        destination
1    ACCEPT     tcp  --  0.0.0.0/0     0.0.0.0/0           tcp dpt:22

Como pode ser notado, a nossa regra tem o número 1, agora vamos criar mais uma regra para bloquear o acesso SSH:

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

Agora, vamos listar novamente as nossas regras:

# iptables -L INPUT-n --line-numbers
Chain INPUT (policy ACCEPT)
um  target     prot opt source       destination
1    ACCEPT    tcp  --  0.0.0.0/0    0.0.0.0/0     tcp dpt:22
2    DROP      tcp  --  0.0.0.0/0    0.0.0.0/0     tcp dpt:22

Como pode ser notado, a regra de bloqueio recebeu o número 2. Com isso, o acesso vai ser liberado, pois o IPtables sempre vai ler a cadeia por ordem numérica.

Agora vamos fazer um teste de acesso SSH:

ssh localhost
The authenticity of host '10.0.0.31 (::1)' can't be established.
RSA key fingerprint is a0:71:05:10:1c:b9:f1:5c:ff:50:c1:30:09:0d:2e:4c.
Are you sure you want to continue connecting (yes/no)?
Como pode ser notado, a segunda regra não adiantou. Vamos refazer o nosso teste, mas antes vamos limpar as regras que já criamos:

# iptables -F

Agora vamos criar primeiro a regra de bloqueio e depois a regra de liberação:

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


Vamos listar as nossas regras novamente:

# iptables -L INPUT -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target   prot opt source       destination
1    DROP     tcp  --  0.0.0.0/0    0.0.0.0/0           tcp dpt:22
2    ACCEPT   tcp  --  0.0.0.0/0    0.0.0.0/0           tcp dpt:22

Então, agora é para o firewall bloquear o acesso à porta 22 de SSH e a segunda regra vai ser ignorada, pois ele sempre vai ler as regras em ordem numérica. Vamos fazer um teste de acesso SSH:

ssh 10.0.0.31
ssh: connect to host 10.0.0.31 port 22: Connection timed out

A conexão vai dar timeout, pois o IPtables vai bloquear o acesso.

Obs.: A conexão vai ser aceita se você acessar "ssh localhost", que é o endereço de loopback da máquina, caso seja a mesma máquina que você está implementando as regras e efetuando o acesso dela para ela mesma.

Inserindo uma regra

"-I" ou "--insert" → Insere uma regra no começo de nossa lista de regras ou na linha que for especificada.

Limpe as regras do IPtables novamente com:

# iptables -F

Agora vamos efetuar alguns testes com a opção "-I". No primeiro teste, a regra será inserida na primeira linha da cadeia INPUT:

# iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT

Vamos listar agora as nossas regras:

# iptables -L INPUT -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target   prot opt source        destination
1    ACCEPT   tcp  --  0.0.0.0/0   0.0.0.0/0      tcp dpt:22

Como pode ser notado na listagem do IPtables, nossa regra teve o número 1, agora vamos inserir mais uma regra de bloqueio de SSH:

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

Vamos listar as regras novamente:

# iptables -L INPUT -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target   prot opt source         destination
1    DROP     tcp  --  0.0.0.0/0    0.0.0.0/0           tcp dpt:22
2    ACCEPT   tcp  --  0.0.0.0/0    0.0.0.0/0           tcp dpt:22

Note onde foi parar a nossa regra de DROP, ela está com o número 1, então, quando utilizarmos a ação "-I", a regra sempre vai ser colocada no início da cadeia.

Agora vamos inserir uma regra para bloquear a porta 80 na segunda posição da nossa chain:

# iptables -t filter -I INPUT 2 -p tcp --dport 80 -j DROP

Vamos listar agora as regras novamente:

# iptables -L INPUT -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target   prot opt source         destination
1    DROP     tcp  --  0.0.0.0/0    0.0.0.0/0     tcp dpt:22
2    DROP     tcp  --  0.0.0.0/0    0.0.0.0/0     tcp dpt:80
3    ACCEPT   tcp  --  0.0.0.0/0    0.0.0.0/0     tcp dpt:22

Como pode ser notado, nós especificamos a posição da nossa regra na cadeia INPUT.

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

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

IDS com Snort + Guardian + Debian Lenny

Bind9 slave em chroot no Debian Lenny

Leitura recomendada

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

Como criar um firewall de baixo custo para sua empresa

Balanceamento de carga entre 2 placas de rede

GUI para Iptables via web, linha de comando e outros

Shorewall - Firewall passo a passo no Linux

  
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