Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
-D
-L
-F
-P
-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 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
-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.
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
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
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:
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
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