Product SiteDocumentation Site

B.4. Configurando uma ponte firewall

Esta informação foi contribuição de Francois Bayart para ajudar os usuário a configurar um Linux como ponte/firewall com o kernel 2.4.x e iptables. Patches do kernel não são mais necessários, uma vez que o código passou a fazer parte do kernel do Linux.
Para configurar o kernel com o suporte necessário, execute make menuconfig ou make xconfig. Na seção Networking options, ative as seguintes opções:
[*] Network packet filtering (replaces ipchains)
[ ]   Network packet filtering debugging (NEW)
<*> 802.1d Ethernet Bridging
[*]   netfilter (firewalling) support (NEW)
Cuidado: você deve desativar isso se você quiser aplicar algumas regras de firewall ou o iptables não funcionará:
[ ]   Network packet filtering debugging (NEW)
Próximo passo, adicione as opções corretas na seção IP: Netfilter Configuration. Então, compile e instale o kernel. Se você quiser fazer isso no jeito do Debian, instale o kernel-package e execute make-kpkg para criar um pacote Debian customizado do kernel que possa ser instalado no servidor usando o dpkg. Uma vez que o novo kernel é compilado e instalado, instale o pacote bridge-utils.
Quando estes passos forem feitos, você pode completar a configuração de sua ponte. A próxima seção apresenta duas possíveis configurações para a ponte, cada uma com um mapa de rede hipotético e os comandos necessários.

B.4.1. Uma ponte fornecendo capacidades de NAT e firewall

A primeira configuração usa a ponte como um firewall com tradução de endereços de rede (NAT) que protege o servidor e os clientes da rede interna. Um diagrama da configuração da rede é mostrado abaixo:
Internet ---- router ( 62.3.3.25 ) ---- bridge (62.3.3.26 gw 62.3.3.25 / 192.168.0.1)
                                          |
                                          |
                                          |---- WWW Server (62.3.3.27 gw 62.3.3.25)
                                          |
                                          |
                                         LAN --- Zipowz (192.168.0.2 gw 192.168.0.1)
Os seguintes comando mostram como esta ponte pode ser configurada.
# Create the interface br0
/usr/sbin/brctl addbr br0

# Add the Ethernet interface to use with the bridge
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1

# Start up the Ethernet interface
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0

# Configure the bridge ethernet
# The bridge will be correct and invisible ( transparent firewall ).
# It's hidden in a traceroute and you keep your real gateway on the 
# other computers. Now if you want you can config a gateway on your 
# bridge and choose it as your new gateway for the other computers.

/sbin/ifconfig br0 62.3.3.26 netmask 255.255.255.248 broadcast 62.3.3.32

# I have added this internal IP to create my NAT 
ip addr add 192.168.0.1/24 dev br0
/sbin/route add default gw 62.3.3.25

B.4.2. Uma ponte fornecendo capacidades de firewall

Uma segunda possível configuração é um sistema que funciona como um firewall transparente para a LAN com um espaço de endereços IP públicos.
Internet ---- router (62.3.3.25) ---- bridge (62.3.3.26)
                                        |
                                        |
                                        |---- WWW Server (62.3.3.28 gw 62.3.3.25)
                                        |
                                        |
                                        |---- Mail Server (62.3.3.27 gw 62.3.3.25)
Os seguintes comando mostram como esta ponte pode ser configurada.
# Create the interface br0
/usr/sbin/brctl addbr br0

# Add the Ethernet interface to use with the bridge
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1

# Start up the Ethernet interface
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0

# Configure the bridge Ethernet
# The bridge will be correct and invisible ( transparent firewall ).
# It's hidden in a traceroute and you keep your real gateway on the 
# other computers. Now if you want you can config a gateway on your
# bridge and choose it as your new gateway for the other computers.

/sbin/ifconfig br0 62.3.3.26 netmask 255.255.255.248 broadcast 62.3.3.32
Se você seguir as rotas para o Linux Mail Server, não enxergará a ponte. Se você quiser acessar a ponte com o ssh, você deve ter um gateway ou acessar um outro servidor, como o "Mail Server", e então conectar à ponte através de uma placa de rede interna.

B.4.3. Regras básicas do IPtables

As regras básicas a seguir podem ser usadas em qualquer uma das duas configurações mostradas acima.

Exemplo B.1. Regras básicas do IPtables

  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

  # Some funny rules but not in a classic Iptables sorry ...
  # Limit ICMP 
  # iptables -A FORWARD -p icmp -m limit --limit 4/s -j ACCEPT
  # Match string, a good simple method to block some VIRUS very quickly
  # iptables -I FORWARD -j DROP -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe"

  # Block all MySQL connection just to be sure
  iptables -A FORWARD -p tcp -s 0/0 -d 62.3.3.0/24 --dport 3306 -j DROP

  # Linux Mail Server Rules

  # Allow FTP-DATA ( 20 ) , FTP ( 21 ) , SSH ( 22 ) 
  iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.27/32 --dport 20:22 -j ACCEPT

  # Allow the Mail Server to connect to the outside
  # Note: This is *not* needed for the previous connections 
  # (remember: stateful filtering) and could be removed.
  iptables -A FORWARD -p tcp -s 62.3.3.27/32 -d 0/0 -j ACCEPT

  # WWW Server Rules

  # Allow HTTP ( 80 ) connections with the WWW server
  iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.28/32 --dport 80 -j ACCEPT

  # Allow HTTPS ( 443 ) connections with the WWW server
  iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.28/32 --dport 443 -j ACCEPT

  # Allow the WWW server to go out
  # Note: This is *not* needed for the previous connections 
  # (remember: stateful filtering) and could be removed.
  iptables -A FORWARD -p tcp -s 62.3.3.28/32 -d 0/0 -j ACCEPT