Como configurar um IPTABLES simples e seguro no Slackware!

Este artigo mostra como configurar de uma maneira simples e segura o iptables no Slackware, cobrindo também os conceitos básicos de sua utilização. Também será disponível um simples script de iptables para liberação de acesso web, msn e ftp pronto para ser iniciado junto com o sistema.

[ Hits: 112.777 ]

Por: Tarcisio Gambin em 01/10/2010


Mãos a obra!



Agora sim! Vamos botar a mão na massa e fazer funcionar o iptables no Slackware! Obaaa!

Entre num terminal, acesse-o como root:

su

Acesse /etc/rc.d:

# cd /etc/rc.d

Crie um arquivo chamado rc.firewall:

# touch rc.firewall

Entre em um editor de sua preferencia (no meu caso o nano) e edite o arquivo criado anteriormente:

# nano rc.firewall

Digite (ou copie, bem melhor ;p) este script:

# Limpando politicas e regras
iptables -X
iptables -F

# Configurando as politicas padroes
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Configurando portas de entrada
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Configurando portas de saida
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 1863 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

Agora salve o arquivo. Se estiver no nano seguem abaixo os comandos para salvar e sair:

Ctrl + O
Ctrl + X


E por último será necessário atribuir permissões de execução no script através do chmod:

# chmod +x /etc/rc.d/rc.firewall

Reinicie o servidor agora!

# init 6

Após o reboot, verifique se o script está sendo executado automaticamente entrando em um terminal como root e executando o seguinte comando:

# iptables -L

Será exibida uma tela com todas as políticas e regras aplicadas.

Podemos ver que este script é meio xiita! Estou usando DROP em todas as políticas e liberando apenas o necessário. Porém o que é bacana é saber o que VOCÊ realmente está fazendo e ver como isso funciona.

Vale lembrar que este é um script voltado para uso doméstico, ou seja, apenas libera acesso a web (80, 443), ftp (21) e msn (1863). Entretanto já serve como base de estudos para soluções corporativas (do qual deve-se utilizar regras de NAT (PREROUTING, POSTROUTING, MASQUERADE etc) e também flags de pacote, entre outros.

Espero que tenham gostado!

Qualquer dúvida, crítica e sugestão, por favor, ARREBENTEM NOS COMENTÁRIOS!

Grande abraço e até o próximo artigo!

Página anterior    

Páginas do artigo
   1. Introdução
   2. Mãos a obra!
Outros artigos deste autor

AnyRemote - o poder em suas mãos!

Criando um cluster de alta performance para quebrar senhas

Leitura recomendada

Servidor Samba "Autoservice"

TOR: A Internet sem rastreabilidade

Melhorando a segurança do seus servidores em FreeBSD

Monitorando máquinas Windows com o Nagios

Data Recovery em dispositivos e partições formatadas com Linux

  
Comentários
[1] Comentário enviado por cytron em 04/10/2010 - 01:48h

Muito bom! Simples e eficiente.

[2] Comentário enviado por claytonnog em 05/10/2010 - 10:50h

Também gostei, achei bem direto.
Abraço.

[3] Comentário enviado por ladiv em 05/10/2010 - 13:11h

É isso aí gambin.br boa iniciativa.
No entanto, quando declaramos a tabela para o iptables essa deve estar em letras minúsculas:

# iptables -t filter -A INPUT -d 192.168.1.1 -a ACCEPT

Mais uma vez , muito obrigado pela tua iniciativa e VIVA O LINUX!!!!

SEGURANÇA
ESTABILIDADE
LIBERDADE

[4] Comentário enviado por nfmike31 em 05/10/2010 - 14:36h

Sou leigo ao extremo nesse novo "mundo", mas estou ADORANDO!!!! Fiz o esquema supra citado, mas agora não consigo mais ouvir uma rádio via web aqui, que é a oifm. Alguem me ajuda? Desde já, valeu portudo!!

[5] Comentário enviado por claudiojoliveira em 05/10/2010 - 16:24h

Boa tarde.
Sou iniciante em iptables e estou usando Slackware com Xfce, já tentei instalar o Firestater mas não funcionou, então decidi encarar de frente o iptables.
Estou em dúvida nessas dua linhas abaixo, gostaria que alguém, se possível, comentassem.
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Outra coisa, a linha abaixo bloqueia o ping externo mas deixa pingar do local, será que posso substituir as duas linhas deste script referente a ping por esta?
iptables -A FORWARD -o eth0 -p icmp -j ACCEPT
Abraços a todos e Viva o Linux.

[6] Comentário enviado por claudiojoliveira em 05/10/2010 - 16:41h

Boa tarde nfmike31.
Tenta abrir sua rádio online preferida e fica de olho no endereço que ela está tentando abrir, neste mesmo endereço vai aparecer a porta que a rádio usa, fica logo após os : (dois pontos).
Exemplo:
Eu escuto muito a Rádio Kiss FM de São Paulo, observa o endereço dela abaixo:
(http://75.126.86.2:8098/)
Você pode notar que ela usa a porta 8098, logo adiciona esta regra em seu script:
iptables -A OUTPUT -p tcp --dport 8098 -j ACCEPT
Eu uso o mplayerplug-in-3.55-i486-1 para ouvir a Kiss através do firefox.
Tenta aí, depois vc escreve se conseguiu!
Abraços.

[7] Comentário enviado por nfmike31 em 05/10/2010 - 17:53h

Muito boa tarde, Claudio! Valeu pelas dicas! bom... só a minha ignorância é que não ajuda muito! :( Não consegui descobrir qual porta o site em questão usa. Usei ping, netstat -na, mas com esses comandos só consegui encontrar o IP. Será que eu devo desativar tudo para conseguir essas informações? Também uso o firefox, porém sem o uso do mplayerplug-in-3.55-i486-1. Fui procurá-lo em ftp://ftp.slackware-brasil.com.br/ e adivinha? Sem conexão com o site! Fico no aguardo de mais ajuda. Abraço.

[8] Comentário enviado por gambin.br em 05/10/2010 - 19:26h

Olá pessoal!

Primeiramente gostaria de agradecer aos comentários e também a todos que estão colaborando positivamente com a melhoria do artigo!! Vamos agora a algumas considerações:

@ladiv - realmente, há um erro no artigo. Não contrariando o mundo Linux, os parametros do iptables são CaseSensitives, portando o nome das tabelas devem ser escritos em minusculo. Não sei como funciona aqui no VOL, mas vou ver se é possível editar o arquivo! Valeu!

@nfmike31 - sobre as rádios online realmente é provável que voce esteja sendo bloqueado pela política DROP no OUTPUT. Para liberá-la, há duas maneiras. Ou voce descobre o protocolo (tcp/udp) utilizado pela rádio e suas portas de comunicações, ou voce configura a política OUTPUT como ACCEPT. Mas acredito que a maioris aceite muito mais a segunda sugestão (ok, com segurança sou meio xiita...). A dica do @claudiojoliveira é boa também

@claudiojoliveira - Sobre os comandos é o seguinte:
[iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT] - este é responsável para que voce consiga dar um echo reply em tentativas de ping. No output temos a liberação do echo request (ping) e no output liberamos o echo reply ("pong").Já o seguinte:
[iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT] - pelo meu entendimento do iptables, este é responsável por aceitar as conexões de entrada já iniciadas à partir da maquina.
Sobre o [iptables -A FORWARD -o eth0 -p icmp -j ACCEPT] creio que poderia ser feito sem problemas, desde que trocado o "-o" por "-i".

Valeu gente!!

[9] Comentário enviado por ---Anonymous--- em 12/10/2010 - 22:03h

Cara, ficou muito da hora, estou quebrando a minha cabeça sobre o iptables, ainda não tenho ideia de quando eu tenho que usar devidas tabelas e chains. Mas seu artigo deu uma clareada firmeza, valeu cara. Você é hacker ??

[10] Comentário enviado por gambin.br em 12/10/2010 - 22:35h

@---Anonymous---: ainda bem que gostou do artigo! Pretendo contribuir com mais algumas coisas bacanas em breve!

Sobre as tabelas se for apenas para liberação de input/output, voce utilizará basicamente a tabela filter.

Já as tabelas NAT e MANGLE geralmente são utilizadas quando o servidor/desktop que roda o iptables também atua como router/proxy para compartilhamento de conexão. Sobre as chains são basicamente o seguinte:

INPUT: tudo que corresponde a entrada em sua maquina. Por exemplo, se voce hospeda um webserver nesta maquina voce precisa liberar por padrão o INPUT para a porta 80 nesta maquina, que é a porta de entrada de acesso externo web.
OUTPUT: é o contrário do INPUT, ou seja, tudo que sai à partir da maquina. Se voce deseja que a maquina rodando iptables não tenha nenhum acesso externo, basta dar um DROP em todas as políticas/regras.
FORWARD: corresponde tudo que chegar ou sair da maquina destino (do qual não seja o host do iptables, e sim alguma maquina do qual ele tenha acesso), sendo que neste caso o iptables provavelmente estará atuando como router.

Voce poderá encontrar maiores detalhes nos seguintes links:

http://www.eriberto.pro.br/iptables/

http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm

Sobre o hacker, ainda não mas quem sabe no ano que vem... Estou preparando um material estudo para a CEH após minha futura certificação LPI!

Valeus!!

[11] Comentário enviado por femars em 17/03/2011 - 09:39h

Sobre essa parte:

# Configurando as politicas padroes
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

No caso da máquina em questão estiver conectada diretamente na internet, e com a rede eth1, conectada na rede local, então o servidor ficaria bloquiado tb na rede local ?! caso houver algum compartilhamento (tipo samba). Então não seria mais correto especificar esses bloqueios na eth0? Onde estaria apenas a internet? e liberando a eth1 pra local?

[12] Comentário enviado por gambin.br em 17/03/2011 - 10:28h

Olá @femars

O exemplo deste tutorial é para uso doméstico, que geralmente possui no máximo duas interfaces (cabeada / wireless) que compartilham das mesmas regras.
No caso de servidor, seria necessário implementar regras de liberação específicas para cada interfaces, pois a política no final das contas está fazendo um DROP para TODAS as interfaces. Neste caso pode ser feito da seguinte maneira:

# Liberando acesso externo à porta 80 na eth0
iptables -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT

# Liberando acesso à internet na eth1
iptables -A OUTPUT -p tcp --dport 80 -i eth1 -j ACCEPT


Em todo caso a política é interessante, pois caso nenhuma regra seja aplicada o DROP é automático, aumentando sua segurança.

[13] Comentário enviado por femars em 18/03/2011 - 10:02h

Ah legal, era essa a minha dúvida msmo. Obrigado pelo esclarecimento. Abraços.

[14] Comentário enviado por messiah em 30/07/2013 - 10:21h

Obrigado pelo post! Desculpe a pergunta mas alguem poderia me explicar a função de

iptables -A INPUT -i lo -j ACCEPT

{COMENTARIO}

[15] Comentário enviado por gambin.br em 30/07/2013 - 11:53h

Olá @messiah

Esta linha serve apenas para 'liberar' seu localhost, caso utilize algum sistema que referencie a interface local.
Essencial para desenvolvedores web :D

[]'s

[16] Comentário enviado por messiah em 30/07/2013 - 14:55h

Obrigado @gambin.br. Eu tenho outra dúvida:

Para acessar a internet na minha universidade eu adicionei os seguitnes elementos no script:
iptables -A OUTPUT -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -p tcp --dport 3129 -j ACCEPT

Funcionou, mas ficou lento. Portanto gostaria de saber se está é realmente uma ação segura.

Me surgiu uma ideia: aqui na universidade é bloqueado o download de Torrent, mas seria possível utilizar alguma políticam talvez com redirecionamento, para fazer com que todo o trafego passe pela porta 3128?


[17] Comentário enviado por shady157 em 05/09/2014 - 18:16h

amigo, gostaria de uma luz pra DROP em pacotes suspeitos de dos;ddos... de qualquer ip da internet. Não sei como fazer isso, talvez algum parametro que faça ele entender que estão tentando derrubar a conexao?

[18] Comentário enviado por fernandohlmaia em 10/06/2017 - 13:54h

Olá.
Sou iniciante. Li o artigo mas não consegui resolver meu problema.
Errei a senha por ssh algumas vezes e meu ip ficou bloqueado no iptables.
Qual comando uso para desbloquear? Já tentei alguns não deu certo.
Grato.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts