O iptables é uma ferramenta muitas vezes não utilizada por administradores iniciantes, assim como eu, que temem as linhas de comando. Neste tutorial meu foco é explicar e desvendar todo o mistério dessas "linhas malucas", que desempenham um papel tão importante quando se trata de administração de servidores e desktops.
# iptables -t filter -A FORWARD -d 127.0.0.1 -j DROP
Explicando:
"-t filter" - Aqui vão as tabelas... filter, nat e mangle. Já sabem, se tem dúvidas, voltem para a página 2;
"-A" - Aqui vão os comandos, vou listá-los abaixo. É de fácil entendimento:
-L - Lista as regras de uma chain;
-D - Deleta uma regra de uma chain;
-A - Adiciona uma regra no fim da chain;
-I - Adiciona uma regra em lugar específico da chain;
-R - Troca uma regra por outra;
-P - Define a regra padrão para se o pacote não bater com todas as outras regras;
-F - É o apocalipse das regras. Limpa TUDO da chain;
-N - Cria uma chain;
-E - Muda o nome de uma chain;
-X - Deleta uma chain;
"FORWARD" - Aqui vão as chains... as chains são case-sensitive, ou seja, se o nome for MAIÚSCULO, tem de ser MAIÚSCULO. Ou seja, tem diferença entre input e INPUT.
"-d 127.0.0.1" - Bom, aqui podem vir uma série de opções. Essa é a parte responsável pelo filtro do iptables efetivamente, é aqui onde se afunila a boca no túnel. Lista de opções abaixo, vou listar as mais conhecidinhas, senão é muita informação:
-p - Especifica o protocolo, que nem tcp ou udp. Pode-se usar um número para uma referência ao arquivo /etc/protocol;
-i - Especifica a interface de entrada. Pode ser, por exemplo, a(s) placa(s) de rede do computador;
-o - A mesma coisa que a de cima, mas é a saída;
-s - Endereço, em forma de ip ou nome de rede, de origem (source) do pacote, tal como 192.168.1.1 ou google.com.br;
-d - A mesma coisa que a de cima, mas é o destino;
-j - Especifica o alvo do pacote;
--dport - Especifica uma porta de destino;
--sport - Especifica uma porta de origem;
! - Usado na sintaxe do comando para dizer diferente. Ou seja, -d ! 192.168.1.1, quer dizer, tudo que for diferente de 192.168.1.1;
--to - Usado pelo comando DNAT e SNAT para especificar endereços de alvos dos pacotes. Não esquentem a cabeça, veremos mais a frente;
"DROP" - Aqui é o alvo, ou a ação que sera tomada em relação ao pacote identificado pela regra. Ou seja, o pacote bateu com a descrição da regra? É aqui que se define o que fazer com ele. Mais ou menos que nem a polícia, que se pega um cara com cara de suspeito na rua, decide se leva em cana ou libera ele.
Os alvos podem ser:
ACCEPT - Aceita o pacote e passa para próxima etapa;
DROP - Derruba o pacote, sem dar resposta ao servidor que o originou;
LOG - Loga o pacote que bater com a regra. MUITO útil para administração de servidores;
REJECT - A mesma coisa que o drop, mas ele retorna uma mensagem avisando que o pacote foi derrubado;
SNAT - Altera o endereço de origem do pacote;
MASQUERADE - Tipo especial de SNAT, feito para ser utilizado para redirecionar tráfego interno para a internet, quando se tem, por exemplo, um ip dinâmico. É uma facilitação para roteamento de internet em relação ao SNAT;
DNAT - Altera o endereço de destino do pacote;
RETURN - Retorna ao processamento da chain anterior;
REDIRECT - Redireciona algo para outra porta. Extremamente útil;
QUEUE - Faz um programa ser responsável por tratar o fluxo que chegar nele;
TOS - Prioriza a entrada ou saída de pacotes. As opções do TOS são:
a) 16 ou 0x10 - MAIOR PRIORIDADE
b) 8 ou 0x08 - MAIOR PROCESSAMENTO
c) 4 ou 0x04 - MAIOR CONFIANÇA
d) 2 ou 0x02 - MENOR CUSTO
e) 0 ou 0x00 - NORMAL
Além disso, ainda existem certos módulos que são utilizados, também, para filtrar ou identificar certos pacotes:
state - Estado da conexão NEW, ESTABLISHED, RELATED etc;
limit - Especifica um certo limit para certa ação;
mac - Identificar o mac da conexão;
multiport - Até 15 portas no comando --dport e --sport. Útil, mas nem tanto;
string - Olha DENTRO do pacote afim de identificar o seu conteúdo;
owner - Verifica quem criou o pacote.
Exemplos de comando:
# iptables -A INPUT -s 200.200.200.1 -i eth0 -j REJECT
Rejeita pacotes que entram no computador local e que não são roteados, vindos do endereço 200.200.200.1, vindo da interface eth0, devolvendo uma mensagem a origem.
[1] Comentário enviado por thiagofanfoni em 14/01/2009 - 13:35h
Parabens odirneto, isto é um assunto que sempre me interessou, porém eu nunca havia entendido muita coisa.
Gostaria de encontrar mais documentações utilizando uma linguagem tão simples como esta, de maneira que, até um leigo como eu consiga entender alguma coisa da maneira que eu entendi agora.
[2] Comentário enviado por renato_pacheco em 14/01/2009 - 14:03h
Sem querer ser chato, mas o iptables não é um firewall (apenas), ele tb é servidor nat e servidor proxy. Na verdade, ele tem a função d filtrar os pacotes (tanto é q tem o nome d netfilter, iptables é apenas o front-end dele).
[5] Comentário enviado por renato_pacheco em 14/01/2009 - 14:53h
Eu não havia lido totalmente o artigo. Gostei muito e os leigos têm a oportunidade d entender mais sobre o assunto. Achei muito criativo suas analogias, pq a maioria das pessoas q começam a mexer com iptables tem problemas com relação às ordens das regras.
[7] Comentário enviado por odirneto em 14/01/2009 - 15:12h
@ renato_pacheco
Eu sei que ele tem mais funções. Mas, resumindo bastante, o iptables é muito utilizado como firewall. Esse tutorial é mais simplão sabe, num entrei muito nos detalhes para aumentar ele. Mas obrigado de qualquer forma pelo toque, é importante para mim esse tipo de feed back. Agradeço os elogios logo mais farei mais tutoriais de como colocar alguams outras coisinhas online, ok?
@ Quem gostou.
Fico agradecido, mesmo! Obrigadão galera, vou sempre contribuir com novas coisas aqui mais ou menos na mesma idéia. Espero que vocês apreciem mais e mais.
[9] Comentário enviado por willinocencio em 14/01/2009 - 16:34h
Neste ponto ai ....
# Proteção contra ip spoofing
iptables -A FORWARD -s $ENDEREÇOREDELOCAL -i ! eth0 -j DROP
iptables -A FORWARD -s ! $ENDEREÇOREDELOCAL -i eth0 -j DROP
iptables -A FORWARD -s $ENDEREÇOREDELOCAL -j DROP
iptables -A FORWARD -s $ENDEREÇOREDELOCAL -j DROP
As regras ...
iptables -A FORWARD -s $ENDEREÇOREDELOCAL -j DROP
iptables -A FORWARD -s $ENDEREÇOREDELOCAL -j DROP
Estão repetidas .... Não seria ...
iptables -A FORWARD -s $ENDEREÇOREDELOCAL -j DROP
iptables -A FORWARD -s ! $ENDEREÇOREDELOCAL -j DROP
Por que vc repetiou as regras duas xx ?
DESDE JÁ PARABÉNS PELO ARTIGO .... MUITO BEM REDIGIDO
[12] Comentário enviado por tsanches em 14/01/2009 - 17:45h
Excelente artigo Odir, comecei segunda feira fazer o curso de iptables, e seu artigo me deu um norte, um rumo para chegar la e não ser tão "Cru".
Parabéns pela iniciativa, continue contribuindo!
Um grande abraço.
TSANCHES
[13] Comentário enviado por odirneto em 14/01/2009 - 17:51h
@ willinocencio
Na verdade isso foi um erro de digitação meu, eu copieo para montar as regras acimas dessas 2.. mas deu pau na hora e eu num vi. Só vi depois que publiquei. Vou entrar em contato com mod para ver se ele altera. Ok?
[17] Comentário enviado por elgio em 15/01/2009 - 18:59h
Parabéns pelo artigo, no entanto:
# Proteção contra syn flood
iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT
ISTO É UM ENGODO.
Não apenas não resolve como torna a negação de serviço MUITO MAIS FÁCIL!
Tenho lutado para que ninguém mais coloque esta FALSA proteção em seu Linux.
Só existe uma única maneira realmente 100% eficiente para Syn flood e ela se chama Syn cookie.
AS demais são inócuas ou, PIOR, como no caso desta, são um TIRO NO PÉ!
[18] Comentário enviado por elgio em 15/01/2009 - 18:59h
Alias, inclusive o guia avançado foca traz esta sugestão de proteção. Cansei de enviar emails ao autor solicitando que ele corrija, todos SEM RESPOSTA. Considero um erro de altíssima gravidade, ate por que o Guia Foca é tido como uma referência... Lamentável..
[19] Comentário enviado por odirneto em 16/01/2009 - 00:19h
@ elgio
Peço desculpas, coloquei um exemplo, que realmente talves não seja funcional, como fizeram lá no proprio guia do foca. Mas enfim, peço desculpas por isso... nem precisava se exaltar não com isso.. era só me manda um e-mail se quisesse que eu teria todo o prazer em te atender.
Agora, você falou com um desdem tão feroz do meu tutorial.. com esse Lamentavel ou seu tiro no pé.. que eu to até envergonhado de ter postado ele aqui. Mal ae cara, da proxima vez eu guardo meus guiazinhos para mim mesmo, e deixo gente realmente muito mais experiente fazer tutoriais excelentes, tais como os seus ok?
[20] Comentário enviado por jose.freitas.rj em 16/01/2009 - 09:33h
Graaaaaaaaaande Odir! Cara, adorei seu post. Muito show! Estou aprendendo iptables tem alguns meses e pelo que vi seu post foi 1 dos melhores se não o melhor! :D :P
Agora, sobre o post a cima do nosso amigo geek " elgio", não é a primeira vez que ele comenta sobre esse "erro" do iptables num post aqui no VOL e não é a primeira vez que ela comenta dessa forma com uma pessoa que como eu, está aprendendo e que com o pouco de conhecimento que tem, quer passar a diante para outras pessoas aprenderem o iptables...
Não deixe de postar meu querido!
Vou deixar uma mensagem que diz o seguinte:
SE SUA ESTRELA NÃO BRILHA, NÃO TENTE APAGAR AS DOS OUTROS!
[21] Comentário enviado por elgio em 16/01/2009 - 09:54h
Explicar o que se diz é temerário...
Podia editar meu post anterior, mas convém explicá-lo:
1) Tiro no pé: a regra iptables para syn flood. E o é mesmo. Como não é você que inventou ela o tiro no pé não é o seu artigo, até porque o seu artigo não é sobre syn flood mas sobre configurações iptables.
2) Comecei meu comentário dando-lhe os parabens pelo artigo.
3) O "Lamentável" está (leia novamente!) ao final do meu comentário sobre o guia foca. Lamentável o guia foca ensinar isto. Lamentável o seu autor não o corrigir.
[22] Comentário enviado por odirneto em 16/01/2009 - 11:13h
Acho que foi um mal entendido então né elgio? Talves seu post não tenha ficado muito claro. Eu tava tentando fazer o meu melhor, as dicas, copiei direto do guia do foca e, de verdade, me esqueci dessa regra. Eu inclusive ja tinha lido o seu artigo sobre isso elgio, mas me falhou a memoria na hora de postar.
Sobre o seu parabens, eu agradeço. É que a proporção parabenização/reclamação ficou tão diferente que parece que só reclamou, sem falar a nota que voce deu né? Mas ta tudo bem. Muito obrigado de qualquer jeito, como disse, estou aprendendo, foi meu primeiro artigo. Espero que vocês tenham gostado.
[23] Comentário enviado por elgio em 16/01/2009 - 11:52h
Nota que eu dei?
Não dei nota alguma ao seu artigo (nem boa e nem ruim). Alias, não costumo dar notas aos artigos até porque não acredito muito neste sistema de notas do VOL.
[26] Comentário enviado por elgio em 16/01/2009 - 12:08h
Alias, Ordir, este é o meu jeito. raramente compreendido.
Não costumo escrever linhas e linhas melosas elogiando isto ou aquilo.
Sou mais do estilo critico, pois acho que receber criticas de forma construtiva é o desejo de todo o autor.
Veja, eu li todo o seu artigo. Só me chamou a atenção esta do syn flood, um equívoco não seu e que não está relacionado com o artigo já que é apenas um exemplo.
Teu artigo é da linha dos que acho essenciais, pois não é a (chatérrima) receita de bolo do tipo "Faça um firewall mega power extreme em 5 segundos". Ensinar a pescar...
Quanto as notas, eu não acredito nelas pois os critérios de quem vota são duvidosos. Alguém só vota ou porque amou muito (e dá 10) ou porque odiou demais (e dá ZERO). E como muitos, infelizmente, querem mesmo receber as coisas de BARBADA e tem preguiça de aprender, tenho observado que as tais receitas de bolo são sempre bem votadas... :-D
[29] Comentário enviado por tuxSoares em 18/01/2009 - 00:04h
Olá,
parabéns pelo seu artigo, como ele possui uma linguagem simples e objetiva fica fácil de entender os passos básicos de como funciona "essa encrenca" de iptables.
Trabalho com o iptables a 4 anos, se quando comecei tivesse encontrado um artigo desse nível as coisas teriam sido muito mais descomplicadas, por isso minha felicitação ao seu artigo, parabéns mesmo.
[32] Comentário enviado por abelfrancia em 25/04/2012 - 16:31h
Obrigado pelo artigo! Me ajudou muito, a tempos queria subir um firewall nem que seja com um script básico de segurança (contra ping da morte e lá vai).