O objetivo aqui neste artigo não é realizar um estudo profundo do iptables, mas sim aprendermos sobre algumas regras do mesmo e criarmos um script simples, porém seguro, para que a partir daí você possa melhorá-lo à sua maneira.
O iptables, resumidamente, é um Firewall (Jura??? Eu não sabia...)
Brincadeiras à parte, o iptables é uma maravilhosa ferramenta de segurança para sua rede, que nada mais é do que um 'frontend' para o módulo 'netfilter'.
Como vamos ver mais adiante, o iptables é muito flexível, completo e complexo, porém podemos contar com ele quando o entendemos. O grande segredo do iptables é
entender sua sintaxe, saber como, quando e onde inserir uma regra, saber como ele se comporta, etc.
Neste artigo iremos construir um script do iptables, simples, usando apenas a tabela 'Filter' e compartilhamento de internet com a tabela 'Nat'.
Para melhor aproveitamento deste artigo, o leitor deve ter certo conhecimento sobre o iptables, sua sintaxe e conhecimentos sobre redes de um modo geral.
Vale a pena também ler o manual do iptables. No terminal digite:
man iptables
O que devo saber para criar um script do iptables?
Para começarmos a criar um script do iptables, devemos ter em mente para qual propósito o mesmo vai ser utilizado.
Então vamos responder às seguintes perguntas:
Estou procurando segurança?
Estou querendo mais segurança?
Quero facilidade?
Quero confiança?
Meu firewall deve bloquear tudo e liberar apenas o necessário?
O que vou liberar?
Com repostas para estas perguntas, podemos começar a pensar sobre como elaborar o nosso script.
Vamos ver mais alguns tópicos que vão nos ajudar:
Tenha sempre em mente que o ataque pode vir de todos os lados, inclusive da sua rede interna.
Faça uma relação de tudo o que você precisa para manter sua rede segura e funcional, por exemplo, quais as portas que você deve liberar, para quais hosts, para quais aplicações, etc.
[1] Comentário enviado por eldermarco em 17/01/2012 - 17:22h
Legal o seu artigo. Não trate o assunto de maneira mais detalhada, mas de forma bastante didática. Acho que já passei da hora de estudar esse assunto e o seu artigo me motivou a fazê-lo.
[2] Comentário enviado por phrich em 17/01/2012 - 18:08h
Fico feliz em saber que pude ajudar.
Estudar é sempre bom, seja em qual assunto for, eu por exemplo, sempre releio alguns livros, tutoriais, dicas, etc, assim posso me lembrar sempre de algo que eu tenha esquecido.
[8] Comentário enviado por ecbr em 18/01/2012 - 08:01h
Tem certeza que isso esta correto?
##############
# REGRAS DE NAT #
#############
# COMPARTILHA A INTERNET #
iptables -t nat -A PREROUTING -s $REDE_INTERNA -o $IFACE_WEB -j MASQUERADE
# REDIRECIONA O ACESSO RDP PARA OUTRO SERVIDOR DENTRO DA REDE INTERNA#
iptables -t nat -A POSTROUTING -p tcp --dport 3389 -j REDIRECT --to 10.0.0.2:3389
[11] Comentário enviado por removido em 18/01/2012 - 12:06h
Phillip,
Assim que preparar todas as modificações, descreva a página, o trecho sobre como está e como quer deixar. OK?
Envie tudo para este e-mail: izac.cf@gmail.com
É bem melhor efetuarmos as correções no próprio artigo do que postá-las nos comentários.
Os trabalhos devem estar corretos para quem faz a leitura, e fora que tem pessoas que nem leem os comentários.
Agradecemos também ao pessoal que está colaborando com as correções.
[14] Comentário enviado por dalveson em 02/02/2012 - 15:29h
Otimo artigo, para mim ja esta sendo bastante util a tempos que queria organizar um script aqui e nao tinha muito noção de como fazer, este artigo clareu bastante!
tenho algumas duvidas:
1-em outros artigos aqui do viva o linux mesmo, os autores nos orientam a colocar os parametos iptables - F, iptables - Z e iptables - X vc coloca apenas o F para limpar, na sua opniao os demais nao seriam muito uteis ou depende de cada um?
2-Na variavel das Portas UDP e TCP eu posso colocar quantas portas que quiser sem dar problema na regras, ou tenho um limite sei lá tipo 30 portas?
[15] Comentário enviado por [gregory] em 03/02/2012 - 15:50h
Boa tarde amigos... gostei muito do post só queria deixar uma dica caso vocês estejam tendo muitas dificuldades com iptables que nem eu.. Uso como regra de firewall o ipfw no freebsd. Ele é muito bom e muito, mas absurdamente simples... Fica a dica pra quem quizer pesquisar sobre o assunto.
[18] Comentário enviado por dalveson em 04/02/2012 - 17:21h
Boa tarde phrich, obrigado pela atenção dada a minha duvida.
Estou aplicando o exemplo em um ambiente virtual, afinal não tenho muito conhecimento sobre iptables.
Porem estou com uma duvida, quando eu dou um start no firewall não consigo acessar nada na estação, qdo eu dou um stop tudo funciona de boa porem com tudo ACCEPT conforme descrito no script, então fui ate a parte "# CRIA A IDA E VOLTA DO ACESSO NAS CHAINS INPUT, OUTPUT E FORWARD, ASSIM NÃO PRECISAMOS CRIAR A IDA E VOLTA NAS REGRAS" , e adicione NEW ao state ficando assim:
iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
Funcionou de boa porem ta permitindo toda nova conexão sem restrição de portas, por mais que as politicas estejam DROP, se eu retirar o NEW as estação não acessam, vc tem ideia do que estaria acontecendo?
[22] Comentário enviado por xanddydf em 08/05/2012 - 22:32h
Boa Noite phrich
Estou com o mesmo problema que o dalveson está passando.
Qual foi a solução? você pode me ajudar?
Meu e-mail é carlosalexandre@crtisolutions.com.br
Estou usando Debian Squeeze
[25] Comentário enviado por phrich em 08/07/2012 - 09:45h
Caro embura, eu já havia realizado algumas correções no script, porém outras não foram corrigidas devido a falta de atenção e falta de tempo, de qualquer forma obrigado pela correção.
[27] Comentário enviado por Cesar29 em 31/03/2014 - 15:09h
Muito bom seu artigo, acabei tirando varias dúvidas com ele em meu ambiente teste, so encontrei dois detalhes que precisam ser corrigidos.
-----------------------------------------------------
# CRIA FUNÇÃO STOP #
# Esta função limpa todas as regras, deixa as políticas padrões com ACCEPT e deixa todo e qualquer acesso liberado
############################################################################
functio stop () { <------- Falta um "n" no final da palavra function.
# LIMPA AS REGRAS EXISTENTES #
-----------------------------------------------------
-----------------------------------------------------
*)
echo "Insira um parâmetro para /etc/init.d/firewall... start | stop | restart <-------- Falta uma " após restart.
exit 0
;;
-----------------------------------------------------
[29] Comentário enviado por phrich em 22/07/2014 - 11:48h
[28] Comentário enviado por GonzalezRS em 19/07/2014 - 20:09h:
Queria saber como libero um ip para não passar pelo proxy nem pelo iptables.
Estou usando esse script, meu professor me indicou pois está muito didático e fácil compreensão.
desde já agradeço.
Se o seu firewall está na "borda" da rede, os hosts obrigatoriamente terão que passar pelo firewall, agora se algum host não precisa passar pelo proxy é outra história...
[30] Comentário enviado por HeitorMiranda em 09/12/2015 - 18:34h
Boa tarde, estou tentando entender comando a comando, porém estou com uma dúvida, o que de fato efetua "--icmp-type 8", tem algo relacionado com o TOS?
[32] Comentário enviado por phrich em 29/12/2016 - 10:16h
Caro thiagosc, em tese sim, tudo vai depender de como vc for configurar o script, com as políticas padrões como DROP ele bloqueia tudo e libera só o que vc especificar, aí vc terá que ver como o seu programa de torrent se conecta.