12
17/3/2014 Desv endando as regras de Fi rew al l Li nux Iptabl es [Arti go] http://ww w .v ivaolinux .com.br /ar ti gos/impressora.php?codi go=11350 1/12 Desvendando as regras de Firewall Linux Iptables Autor: Arm ando Martins de Souz a <ar m andomartin s.s ouza at gm ail .com> Data: 12/04/2010 Ipt ables / fir e w all / 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 kernelLinux . 1.  Ifwadm --> kernel 2.0 2.  Ipchai ns --> 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 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. É importante deixar claro que essa chain trata do tráfego normal de dados, isto significa que não há nenhum tipo de mascaramento (NAT) nela. Nat 

Desvendando as Regras de Firewall Linux Iptables [Artigo]

Embed Size (px)

Citation preview

  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    1/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    Desvendando as regras de Firewall Linux Iptables

    Autor: Armando Martins de Souza 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.

    FirewallAntes de iniciarmos o detalhamento das chains, iremos mostrar a relao entre firewall e kernel Linux.

    1. Ifwadm--> kernel 2.02. Ipchains--> Kernel 2.23. 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 queessa chain trata do trfego normal de dados, isto significa que no h nenhum tipo de mascaramento (NAT)nela.

    Nat

    http://www.vivaolinux.com.br/linux/
  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    2/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    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 pacotesde 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 feitosquando a origem no o firewall e o destino tambm no o firewall. Isto , o pacote de dados estaapenas passando pelo firewall.OUTPUT(Pacotes de Sada) --> Chain responsvel pelos pacotes que tem origem no firewall edestino no firewall.

    http://img.vivaolinux.com.br/imagens/artigos/comunidade/image2.pnghttp://img.vivaolinux.com.br/imagens/artigos/comunidade/chains1.png
  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    3/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    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 comandodizendo que pacotes com aquelas caractersticas devem ser bloqueados.DROP--> exatamente o inverso do ACCEPT. Bloqueia tudo, deixando passar somente os pacotesque 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 inmerasvantagens. Podemos citar por exemplo: evitar o trafego na rede desnecessrio, deixar portas abertas semnecessidade, impedindo com isso a possibilidade que uma falha de segurana seja utilizada por um indivduomau intencionado.

    Exemplos de mudana de poltica:

    iptables -t -P -j ACCEPT/DROP

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

    http://img.vivaolinux.com.br/imagens/artigos/comunidade/image4.pnghttp://img.vivaolinux.com.br/imagens/artigos/comunidade/image3.png
  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    4/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    # 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 FORWARDDROP), 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 sutildiferena. No DROP o pacote sumariamente bloqueado no dando a mnima importncia para o pacoteenviado, ele apenas o ignora. J no caso do REJECT enviado um pacote de retorno informando que opacote foi rejeitado.

    S para ficar bem claro segue abaixo uma suposta comunicao entre uma maquina que denominamos comohost 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 norecebe nenhum pacote de retorno. Isso faz com que o host A no consiga ver o host B, tornando com isso ohost B inacessvel.

    No REJECT, a mquina envia uma mensagem de retorno do pacote. Nesse caso existe a comunicao entreos 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://img.vivaolinux.com.br/imagens/artigos/comunidade/image5.png
  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    5/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    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 demascaramento (tabela NAT).

    Sintaxe: iptables -t [tabela] [condies] -j

    Tabela: Nesse caso estamos tratando da tabela filter, como j falamos anteriormente, esta tabela a padro eno 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 inicioda chain para o final, essa anlise se segue at encontrar uma regra se enquadre ao pacote. Ao localizar essaregra ele entra e processado, deixando as regras subsequentes sem serem analisadas. Por isso importantetratar 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 dizerque s passa um pacote se ele estiver explicito em uma regra. A segunda regra libera acesso a porta 22 paraa 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 farmatch (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

  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    6/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    -m = match

    Ao: onde informamos o que devemos fazer com o pacote, ignorar (DROP), aceitar (ACCEPT) ourejeitar (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 outroshosts:

    # 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 IP10.3.4.11 como exceo a regra. Isso quer dizer que o nico host que pode acessar o "firewall" o10.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 parafora 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://img.vivaolinux.com.br/imagens/artigos/comunidade/image6.png
  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    7/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    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: darum ping IP que voc precisa saber o MAC e depois o dar comando o "arp".

    Match (condio) OUTPUT:

    http://img.vivaolinux.com.br/imagens/artigos/comunidade/image8.pnghttp://img.vivaolinux.com.br/imagens/artigos/comunidade/image7.png
  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    8/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    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 dadosde trfego normal (sem utilizao de mascaramento - NAT). Ainda existem inmeras formas de filtrarmos ospacotes, contudo so formas mais pontuais, normalmente no utilizaremos nada a mais que essas para essetipo 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, consigamsair 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 seguintemaneira:

    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 seuendereo 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/
  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    9/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    # 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 ohost que estiver sendo acessado "pensar" que quem est enviando os pacotes o IP 200.1.1.1 e no o IP10.3.x.x.

    Se estivermos trabalhando com IP dinmico na Internet, por exemplo Velox ou Virtua, poderemos utilizar ocomando 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 sadaser 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 comoorigem a Internet e destino um IP interno da sua rede.

    http://img.vivaolinux.com.br/imagens/artigos/comunidade/image9.png
  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    10/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    Imaginemos que um host que tem o IP 80.8.8.8 e quer acessar o servidor web de sua empresa atravs do IP201.1.1.1. Esse endereo IP na realidade um dos IPs vlidos de seu firewall, s que fazermos um DNATdizendo 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 oencaminhamento dos pacotes de dados de uma rede para outra. Muitos administradores habilitam oroteamento 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 ACCEPTiptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPT

    http://img.vivaolinux.com.br/imagens/artigos/comunidade/image10.png
  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    11/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    iptables -P FORWARD ACCEPT

    # Limpando as regras em memriaiptables -F -t filteriptables -F -t mangleiptables -F -t natiptables -X -t filter

    iptables -X -t mangleiptables -X -t natiptables -Z -t filteriptables -Z -t mangleiptables -Z -t nat

    # Libera conexes j estabilizadas.iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -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:

  • 5/28/2018 Desvendando as Regras de Firewall Linux Iptables [Artigo]

    12/12

    17/3/2014 Desvendando as regras de Firewall Linux Iptables [Artigo]

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

    # 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 oarquivo 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 acomunidade. 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/artigo/Desvendando-as-regras-de-Firewall-Linux-Iptableshttp://www.vivaolinux.com.br/linux/http://www.vivaolinux.com.br/linux/