iptables: estabelecendo uma política simples para colocar ativo um servidor web

Publicado: 03/07/2010 em Linux, Serviços IP
Tags:, ,

1) Entendendo um pouco os conceitos

TCP/IP é um sistema de protocolos – um conjunto de protocolos que dá suporte à comunicação em rede de computadores. As quatro camadas do modelo TCP/IP são:

  • A camada de APLICAÇÃO, com os protocolos FTP, HTTP, etc (mensagem);
  • A camada de TRANSPORTE, com seus pacotes UDP e TCP, dentre outros (segmento, se TCP, ou datagrama, se UDP);
  • A camada de REDE, responsável pelo roteamento, onde se tem o IP na sua versão 4 como mais significativo (datagrama ip);
  • A camada de ACESSO DE REDE não faz parte do modelo de camadas TCP/IP propriamente dito, pois é restrito ao fabricante da placa (frame, baseado em endereçco de HW físico).

Principais protocolos utilizados:

  • Na camada de APLICAÇÃO: não se trata exatamente de protocolos, mas de SERVIÇOS: ftp (porta 21), smtp (porta 23), tradução de nomes (DNS, porta 53), http (porta 80), pop3 (porta 110), snmp (porta 161).
  • Na camada de TRANSPORTE: TCP e UDP.
  • Na camada de REDE: IP, ARP, RARP, ICMP.
  • Na camda de ACESSO DE REDE: Ethernet, PPP, Token Ring, outras.

Firewalls tem a capacidade de bloquearem o acesso a portas TCP e UDP específicas. A palavra firewall significa fechar o acesso a uma porta.

O iptables atua em princípio nas camadas de REDE (ip de origem ou de destino) e de TRANSPORTE (porta origem e destino). No entanto, o iptables também permite atuar até mesmo na aplicação, com os devidos módulos adicionados. Ele está organizado por 3 tabelas, a saber: a tabela FILTER é onde é controlado o filtro de pacotes, basicamente, quem entra e quem sai da rede. Ou seja, contém regras que determinam se um pacote deve ser aceito ou não; a tabela NAT que trabalha com funções de NAT (Network Address Translation). Ou seja, realiza operações de tradução sobre IP e/ou porta, tanto de origem como de destino; e a tabela MANGLE que trabalha com alterações especiais nos pacotes, por exemplo, alterar a prioridade de um datagrama IP, marcar um determinado datagrama para que ele seja trabalhado por um roteamento especial, como sair por outro gateway, alterar o TTL, TOS, etc.

A tabela FILTER serve para executar três funções:

  • INPUT: Controla o que entra no servidor.
  • FORWARD: Controla o que entra no servidor mas deve ser redirecionado a uma outra máquina.
  • OUTPUT: Controla o que sai do servidor.

A tabela NAT serve para executar três funções:

  • PREROUTING: Utilizada quando necessitamos tomar ações ANTES do datagrama ser roteado.
  • POSTROUTING: Utilizada quando necessitamos tomar ações APÓS o roteamento do datagrama.
  • OUTPUT: Utilizada quando necessitamos realizar alterações nos datagramas após eles serem roteados.

A tabela MANGLE serve para executar as seguintes funções:

  • PREROUTING: Utilizada quando necessitamos modificar os datagramas dando um tratamento especial antes que eles sejam roteados.
  • OUTPUT: Modifica especialmente os datagramas gerados pelo servidor antes que eles sejam roteados.

2) Estabelecendo as regras necessárias

Primeiro verifique se o iptables está instalado. Se não, faça sua instalação:

#apt-get install iptables

————————-Apagando as regras anteriores

iptables -F
iptables -t filter -F
iptables -t filter -Z
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t mangle -F

——————————————————————–
TABELA INPUT
——————————————————————–


# permitir pacotes tcp vindos da internet para porta 22 (SSH)
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
# permitir pacotes tcp vindos da internet para porta 80 (http)
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
# aceita protocolo udp na porta 520
iptables -A INPUT -p udp --destination-port 520 -j ACCEPT
# aceita protocolo tcp nas portas superiores
iptables -A INPUT -p tcp --destination-port 1000:65535 -j ACCEPT
# aceita protocolo udp nas portas superiores

iptables -A INPUT -p udp --destination-port 1000:65535 -j ACCEPT
# tráfego de pacotes icmp que superar o limite de 2/seg será bloqueado
ptables -A INPUT -p icmp -m limit --limit 2/s -j ACCEPT
# altera a política default do chain INPUT
iptables -t filter -P INPUT DROP

——————————————————————–
TABELA OUTPUT
——————————————————————–

iptables -t filter -P OUTPUT ACCEPT

——————————————————————–
TABELA MANGLE
——————————————————————–
Define mínimo de espera para os serviço DNS. Isto dará uma melhor sensação de conexão em tempo real e diminuirá o tempo
de espera para conexões que requerem resolução de nomes.

iptables -t mangle -A OUTPUT -p udp --dport 53 -j TOS --set-tos 0x10

————————-Bloquear roteamento de pacotes

iptables -t filter -P FORWARD DROP

Registrar as tentativas indesejáveis de acesso externo ao servidor no syslog do sistema (que está em /var/log):

iptables -A INPUT -p tcp --dport 21 -j LOG --log-prefix "FIREWALL: ftp "
iptables -A INPUT -p tcp --dport 25 -j LOG --log-prefix "FIREWALL: smtp "
iptables -A INPUT -p tcp --dport 110 -j LOG --log-prefix "FIREWALL: pop3 "
iptables -A INPUT -p tcp --dport 113 -j LOG --log-prefix "FIREWALL: identd "
iptables -A INPUT -p udp --dport 111 -j LOG --log-prefix "FIREWALL: rpc"
iptables -A INPUT -p tcp --dport 111 -j LOG --log-prefix "FIREWALL: rpc"
iptables -A INPUT -p tcp --dport 137:139 -j LOG --log-prefix "FIREWALL: samba "
iptables -A INPUT -p udp --dport 137:139 -j LOG --log-prefix "FIREWALL: samba "

Existem dois comandos muito úteis para evitar que as configurações se percam cada vez que a máquina for reiniciada:

#iptables-save > /home/minha_home/meu_arquivo_regras.txt
#iptables-restore < /home/minha_home/meu_arquivo_regras.txt

O primeiro comando acima salva a atual política estabelecida em um arquivo texto meu_arquivo_regras. O segundo, restabelece a política a partir das definições deste arquivo texto.

Links:
1- Estrutura do iptables
2- Entenda como o funciona o sistema de log do Linux
3- Iptables rápido
4- Firewall Básico, NAT e Redirecionamento com IPTABLES

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s