Você está na página 1de 12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

Desvendando as regras de Firewall Linux Iptables


Autor: Armando Martins de Souza <armandomartins.souza at gmail.com> Data: 12/04/2010 Iptables / firewall / tabelas bsicas

Iptables
O funcionamento do firewall basicamente o seguinte: 1. Os pacotes que chegam ao firewall so filtrados atravs das regras que foram definidas. 2. Roteamento interno (dentro do kernel). Com base no destino do pacote, ele encaminhado para o "filtro" (chain) apropriado ao roteamento. Explicaremos mais adiante cada um dos filtros "bsicos" do iptables.

Firewall
Antes de iniciarmos o detalhamento das chains, iremos mostrar a relao entre firewall e kernel Linux. 1. Ifwadm --> kernel 2.0 2. Ipchains --> Kernel 2.2 3. Iptables --> A partir do kernel 2.4 importante deixar claro que neste tutorial trabalharemos apenas com o firewall iptables.

As tabelas bsicas
Filter composta de 3 chains: INPUT, OUTPUT e FORWARD. a tabela default, isto significa que quando no referenciamos nenhuma chain no comando iptables, a chain filter chamada. importante deixar claro que essa chain trata do trfego normal de dados, isto significa que no h nenhum tipo de mascaramento (NAT) nela. Nat
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350 1/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

quando temos que mascarar algum endereo IP ou rede. O Nat acontece tanto da rede externa (Internet), para a rede interna (Lan), quanto da Lan para Internet. A tabela "Nat" composta pelas chains: PREROUTING, OUTPUT e POSTROUTING. Mangle Basicamente utilizada para fazer QoS. No trataremos desse assunto neste tutorial. A seguir ilustramos as tabelas com suas respectivas chains.

Temos abaixo uma representao visual do posicionamento das chains em relao a passagem dos pacotes de dados da tabela "FILTER".

Agora vamos explicar o funcionamento de cada uma das chains descritas acima: INPUT (Pacotes de Entrada) --> Os pacotes so encaminhados para esta chain quando a origem no o firewall, mas o destino o firewall. FORWARD (Pacotes de Passagem) --> No caso da FORWARD os encaminhamentos so feitos quando a origem no o firewall e o destino tambm no o firewall. Isto , o pacote de dados esta apenas passando pelo firewall. OUTPUT (Pacotes de Sada) --> Chain responsvel pelos pacotes que tem origem no firewall e destino no firewall.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350

2/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

A tabela filter s pode tratar do que passa ou no passa.

Polticas de acesso / DROP e REJECT

Polticas de acesso
No que se refere a polticas de acesso temos ACCEPT e DROP. ACCEPT --> passa tudo, para que o pacote seja bloqueado temos que ter inserido um comando dizendo que pacotes com aquelas caractersticas devem ser bloqueados. DROP --> exatamente o inverso do ACCEPT. Bloqueia tudo, deixando passar somente os pacotes que batem exatamente com as caractersticas passadas pelo comando de liberao. Normalmente usamos o critrio de bloquear tudo, liberando apenas o que tem que passar, isso tem inmeras vantagens. Podemos citar por exemplo: evitar o trafego na rede desnecessrio, deixar portas abertas sem necessidade, impedindo com isso a possibilidade que uma falha de segurana seja utilizada por um indivduo mau intencionado. Exemplos de mudana de poltica: iptables -t <tabela> -P <chain> -j ACCEPT/DROP Vamos mudar todas as chains da tabela "filter" para DROP:
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350 3/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

# iptables -t filter -P INPUT DROP # iptables -P FORWARD DROP # iptables -t filter -P OUTPUT DROP Reparem que em um dos exemplos no especifiquei qual tabela estou usando (iptables -P FORWARD DROP), isso porque a tabela filter no precisa ser referenciada, pois ela a tabela padro do iptables. Para colocarmos as polticas das chains novamente para ACCEPT, basta substituirmos o "DROP" por "ACCEPT". # iptables -t filter -P INPUT ACCEPT # iptables -P FORWARD ACCEPT # iptables -t filter -P OUTPUT ACCEPT

DROP e REJECT
Muitas pessoas acham que o "DROP" tem a mesma funcionalidade do "REJECT", contudo h uma sutil diferena. No DROP o pacote sumariamente bloqueado no dando a mnima importncia para o pacote enviado, ele apenas o ignora. J no caso do REJECT enviado um pacote de retorno informando que o pacote foi rejeitado. S para ficar bem claro segue abaixo uma suposta comunicao entre uma maquina que denominamos como host A enviando pacotes para uma outra maquina chamada host B.

Quando o host A envia um pacote para o host B e a poltica de iptables dele esta em DROP, o host A no recebe nenhum pacote de retorno. Isso faz com que o host A no consiga ver o host B, tornando com isso o host B inacessvel. No REJECT, a mquina envia uma mensagem de retorno do pacote. Nesse caso existe a comunicao entre os hosts e o host A saber que o host B recebeu seu pacote e o rejeitou. Exemplos: Para deixar o host B inacessvel para o mundo, basta mudar a poltica da tabela de ACCEPT para DROP. # iptables -P INPUT DROP
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350 4/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

Sintaxe iptables e suas opes A seguir mostraremos a sintaxe iptables e suas opes, tratando somente pacotes de dados da tabela filter, criando regras para liberar, bloquear ou rejeitar os pacotes de dados de trafego normal, sem a utilizao de mascaramento (tabela NAT). Sintaxe: iptables -t [tabela] <ordem> <chain> [condies] -j <ao> Tabela: Nesse caso estamos tratando da tabela filter, como j falamos anteriormente, esta tabela a padro e no necessrio explicit-la. Ordem: a. -I --> Insere a regra no incio da chain. b. -A --> Insere a regra no final da chain. PS: O chain analisada da primeira regra para a ltima, isso quer dizer que a analise da regra feita do inicio da chain para o final, essa anlise se segue at encontrar uma regra se enquadre ao pacote. Ao localizar essa regra ele entra e processado, deixando as regras subsequentes sem serem analisadas. Por isso importante tratar as regras da mais restritiva para a menos restritiva. Abaixo colocamos 3 regras, a primeira regra coloca a poltica da chain INPUT como DROP, isso quer dizer que s passa um pacote se ele estiver explicito em uma regra. A segunda regra libera acesso a porta 22 para a rede 10.0.0.0/24 e a terceira libera acesso do host 10.0.0.49 a porta 22 do host. Exemplo: # iptables -P INPUT DROP # iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT # iptables -A INPUT -p tcp -s 10.0.0.49 --dport 22 -j ACCEPT No exemplo acima a terceira regra nunca far match (nenhum pacote ir utiliz-la), pois a segunda regra far match (regra mais genrica) caso o host de IP 10.0.0.49 tente acessar o host na porta 22. Chain: Iremos dizer a que chain a regra se refere (INPUT, OUTPUT, FORWARD). Condio (match): -p = protocolo (all, tcp, udp, icmp etc) --sport = porta origem --dport = porta destino -s = IP origem -d = IP destino -i = interface de entrada -o = interface de sada
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350 5/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

-m = match Ao: onde informamos o que devemos fazer com o pacote, ignorar (DROP), aceitar (ACCEPT) ou rejeitar (REJECT). Abaixo colocamos alguns exemplos de regras: Bloquear o protocolo icmp (ping): # iptables -A INPUT -p icmp --icmp-type ping -j DROP S vai liberar o acesso via ssh para o host 10.3.4.11, avisando que o pacote foi rejeitado para os outros hosts: # iptables -A INPUT -p tcp --dport 22 -s ! 10.3.4.11 -j REJECT

PS: O smbolo de "!" significa uma exceo a regra. Em nosso exemplo ele esta tratando o host de IP 10.3.4.11 como exceo a regra. Isso quer dizer que o nico host que pode acessar o "firewall" o 10.3.4.11. A regra ir rejeitas qualquer outro host. S vai liberar o protocolo icmp (ping) para o host 10.3.1.10. Ignorando o ping para qualquer outro host: # iptables -A INPUT -p icmp --icmp-type ping -s ! 10.3.1.10 -j DROP Exemplo de liberao do smtp (tcp 25) e-mail, impedir que um servidor de e-mail interno envie e-mail para fora da empresa. Normalmente isso evita que spammers, que por algum motivo tenham conseguido "acesso" a um de seus servidores, instale um servidor de e-mail e o utilize para enviar spam. # iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 25 -j REJECT Essa regra se traduz em: os pacotes tcp que tiverem vierem atravs da interface eth1 e destino de sada a eth0 porta 25 devero ser rejeitados. No caso de duas redes:

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350

6/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

Basta incluir as interfaces referentes a segunda rede: # iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 25 -j REJECT # iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 25 -j REJECT Bloquear acesso atravs do endereo fsico da placa de rede (MAC): # iptables -A FORWARD -m mac --mac-source 00:00:AA:BB:11:12 -p tcp --dport 80 -j DROP Se voc tem alguma dvida para saber o endereo MAC do host basta seguir o seguinte procedimento: dar um ping IP que voc precisa saber o MAC e depois o dar comando o "arp". Match (condio) OUTPUT:

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350

7/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

No deixa o host acessar a porta 80: # iptables -A OUTPUT -p tcp --dport 80 -j REJECT Libera somente o superuser (root) para fazer testes via icmp (ping): # iptables -A OUTPUT -p icmp --icmp-type ping -m owner ! --uid-owner root -j REJECT Esses foram alguns exemplos do que podemos fazer com o iptables, no que se refere aos pacotes de dados de trfego normal (sem utilizao de mascaramento - NAT). Ainda existem inmeras formas de filtrarmos os pacotes, contudo so formas mais pontuais, normalmente no utilizaremos nada a mais que essas para esse tipo de filtro.

NAT - Network Address Translation

SNAT - Source NAT (mascaramento de IP)


O SNAT utilizado para que os hosts internos a rede, isto , endereos IP no vlidos na internet, consigam sair para a Internet como se tivessem um endereo vlido em sua interface de rede. No nosso exemplo vamos imaginar que o host de IP 10.3.1.5 queira acessar o site Viva o Linux 174.123.53.162. Quando o pacote chega no host (firewall) feito o SNAT, isso acontece da seguinte maneira: criada uma tabela chamada "Connection tracking", onde so gravadas as informaes de origem e destino do pacote. Isto possibilita o servidor saber quem enviou e para quem foi enviado o pacote que teve seu endereo IP de origem mascarado. Abaixo temos a representao de uma comunicao entre dois hosts, onde o IP de origem esta sendo mascarado. A seguir mostraremos como feito o SNAT, para o exemplo acima.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350

8/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

# iptables -t nat -A POSTROUTING -s 10.3.0.0/16 -d !10.3.0.0/16 -j SNAT --to-source 200.1.1.1 Onde: -s 10.3.0.0/16 - a origem. -d !10.3.0.0/16 - "no" 10.3.0.0/16 o destino. Essa regra de NAT, na realidade SNAT, significa que sempre que a origem for a rede 10.3.0.0/16 e o destino no for ela mesma, o pacote ira sair para a Internet com o endereo 200.1.1.1, isto quer dizer que o host que estiver sendo acessado "pensar" que quem est enviando os pacotes o IP 200.1.1.1 e no o IP 10.3.x.x. Se estivermos trabalhando com IP dinmico na Internet, por exemplo Velox ou Virtua, poderemos utilizar o comando abaixo: # iptables -t nat -A POSTROUTING -s 10.3.0.0/16 -d !10.3.0.0/16 -j MASQUERADE PS: O MASQUERADE significa que ele ir mascarar todas as solicitaes a rede externa. O IP de sada ser aquele que estiver ligado diretamente ao gateway default do host (firewall). Via modem, normalmente utilizamos a interface ppp0: # iptables -t nat -A POSTROUTING -i eth0 -o ppp0 -j MASQUERADE

DNAT (Destination NAT)


No caso do DNAT o mascaramento feito de forma inversa ao SNAT. Ele propicia acessos que tem como origem a Internet e destino um IP interno da sua rede.
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350 9/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

Imaginemos que um host que tem o IP 80.8.8.8 e quer acessar o servidor web de sua empresa atravs do IP 201.1.1.1. Esse endereo IP na realidade um dos IPs vlidos de seu firewall, s que fazermos um DNAT dizendo que quando um pacote tiver destino o IP 201.1.1.1, ele dever ser encaminhado o IP 10.3.1.2.

O comando abaixo mostra como ficaria na prtica o DNAT acima: # iptables -t nat -A PREROUTING -d 200.1.1.1 -p tcp --dport 80 -j DNAT --to-destination 10.3.1.2

Script bsico de firewall Agora mostraremos como criar um script de firewall bsico. Antes de tudo vamos ativar o roteamento via kernel da seguinte maneira: # echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf # sysctl -p /etc/sysctl.conf Pronto, com os comandos acima acabamos de habilitar o roteamento via kernel o que possibilita o encaminhamento dos pacotes de dados de uma rede para outra. Muitos administradores habilitam o roteamento diretamente atravs do script de firewall, contudo eu prefiro fazer isso apenas uma vez. Script para firewall: # mkdir /etc/firewall # vi /etc/firewall/firewall.sh #!/bin/sh # Mudando as polticas para ACCEPT iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350 10/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

iptables -P FORWARD ACCEPT # Limpando as regras em memria iptables -F -t filter iptables -F -t mangle iptables -F -t nat iptables -X -t filter iptables -X -t mangle iptables -X -t nat iptables -Z -t filter iptables -Z -t mangle iptables -Z -t nat # Libera conexes j estabilizadas. iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # Entre com as regras de PREROUTING (DNAT) . . . # Entre com as regras de POSTROUTING (SNAT) . . . # Entre com as regras de INPUT . . . # Entre com as regras de FORWARD . . . # Entre com as regras de OUTPUT . . . Agora iremos cuidar para que toda vez que o servidor bootar as regras subam de forma automtica. 1. Criar um link simblico do arquivo que acabamos de criar para dentro de /etc/init.d/: # ln -s /etc/init.d/firewall /etc/firewall/firewall.sh 2. Vamos ligar o bit de execuo do script:
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350 11/12

17/3/2014

Desvendando as regras de Firewall Linux Iptables [Artigo]

# chmod +x /etc/firewall/firewall.sh 3. Incluindo o script para inicializao no boot. Quando a mquina for rebootada o script ser carregado: No Debian GNU/Linux: # update-rc.d firewall defaults No SUSE / Red Hat Linux: # chkconfig --add firewall # chkconfig --set firewall on Uma outra forma salvar as regras que esto na memria para um arquivo. Em nosso exemplo utilizaremos o arquivo firewall.txt: # iptables-save > firewall.txt Restaura as configuraes da iptables que se encontram no arquivo firewall.txt: # iptables-restore < firewall.txt Com isso terminamos esse artigo que me deu muito prazer em escrever. Espero que seja til para a comunidade. Podem mandar perguntas se houver alguma dvida.

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

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11350

12/12

Você também pode gostar