Como configurar um IPTABLES simples e seguro no Slackware!

2010-09-16 Off Por gambin

Como configurar um IPTABLES simples e seguro no Slackware!

Olá Pessoal!

Gostaria de compartilhar com vocês umas coisas bacanas que estou aprendendo com iptables! Mas antes de seguir a receita de bolo 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 eficiencia.

 

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 as 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 tópico iremos apenas explicar o uso da tabela FILTER, que é a tabela default 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 específique ACCEPT para o IP 10.1.1.1 ou para a porta 443, portanto ele será processado pela política, que é DROP.

 

Como utilizar?

No iptables, podemos simplesmente adicionar uma linha em qualquer terminal e ela já será automaticamente processada. O problema deste caso é que qualquer reboot no server suas regras serão limpas, exceto as políticas. O interessante neste caso é criar um script de inicialização com os parâmetros desejados.

 

Criando um script do iptables! Obaaa!!

Entre um terminal

Acesse 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 no mesmo diretório. Se estiver no nano seguem abaixo os comandos para fechar 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 sistema 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 politicas e liberando apenas o necessário. Porém é bacana saber o que realmente VOCE 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 post!

[Update: arquivo publicado no http://www.vivaolinux.com.br/artigo/Como-configurar-um-IPTABLES-simples-e-seguro-no-Slackware/]

 

Referencia:

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

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

http://www.netfilter.org/documentation/index.html

http://www.netfilter.org/documentation/HOWTO/pt/packet-filtering-HOWTO-7.html

 

Recomendados:

http://www.vivaolinux.com.br/artigo/Desvendando-as-regras-de-Firewall-Linux-Iptables/

http://www.vivaolinux.com.br/artigo/Dominando-o-iptables-%28parte-1%29