Você está na página 1de 13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

Voltar para Artigos de Linux

Configurando o Iptables e Fazendo Regras Bsicas

20 de janeiro de 2004 Postado por: Thadeu Camargo

J est mais do que comprovado: Hoje em dia uma mquina sem conexo com a internet no tem maior valia do que uma mquina de escrever. certo que os micros precisam se conectar para trocar informaes, ou mesmo somente para baixar um driver para que seu dispositivo de hardware funcione. A partir do momento em que a mquina tem uma conexo com a internet, est sujeita a ataques de crackers ou scriptie kids. Se um micro pessoal est sujeito a ataques, que dir ento uma rede de computadores. Existem vrios sujeitos prontos para se aproveitarem de mquinas vulnerveis. Para evitar intempries como estas o usurio ou administrador da rede precisa implantar polticas de segurana. Uma destas polticas a implantao de um firewall. Firewall, como o nome diz, uma porta de fogo. Uma muralha onde somente o que est devidamente autorizado pode entrar ou sair. Maiores detalhes sobre firewall podem ser vistos aqui.

www.tccamargo.com/linux/tutoriais/iptables.html

1/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

Um sistema bem servido de firewall Existem firewalls para todos os sistemas operacionais mas creio que nenhum deles esteja to bem servido quanto o Linux. Sem desmerecer outros mas a soluo Iptables ao meu ver uma das melhores, seno a melhor que eu j vi para segurana de sistemas. A grande vantagem do Iptables a sua estabilidade, rapidez, eficincia reconhecida e relativa facilidade de administrao devido a sua configurao poder ser feita atravs de scripts. Outras caractersticas do Iptables: .: Suporte aos protocolos TCP, UDP, ICMP .: Pode se especificar portas de endereo e de destino. .: Suporta mdulos externos como FTP e IRC .: Suporta um nmero ilimitado de regras por CHAINS ( correntes ). .: Pode se criar regras de proteo contra ataques diversos .: Suporte para roteamento de pacotes e redirecionamento de portas. .: Suporta vrios tipos de NAT, como o SNAT e DNAT e mascaramento. .: Pode priorizar trfego para determinados tipos de pacotes. .: Entre outras o Iptables j tem suporte a IPV6, atravs do programa ip6tables. O Iptables acompanha o kernel 2.4.x. Antes dele existia o Ipchains ( kernel 2.2.x ) e anteriormente ainda existia o Ipfwadm. Na realidade no kernel 2.4.x ainda existem os filtros Ipchains e Ipfwadm por motivos de compatibilidade mas ambos no esto ativos. Caso estejam ativos ( isto pode acontecer com o Ipchains ) necessrio desativ-los para que o Iptables possa funcionar plenamente.

Funcionamento Atravs de regras poderemos fazer com que os pacotes possam ser ou no recebidos a rede toda, a determinada mquina, interface ou mesmo porta de conexo. O Iptables trabalha atravs de Tabelas, Chains e Regras: Tabelas: Existem 3 tabelas possveis de serem utilizadas no Iptables, sendo que uma delas, a mangle raramente usada, restando a filter, que a padro, utilizada nos trfegos de dados comuns, sem ocorrncia de NAT. Quando no especificamos qual tabela a ser utilizada ela que ser ativada. A outra geralmente utilizada a nat, que como o prprio nome diz, usada quando h ocorrncia de NAT. Chains: Atravs delas podemos especificar a situao do tratamento dos pacotes, seja qual tabela for. Quando utilizamos a tabela nat as Chains possveis so: PREROUTING Quando os pacotes entram para sofrerem NAT. POSTROUTING Quando os pacotes esto saindo aps sofrerem NAT OUTPUT Pacotes que so gerados na prpria mquina e que sofrero NAT J com a tabela filter as Chains so:

www.tccamargo.com/linux/tutoriais/iptables.html

2/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

INPUT - Pacotes cujo destino final a prpria mquina firewall. OUTPUT Pacotes que saem da mquina firewall FORWARD Pacote que atravessa a mquina firewall, cujo destino uma outra mquina. Este pacote no sai da mquina firewall e sim de outra mquina da rede ou fonte. Neste caso a mquina firewall est repassando o pacote. Regras: As regras de firewall geralmente so compostas de uma Tabela, Opo, Chain, Dados e Ao. Atravs destes elementos podemos especificar o que fazer com os pacotes. Opes: -P -A Define uma regra padro Acrescenta uma nova regra as existentes. Este tem prioridade sobre a -P Apaga-se uma regra Lista as regras existentes Apaga todas as regras Insere uma regra nova Muito til, pois mostra a ajuda Substitui uma regra Faz uma checagem das regras existentes Zera uma regra especfica Cria uma nova regra com um nome Exclui uma regra especfica pelo seu nome

-D -L -F -I -h -R -C -Z -N -X

Dados: -s : Especifica o origem do pacote. Este pode ser tanto uma rede ou host. Possveis combinaes podem ser: -s 192.168.0.0/255.255.255.0 ou -s 192.168.0.0/24 OBS: No segundo caso estamos especificando a mscara de rede conforme o nmero de

www.tccamargo.com/linux/tutoriais/iptables.html

3/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

bits 1, por exemplo: Mscara de rede 255.0.0.0 = 8 Mscara de rede 255.255.0.0 = 16 Mscara de rede 255.255.255.0 = 24 No exemplo acima estamos especificando toda uma rede de mscara C, no exemplo abaixo especificamos um host: -s 192.168.30.51/255.255.255.255 ou -s 192.168.30.51 tambm pode ser assim: -s 192.168.30.51/32 OBS: A mscara em nmeros de bits 1 para host 32. Podemos especificar assim tambm: -s www tccamargo.com Podemos especificar qualquer origem tambm: -s 0.0.0.0/0.0.0.0 ou -s 0/0 -d : Especifica o destino do pacote. A sintaxe a mesma do -s -p : Protocolo usado na regra. Pode ser tcp, udp, icmp: -p tcp -p udp -p icmp -i : Interface de entrada, ou seja, placa de rede, modem ou interface de conexo que estar recebendo o pacote a ser tratado. -i eth0 -i eth1 -i ppp0

www.tccamargo.com/linux/tutoriais/iptables.html

4/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

-o : Interface de sada. As sintaxes so as mesmas que -i, sendo que neste caso estar enviando o pacote a ser tratado. ! : Exclui determinado argumento: -i ! eth0 - Refere-se a qualquer interface de entrada exceto a eth0 -s ! 192.168.0.45 Refere-se a qualquer endereo de entrada exceto o 192.168.0.45

--sport : Refere-se a porta de origem. Este deve vir acompanhado das funes -p tcp e -p udp : -p tcp sport 80 Refere-se a porta de origem 80 sob protocolo tcp

--dport : Refere-se a porta de destino. Assim como a funo sport, ela trabalha somente com a -p tcp e -p udp. A sintaxe similar a sport Atravs das funes sport e dport podemos especificar no s uma porta especfica como tambm um range de portas: --sport 33435:33525

Aes: As aes sempre vem aps o parmetro -j e geralmente so: ACCEPT Aceita e permite a passagem do pacote. DROP No permite a passagem do pacote e abandona-o no dando sinais de recebimento. REJECT Assim como o DROP, no permite a passagem do pacote, mas envia um aviso ( icmp unreachable ) LOG Cria um Log referente a regra em /var/log/messages Com estes fatores podemos criar as nossas regras com a seguinte composio: # iptables -A FORWARD -s 192.168.0.45 -p icmp -j DROP Sendo: -A ( opo ) / FORWARD ( Chain ) / -s 192.168.0.45 -p icmp ( Dados ) -j DROP ( Ao ) No caso do exemplo a cima a regra determina que todos os pacotes icmp originrios do endereo 192.168.0.45 devem ser barrados.

www.tccamargo.com/linux/tutoriais/iptables.html

5/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

Salvando as regras Depois das regras prontas podemos salv-las com este comando: # iptables-save > <d um nome para o arquivo> Para recuper-las use este comando: # iptables-restore > <nome do arquivo> Outra forma seria fazer um script com as regras: Corpo do Script #!/bin/bash #limpando tabelas iptables -F && iptables -X && iptables -t nat -F && iptables -t nat -X && #liberando acesso interno da rede iptables -A INPUT -p tcp --syn -s 192.168.1.0/255.255.255.0 -j ACCEPT && iptables -A OUTPUT -p tcp --syn -s 192.168.1.0/255.255.255.0 -j ACCEPT && iptables -A FORWARD -p tcp --syn -s 192.168.1.0/255.255.255.0 -j ACCEPT && #compartilhando a web na rede interna iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE && echo 1 > /proc/sys/net/ipv4/ip_forward && # Protecao contra port scanners ocultos iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # Bloqueando tracertroute iptables -A INPUT -p udp -s 0/0 -i eth1 --dport 33435:33525 -j DROP #Protecoes contra ataques iptables -A INPUT -m state --state INVALID -j DROP #termina echo "Iptables Pronto" Salve-o com um nome sugestivo, como por exemplo start-firewall. D permisso de execuo: chmod +x start-firewall

www.tccamargo.com/linux/tutoriais/iptables.html

6/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

Pronto. Toda vez que quiser que ele seja habilitado s execut-lo ( sempre como root ): # start-firewall Para no ter que ficar chamando o script toda vez que inicializar o sistema, podemos fazer com que ele seja ativado na inicializao. Para isso preciso editar o arquivo /etc/rc.d/rc.local e incluir o comando no final do arquivo.:-)

Compartilhamento de conexo, mascaramento e redirecionamento de pacotes

Verifique que nestas linhas do script exemplo: iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE && echo 1 > /proc/sys/net/ipv4/ip_forward && Estou fazendo com que os micros de minha rede possam utilizar a internet atravs do roteamento dinmico. A linha que habilita o redirecionamento de pacotes essa: echo 1 > /proc/sys/net/ipv4/ip_forward Mas vale observar que se inserirmos somente esta linha no script, a cada vez que reiniciar o sistema ser necessria a ativao do roteamento. Para que no percamos o roteamento necessrio editar o arquivo /etc/sysctl.conf e inserirmos ou modificarmos a linha do modo que fique assim: net.ipv4.ip_forward= 1 Voltando a nossa regra do script exemplo, verificamos uma ao nova ( MASQUERADE ), servindo para que as mquinas da rede interna possam acessar a internet usando o IP externo do Gateway. Deste modo as mquinas da rede interna ficaro invisveis para a rede externa. Para que uma mquina da rede interna possa executar servios onde cuja execuo necessita que o IP da mquina seja visvel para redes externas, ser necessrio fazer um redirecionamento de IPs ou portas. Digamos que uma mquina de IP 192.168.0.45 precise executar um servio de FTP, na qual necessria a visibilidade da mquina. Podemos fazer com que a mquina firewall, cujo IP externo seja 200.135.100.102 receba estes pacotes e retransmita: iptables -t nat -A PREROUTING -s 200.135.100.102 -i eth0 -j DNAT to 192.168.0.45 iptables -t nat -A POSTROUTING -s 200.135.100.102 -o eth0 -p tcp dport 21 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.0.45 -o eth0 -j SNAT to 200.135.100.102 iptables -t nat -A POSTROUTING -s 192.168.0.45 -o eth0 -p tcp dport 21 -j ACCEPT

www.tccamargo.com/linux/tutoriais/iptables.html

7/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

Veja que nestas regras temos mais duas aes novas SNAT e DNAT: SNAT Aplicada quando queremos alterar o endereo de origem do pacote. Aqui ns utilizamos para fazer o mascaramento. OBS: Somente a Chain POSTROUTING pode ser usada na ao SNAT. DNAT Aplicada quando desejamos alterar o endereo de destino do pacote. Esta ao utilizada para fazer redirecionamento de portas, redirecionamento de servidor, load balance e proxy transparente. As Chains que podem ser utilizadas para esta ao so PREROUTING e OUTPUT. Alm destas duas aes, existe tambm a REDIRECT que pode ser utilizada para fazer redirecionamento de portas. Quando fazemos um redirecionamento de portas usamos o dado to-port aps a ao REDIRECT: iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT to-port 3128 #Esta regra faz com que todos os pacotes direcionados a porta tcp 80 sejam redirecionados para a porta 3128. Quando utilizamos a tabela nat, preciso inserir o parmetro -t para especificar a tabela: -t nat Perceba que quando omitimos este parmetro usamos a tabela filter por padro. Alm destas aes, veja que existe tambm um dado novo: --to : Este dado serve para definir o IP ou porta de destino numa ao SNAT ou DNAT: iptables -t nat -A PREROUTING -p tcp -d 200.135.100.102 dport 80 -j DNAT to 192.168.0.45 # Esta regra faz com que os pacotes direcionados a porta tcp 80 sejam redirecionados para a mquina 192.168.0.45 . Como no especificamos a porta, a mquina de destino receber o pacote na porta 80 Alm do IP podemos definir a porta deste endereo na ao: iptables -t nat -A PREROUTING -p tcp -d 200.135.100.102 dport 80 -j DNAT to 192.168.0.45:3128 # Aqui, assim como na regra anterior, os pacotes so redirecionados para a mquina 192.168.0.45 mas neste caso especificamos a porta, ou seja, porta 3128

Algumas opes e observaes

Vale fazer umas pequenas observaes a respeito da ordem das regras e manejo. Uma delas que a a primeira regra tem prioridade sobre a segunda caso ambas estejam em conflito, veja:

www.tccamargo.com/linux/tutoriais/iptables.html

8/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j ACCEPT iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j DROP

A que ter valia ser a primeira, ou seja: iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j ACCEPT Podemos ver todas as regras em andamento ao darmos o comando: iptables -L Com os comandos abaixo limpamos todas as tabelas e regras: iptables -F iptables -X iptables -t nat -F iptables -t nat -X Para que tudo possa funcionar a contento necessrio primeiramente que todos os mdulos necessrios estejam carregados: modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ip_queue modprobe ip_tables modprobe ipt_LOG modprobe ipt_MARK modprobe ipt_MASQUERADE modprobe ipt_MIRROR modprobe ipt_REDIRECT modprobe ipt_REJECT modprobe ipt_TCPMSS modprobe ipt_TOS modprobe ipt_limit modprobe ipt_mac modprobe ipt_mark modprobe ipt_multiport modprobe ipt_owner modprobe ipt_state modprobe ipt_tcpmss modprobe ipt_tos modprobe ipt_unclean modprobe iptable_filter modprobe iptable_mangle modprobe iptable_nat

www.tccamargo.com/linux/tutoriais/iptables.html

9/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

importante ressaltar que as regras devem seguir uma ordem definida, ou seja, a regra posterior deve estar de acordo com a regra anterior para que tudo corra sem problemas.: iptables -P FORWARD -j DROP iptables -A FORMARD -s 192.168.0.0/24 -d 10.0.0.0/8 -j ACCEPT Atravs desta regra, determinamos que todo o repasse de pacotes seja bloqueado, depois permitimos que possa repassar pacotes da rede 192.168.0.0 para a rede 10.0.0.0 mas esta no poder retornar os pacotes. Ento o correto seria inserir mais uma regra aqui: iptables -A FORWARD -d 192.168.0.0/24 -s 10.0.0.0/8 -j ACCEPT Para que a rede 10.0.0.0 possa repassar os pacotes, fazendo deste jeito com que as redes possam conversar sem problemas. Ao fazer as regras lembre-se de primeiro bloquear, depois abrir o acesso.: iptables -P FORMARD -j DROP iptables -A FORWARD -s 192.168.0.45 -p tcp sport 80 -j ACCEPT

Consideraes finais Iptables tem infinitas possibilidades de regras. impossvel citar todos os parmetros e regras que podem ser utilizados, pois daria uma verdadeira bblia. Cabe ao bom administrador estudar com afinco para poder aplicar as regras mais convenientes para a sua rede. E o usurio final tem em mos um excelente recurso para deixar sua mquina protegida de ataques externos. Esta a grande vantagem do Iptables, pode se aplicar regras conforme a convenincia da rede e usurios. Sem dvida nenhuma uma ferramenta poderosssima.

Exemplos de regras comumente utilizadas

Nas linhas abaixo inclu algumas regras que so comumente utilizadas. Algumas destas podem ser teis para fazer o seu firewall mas lembre-se de adapt-las para sua rede/interface/mquina antes de aplic-las: #Libera o apache pra web iptables -A INPUT -p tcp --destination-port 6080 -j ACCEPT iptables -A INPUT -p tcp --destination-port 443 -j ACCEPT #Libera o loopback iptables -A OUTPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT

www.tccamargo.com/linux/tutoriais/iptables.html

10/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

#Bloqueando todos os endereos vindo de uma determinada rede para a minha mquina iptables -A INPUT -s 10.0.0.0/8 -j DROP #Liberando o endereo vindo de uma rede para a minha mquina iptables -A INPUT -s 10.0.0.1 -j ACCEPT #Gerando Logs de Portas proibidas iptables -A INPUT -p tcp --dport 21 -j --log-prefix "Servio de FTP" #Gerando log de Backdoors iptables -A INPUT -p tcp --dport 5042 -j LOG -log-prefix "Wincrash" iptables -A INPUT -p tcp --dport 12345 -j LOG -log-prefix "backOrifice" iptables -A INPUT -p tcp --dport 12346 -j LOG -log-prefix "backOrifice" #Habilitando porta de FTP iptables -A INPUT -p tcp -s 192.168.0.45 --dport 21 -j ACCEPT #Habilitando porta de SSH iptables -A INPUT -p tcp -s 192.168.0.45 --dport 22 -j ACCEPT #Habilitando porta de SMTP iptables -A INPUT -p tcp -s 192.168.0.45 --dport 25 -j ACCEPT #Habilitando porta de DNS iptables -A INPUT -p tcp -s 192.168.0.45 --dport 53 -j ACCEPT #Habilitando porta de POP3 iptables -A INPUT -p tcp -s 192.168.0.45 --dport 110 -j ACCEPT #Habilitando porta de DNS (UDP) iptables -A INPUT -p udp -s 192.168.0.45 --source-port 53 -j ACCEPT #Redirecionar Porta iptables -t nat -A PREROUTING -s IP_NET -i EXT_INT -j DNAT --to IP_DESTINO iptables -t nat -A POSTROUTING -s IP_NET -o EXT_INT -p tcp --dport PORT -j ACCEPT iptables -t nat -A POSTROUTING -s IP_DESTINO -o EXT_INT -j SNAT --to IP_NET iptables -t nat -A POSTROUTING -s IP_DESTINO -o EXT_INT --p tcp --dport PORT -j ACCEPT IP_NET = IP vlido da internet. EXT_INT = Interface da Internet. IP_DESTINO = IP invlido da Internet ou melhor ip da rede que vai fazer redirecionamento. PORT = porta #Fazendo redirecionamento de portas iptables -t nat -A PREROUTING -i FACE -p tcp --dport 80 -j REDIRECT --to-port 3128 FACE = interface de rede #Bloqueando todos os pacotes originrios da rede 10.0.0.0 para o host www.tccamargo.com iptables -A FORWARD -s 10.0.0.0/8 -d www.tccamargo.com -j DROP #Liberando todos os pacotes originrios da rede 10.0.0.0 para o host www.tccamargo.com

www.tccamargo.com/linux/tutoriais/iptables.html

11/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

iptables -A FORWARD -s 10.0.0.0/8 -d www.tccamargo.com -j ACCEPT #Liberando todos os pacotes tcp destinados a porta 25 iptables -A FORWARD -p tcp --dport 25 -j ACCEPT #Liberando acesso interno da rede iptables -A INPUT -p tcp --syn -s 192.168.1.0/24 -j ACCEPT iptables -A OUTPUT -p tcp --syn -s 192.168.1.0/24 -j ACCEPT iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j ACCEPT #compartilhando a web na rede interna iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward && #Libera Bittorrent somente para esta maquina iptables -A INPUT -p tcp --destination-port 6881:6889 -j ACCEPT #Bloqueando tracertroute iptables -A INPUT -p udp -s 0/0 -i eth1 --dport 33435:33525 -j DROP #Protecoes contra ataques iptables -A INPUT -m state --state INVALID -j DROP #Bloqueando uma mquina pelo endereo MAC iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP #Proteo contra IP Spoofing iptables -A INPUT -s 172.16.0.0/16 -i ext_face -j DROP iptables -A INPUT -s 192.168.0.0/24 -i ext_face -j DROP iptables -A INPUT -s 192.168.0.0/24 -i ext_face -j DROP < ext_face = So as interfaces da internet como ppp e ethX > #Proteo contra Syn-floods iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT #Proteo contra port scanners ocultos iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT #Proteo contra ping da morte iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT #Bloqueando ping de um ip iptables -A INPUT -p icmp -s 192.168.1.1/24 -j DROP #Bloqueando pacotes fragmentados iptables -A INPUT -i INTEXT -m unclean -j log_unclean iptables -A INPUT -f -i INTEXT -j log_fragment < INTEXT = Interface da INTERNET > #Anulando as respostas a ICMP 8 (echo reply) echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

www.tccamargo.com/linux/tutoriais/iptables.html

12/13

27/06/13

TCCamargo -------- Configurando o Iptables ..Regras Bsicas

Agradecimentos Uma matria sobre Iptables no nada fcil de se fazer. So tantas opes que a probabilidade de se perder neste mundo de tabelas, Chains e regras acaba se tornando real. Muita coisa do que escrevi aqui devo a fonte espetacular de conhecimento do Sr. Joo Eriberto Motta Filho, que mantm um site excelente e elucidativo sobre Iptables: http://www.iptablesbr.cjb.net/ . Agradeo tambm ao grande irmo google e a minha mquina "cobaia" que sofreu horrores nas minhas experincias de aplicao de regras do Iptables:-) Bem, espero que este artigo seja de grande valia para todos. Um abrao.

Caso tenha alguma dvida, crtica ou sugesto a fazer: Voltar para Artigos de Linux Site desenvolvido no Mozilla Composer sob sistema operacional Linux Mandrake. Todos os artigos escritos podem ser livremente copiados e divulgados desde que se mantenham os crditos dos autores originais. Seja livre, mas seja justo.

www.tccamargo.com/linux/tutoriais/iptables.html

13/13

Você também pode gostar