Escolar Documentos
Profissional Documentos
Cultura Documentos
Documentacao Firewall2 PDF
Documentacao Firewall2 PDF
UTILIZANDO IPTABLES
1 . Introduo
O firewall manipula os pacotes que passam entre as redes locais e a internet. A partir desse
princpio podemos aceitar, rejeitar ou descartar pacotes. Devidamente implementado, capaz de
prover segurana e otimizar o uso dos canais de comunicao, atravs de um mtodo de controle
de acesso baseado em regras registradas na tabela de filtro do KERNEL.
No Linux, a filtragem de pacotes implementada no kernel pelos mdulos do NETFILTER, que so
manipulados pelo IPTABLES.
2 . Objetivo
Este documento descreve os procedimentos para instalao e configurao de um servidor firewall
IPTABLES no sistema operacional Debian GNU/Linux verso 3.0 testing.
3. IPTABLES
3.1 Opes a serem habilitadas no Kernel 2.6.6
Ao ser exibida a tela de opes do cdigo-fonte do kernel, habilite as seguintes opes:
---> Device Drivers --> Networking Support --->
[ * ] Networking Support
---> Networking Options
[ * ] Network packet filtering (replaces ipchains) --->
# iptables -D INPUT 1
Esse comando ir remover a primeira regra da chain INPUT.
Para remover regras implementadas na tabela de NAT, utilize o parmetro -t nat:
# iptables -D PREROUTING 1 -t nat
Obs.: Para obter a ajuda completa do comando iptables, utilize o comando man para visualizar a
pgina de manual ou execute o comando iptables e o parmetro -h.
Ainda possvel criar chains personalizadas. Por exemplo:
# iptables -N filtro
Acima criada uma chain, denominada filtro.
# iptables -A filtro -j LOG
# iptables -A filtro -j DROP
Agora temos uma chain personalizada demoninada filtro, que basicamente registra um pacote
(LOG) antes de descart-lo (DROP). Para aplic-la na chain INPUT, por exemplo, execute o
seguinte comando:
# iptables -A INPUT -j filtro
3.4 CHAINs
Uma chain uma lista de regras. Cada regra diz: se o cabealho do pacote se parece com isso,
ento aqui est o que deve ser feito com o pacote. 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.
Abaixo, tentamos resumir as etapas do processo:
4
1. Quando o pacote chega (pela placa Ethernet, por exemplo) o kernel analisa o destino do pacote:
isso chamado roteamento (routing).
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. Depois, se o kernel no tem suporte a forwarding, ou no sabe como repassar (forward) o
pacote, este descartado. Se h suporte a forwarding e o pacote destinado a outra interface
de rede (se voc possui outra), 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 contrrio ele descartado.
Existem duas aes bsicas que podemos fazer com os pacotes destinados a uma determinada
chain: ACCEPT e DROP. ACCEPT deixa o pacote passar entre origem e destino e DROP descarta
o pacote como se nunca o tivesse recebido.
3.4.1 INPUT
A chain INPUT empregada na entrada de pacotes que esto destinados maquina local.
Abaixo exemplos de regras na chain INPUT.
1Exemplo:
# iptables -A INPUT -p icmp -s 192.168.1.50 -d 192.168.1.1 -j DROP
Explicao: Pacotes do tipo ICMP (Ping) cuja origem o endereo IP 192.168.1.50 e o
destino 192.168.1.1, sero descartados na entrada (INPUT) sem que a origem receba qualquer
notificao.
2Exemplo:
# iptables -A INPUT -p icmp -s 192.168.1.50 -d 192.168.1.1 -j ACCEPT
# iptables -A INPUT -p icmp -d 192.168.1.1 -j DROP
Explicao: Qualquer pacote cuja origem no 192.168.1.50 que forem direcionados para o
5
3.4.2 OUTPUT
A chain OUTPUT empregada na sada de pacotes da mquina local. Abaixo exemplos de regras
na chain OUTPUT.
Exemplo:
# iptables -A OUTPUT -p tcp --dport 23 -j DROP
Explicao: Bloqueia a sada de pacotes TCP destinados a porta 23 (telnet), saindo do host
local.
3.4.3 FORWARD
A chain FORWARD empregada em um host intermedirio (geralmente um firewall) que realiza o
repasse de pacotes entre redes. Observer a ilustrao:
Rede interna 1
eth2
eth0
eth1
Firewall
INTERNET
Rede interna 2
pacotes
No grfico acima, o firewall tem a funo de repassar (forwarding) os pacotes das redes internas
para a internet e vice-versa. A chain FORWARD se aplica no repasse desses pacotes.
Para habilitar o repasse de pacotes, no basta implementar regras na chain FORWARD, antes
preciso habilitar o recurso no kernel:
# echo 1 > /proc/sys/net/ipv4/ip_forward
ou editando o arquivo /etc/sysctl.conf e adicionar a seguinte linha:
net/ipv4/ip_forward=1
1Exemplo:
# iptables -A FORWARD -p all -s 192.168.1.0/24 -d 0/0 -j ACCEPT
Explicao: Habilita o repasse de pacotes da rede 192.168.1.0/255.255.255.0 para
qualquer destino, inclusive a internet.
2Exemplo:
# iptables -A FORWARD -p tcp -s 192.168.1.20 -d 200.181.132.137 --dport 80 -j DROP
Explicao: Bloqueia o acesso ao endereo 200.181.132.137 (www.playboy.com.br) da
origem cujo endereo IP 192.168.1.20, descartando os pacotes.
3Exemplo:
# iptables -A FORWARD -p tcp syn -m limit limit 1/sec -j ACCEPT
Explicao: a regra diz: receba apenas um pacote TCP por segundo com o bit SYN ativado.
Essa regra caracteriza a proteo contra o envio desenfreado de pacotes syn (SYNFLOOD) da sua
rede interna para a internet e vice-versa.
Nota: importante ressaltar que todas as regras so manipuladas pelo KERNEL, e o mtodo de
leitura implementado como uma fila. Observe, por exemplo, as seguintes regras:
1: # iptables -A INPUT -p icmp -d 192.168.1.1 -j DROP
2: # iptables -A INPUT -p icmp -s 192.168.1.50 -d 192.168.1.1 -j ACCEPT
CHAIN
TIPO DE PACOTE
ORIGEM
DESTINO
AO
INPUT
icmp
0.0.0.0
192.168.1.1
DROP
INPUT
icmp
192.168.1.50
192.168.1.1
ACCEPT
Explicao:
Se primeiro eu digo: descarte pacotes de qualquer origem (0.0.0.0) que chegarem no
destino 192.168.1.1, e depois eu digo: aceite apenas pacotes da origem 192.168.1.50 que
chegarem no destino 192.168.1.1, fao com que ambas as regras sejam aplicveis a um pacote
cujo endereo de destino 192.168.1.1, portanto apenas a primeira regra ser analisada e o pacote
cujo endereo de origem 192.168.1.50 e o endereo de destino 192.168.1.1 tambm ser
descartado. A segunda regra seria aplicvel apenas se adicionada antes da primeira.
Tipos de NAT
Source NAT (SNAT): ocorre quando o endereo ou porta de origem do pacote alterado. Source
NAT sempre ocorre no momento de post-routing (POSTROUTING), logo antes do pacote deixar o
firewall. MASQUERADING um exemplo de SNAT.
Destination NAT (DNAT): ocorre quando o endereo ou porta de destino do pacote alterado.
Destionation NAT sempre ocorre no momento de pre-routing (PREROUTING), logo quando o
pacote chega no firewall.
Observao: para realizar DNAT ou SNAT da sua rede interna, necessrio configurar o repasse de pacotes do
KERNEL. Esse passo descrito no item 3.4.3 desse documento.
2 Exemplo:
# iptables -A POSTROUTING -t nat -p tcp -o eth0 -j MASQUERADE
Explicao: Faz com que todos os pacotes saindo da interface eth0 tero como endereo de
origem, o IP do firewall. Essa regra pode ser usada caso o servidor atue como um proxy.
3 Exemplo:
# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 10.0.0.3:8080
Explicao: Os pacotes que saem pela interface eth0 tero endereo de origem modificado
para 10.0.0.3 e a porta de origem modificada para 8080.
servidor web
(192.168.1.50)
200.198.10.2
Rede Interna
192.168.1.0/24
eth1
eth0
FIREWALL
192.168.1.1
200.198.10.1
roteador
INTERNET
10
11
#####################################################################
##########################REGRAS###################################
#####################################################################
#DefineapolticapadroparacadaCHAIN
/sbin/iptablesPFORWARDDROP
/sbin/iptablesPINPUTDROP
/sbin/iptablesPOUTPUTDROP
#criaumanovachaindenominadafiltro
/sbin/iptablesNfiltro
#aceitaconexesdaredeinterna
/sbin/iptablesAfiltromstatestateESTABLISHED,RELATEDjACCEPT
#rejeitanovasconexesquenosejamdaredeinterna
/sbin/iptablesAfiltromstatestateNEW!ieth0jDROP
#####################################################################
#################DETECTAEREGISTRAPORTSCANNERS###################
#####################################################################
#Xmasportscan
/sbin/iptablesAfiltroptcptcpflagsALLFIN,URG,PSHmlimitlimit2/m
limitburst2jLOGlogprefix"Xmasportscanner:"
#descartaopacote
/sbin/iptablesAfiltroptcptcpflagsALLFIN,URG,PSHjDROP
#portscannerdotipoqueativaosbitsSYNeFIN
/sbin/iptablesAfiltroptcptcpflagsALLSYN,FINmlimitlimit2/m
limitburst2jLOGlogprefix"SYNFINportscanner:"
#descartaopacote
/sbin/iptablesAfiltroptcptcpflagsALLSYN,FINjDROP
#portscannerdotipoqueativaosbitsSYNeRST
/sbin/iptablesAfiltroptcptcpflagsSYN,RSTSYN,RSTmlimitlimit2/m
limitburst2jLOGlogprefix"SYNRSTportscanner:"
#descartaopacote
/sbin/iptablesAfiltroptcptcpflagsSYN,RSTSYN,RSTjDROP
#portscannerdotipoqueativaobitFIN
/sbin/iptablesAfiltroptcptcpflagsALLFINmlimitlimit2/m
limitburst2mstatestate!ESTABLISHEDjLOGlogprefix
"FINportscanner:"
#descartaopacote
/sbin/iptablesAfiltroptcptcpflagsALLFINmstatestate!ESTABLISHED
jDROP
#portscannerdotipoquehabilitatodasasflagstcp
/sbin/iptablesAfiltroptcptcpflagsALLALLmlimitlimit2/m
limitburst2jLOGlogprefix"ALLportscanner:"
#descartaopacote
/sbin/iptablesAfiltroptcptcpflagsALLALLjDROP
#portscannerdotipoquenohabilitanenhumflag
/sbin/iptablesAfiltroptcptcpflagsALLNONEmlimitlimit2/m
limitburst2jLOGlogprefix"NONEportscanner:"
12
#descartaopacote
/sbin/iptablesAfiltroptcptcpflagsALLNONEjDROP
###################################################################
#################PROTEOCONTRAATAQUESCONHECIDOS##############
###################################################################
#proteocontrasynflood
/sbin/iptablesAfiltroptcpsynmlimitlimit1/sjACCEPT
#proteocontrapingdamorte
/sbin/iptablesAfiltropicmpicmptypeechorequestmlimitlimit1/sj
ACCEPT
#bloqueiaoutrasconexes
/sbin/iptablesAfiltrojDROP
######################################################################
#################POLTICAPARAREPASSEDEPORTAS####################
######################################################################
#liberaorepassedepacotesapenasparaportas53udp(dns),80tcp(http),
#443tcp(https)
/sbin/iptablesAFORWARDptcps192.168.1.0/24dport80jACCEPT
/sbin/iptablesAFORWARDptcps192.168.1.0/24dport443jACCEPT
/sbin/iptablesAFORWARDpudps192.168.1.0/24dport53jACCEPT
#aplicaachainfiltronaINPUT,ouseja,ospacotesquepassarempelachainINPUT
#serodirecionadosparaachainfiltro
/sbin/iptablesAINPUTjfiltro
#aplicaachainfiltronaFORWARD,ouseja,antesdospacotesseremrepassados
(forwarding),serodirecionadospelachainfiltro
/sbin/iptablesAFORWARDjfiltro
####RegrasnatabeladeNAT####
#mascaraospacotesquechegamnainterfaceeth0comdestinoaportatcp80(http)
/sbin/iptablesAPOSTROUTINGtnatptcps192.168.1.0/24oeth1jMASQUERADE
#disponibilizandoacessoaoservidorwebquerodanaporta80e443dohost
192.168.1.50
/sbin/iptablesAPREROUTINGtnatptcpdport80jDNATto192.168.1.50:80
/sbin/iptablesAPREROUTINGtnatptcpdport443jDNATto192.168.1.50:443
}
####FIMDAFUNOstart####
###################################################################
13
###################INICIANDOEPARANDOOSERVIDOR################
###################################################################
if[$#lt1];then
echo$1{start|stop|restart};
exit1;
fi
if[$1==start];then
echoIniciandooservidorfirewall...;
start;
fi
if[$1==stop];then
echoParandooservidorfirewall...;
stop;
fi
if[$1==restart];then
Parandooservidorfirewall...
stop;
IniciandooservidorFirewall...
start;
fi
FIM DO ARQUIVO
Agora preciso configurar o init para executar o script e configurar as rotas durante a inicializao
do sistema.
Salve o arquivo com o nome firewall no diretrio /etc/init.d e crie um link no diretrio e comandos do
init padro. Por exemplo, se o seu init padro est configurado para iniciar no nvel 3, execute o
seguinte comando:
# chmod u+x /etc/init.d/firewall
# ln -s /etc/init.d/firewall /etc/rc3.d/S99firewall
O script ser executado sempre que o sistema for inicializado no init 3.
14
15
16