You are on page 1of 12

Filtro de Pacotes Com Linux

Aula sobre segurana da informao.

Filtro de Pacotes Um filtro de pacotes um software que analisa o cabealho (header) dos pacotes enquanto eles passam, e decide o destino do pacote como um todo. Como exemplo, ele pode decidir entre: descartar (DROP) o pacote (descartando-o como se nunca o tivesse recebido), aceitar (ACCEPT) o pacote (deixar o pacote seguir seu caminho), ou algo mais complicado que isso. No Linux, filtragem de pacotes est implementada diretamente no kernel (como um mdulo ou diretamente compilado), o princpio geral analisar o cabealho dos pacotes e decidir o que ser feito com o pacote.

O que so regras As regras so como comandos passados ao iptables para que ele realize uma determinada ao (como bloquear ou deixar passar um pacote) de acordo com o endereo/porta de origem/destino, interface de origem/destino, etc. As regras so armazenadas dentro das/dos chains e processadas na ordem que so inseridas. O que so chains As Chains so locais onde as regras definidas pelo usurio so armazenadas para operao do firewall. Existem dois tipos de chains: os embutidos (como os chains INPUT, OUTPUT e FORWARD) e os criados pelo usurio.

Fundamento de Filtrar Pacotes Controle e segurana Quando uma mquina Linux utilizada para conectar sua rede interna em outra rede (a Internet, por exemplo) h a oportunidade de permitir certo tipo de trfego, e rejeitar outro. Por exemplo, o cabealho do pacote contm o endereo de destino do pacote, logo voc pode evitar que os pacotes saiam em direo a um endereo. Restringir o trfego indesejado. Por exemplo, voc pode querer rejeitar qualquer conexo inicializada do mundo externo para a sua rede, deixando somente que novas conexes sejam inicializadas somente a partir da rede interna...

Iptables A funo da ferramenta iptables, inserir e apagar regras da tabela de filtragem de pacotes do kernel. Sua configurao atual de firewall est guardada no kernel, logo ser perdida na prxima vez que a

mquina for reiniciada. Assim, coloque os comandos necessrios para configurar suas regras em um script de inicializao. Como os Pacotes Passam Pelos Filtros O kernel comea com trs listas de regras na tabela filter, tais listas so denominadas firewall chains ou apenas chains. As trs chains chamam-se INPUT, OUTPUT e FORWARD.

Quando o pacote atinge um retngulo no diagrama, a chain examinada a fim de decidir o destino do pacote. Se a chain diz para rejeitar (DROP) o pacote, ele descartado, mas se a chain diz para aceitar o pacote (ACCEPT), ele continua a viajar no diagrama.

Sintaxe As regras de fitragem, geralmente, so compostas assim: #iptables [-t tabela] [opo] [chain] [dados] -j [ao]

Exemplo: #iptables -A FORWARD -d 192.168.1.1 -j DROP ou #iptables -t filter -A FORWARD -d 192.168.1.1 -j DROP A linha acima determina que todos os pacotes destinados mquina 192.168.1.1 devem ser descartados. No caso: tabela: -t filter ( a default portanto opcional) opo: -A chain: FORWARD dados: -d 192.168.1.1 ao: DROP Tabela Tabelas so os locais usados para armazenar as chains e conjunto de regras com uma determinada

caracterstica em comum. As tabelas podem ser referenciadas com a opo -t tabela e existem 3 tabelas disponveis no iptables:

filter - Esta a tabela padro, contm 3 chains padres: o INPUT - Consultado para dados que chegam a mquina o OUTPUT - Consultado para dados que saem da mquina o FORWARD - Consultado para dados que so redirecionados para outra interface de rede ou outra mquina.

As chains INPUT e OUTPUT somente so atravessados por conexes indo/se originando de localhost.

nat - Usada para dados que gera outra conexo (masquerading, source nat, destination nat, port forwarding, proxy transparente so alguns exemplos). Possui 3 chains padres: o PREROUTING - Consultado quando os pacotes precisam ser modificados logo que chegam. o chain ideal para realizao de DNAT. o OUTPUT - Consultado quando os pacotes gerados localmente precisam ser modificados antes de serem roteados. Este chain somente consultado para conexes que se originam de IPs de interfaces locais. o POSTROUTING - Consultado quando os pacotes precisam ser modificados aps o tratamento de roteamento. o chain ideal para realizao de SNAT e IP Masquerading.

Opes

-A chain -D chain [n_regra] -I chain [n_regra] -L [chain] -F [chain] -N chain -X [chain] -P chain poltica

Anexa uma ou mais regras no fim de uma chain especificada Deleta uma ou mais regras da chain especificada, pode ser especificada o nmero da regra que ser excluda Insere uma ou mais regras na posio especfica de uma chain especfica, se a posio no for definida, o padro 1 Lista todas regras em uma chain definida, se esta no for definida o comando listar todas as regras do firewall Remove todas as regras da chain definida, se esta no for definida o comando remover todas as regras do firewall Cria uma nova chain especfica Apaga a chain definida, se esta no for definida apaga todas chains Define uma poltica padro para uma chain especfica

CHAIN Como visto anteriormente, uma chain uma lista de regras. Se a regra no associa-se com o pacote, ento a prxima regra na chain consultada. Se no h mais regras a consultar, o kernel analisa a

poltica da chain para decidir o que fazer. Em um sistema preocupado com segurana, a poltica diz ao kernel para rejeitar (DROP) o pacote. 1. Quando o pacote chega (pela placa Ethernet, por exemplo) o kernel analisa o destino do pacote. 2. Se ele destinado a prpria mquina, o pacote desce no diagrama, indo para a chain INPUT. Se ele passar pela chain INPUT, ento a mquina recebe o pacote. 3. Se h suporte a forwarding e o pacote destinado a outra interface de rede, o pacote vai para a chain FORWARD. Se ele for aceito (ACCEPT), ele ser enviado. 4. Finalmente, um programa rodando na mquina firewall pode enviar pacotes. Esses pacotes passam pela chain OUTPUT imediatamente: se ela aceitar o pacote, ele continua seu caminho, caso contrrios ele descartado. DADOS Os parmetros setam definies para as regras aplicarem nos pacotes trafegados pelo firewall. O [!] indica negao, ou seja, inverte a regra. -p [!] protocolo -s [!] end_IP[/mask] Define o protocolo que a regra ir tratar Define o endereo de origem do pacote que a regra ir tratar

-d [!] end_IP[/mask] Define o endereo de destino do pacote que a regra ir tratar -j [!] alvo -i [!] nome -o [!] nome Define um alvo para o pacote Define o nome da interface por onde o pacote chegou Define o nome da interface por onde o pacote sair

AES ACCEPT DROP REJECT REDIRECT SNAT DNAT O pacote aceito pela chain e segue em frente. O pacote descartado pela chain, no h envio de mensagem ICMP. Semelhante ao DROP, porm retorna uma mensagem ICMP. Este alvo ser vlido somente para as chains INPUT, OUTPUT e FORWARD. Altera o endereo IP de destino do pacote e ser usado unicamente na tabela nat. Este alvo ser usado unicamente nas chains PREROUTING e OUTPUT. Source NAT (traduo de endereos de rede de origem). (POSTROUTING) Destination NAT (traduo de endereos de rede de destino). (PREROUTING)

MASQUERADE Faz mascaramento da sada dos pacotes. um exemplo de SNAT

Manipulando chains Adicionando regras (A) Como exemplo, vamos criar uma regra que bloqueia o acesso a prpria mquina (127.0.0.1 -

loopback). Primeiro daremos um ping para verificar seu funcionamento: # ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.6 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.5 ms --- 127.0.0.1 ping statistics --2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.5/0.5/0.6 ms A mquina responde, agora vamos incluir uma regra no chain INPUT (-A INPUT) que bloqueie (-j DROP) qualquer acesso indo ao endereo 127.0.0.1 (-d 127.0.0.1):

# iptables -A INPUT -d 127.0.0.1 -j DROP

Um novo ping: # ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes --- 127.0.0.1 ping statistics --2 packets transmitted, 0 packets received, 100% packet loss Desta vez a mquina 127.0.0.1 no respondeu, pois todos os pacotes com o destino 127.0.0.1 (-d 127.0.0.1) so rejeitados (-j DROP). A opo -A usada para adicionar novas regras no final do chain. Alm de -j DROP que serve para rejeitar os pacotes, podemos tambm usar -j ACCEPT para aceitar pacotes. A opo -j chamada de alvo da regra ou somente alvo, pois define o destino do pacote que atravessa a regra. Listando regras (- L) A seguinte sintaxe usada para listar as regras criadas:

iptables [-t tabela] -L [chain] [opes]

Para listar a regra criada anteriormente usa-se o comando: # iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- anywhere localhost O comando iptables -L INPUT -n tem o mesmo efeito, a diferena que so mostrados nmeros ao invs de nomes:

# iptables -L INPUT -n Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 0.0.0.0/0 127.0.0.1

Apagando regras (-D) Para apagar uma chain, existem duas alternativas:

Quando sabemos qual o nmero da regra na chain (listado com a opo -L) podemos referenciar o nmero diretamente. Por exemplo, para apagar a regra 1:

iptables -t filter -D INPUT 1

Esta opo no boa quando temos um firewall complexo com um grande nmero de regras por chains, neste caso a segunda opo a mais apropriada.

Usamos a mesma sintaxe para criar a regra na chain, mas trocamos -A por -D:

iptables -t filter -D INPUT -d 127.0.0.1 -j DROP

Ento a regra correspondentes na chain INPUT ser automaticamente apagada (confira listando a chain com a opo "-L"). Caso a chain possua vrias regras semelhantes, somente a primeira ser apagada.

OBS: No possvel apagar as chains padres do iptables (INPUT, OUTPUT...). Inserindo regras (-I) Precisa-se que o trfego vindo de 192.168.1.9 no seja rejeitado pelo firewall. No podemos adicionar uma nova regra (-A) pois esta seria includa no final da chain e o trfego seria rejeitado pela primeira regra (nunca atingindo a segunda). A soluo inserir a nova regra antes da regra que bloqueia todo o trfego ao endereo 127.0.0.1 na posio 1:

iptables -t filter -I INPUT 1 -s 192.168.1.9 -d 127.0.0.1 -j ACCEPT

Se houver impasse entre regras, sempre valer a primeira. Assim, entre as regras: #iptables -A FORWARD -p icmp -j DROP #iptables -A FORWARD -p icmp -j ACCEPT Valer: #iptables -A FORWARD -p icmp -j DROP J entre as regras: #iptables -A FORWARD -p icmp -j ACCEPT #iptables -A FORWARD -p icmp -j DROP Valer: #iptables -A FORWARD -p icmp -j ACCEPT

Exemplos Comentados Tabela Filter


--------------------------------------#iptables -L Lista todas as regras existentes. --------------------------------------#iptables -F Apaga todas as regras sem alterar a poltica. --------------------------------------#iptables -P FORWARD DROP Estabelece uma poltica de proibio inicial de passagem de pacotes entre sub-redes. --------------------------------------#iptables -A FORWARD -j DROP Todos os pacotes oriundos de qualquer sub-rede e destinados a qualquer sub-rede devero ser descartados. --------------------------------------#iptables -A FORWARD -j ACCEPT Todos os pacotes oriundos de qualquer sub-rede e destinados a qualquer sub-rede devero ser aceitos. --------------------------------------#iptables -A FORWARD -s 10.0.0.0/8 -d www.chat.com.br -j DROP Os pacotes oriundos da sub-rede 10.0.0.0 (mscara 255.0.0.0) e

destinados aos hosts cujos endereos IP respondem pelo nome www.chat.com.br devero ser descartados. Note que se a mquina possuir domnios virtuais, todos esses sero bloqueados. --------------------------------------#iptables -A FORWARD -s 10.0.0.0/8 -d www.chat.com.br -j REJECT Os pacotes oriundos da sub-rede 10.0.0.0 (mscara 255.0.0.0) e destinados aos hosts cujos endereos IP respondem pelo nome www.chat.com.br devero ser descartados. Dever ser enviado um ICMP avisando origem. --------------------------------------#iptables -A FORWARD -d www.chat.com.br -j DROP Os pacotes oriundos de qualquer lugar e destinados aos hosts cujos endereos IP respondem pelo nome www.chat.com.br devero ser descartados. --------------------------------------#iptables -A FORWARD -d 10.0.0.0/8 -s www.chat.com.br -j DROP Os pacotes destinados sub-rede 10.0.0.0 (mscara 255.0.0.0) e oriundos aos hosts cujos endereos IP respondem pelo nome www.chat.com.br devero ser descartados. --------------------------------------#iptables -A FORWARD -s www.chat.com.br -j DROP Os pacotes oriundos aos hosts cujos endereos IP respondem pelo nome www.chat.com.br e destinados a qualquer lugar devero ser descartados. --------------------------------------#iptables -A FORWARD -s 200.221.20.0/24 -j DROP Os pacotes oriundos da sub-rede 200.221.20.0 (mscara 255.255.255.0) e destinados a qualquer lugar devero ser descartados. --------------------------------------#iptables -A FORWARD -s 10.0.0.5 -p icmp -j DROP Os pacotes icmp oriundos do host 10.0.0.5 e destinados a qualquer lugar devero ser descartados. --------------------------------------#iptables -A FORWARD -i eth0 -j ACCEPT Os pacotes que entrarem pela interface eth0 sero aceitos. --------------------------------------#iptables -A FORWARD -i ! eth0 -j ACCEPT Os pacotes que entrarem por qualquer interface, exceto a eth0, sero aceitos. --------------------------------------#iptables -A FORWARD -s 10.0.0.5 -p tcp --sport 80 -j LOG

O trfego de pacotes TCP oriundos da porta 80 do host 10.0.0.5 e destinados a qualquer lugar dever ser gravado em log. No caso, /var/log/messages. --------------------------------------#iptables -A FORWARD -p tcp --dport 25 -j ACCEPT Os pacotes TCP destinados porta 25 de qualquer host devero ser aceitos.

Otros Exemplos
Por padro as regras iptables -A INPUT -s iptables -A INPUT -s iptables -A INPUT -s so ACCEPT, ou seja: 10.0.0.1 -j DROP 10.0.0.2 -p tcp --dport 80 -j ACCEPT 172.20.0.0/16 -j ACCEPT

Se um determinado pacote no for restrito em nenhuma das regras da CHAIN ele ser aceito. Entretanto, podemos mudar essa filosofia: iptables -P INPUT DROP iptables -A INPUT -s 10.0.0.1 -j DROP

iptables -A INPUT -s 10.0.0.2 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -s 172.20.0.0/16 -j ACCEPT

Tabela Nat
--------------------------------------#iptables -t nat -L Mostra as regras de NAT ativas. --------------------------------------#iptables -t nat -F Apaga todas as regras de NAT existentes. --------------------------------------#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE Todos os pacotes mascarados. Isso atrs da ppp0. que esse tipo de que sarem pela interface ppp0 (modem) sero d um nvel de segurana elevado rede que est uma boa regra para navegao na Internet. Note mascaramento no usa SNAT.

---------------------------------------

#iptables -t nat -A PREROUTING -p tcp -d 10.0.0.2 --dport 80 -j DNAT --to 172.20.0.1 Redireciona todos os pacotes destinados porta 80 da mquina 10.0.0.2 para a mquina 172.20.0.1. Esse tipo de regra exige a especificao do protocolo. Como no foi especificada uma porta de destino, a porta 80 ser mantida como destino. ---------------------------------------

Referncias

http://www.eriberto.pro.br/ http://www.netfilter.org/ http://www.inf.unisinos.br/~paschoal/arqs_gerencia_redes/trabs/grad/Implementando %20Firewall.doc

You might also like