Desvendando iptables

12
Desvendando as regras de Firewall Linux Iptables Autor: Armando Martins de Souza <armandomartins.souza at gmail.com> Data: 12/04/2010 Iptables / firewall / tabelas básicas Iptables O funcionamento do firewall é basicamente o seguinte: 1. Os pacotes que chegam ao firewall são filtrados através 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 "básicos" do iptables. Firewall Antes de iniciarmos o detalhamento das chains, iremos mostrar a relação entre firewall e kernel Linux. Ifwadm --> kernel 2.0 1. Ipchains --> Kernel 2.2 2. Iptables --> A partir do kernel 2.4 3. É importante deixar claro que neste tutorial trabalharemos apenas com o firewall iptables. As tabelas básicas Filter É composta de 3 chains: INPUT, OUTPUT e FORWARD. É a tabela default, isto significa que quando não referenciamos nenhuma chain no comando iptables, a chain filter é chamada. É Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig... 1 de 12 19-06-2012 17:42

Transcript of Desvendando iptables

Page 1: Desvendando iptables

Desvendando as regras de Firewall Linux Iptables

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

Iptables / firewall / tabelas básicas

IptablesO funcionamento do firewall é basicamente o seguinte:

1. Os pacotes que chegam ao firewall são filtrados através das regras que foram definidas.

2. Roteamento interno (dentro do kernel). Com base no destino do pacote, ele é encaminhadopara o "filtro" (chain) apropriado ao roteamento. Explicaremos mais adiante cada um dosfiltros "básicos" do iptables.

FirewallAntes de iniciarmos o detalhamento das chains, iremos mostrar a relação entre firewall ekernel Linux.

Ifwadm --> kernel 2.01.Ipchains --> Kernel 2.22.Iptables --> A partir do kernel 2.43.

É importante deixar claro que neste tutorial trabalharemos apenas com o firewall iptables.

As tabelas básicasFilter

É composta de 3 chains: INPUT, OUTPUT e FORWARD. É a tabela default, isto significa quequando não referenciamos nenhuma chain no comando iptables, a chain filter é chamada. É

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

1 de 12 19-06-2012 17:42

Page 2: Desvendando iptables

importante deixar claro que essa chain trata do tráfego normal de dados, isto significa quenão há nenhum tipo de mascaramento (NAT) nela.

Nat

É quando temos que mascarar algum endereço IP ou rede. O Nat acontece tanto da redeexterna (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. Não trataremos desse assunto neste tutorial.

A seguir ilustramos as tabelas com suas respectivas chains.

Temos abaixo uma representação visual do posicionamento das chains em relação apassagem 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 são encaminhados para esta chain quando aorigem não é o firewall, mas o destino é o firewall.FORWARD (Pacotes de Passagem) --> No caso da FORWARD os encaminhamentos sãofeitos quando a origem não é o firewall e o destino também não é o firewall. Isto é, opacote de dados esta apenas passando pelo firewall.OUTPUT (Pacotes de Saída) --> Chain responsável pelos pacotes que tem origem nofirewall e destino não firewall.

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

2 de 12 19-06-2012 17:42

Page 3: Desvendando iptables

A tabela filter só pode tratar do que passa ou não passa.

Políticas de acesso / DROP e REJECT

Políticas de acessoNo que se refere a políticas de acesso temos ACCEPT e DROP.

ACCEPT --> passa tudo, para que o pacote seja bloqueado temos que ter inserido umcomando dizendo que pacotes com aquelas características devem ser bloqueados.DROP --> É exatamente o inverso do ACCEPT. Bloqueia tudo, deixando passar somenteos pacotes que batem exatamente com as características passadas pelo comando deliberação.

Normalmente usamos o critério de bloquear tudo, liberando apenas o que tem que passar,isso tem inúmeras vantagens. Podemos citar por exemplo: evitar o trafego na rededesnecessário, deixar portas abertas sem necessidade, impedindo com isso a possibilidadeque uma falha de segurança seja utilizada por um indivíduo mau intencionado.

Exemplos de mudança de política:

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

3 de 12 19-06-2012 17:42

Page 4: Desvendando iptables

iptables -t <tabela> -P <chain> -j ACCEPT/DROP

Vamos mudar todas as chains da tabela "filter" para DROP:

# iptables -t filter -P INPUT DROP# iptables -P FORWARD DROP# iptables -t filter -P OUTPUT DROP

Reparem que em um dos exemplos não especifiquei qual tabela estou usando (iptables -PFORWARD DROP), isso porque a tabela filter não precisa ser referenciada, pois ela é a tabelapadrão do iptables.

Para colocarmos as políticas 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 REJECTMuitas pessoas acham que o "DROP" tem a mesma funcionalidade do "REJECT", contudo háuma sutil diferença. No DROP o pacote é sumariamente bloqueado não dando a mínimaimportância para o pacote enviado, ele apenas o ignora. Já no caso do REJECT é enviado umpacote de retorno informando que o pacote foi rejeitado.

Só para ficar bem claro segue abaixo uma suposta comunicação entre uma maquina quedenominamos 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 política de iptables dele esta em DROP, ohost A não recebe nenhum pacote de retorno. Isso faz com que o host A não consiga ver ohost B, tornando com isso o host B inacessível.

No REJECT, a máquina envia uma mensagem de retorno do pacote. Nesse caso existe acomunicação entre os hosts e o host A saberá que o host B recebeu seu pacote e o rejeitou.

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

4 de 12 19-06-2012 17:42

Page 5: Desvendando iptables

Exemplos:

Para deixar o host B inacessível para o mundo, basta mudar a política da tabela de ACCEPTpara DROP.

# iptables -P INPUT DROP

Sintaxe iptables e suas opções

A seguir mostraremos a sintaxe iptables e suas opções, tratando somente pacotes de dadosda tabela filter, criando regras para liberar, bloquear ou rejeitar os pacotes de dados detrafego normal, sem a utilização de mascaramento (tabela NAT).

Sintaxe: iptables -t [tabela] <ordem> <chain> [condições] -j <ação>

Tabela: Nesse caso estamos tratando da tabela filter, como já falamos anteriormente, estatabela é a padrão e não é necessário explicitá-la.

Ordem:

a. -I --> Insere a regra no início 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 daregra é feita do inicio da chain para o final, essa análise se segue até encontrar uma regra seenquadre ao pacote. Ao localizar essa regra ele entra e é processado, deixando as regrassubsequentes sem serem analisadas. Por isso é importante tratar as regras da mais restritivapara a menos restritiva.

Abaixo colocamos 3 regras, a primeira regra coloca a política da chain INPUT como DROP,isso quer dizer que só passa um pacote se ele estiver explicito em uma regra. A segundaregra libera acesso a porta 22 para a rede 10.0.0.0/24 e a terceira libera acesso do host10.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 asegunda regra fará match (regra mais genérica) caso o host de IP 10.0.0.49 tente acessar ohost na porta 22.

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

5 de 12 19-06-2012 17:42

Page 6: Desvendando iptables

Chain:

Iremos dizer a que chain a regra se refere (INPUT, OUTPUT, FORWARD).

Condição (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 saída-m = match

Ação: É 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 paraos outros hosts:

# iptables -A INPUT -p tcp --dport 22 -s ! 10.3.4.11 -j REJECT

PS: O símbolo de "!" significa uma exceção a regra. Em nosso exemplo ele esta tratando ohost de IP 10.3.4.11 como exceção a regra. Isso quer dizer que o único host que pode acessaro "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

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

6 de 12 19-06-2012 17:42

Page 7: Desvendando iptables

outro host:

# iptables -A INPUT -p icmp --icmp-type ping -s ! 10.3.1.10 -j DROP

Exemplo de liberação do smtp (tcp 25) e-mail, impedir que um servidor de e-mail internoenvie e-mail para fora da empresa. Normalmente isso evita que spammers, que por algummotivo tenham conseguido "acesso" a um de seus servidores, instale um servidor de e-mail eo 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 através da interface eth1 edestino de saída a eth0 porta 25 deverão ser rejeitados.

No caso de duas redes:

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 através do endereço físico 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 dúvida para saber o endereço MAC do host basta seguir o seguinteprocedimento: dar um ping IP que você precisa saber o MAC e depois o dar comando o "arp".

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

7 de 12 19-06-2012 17:42

Page 8: Desvendando iptables

Match (condição) OUTPUT:

Não 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 aospacotes de dados de tráfego normal (sem utilização de mascaramento - NAT). Ainda existeminúmeras formas de filtrarmos os pacotes, contudo são formas mais pontuais, normalmentenão 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 é, endereços IP não válidos nainternet, consigam sair para a Internet como se tivessem um endereço válido em suainterface de rede.

No nosso exemplo vamos imaginar que o host de IP 10.3.1.5 queira acessar o site Viva oLinux - 174.123.53.162. Quando o pacote chega no host (firewall) é feito o SNAT, isso aconteceda seguinte maneira:

É criada uma tabela chamada "Connection tracking", onde são gravadas as informações deorigem e destino do pacote. Isto possibilita o servidor saber quem enviou e para quem foienviado o pacote que teve seu endereço IP de origem mascarado. Abaixo temos a

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

8 de 12 19-06-2012 17:42

Page 9: Desvendando iptables

representação de uma comunicação entre dois hosts, onde o IP de origem esta sendomascarado.

A seguir mostraremos como é feito o SNAT, para o exemplo acima.

# iptables -t nat -A POSTROUTING -s 10.3.0.0/16 -d !10.3.0.0/16 -j SNAT --to-source200.1.1.1

Onde:

-s 10.3.0.0/16 - é a origem.-d !10.3.0.0/16 - "não" 10.3.0.0/16 é o destino.

Essa regra de NAT, na realidade SNAT, significa que sempre que a origem for a rede10.3.0.0/16 e o destino não for ela mesma, o pacote ira sair para a Internet com o endereço200.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 não o IP 10.3.x.x.

Se estivermos trabalhando com IP dinâmico 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 solicitações a rede externa. O IPde saída 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

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

9 de 12 19-06-2012 17:42

Page 10: Desvendando iptables

DNAT (Destination NAT)No caso do DNAT o mascaramento é feito de forma inversa ao SNAT. Ele propicia acessos quetem como origem a Internet e destino um IP interno da sua rede.

Imaginemos que um host que tem o IP 80.8.8.8 e quer acessar o servidor web de suaempresa através do IP 201.1.1.1. Esse endereço IP é na realidade um dos IPs válidos de seufirewall, só que fazermos um DNAT dizendo que quando um pacote tiver destino o IP201.1.1.1, ele deverá ser encaminhado o IP 10.3.1.2.

O comando abaixo mostra como ficaria na prática o DNAT acima:

# iptables -t nat -A PREROUTING -d 200.1.1.1 -p tcp --dport 80 -j DNAT --to-destination10.3.1.2

Script básico de firewall

Agora mostraremos como criar um script de firewall básico.

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 quepossibilita o encaminhamento dos pacotes de dados de uma rede para outra. Muitosadministradores habilitam o roteamento diretamente através do script de firewall, contudoeu prefiro fazer isso apenas uma vez.

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

10 de 12 19-06-2012 17:42

Page 11: Desvendando iptables

Script para firewall:

# mkdir /etc/firewall# vi /etc/firewall/firewall.sh

#!/bin/sh

# Mudando as políticas para ACCEPTiptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPT

# Limpando as regras em memóriaiptables -F -t filteriptables -F -t mangleiptables -F -t natiptables -X -t filteriptables -X -t mangleiptables -X -t natiptables -Z -t filteriptables -Z -t mangleiptables -Z -t nat

# Libera conexões já estabilizadas.iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -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

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

11 de 12 19-06-2012 17:42

Page 12: Desvendando iptables

.

.

.

Agora iremos cuidar para que toda vez que o servidor bootar as regras subam de formaautomática.

1. Criar um link simbólico 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 execução do script:

# chmod +x /etc/firewall/firewall.sh

3. Incluindo o script para inicialização no boot. Quando a máquina for rebootada o scriptserá 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 estão na memória para um arquivo. Em nossoexemplo utilizaremos o arquivo firewall.txt:

# iptables-save > firewall.txt

Restaura as configurações 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 útilpara a comunidade. Podem mandar perguntas se houver alguma dúvida.

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

Voltar para o site

Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...

12 de 12 19-06-2012 17:42