Você está na página 1de 8

Universidade do Vale do Rio dos Sinos UNISINOS Centro de Cincias Exatas e Tecnolgicas

Implementando Firewall no Linux


Administrao e Gerncia de Redes

Daniel Savi Rafael Bittencourt Rafael Canova

Prof. Luciano Gaspary So Leopoldo, 28 de novembro de 2005. Introduo


Firewall o mecanismo de segurana interposto entre a rede interna e a rede externa com a finalidade de liberar ou bloquear o acesso de computadores remotos aos servios que so oferecidos em um permetro ou dentro da rede corporativa. Este mecanismo de segurana pode ser baseado em hardware, software ou uma mistura dos dois.. Este trabalho baseado no estudo de regras do iptables, um firewall introduzido no kernel 2.4 e que funciona em nvel de pacotes. Um firewall no funciona de forma automtica (instalar e esperar que ele faa as coisas por voc), necessrio pelo menos conhecimentos bsicos de rede tcp/ip, roteamento e portas para criar as regras que faro a segurana de seu sistema. A segurana do sistema depende do controle das regras que sero criadas por voc, as falhas humanas so garantia de mais de 95% de sucesso nas invases.

Caractersticas do iptables
Especificao de portas/endereo de origem/destino Suporte a protocolos TCP/UDP/ICMP (incluindo tipos de mensagens icmp) Suporte a interfaces de origem/destino de pacotes Manipulao de servios de proxy na rede Tratamento de trfego dividido em chains (para melhor controle do trfego que entra/sai da mquina e trfego redirecionado. Permite um nmero ilimitado de regras por chain Rpido, estvel e seguro Possui mecanismos internos para rejeitar automaticamente pacotes duvidosos ou mal formados. Suporte a mdulos externos para expanso das funcionalidades padres oferecidas pelo cdigo de firewall Suporte completo a roteamento de pacotes, tratadas em uma rea diferente de trfegos padres. Suporte a especificao de tipo de servio para priorizar o trfego de determinados tipos de pacotes. Permite especificar excees para as regras ou parte das regras Suporte a deteco de fragmentos Permite enviar alertas personalizados ao syslog sobre o trfego aceito/bloqueado. Redirecionamento de portas

Masquerading Suporte a SNAT (modificao do endereo de origem das mquinas para um nico IP ou faixa de IP's). Suporte a DNAT (modificao do endereo de destino das mquinas para um nico IP ou fixa de IP's) Contagem de pacotes que atravessaram uma interface/regra Limitao de passagem de pacotes/conferncia de regra (muito til para criar protees contra, syn flood, ping flood, DoS, etc).

Tipos de firewalls
Existem basicamente dois tipos de firewalls: Nvel de aplicao - analisa o contedo do pacote para tomar suas decises de filtragem. Firewalls deste tipo so mais intrusivos (pois analisam o contedo de tudo que passa por ele) e permitem um controle relacionado com o contedo do trfego. * Existe um projeto chamado layer7, que torna o iptables um firewall baseado em nvel de aplicao. Link: http://l7-filter.sourceforge.net/ Nvel de pacotes - toma as decises baseadas nos parmetros do pacote, como porta/endereo de origem/destino, estado da conexo, e outros parmetros do pacote. O firewall ento pode negar o pacote (DROP/REJECT) ou deixar o pacote passar (ACCEPT). O iptables um exemplo de firewall que se encaixa nesta categoria.

O que proteger
Antes de iniciar a construo do firewall bom pensar nos seguintes pontos: Qual servio preciso proteger? Servios que devem ter acesso garantido a usurios externos e quais sero bloqueados a todas/determinadas mquinas. recomendvel bloquear o acesso a todas portas menores que 1024 por executarem servios que rodam com privilgio de usurio root, e autorizar somente o acesso as portas que realmente deseja (configurao restritiva nesta faixa de portas). Que tipo de conexo eu posso deixar passar e qual bloquear? Servios com autenticao em texto puro e inseguros como rlogin, telnet, ftp, NFS, DNS, LDAP, SMTP RCP, X-Window so servios que devem ser ter acesso garantido somente para mquinas/redes que voc confia. Estes servios podem no ser s usados para tentativa de acesso ao seu sistema, mas tambm como forma de atacar outras pessoas aproveitando-se de problemas de configurao.

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 dos chains (ver prximo item) e processadas na ordem que so inseridas. As regras so armazenadas no kernel, o que significa que quando o computador for reiniciado tudo ser perdido. Por este motivo elas devero ser gravadas em um script de inicializao para serem carregadas a cada boot. Veja alguns exemplos no tpico: Exemplos de regas

O que so chains
Os 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. Os nomes dos chains embutidos devem ser especificados sempre em maisculas (note que os nomes dos chains so case-sensitive, ou seja, o chain input completamente diferente de INPUT).

Os trs "crculos" representam as cadeias (chains) mencionadas acima. Quando o pacote atinge um crculo no diagrama, a cadeia de regras examinada a fim de decidir o destino do pacote, ou alvo do pacote (target). Se o destino for para descartar (DROP) o pacote, ele descartado sem envio de mensagem ICMP, se o destino for para rejeitar (REJECT) o pacote, ele rejeitado e uma mensagem ICMP enviada, mas, se o destino for para aceitar (ACCEPT) o pacote, ele ento continua a viajar no diagrama. Uma cadeia (chain) uma lista de regras. O cabealho do pacote comparado com cada regra at que encontre uma que case com seu cabealho, ento o alvo da regra aplicado no destino do pacote (DROP, REJECT ou ACCEPT). Caso no haja nenhuma regra que case com o cabealho do pacote, ento submetido a poltica padro do kernel, que por questes de segurana deve ser sempre descartar (DROP).
1) 2) Quando o pacote chega (pela placa Ethernet, por exemplo) o kernel analisa o destino do pacote: isso chamado de roteamento (routing). Se o destino do pacote a prpria mquina, o pacote desce no diagrama, indo para a chain INPUT. Onde ento filtrado pelas regras da cadeia INPUT. Caso o pacote consiga passar pela cadeia INPUT, ento a mquina recebe o pacote. Se o kernel no tiver suporte a encaminhamento (forwarding), qualquer pacote com destino diferente da prpria mquina ser descartado. Caso haja suporte a encaminhamento e o pacote destinado a outra interface de rede (se possuir outra), o pacote vai para cadeia FORWARD (encaminhamento). Se o pacote for aceito por alguma regra da cadeia, ele continua seu caminho, caso contrrio descartado.

3)

4)

Qualquer pacote originrio da prpria mquina passa pela cadeia OUTPUT (sada). O cabealho do pacote examinado e comparado com as regras da cadeia OUTPUT. Sendo aceito o pacote sai da interface e segue seu destino. Caso contrrio descartado. Tabelas so os locais usados para armazenar os 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: INPUT - Consultado para dados que chegam a mquina OUTPUT - Consultado para dados que saem da mquina FORWARD - Consultado para dados que so redirecionados para outra interface de rede ou outra mquina. Os chains INPUT e OUTPUT somente so atravessados por conexes indo/se originando de localhost. OBS: Para conexes locais, somente os chains INPUT e OUTPUT so consultados na tabela filter. nat - Usada para dados que gera outra conexo (masquerading, source nat, destination nat, port forwarding, proxy transparente so alguns exemplos). Possui 3 chains padres:

PREROUTING - Consultado quando os pacotes precisam ser modificados logo que chegam. o chain ideal para realizao de DNAT. 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. POSTROUTING - Consultado quando os pacotes precisam ser modificados aps o tratamento de roteamento. o chain ideal para realizao de SNAT e IP Masquerading. mangle - Utilizada para alteraes especiais de pacotes (como modificar o tipo de servio (TOS) ou outros detalhes. Possui 2 chains padres: INPUT - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain INPUT da tabela filter. FORWARD - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain FORWARD da tabela filter. PREROUTING - Consultado quando os pacotes precisam ser modificados antes de ser enviados para o chain PREROUTING da tabela nat. POSTROUTING - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain POSTROUTING da tabela nat. OUTPUT - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain OUTPUT da tabela nat.

Alvos (polticas):
ACCEPT DROP REJECT REDIRECT RETURN LOG O pacote aceito pela cadeia e segue em frente. O pacote descartado pela cadeia, no h envio de mensagem ICMP. Semelhante ao DROP, porm retorna uma mensagem ICMP. Este alvo ser vlido somente para as cadeias 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 cadeias PREROUTING e OUTPUT. Retorna para a cadeia anterior e continua o processamento. Far um log de todos os pacotes que casarem com a regra. O arquivo /etc/syslog.conf determina onde esses logs so escritos. Por padro, eles so armazenados em /var/log/messages. Faz uma marca no pacote para trabalhar com Tipo de Servio - ToS(Type of Service). Vlido somente para a tabela mangle. O pacote enfileirado e enviado para a camada de usurio, onde o usurio ou um aplicativo, por exemplo, possa fazer alguma coisa com ele.

MARK QUEUE

MARQUERADE usado unicamente em conexes discadas com endereo IP dinmico (PPP por exemplo). Se for utilizado IP esttico deve-se usar o alvo SNAT. Este alvo somente vlido para a tabela nat e na cadeia POSTROUTING. SNAT DNAT MIRROR (experimental) Source NAT (traduo de endereos de rede de origem). Destination NAT (traduo de endereos de rede de destino). Funciona como o DROP s que repassando a conexo para a prpria origem (feitio contra o feiticeiro).

Comandos / Sintaxe
A estrutura do comando para criar regras do iptables : /sbin/iptables <COMANDO> <CADEIA> <parmetros e/ou extenso> <POLTICA> Onde: /sbin/iptables arquivo binrio referente ao iptables; <COMANDO> um dos comandos que especificam o que fazer com a regra; <CADEIA> a cadeia onde a regra vai ser estabelecida; <parmetros e/ou extenso> so as informaes que definem a regra; <POLTICA> a ao que o netfilter vai fazer com pacotes que sejam tratados pela regra;

Comandos especificam o que fazer com uma definida regra: -A cadeia -D cadeia [n_regra] -I cadeia [n_regra] -L [cadeia] -F [cadeia] -N cadeia -X [cadeia] Anexa uma ou mais regras no fim de uma cadeia especificada Apaga uma ou mais regras da cadeia especificada, pode ser especificada o nmero da regra que ser excluda Insere uma ou mais regras na posio especfica de uma cadeia especfica, se a posio no for definida, o padro 1 Lista todas regras em uma cadeia definida, se esta no for definida o comando listar todas as regras do firewall Remove todas as regras da cadeia definida, se esta no for definida o comando remover todas as regras do firewall Cria uma nova regra para a cadeia especfica Apaga a cadeia definida, se esta no for definida apaga todas cadeias

-P cadeia poltica Define uma poltica padro para uma cadeia especfica Parmetros Os parmetros setam definies para as regras aplicarem nos pacotes trafegados pelo firewall. O indica negao, ou seja, inverte a regra. -p [!] protocolo Define o protocolo que a regra ir tratar

-s [!] end_IP[/mask] 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

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. OBS1: - O acesso a interface loopback no deve ser de forma alguma bloqueado, pois muitos aplicativos utilizam soquetes tcp para realizarem conexes, mesmo que voc no possua uma rede interna. OBS2: - A tabela filter ser usada como padro caso nenhuma tabela seja especificada atravs da opo -t Listando regras (- L) A seguinte sintaxe usada para listar as regras criadas: iptables [-t tabela] -L [chain] [opes] Onde: tabela : uma das tabelas usadas pelo iptables. Se a tabela no for especificada, a tabela filter ser usada como padro. Chain: Um dos chains disponveis na. Caso o chain no seja especificado, todos os chains da tabela sero mostrados. Opes: As seguintes opes podem ser usadas para listar o contedo de chains: -v - Exibe mais detalhes sobre as regras criadas nos chains. -n - Exibe endereos de mquinas/portas como nmeros ao invs de tentar a resoluo DNS e consulta ao /etc/services. A resoluo de nomes pode tomar muito tempo dependendo da quantidade de regras que suas tabelas possuem e velocidade de sua conexo. -x - Exibe nmeros exatos ao invs de nmeros redondos. Tambm mostra a faixa de portas de uma regra de firewall. --line-numbers - Exibe o nmero da posio da regra na primeira coluna da listagem. 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 # iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source 1 DROP all -- 0.0.0.0/0 destination 127.0.0.1

# iptables -L INPUT -n -v Chain INPUT (policy ACCEPT 78 packets, 5820 bytes) pkts bytes target prot opt in out source destination 2 194 DROP icmp -- * * 0.0.0.0/0 127.0.0.1
Os campos assim possuem o seguinte significado: Chain INPUT Nome do chain listado (policy ACCEPT 78 packets, 5820 bytes) Policiamento padro do chain. bytes Quantidade de bytes que atravessaram a regra. Pode ser referenciado com K (Kilobytes), M (Megabytes), G (Gigabytes).

target O alvo da regra, o destino do pacote. Pode ser ACCEPT, DROP ou outro chain.. prot Protocolo especificado pela regra. Pode ser udp, tcp, icmp ou all. opt Opes extras passadas a regra. Normalmente "!" ou "f in Interface de entrada (de onde os dados chegam). out Interface de sada (para onde os dados vo). source Endereo de origem.. destination Endereo de destino.. outras opes Estas opes normalmente aparecem quando so usadas a opo -x: dpt ou dpts - Especifica a porta ou faixa de portas de destino. reject-with icmp-port-unreachable - Significa que foi usado o alvo REJECT naquela regra. Apagando regras (-D) Para apagar um chain, existem duas alternativas: Quando sabemos qual o nmero da regra no chain (listado com a opo -L) podemos referenciar o nmero diretamente. Por exemplo, para apagar a regra criada acima: 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 no chain, mas trocamos -A por -D: iptables -t filter -D INPUT -d 127.0.0.1 -j DROP Ento a regra correspondentes no chain INPUT ser automaticamente apagada (confira listando o chain com a opo "-L"). Caso o chain possua vrias regras semelhantes, somente a primeira ser apagada. OBS: No possvel apagar os chains padres do iptables (INPUT, OUTPUT...). Inserindo regras (-I) Precisa-se que o trfego vindo de 192.168.1.15 no seja rejeitado pelo firewall. No podemos adicionar uma nova regra (-A) pois esta seria includa no final do 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.15 -d 127.0.0.1 -j ACCEPT Aps este comando, temos a regra inserida na primeira posio do chain (repare no nmero 1 aps INPUT) e a antiga regra nmero 1 passa a ser a nmero 2. Desta forma a regra acima ser consultada, se a mquina de origem for 192.168.1.15 ento o trfego estar garantido, caso contrrio o trfego com o destino 127.0.0.1 ser bloqueado na regra seguinte.

Salvando e Restaurando regras


As regras podem ser salvas de 2 formas: uma delas escrevendo um shell script que tenha todos os comandos, um por linha. Isto recomendado quando se tem um firewall grande e que exige uma boa padronizao de regras, bem como sua leitura, comentrios. O script shell tambm permite o uso de funes presente no interpretador de comando, portanto se voc uma pessoa que gosta de interagir com as funes do shell e deixar as coisas mais flexveis, prefira esta opo. A outra forma usando as ferramentas iptables-save e iptables-restore. O iptables-save deve ser usado sempre que modificar regras no firewall iptables da seguinte forma:

iptables-save >/dir/iptables-regras
Uma das vantagens do uso do iptables-save ele tambm salvar os contadores de chains, ou seja, a quantidade de pacotes que conferiram com a regra. Isto tambm pode ser feito com algumas regras adicionais em seu shell script, caso tenha interesse nesses contadores para estatsticas ou outros tipos de relatrios. Para restaurar as regras salvas, utilize o comando:

iptables-restore </dir/iptables-regras Exemplos de regras

# /sbin/iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT Esta regra protege um host contra o "ping da morte", dando um limite de 1 ping por segundo para requisies de ping. # /sbin/iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT Esta regra protege um host contra ataques do tipo "Syn-flood, DoS". # /sbin/iptables -A OUTPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT Esta regra libera o acesso a interface de loopback. # /sbin/iptables -A INPUT -i eth0 -s 10.0.0.0 -p tcp --dport 22 -j ACCEPT Esta regra libera o acesso a mquina atravs de SSH por maquinas de uma rede interna. # /sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to-port 3128 # /sbin/iptables -t nat -A PREROUTING -p udp -i eth0 --dport 80 -j REDIRECT --to-port 3128 Estas duas regras redirecionam a porta 80 para a porta 3128, utilizado em servidores proxy. Bibliografia Man Pages do iptables (man iptables); Netfilter/Iptables project homepage - The netfilter/iptables project; http://www.netfilter.org/ Acessado em 23/11/2005; Firewall Linux - IPTABLES: Clube das Redes; http://www.clubedasredes.eti.br/rede0023.htm Acessado em 25/11/2005; http://www.conectiva.com.br Acessado em 23/11/2005;

Você também pode gostar