You are on page 1of 8

Entendendo o funcionamento de um firewall e regras IPtables Introduo O Firewall tem o objetivo proteger o servidor e a rede local contra acessos

indesejados, trfego indesejado, proteger servios que estejam rodando no servidor e bloquear a passagem de coisas que voc no deseja receber (como conexes vindas da Internet para sua rede local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais). A implementao de um bom firewall depender da experincia, conhecimentos de redes (protocolos, roteamento, interfaces, endereamento, masquerade, etc), da rede local, e sistema em geral do Administrador de redes, a segurana de sua rede e seus dados dependem da escolha do profissional correto, que entenda a fundo o TCP/IP, roteamento, protocolos, servios e outros assuntos ligados a rede. No kernel do Linux 2.4, foi introduzido o programa IPtables (tambm chamado de Netfilter) que substitui o ipchains dos kernels da srie 2.2. Este novo programa tem como vantagem ser muito estvel (assim como o ipchains e ipfwadm), confivel, permite muita flexibilidade na programao de regras pelo administrador do sistema, mais opes disponveis ao administrador para controle de trfego, controle independente do trfego da rede local/entre redes/interfaces devido a nova organizao das etapas de roteamento de pacotes. O IPtables um firewall em nvel de pacotes e funciona baseado no endereo/porta de origem/destino do pacote, prioridade, etc. Ele funciona atravs da comparao de regras para saber se um pacote tem ou no permisso para passar. Em firewalls mais restritivos, o pacote bloqueado e registrado para que o administrador do sistema tenha conhecimento sobre o que est acontecendo em seu servidor. Tambm pode ser usado para modificar e monitorar o trfego da rede, fazer NAT (masquerading, source nat, destination nat), redirecionamento de pacotes, marcao de pacotes, modificar a prioridade de pacotes que chegam/saem do seu servidor, contagem de bytes, dividir trfego entre mquinas, criar protees anti-spoofing, contra syn flood, DoS, etc. O trfego vindo de mquinas desconhecidas da rede pode tambm ser bloqueado/registrado atravs do uso de simples regras. As possibilidades oferecidas pelos recursos de filtragem iptables como todas as ferramentas UNIX maduras dependem de sua imaginao, pois ele garante uma grande flexibilidade na manipulao das regras de acesso ao sistema, precisando apenas conhecer quais interfaces o sistema possui, o que deseja bloquear, o que tem acesso garantido, quais servios devem estar acessveis para cada rede, e iniciar a construo de seu firewall. Um firewall no funciona de forma automtica (instalando 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 servidor. A segurana do servidor depende do controle das regras que sero criadas por voc, as falhas humanas so garantia de mais de 95% de sucesso nas invases. Enfim o IPtables um firewall que agradar tanto a pessoas que desejam uma segurana bsica em seu servidor, quando administradores de grandes redes que querem ter um controle minucioso sobre o trfego que passam entre suas interfaces de rede (controlando tudo o que pode passar de uma rede a outra), controlar o uso de trfego, monitorao, etc. Caractersticas do Netfilter/Iptables Segue abaixo algumas caractersticas do Firewall Netfilter/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 Manipula 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 Muito 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).

Ficha tcnica Pacote: IPtables iptables - Sistema de controle principal para protocolos ipv4 ip6tables - Sistema de controle principal para protocolos ipv6 iptables-save - Salva as regras atuais em um arquivo especificado como argumento. Este utilitrio pode ser dispensado por um shell script contendo as regras executado na inicializao da mquina. iptables-restore - Restaura regras salvas pelo utilitrio iptables-save. Entendendo as regras do IPtables Agora iremos entender a estrutura das regras iptables: Tabela FILTER a tabela responsvel pelos filtros dos pacotes. Ela se divide em 3 chains padro. INPUT A chain INPUT responsvel por filtrar todo o trfego que entra no firewall. FORWARD A chain FORWARD responsvel por filtrar todo o trfego que passar pelo firewall, ou seja, todos os pacotes onde o NAT ser aplicado. OUTPUT A chain OUTPUT responsvel por filtrar todo o trfego que sair pelo firewall. Tabela NAT a tabela responsvel pelo redirecionamento de pacotes. Ela tambm se divide em 3 chains. PREROUTING A chain PREROUTING utilizada para alterar pacotes antes que os mesmos sejam roteados. POSTROUTING A chain POSTROUTING utilizada pala alterar pacotes que j sofreram roteamento. Tabela MANGLE a tabela responsvel pela alterao de prioridade na entrada e sada de pacotes, baseandose no tipo de servio (TOS). dividida em 2 chains. Comandos e aes Comandos -I

Insere uma regra no incio da lista. -A Adiciona uma regra no fim da lista. -D Apaga uma regra da lista. -L Lista as regras da lista. -P Altera a poltica padro das Chains. -F Remove todas as regras da lista. -R Substitui uma regra da lista por outra. -N Cria uma nova chain na tabela especificada. -E Renomeia uma chain que foi criada com o comando -N. -X Apaga uma chain criada com o comando -N. Aes -p Especifica o protocolo ao qual a regra se aplicar. Tambm podemos utilizar o valor numrico que referencia o protocolo em /etc/protocol. Ex: -p gre ; -p 47 -i Especifica a interface de entrada utilizada pela regra. Pode ser utilizada apenas com as chains INPUT e FORWARD. EX: -i eth0 ou -i eth+ para especificar todas as entradas. -o Especifica a interface de sada utilizada pela regra. Pode ser utilizada apenas com as chains FORWARD e OUTPUT. EX: -o eth0 -s Especifica o endereo ou a rede de origem utilizada pela regra. Se no especificarmos a mscara de rede, o iptables utiliza a mscara padro da classe C 255.255.255.0. Tambm podemos utilizar nomes DNS. Ex: -s 192.168.1.2; -s 192.168.1.0/255.255.255.0 domnio: exemplo.com.br -d Especifica o endereo ou a rede de destino utilizado pela regra. Se utiliza da mesma maneira que a ao -s. ! Utilizado para especificar excees. Ex: -s ! 192.168.1.6 # A regra se aplicaria a todos os ips que tivessem origem diferente de 192.168.1.6 -j Utilizado para aplicar um alvo a regra, os mesmos podem ser ACCEPT, DROP, REJECT e LOG. Ex: -j ACCEPT --sport Especifica a porta de origem utilizada. S podemos aplicar a ao quando estivermos tratando dos protocolos tcp e udp. Ex: -p tcp --sport 25 --dport Especifica a porta de destino utilizada. Funciona da mesma forma que a ao --sport. Ex: -p tcp --dport 25. Alvos e mdulos Alvos Quando temos um pacote que combinou com todas as opes da regra, necessitamos especificar um destino para o mesmo, como vimos anteriormente podemos especificar os

seguintes alvos / destinos: ACCEPT Aceita a entrada ou passagem do pacote. DROP Descarta o pacote. REJECT Descarta o pacote, porm diferente de DROP, ele retorna uma mensagem ao emissor informando o que houve com o pacote. LOG Gera um log no sistema. RETURN Retorna o processamento da chain anterior. QUEUE Encarrega um programa de administrar o fluxo atribudo ao mesmo. SNAT Altera o endereo de origem do pacote. DNAT Altera o endereo de destino do pacote. REDIRECT Redireciona a porta do pacote juntamente com a opo --to-port. TOS Prioriza a entrada e sada de pacotes baseado em seu tipo de servio. Podemos especificar em TOS os seguintes valores: 16 ou 0x10 Espera mnima 8 ou 0x08 Mximo processamento 4 ou 0x04 Mxima confiana 2 ou 0x02 Custo mnimo 0 ou 0x00 Prioridade normal Mdulos A utilizao de mdulos junto com o iptables definida atravs da opo -m. Podemos utilizar os seguintes mdulos: limit Impe um limite de vezes que a regra poder ser executada. state Utiliza o estado da conexo, que pode ser NEW, ESTABLISHED, RELATED, INVALID. mac Permite a utilizao do endereo mac nas regras. multiport Permite a utilizao de at 15 portas em uma nica regra em conjunto com o -dport. string Verifica o contedo do pacote para aplicar a regra. owner Verifica o usurio que criou o pacote. Consideraes finais Para finalizar, temos que esclarecer algumas coisas sobre firewall do sistema GNU/Linux, que na realidade se chama Netfilter, e o IPtables so comandos interpretados pelo Netfilter no Kernel, por default j vem habilitado na maioria das distros. Script Firewall com regras IPtables #!/bin/bash #Autor: Reginaldo #Criado em: 26/06/2011 #Funo: Regras iptables de configurao do firewall #Utilizao: #no Slackware -> /etc/rc.d/rc.firewall2 e colocar em /etc/rc.d/rc.local #Start|Stop|Restart #file executable: chmod 755 /etc/rc.d/rc.firewall2 #Variaveis

ifaceExt="eth0" #acesso internet ifaceInt="eth1" #acesso intranet (LAN) LAN="192.168.1.0/24" #rede local #carrega mdulos /sbin/modprobe ip_nat /sbin/modprobe ip_nat_ftp /sbin/modprobe ip_queue /sbin/modprobe ip_conntrack /sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_tables /sbin/modprobe iptable_filter /sbin/modprobe iptable_nat /sbin/modprobe iptable_mangle /sbin/modprobe iptable_raw /sbin/modprobe ipt_state /sbin/modprobe ipt_limit /sbin/modprobe ipt_multiport /sbin/modprobe ipt_mac /sbin/modprobe ipt_string start(){ echo "Firewall iniciando ..............................[OK]" #Limpa as regras iptables -F iptables -X iptables -Z iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD iptables -t nat -F iptables -t nat -X iptables -t nat -Z iptables -t mangle -F iptables -t mangle -X iptables -t mangle -Z iptables -t raw -F iptables -t raw -X iptables -t raw -Z #definindo as regras padro iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP #Proxy(Squid) - Redirecionando trfego porta 80 para porta 3128(Squid) iptables -t nat -A PREROUTING -p tcp -m multiport -s $LAN --dport 80,443 -j REDIRECT --toports 3128 echo "Redirecionando trfego porta 80 para porta 3128(Squid) " #roteamento de pacotes echo 1 > /proc/sys/net/ipv4/ip_forward #compartilhamento de conexo iptables -t nat -A POSTROUTING -s $LAN -o $ifaceExt -j MASQUERADE iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT echo "compartilhamento da rede ativo" #Libera a interface de loopback(localhost) iptables -A INPUT -i lo -j ACCEPT

#liberando acesso pela internet (eth0=ifaceExt) iptables -A INPUT -s $LAN -p tcp --dport 53 -j ACCEPT iptables -A INPUT -s $LAN -p udp --dport 53 -j ACCEPT #liberando acessos de alguns servios (eth1=ifaceInt) e servio DNS/FTP/SSH/SAMBA apenas para rede interna #chain INPUT iptables -A INPUT -p tcp --dport 3128 -i $ifaceInt -j ACCEPT #chain FORWARD iptables -A FORWARD -p tcp --dport 3128 -i $ifaceInt -o $ifaceExt -s $LAN -j ACCEPT iptables -A FORWARD -p tcp --dport 53 -i $ifaceInt -o $ifaceExt -s $LAN -j ACCEPT iptables -A FORWARD -p udp --dport 53 -i $ifaceInt -o $ifaceExt -s $LAN -j ACCEPT iptables -A FORWARD -p tcp --dport 21 -i $ifaceInt -o $ifaceExt -s $LAN -j ACCEPT iptables -A FORWARD -p tcp --dport 20 -i $ifaceInt -o $ifaceExt -s $LAN -j ACCEPT iptables -A FORWARD -p tcp --dport 110 -i $ifaceInt -o $ifaceExt -s $LAN -j ACCEPT iptables -A FORWARD -p tcp --dport 25 -i $ifaceInt -o $ifaceExt -s $LAN -j ACCEPT iptables -A FORWARD -p tcp --dport 3389 -i $ifaceInt -o $ifaceExt -s $LAN -j ACCEPT iptables -A FORWARD -p tcp --dport 137:139 -i $ifaceInt -s $LAN -j ACCEPT iptables -A FORWARD -p tcp --dport 137:139 -i $ifaceInt -s $LAN -j ACCEPT #chain OUTPUT iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j ACCEPT #tcnica Port knocking para SSH #Fases do Segredo (portas para liberar acesso ssh) iptables -N INTO-FASE2 iptables -A INTO-FASE2 -m recent --name FASE1 --remove iptables -A INTO-FASE2 -m recent --name FASE2 --set iptables -A INTO-FASE2 -j LOG --log-prefix "INTO FASE2:" iptables -N INTO-FASE3 iptables -A INTO-FASE3 -m recent --name FASE2 --remove iptables -A INTO-FASE3 -m recent --name FASE3 --set iptables -A INTO-FASE3 -j LOG --log-prefix "INTO FASE3:" iptables -N INTO-FASE4 iptables -A INTO-FASE4 -m recent --name FASE3 --remove iptables -A INTO-FASE4 -m recent --name FASE4 --set iptables -A INTO-FASE4 -j LOG --log-prefix "INTO FASE4:" iptables -A INPUT -p tcp -m recent --update --name FASE #Determina o nmero de portas e o tempo que o ip ficar em cada uma das fases aguardando a prxima porta ser digitada iptables -A INPUT -p tcp --dport 1002 -m recent --set --name FASE1 iptables -A INPUT -p tcp --dport 1004 -m recent --rcheck --seconds 15 --name FASE1 -j INTOFASE2 iptables -A INPUT -p tcp --dport 1006 -m recent --rcheck --seconds 15 --name FASE2 -j INTOFASE3 iptables -A INPUT -p tcp --dport 1008 -m recent --rcheck --seconds 15 --name FASE3 -j INTOFASE4 #Aqui chegamos a FASE4, que a ltima porta, onde ser liberada a conexo com a porta 22(ssh). O tempo est setado para 3600 segundos(1 hora). Depois disso ser fechada novamente para o ip em questo, lembrando que se ele ainda tiver logado no far diferena, ser fechada mesmo assim. Ento aumente o tempo conforme desejado. iptables -A INPUT -p tcp -s 0/0 --dport 22 -m recent --rcheck --seconds 3600 --name FASE4 -j

ACCEPT #fecha se tiver inativo por 3 minutos #iptables -A INPUT -p tcp -s 0/0 --dport 22 -m limit --limit 3/minute --limit-burst 3 -j DROP #Por ltimo fechamos todos acessos a porta 22(ssh) iptables -A INPUT -p tcp --dport 22 -j DROP #algumas protees #Filtrando pacotes ICMP echo "Filtrando pacotes contra ICMP Broadcast" echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo "Protegendo contra Ping da Morte..." iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all iptables -A INPUT -p icmp -j DROP #Bloqueando Tracerouters #Bloqueia pacotes tcp malformados iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP iptables -A INPUT -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state INVALID -j DROP iptables -A FORWARD -m state --state INVALID -j DROP #Filtro das conexes estabelicidas echo "Permitindo e filtrando conexes estabelecidas" iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #Proteo contra Synflood iptables -N syn-flood iptables -A INPUT -i $ifaceInt -p tcp --syn -j syn-flood iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A syn-flood -j DROP iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT #Proteo contra falhas de segurana dos servios do X Window iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 6000:6063 -j DROP #Proteo contra port-scanners ocultos iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT iptables -N SCANNER iptables -A SCANNER -j DROP iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $ifaceExt -j DROP iptables -A INPUT -p tcp --tcp-flags ALL NONE -i $ifaceExt -j DROP iptables -A INPUT -p tcp --tcp-flags ALL ALL -i $ifaceExt -j DROP iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $ifaceExt -j DROP iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $ifaceExt -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $ifaceExt -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $ifaceExt -j DROP iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP #-m recent --update --hitcount=4 quer dizer se tentar passar pelo ip utilizando o nmap 4x ser jogado na lista INVASOR iptables -A INPUT -m recent --update --hitcount 4 --name INVASOR --seconds 3600 -j DROP #indica bloqueio por 3600 segundos, ou seja, 1 hora o host que tentou realizar um scan na rede iptables -A INPUT -m recent --set --name INVASOR #Proteo contra IP Spoofing iptables -A INPUT -s $LAN -i $ifaceExt -j DROP for i in /proc/sys/net/ipv4/conf/*/rp_filter; do

echo 1 > $i done #Protecao contra ataques DoS iptables -A INPUT -m state --state INVALID -j DROP iptables -A OUTPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP #Verifica pacotes fragmentados e os descarta iptables -N VALID_CHECK iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP iptables -A VALID_CHECK -p tcp --tcp-flags ALL SYN,ACK,FIN,URG -j DROP iptables -A VALID_CHECK -p tcp --tcp-flags ALL ALL -j DROP iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN -j DROP iptables -A VALID_CHECK -p tcp --tcp-flags SYN,RST SYN,RST -j DROP iptables -A VALID_CHECK -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP iptables -A VALID_CHECK -p tcp --tcp-flags ALL NONE -j DROP #Bloqueia tudo que no foi especificado acima iptables -A INPUT -p tcp --syn -j DROP echo "Firewall ativo ---------------------------------[OK]" } stop(){ #Limpa as regras iptables -F iptables -X iptables -Z iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD iptables -t nat -F iptables -t nat -X iptables -t nat -Z iptables -t mangle -F iptables -t mangle -X iptables -t mangle -Z iptables -t raw -F iptables -t raw -X iptables -t raw -Z #reseta as politicas padres, aceita tudo iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT #compartilhamento de conexo echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -o $ifaceExt -j MASQUERADE echo "Firewall desativado! -----------------------------[OK]" } case "$1" in "start") start ;; "stop") stop ;; "restart") stop; start ;; *) echo "Use os paramentros: start|stop|restart" esac

You might also like