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.688 ]

Por: Tarcisio Gambin em 01/10/2010


Introdução



Olá pessoal!

Primeiramente gostaria de agradecer a oportunidade de estar publicando meu 1° artigo aqui no VOL, este que se deve a 2 principais motivos:
  • O VOL foi o grande responsável pelo meu interesse em aprender e gostar de Linux. Não apenas pela a excelência dos artigos técnicos e não-técnicos publicados, mas principalmente por fazer valer a palavra comunidade.
  • E também pelo meu interesse em compartilhar o que estou aprendendo na marra no mundo GNU, para que outros talvez possam ter uma experiência melhor do que já tive.

Linux: Como configurar um IPTABLES simples e seguro no Slackware! Mas peço encarecidamente ao amigo que leitor que caso encontre alguma informação errada que não pense 2x em corrigí-la, pois sou iniciante e peço desculpas pela minha escassa experiência em Linux e por qualquer má interpretação ou informação errônea que posso estar passando neste e demais artigos.

Neste artigo iremos aprender os conceitos básicos do uso do iptables e como configurá-lo no Slackware para que seja iniciado junto com o sistema. Também serão aprendidos alguns comandos simples como limpar políticas, exibir regras, entre outros.

Conceitos básicos de IPTABLES

Antes de mais nada vamos entender alguns conceitos básicos para que futuramente seja mais fácil implementar qualquer mudança ou adaptação no seu script do iptables.

O que é iptables?

Iptables é o sistema de firewall mais utilizado no mundo Linux, principalmente pela sua simplicidade e eficiência.

Como funciona?

Ele funciona através dos filtros de pacotes, ou seja, quando um pacote passa pelo iptables (chegando, encaminhando ou saindo do servidor do iptables) ele é analisado linha por linha através de um script, como um script batch mesmo. Veremos mais detalhes nos exemplos posteriores.

No iptables é importante entender os seguintes conceitos:
  • Chains (categoria): embora minha tradução não tenha ficado tão boa, as chains correspondem ao tipo do pacote a ser analisado pelo iptables, que poder ser INPUT (Entrada), OUTPUT (Saída) e FORWARD (Encaminhamento)
  • Rules (regras): agora com uma tradução melhor, as rules correspondem aos filtros e a sintaxe aplicada às chains.

No iptables também temos o conceito de tabelas, através das tabelas NAT, FILTER e MANGLE.

A tabela FILTER é a responsável pela permissão/bloqueio da entrada, saída e encaminhamento de pacotes. Já a tabela NAT é responsável pelo redirecionamento de portas, proxy etc. E por último a tabela MANGLE é utilizada para a modificação de pacotes.

Para não fugir do artigo iremos apenas explicar o uso da tabela FILTER, que é a tabela padrão e a principal responsável pela segurança de seu ambiente.

Exemplo de uso:

iptables [-t tabela] [opção] [chain] [dados] -j [ação]

Um exemplo prático de aplicação de regra anterior seria o seguinte:

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

Vamos entender a regra:
  • iptables: começa uma regra do iptables
  • -t FILTER: indica a tabela (se não indicado será automaticamente assumido a tabela filter). Neste caso estamos deixar explícito que estamos utilizando a tabela FILTER
  • -A INPUT: indica a chain que será processada, neste caso a entrada de pacotes
  • -d 192.168.1.1: indica o destino do pacote, que neste caso é o host 192.168.1.1
  • -a ACCEPT: indica a ação que será atribuída quando um pacote com todas as características chegar no iptables. Neste caso é ACCEPT.

Uma coisa interessante a se notar no iptables é o uso de políticas, que poderão facilitar muito mais sua administração.

Entendendo políticas

As políticas são as regras padrões que serão atribuídas a um pacote se ele não se encaixar em todas as regras anteriores. Vamos analisar o seguinte exemplo:

# iptables -P INPUT DROP
# iptables -A INPUT -s 10.1.1.1 -p tcp --dport 80 -j DROP
# iptables -A INPUT -s 10.1.1.2 -j ACCEPT


Agora supondo que venha um pacote do IP 10.1.1.3, qual seria a ação?

Seria DROP, pois na primeira linha temos a política (parâmetro -P) que faz com que qualquer pacote que não satisfaça as demais condições seja DROP.

Já na segunda linha está explícito que o pacote que vier da porta 80 através do protocolo TCP proveniente do IP 10.1.1.1 será DROP.

E na terceira linha está explícito que tudo o que vier do IP 10.1.1.2 será ACCEPT.

Então como o IP 10.1.1.3 não satisfaz a nenhuma regra, será aplicada a politica padrão para INPUT, que é DROP.

E se o pacote fosse do IP 10.1.1.2?

ACCEPT, pela terceira linha.

E se o pacote fosse do IP 10.1.1.1 e da porta 443?

DROP, pois mesmo que a única porta que esteja sendo negada explicitamente seja a porta 80, não há nenhuma regra que especifique ACCEPT para o IP 10.1.1.1 ou para a porta 443, portanto ele será processado pela política, que é DROP.

Enfim, esses são os conceitos básicos, claro que existem muito mais detalhes, tipos de pacote, protocolos etc. Mas este já é o "feijão com arroz" para que você possa começar a brincar com o iptables. A partir da próxima página iremos botar a mão na massa com o Slackware!

    Próxima página

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

Proxy reverso e balanceamento de carga utilizando o Pound

Bloqueio de usuários com página de aviso

Site seguro com Apache-SSL em 15 minutos

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

KNOCK + SSH

  
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