A segurança é algo preocupante para os administradores de sistema. Estamos acostumados a ver aquele firewall que está ali, na porta de saída da sua rede, apenas servindo de gateway para a internet e deixando trafegar dados sem qualquer controle! Vamos mostrar como criar um firewall invisível utilizando bridges que protege sua rede de ataques.
Firewall é o nome dado em uma rede de computadores ao sistema que tem por função regular o tráfego de rede entre redes distintas e controlar a transmissão e/ou recepção de dados de uma rede a outra. Dentro deste conceito incluem-se, geralmente, os filtros de pacotes e os proxy de protocolos.
É utilizado para gerenciar o tráfego de tal forma que ele possa fluir de um domínio de rede para outro. Apesar de se tratar de um conceito geralmente relacionado a proteção de um sistema de dados contra invasões, o firewall não possui capacidade de analisar toda a extensão do protocolo, ficando geralmente restrito ao nível 4 da camada OSI. (Wikipédia modificado)
Objetivos
Nosso objetivo é fornecer uma forma de criar um firewall que seja invisível na rede, ou seja, um invasor ou atacante poderá até tentar invadir sua rede, mas nunca vai saber o porque dos pacotes dele terem sumido sem mais nem menos. E, o que torna isso ainda mais interessante é o fato deste tipo de servidor não ser detectado nos famosos programas de rede que mostram a rota que os pacotes tomam, algo como o traceroute ou o tcptraceroute, veja o exemplo abaixo:
traceroute: Warning: www.google.com.br has multiple addresses; using 72.14.209.104
traceroute to www.l.google.com (72.14.209.104), 30 hops max, 40 byte packets
1 200.129.206.65 (200.129.206.65) 0.222 ms 0.435 ms 0.376 ms
2 200.129.202.33 (200.129.202.33) 1.427 ms 0.631 ms 0.550 ms
3 200.129.202.129 (200.129.202.129) 0.854 ms 0.835 ms 1.123 ms
4 ms-bb3.pop-ms.rnp.br (200.129.207.129) 0.887 ms 0.696 ms 1.285 ms
5 se-1-1-0-r2-df.bkb.rnp.br (200.143.253.38) 29.427 ms 30.274 ms 29.224 ms
6 fe-4-7-r3-rj.bkb.rnp.br (200.143.252.177) 29.611 ms 30.734 ms 30.627 ms
7 so-0-0-0-r1-rs.bkb.rnp.br (200.143.252.13) 73.548 ms 73.760 ms 73.004 ms
8 so-0-0-0-r1-sc.bkb.rnp.br (200.143.252.5) 89.677 ms 89.682 ms 83.188 ms
9 so-1-0-0-r1-pr.bkb.rnp.br (200.143.252.1) 85.621 ms 83.971 ms 85.074 ms
10 so-0-0-0-r1-sp.bkb.rnp.br (200.143.252.10) 90.595 ms 110.158 ms 89.951 ms
11 ge-3-2-0.ar2.GRU1.gblx.net (64.209.94.161) 90.705 ms * 94.156 ms
12 72.14.197.237 (72.14.197.237) 218.196 ms 219.096 ms 219.244 ms
13 64.233.174.86 (64.233.174.86) 221.272 ms 64.233.174.84 (64.233.174.84) 218.373 ms 221.536 ms
14 66.249.95.115 (66.249.95.115) 220.313 ms 221.741 ms 72.14.238.153 (72.14.238.153) 219.390 ms
15 216.239.47.165 (216.239.47.165) 238.173 ms 220.458 ms 72.14.236.162 (72.14.236.162) 223.665 ms
16 bf-in-f104.google.com (72.14.209.104) 218.752 ms 218.509 ms 219.558 ms
Acompanhando o trace, vemos todos os roteadores envolvidos na rota até o nosso alvo em questão.
[1] Comentário enviado por altairmsouza em 30/05/2007 - 09:59h
Condector,
show de bola esse seu artigo, muito bom vou tentar implementar.
tenho uma duvida:
- Hoje tenho um modem d-link como bridge e meu server (debian etch) com ppp0, com isso faço roteamento pelo servidor, um amigo ajudou a configurar pelo shorewall, direcionando a porta 3389 udp e tcp pra um outro servidor como WTS (nao sei como ele fez isso), mas ficou show.
Como posso fazer isso no braço pelo iptables que voce usou pra bloqueio, contudo agora com direcionamento de portas ? , detalhe uso ip dinamico adsl, contudo instalei o no-ip pra facilitar.
[2] Comentário enviado por condector em 30/05/2007 - 14:04h
Certo, redirecionamento de portas se você está falando na mesma rede... é apenas um redirect na porta.. agora se você está falando de uma rede interna que recebe a porta, você deve fazer NAT como no exemplo, de acordo com nosso amigo Foca Linux:
[4] Comentário enviado por demattos em 28/01/2008 - 21:08h
boa noite, legal seu artigo e me despertou muita curiosidade e sertamente vai resolver um probelma q havia no meu servidor, mas uma duvida me veio a mente, meu server tem duas interface eth0 e eth1 e uma ppp0 gerado pelo meu discador, se eu querer aplicar este metodo mudaria muito as regras de firewall q tenho hj adicionado, um exemplo e o controlo o ip amarrado ao mac dos usuarios da rede. e controle de entrada e saida do servidor do meio externo ( Internet ) e regras de nat adicionadas.
[5] Comentário enviado por condector em 28/01/2008 - 22:57h
Olha, você utilizar um firewall bridge neste caso com as 3 interfaces pode ser um pouco mais complexo, porque você terá 3 pontes na rede.. por causa da 3 interface.. o ideal seria manter uma bridge entre 2 e usar a terceira com NAT para um rede privada..não entendi bem o seu problema.
[7] Comentário enviado por condector em 21/03/2008 - 23:36h
Sim, é totalmente possível. Agora, se você quiser que esse firewall invisível também seja o gateway da rede, dai você vai perder a "invisibilidade" dele, atribuindo um ip a bridge.
[13] Comentário enviado por condector em 10/06/2008 - 07:16h
Amigo, não sei quanto ao CentOS 5.0 final, mas no Debian Etch eu precisei recompilar apenas para ativar o modo bridge, talvez seja necessário o mesmo no seu caso.
[15] Comentário enviado por linus black em 13/09/2009 - 14:56h
Bom seu artigo.
Mas eu uzava o slackware e tinha este firewall aqui instalado e funcionando, da uma olhada.
#!/bin/sh
#
# rc.firewall .By Linus Black For slackware12.2
#
#
#
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_LOG
modprobe ipt_limit
modprobe ipt_state
modprobe ipt_REDIRECT
modprobe ipt_owner
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_gre
#
#Limpa as Regras
iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
#
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/log_martians
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
echo "1800" > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/tcp_ecn
echo "1" > /proc/sys/net/ipv4/tcp_timestamps
#
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "=========================================================|"
echo "|:INICIANDO A CONFIGURAÇÃO DO FIREWALL NETFILTER ATRAVÉS:|"
echo "|: DO IPTABLES :|"
echo "=========================================================|"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
#
#Politicas Padrao
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#
### Ativando Protecoes Contra Ataques ###
# 1 - Protecao contra Trinoo
iptables -N TRINOO
iptables -A TRINOO -m limit --limit 1/s -j LOG --log-level 6 --log-prefix "FIREWALL(Prot. Trinoo): "
iptables -A TRINOO -j DROP
iptables -A INPUT -p tcp -i eth0 --dport 27444 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 27665 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 31335 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 34555 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 35555 -j TRINOO
echo "ativado o bloqueio a tentativa de ataque do tipo Trinoo"
echo "ON .................................................[ OK ]"
#
# 2 - Protecao contra Trojans
iptables -N TROJAN
iptables -A TROJAN -m limit --limit 1/s -j LOG --log-level 6 --log-prefix "FIREWALL(Prot. Trojan): "
iptables -A TROJAN -j DROP
iptables -A INPUT -p tcp -i eth0 --dport 666 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 666 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 4000 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 6000 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 6006 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 16660 -j TROJAN
echo "ativado o bloqueio a tentativa de ataque do tipo Trojan"
echo "ON .................................................[ OK ]"
#
# 3 - Protecao contra Worms
iptables -A FORWARD -p tcp --dport 135 -i eth0 -j REJECT
echo "ativado o bloqueio a tentativa de ataque do tipo Worms"
echo "ON .................................................[ OK ]"
#
# 4 - Protecao contra Syn-Flood
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
echo "ativado o bloqueio a tentativa de ataque do tipo Syn-Flood"
echo "ON .................................................[ OK ]"
#
# 5 - Protecao contra Ping da Morte
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo "ativado o bloqueio a tentativa de ataque do tipo ping "
echo "ON .................................................[ OK ]"
#
# 6 - Protecao contra Port Scanners
iptables -N SCANNER
iptables -A SCANNER -m limit --limit 1/s -j LOG --log-level 6 --log-prefix "FIREWALL(Port Scanner): "
iptables -A SCANNER -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL NONE -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL ALL -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i eth0 -j SCANNER
iptables -A INPUT -p udp -s 0/0 -i eth0 --dport 33435:33525 -j REJECT
iptables -A INPUT -m state --state INVALID -j REJECT
echo "ativado o bloqueio a tentativa de ataque do tipo Scanners"
echo "ON .................................................[ OK ]"
#
#Rotiamento e redirecionamento
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE
echo "ativado o Rotiamento"
echo "ON .................................................[ OK ]"
#Liberando rrede interna
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -s 192.168.0.0/16 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.0.15 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.0.15 -p tcp --dport 80 -j ACCEPT
#Mantendo a coneo
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# BLOQUEA O QUE NAO SE ENCAIXA NAS REGRAS ACIMA
iptables -A INPUT -p tcp --syn -j DROP
iptables -P FORWARD DROP
#
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "=========================================================|"
echo "|: CARREGAMENTO BEM SUSSEDIDO :|"
echo "|: DO IPTABLES :|"
echo "=========================================================|"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo ":::::::::::::::::::BY LINUS BLACK:::::::::::::::::::::::::"
echo "::::::::::::::::::::::::ASTEC CO.:::::::::::::::::::::::::"
Ele é uma miselanea de tudo de bom que eu achei pesquizando na nete, bom e o segunte .
No debian não rola nesta config que esta.
Da para dar uma analizada para que eu adapte ele para debian.
Pois ta dando muita dor de cabeça e ele vai rodar no debian etch com squid sarg dhcp3.
Obrigado des de já.
[16] Comentário enviado por anderson.lilico em 18/09/2009 - 14:11h
Como eu faço para liberar a internet também para o firewall transparente?, a rede interna consegue navegar, mas o firewall em sim não. Muito bom artigo