Criando um Firewall transparente com Bridges no Debian Etch

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.

[ Hits: 61.488 ]

Por: Brivaldo Alves da Silva Jr em 30/05/2007 | Blog: http://blog.bibliotecaunix.org/


Adicionando as regras do firewall



A idéia aqui é mostrar uma versão de Firewall super simples que foi retirada daqui [1]. Vamos ao nosso exemplo:

#!/bin/bash
#
# Micro-Firewall para Bridge
#
# Adaptado por Condector <condector at gmail dot com>
#

iptables -F FORWARD
iptables -P FORWARD DROP
iptables -A FORWARD -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


# Configuração do FTP
FTP_IP="200.87.0.6/32"

#Conexão com o FTP vindo da Internet ==>
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d $FTP_IP --dport 20:21 -j ACCEPT

#Conexão do FTP indo para a Internet <==
iptables -A FORWARD -p tcp -s $FTP_IP -d 0/0 -j ACCEPT


# Configuração do WWW
WWW_IP="200.87.0.5/32"

#Conexão com o WWW vindo da Internet ==>
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d $WWW_IP --dport 80 -j ACCEPT #(HTTP)
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d $WWW_IP --dport 443 -j ACCEPT #(HTTPS)

#Conexão do WWW indo para a Internet <==
iptables -A FORWARD -p tcp -s $WWW_IP -d 0/0 -j ACCEPT

Baseado nestas configurações fica até fácil escrever um programinha em Shell Script para tornar a configuração de servidores genéricos muito mais simples.

[1] http://www.debian.org/doc/manuals/securing-debian-howto/ap-bridge-fw.pt-br.html

Links relacionados

Alguns links com textos interessantes:
Não deixem de visitar nossa Wiki: www.debian-ms.org, com este material em constante atualização:
Até a próxima.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Pacotes necessários
   3. Configurando o Bridge
   4. Adicionando as regras do firewall
Outros artigos deste autor

Mantendo seus dados em segurança com o EncFS

Configurando o Stardict com dicionário do Babylon

Melhorando a segurança do Firewall com Bridges usando Snort_Inline no Debian Etch

Controle de banda de domínios virtuais no Debian Etch

Leitura recomendada

Montando regras iptables

Ensinando seu servidor a ler emails e liberar acesso SSH

Trabalhando com CARP nos BSD's

Introdução ao Firewall Linux

Criando um firewall simples e compartilhando a conexão usando o IPtables

  
Comentários
[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.

valew

[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:

iptables -t nat -A PREROUTING -s IP_DO_MODEM -p tcp --sport 3128 -j DNAT --to-destination 10.87.0.15:PORTA_DESTINO

Isso deve funcionar no seu caso.

[3] Comentário enviado por condector em 30/05/2007 - 14:05h

Só uma coisinha.. da uma olhada direitinho no foca Linux avançado, aonde fala sobre Iptables... lá tem tudo explicado.

[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.

Obrigado



[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.

Não por isso.

[6] Comentário enviado por uiliangurjon em 21/03/2008 - 15:50h

Cara ... gostei muito do artigo .... mas surgiu uma dúvida tem como implementar o proxy transparentes na maquina firewall????




Valeu

[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.

[8] Comentário enviado por celsof2 em 26/03/2008 - 05:53h

esta 10 o seu artigo

[9] Comentário enviado por condector em 26/03/2008 - 20:48h

Obrigado celsof2. Espero estar trazendo um artigo sobre balanceamento de carga e meu script em python para balanceamento inteligente.

[10] Comentário enviado por globoleo em 01/05/2008 - 18:04h

?comentario= essas interfaces ip, tem haver com a minha rede ???
ou apenas simbolicos??

[11] Comentário enviado por condector em 01/05/2008 - 19:40h

Não entendi a sua pergunta.

[12] Comentário enviado por fabinho08 em 09/06/2008 - 21:40h

Para o CentOS 5.0 é preciso recompilar o Kernel ?

[[email protected] rc.d]# uname -a
Linux firewall.loca.sz 2.6.18-8.el5 #1 SMP Thu Mar 15 19:57:35 EDT 2007 i686 i686 i386 GNU/Linux

Pois instalei o bridge-ultils e iprout mas quando rodo arquivo aparece :

bridge br0 does not exist!
bridge br0 does not exist!
SIOCSIFADDR: Dispositivo inexistente
br0: interface desconhecida: Dispositivo inexistente
SIOCSIFNETMASK: Dispositivo inexistente
SIOCGIFADDR: Dispositivo inexistente
SIOCSIFBROADCAST: Dispositivo inexistente
Cannot find device "br0"

[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.

[14] Comentário enviado por drakula em 26/05/2009 - 10:54h

ja ouviu falar do HLBR ele faz tudo isso e ja esta "pronto" apenas alguns ajustes!

[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


Contribuir com comentário