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.
Essa configuração é uma das mais utilizadas em redes de pequenas e médias empresas, como podemos ver, temos o nosso roteador ligado diretamente à Internet com o ip 200.87.0.1/24 e entre a Rede Interna e a DMZ foi colocado nosso Firewall Bridge para filtragem de pacotes. Note que o ip do gateway de saída dos servidores da DMZ é o próprio roteador.
Para construir a ponte vamos executar alguns comandos como root:
Primeiro criamos a Bridge (veja isso com o comando "brctl show") e depois adicionamos as interfaces que serão utilizadas por esta bridge. Agora vamos apenas levantar as interfaces de rede:
# ifconfig eth0 0.0.0.0
# ifconfig eth1 0.0.0.0
Neste momento vamos configurar o nosso Bridge para ser o gateway padrão da Rede Interna, sendo assim:
# ifconfig br0 200.87.0.2 netmask 255.255.255.0
E adicionar o ip de comunicação com a Rede Interna:
# ip addr add 10.87.0.1/24 dev br0
# route add default gw 200.87.0.1
Pronto, temos nosso Bridge funcionando e roteando todos os pacotes corretamente, agora se faz necessário ajustar as configurações do Firewall para realmente termos nossa proteção invisível.
[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