-
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/