Upload
bernardocamacho
View
41
Download
0
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.png5/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.png5/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.png5/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.png5/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.png5/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.png5/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.png5/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/