Guia do Linux/Avançado/Configurações especiais de Rede/Bridge
Bridge
editarUma bridge é uma interface de rede lógica composta por uma ou mais interfaces de rede física operando em nível 2 (enviando pacotes através de MAC adresses, veja [ch-rede.html#s-rede-camadas Camadas de Rede, Seção 4.10]). Sua operação é transparente na rede, podendo ser usada como um switch/firewall, estação de monitoração, etc. Aqui descreverei como montar uma bridge simples e uma aplicação de firewall simples. As possibilidades são diversas e uma configuração bem feita pode detectar ataques, protocolos desconhecidos até vírus complexos de rede.
Requerimentos para a Instalação
editarÉ necessário um dos seguintes requerimentos para se montar uma bridge:
- Kernel com suporte a bridge ativado (na configuração de rede)
- O pacote
bridge-utils
instalado. - patch bridge-nf se desejar usar o netfilter com as interfaces de entrada e saída (como antes de usar a bridge) ao invés de controlar o tráfego apenas pela interface criada pela bridge.
Ative a opção 802.1d Ethernet Bridging na seção Networking Options, recompile e instale seu novo kernel. Caso tenha aplicado o patch bridge nf, aparecerá uma sub opção chamada netfilter (firewalling) support que permitirá que o firewall trabalhe com as interfaces físicas ao invés de somente através da interface virtual criada pela bridge.
OBS: O patch bridge nf viola a RFC de bridges. Mesmo assim ela é a única opção em muitas aplicações, principalmente quando se deseja controlar o tráfego que atravessam as interfaces. Após isto instale o pacote bridge-utils
, ele possui os utilitários necessários para ativar, configurar e monitorar o funcionamento de sua bridge.
Não é necessária ativação do ip_forward para o funcionamento da bridge, uma vez que ela funcionará como uma interface lógica que reúne interfaces de rede físicas.
Configuração da bridge
editarNos exemplos abaixo, eu assumirei a utilização do nome de dispositivo br0
para se referir a bridge no sistema. Siga estes passos para configurar uma bridge em sistemas Debian
:
- Primeiro, desative os blocos no arquivo
/etc/network/interfaces
que configuram as interfaces que serão usadas na bridge (por exemplo,eth0
eeth1
). Elas podem ser comentadas, removidas, ou você poderá comentar a linha auto eth0 e auto eth1 para que ele não ative automaticamente estas interfaces com o ifup -a (executado durante a inicialização). Desta forma, a inicialização destas interfaces poderá somente ser feita manualmente.
- Primeiro, desative os blocos no arquivo
auto br0 iface br0 inet static address 192.168.1.2 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1 bridge_ports eth0 eth1
Note que a interface virtual da brigde (br0
) deve ser configurada com parâmetros válidos de interfaces (assim com uma interface de rede padrão). Note a adição da linha bridge_ports que indica que interfaces de rede serão usadas para fazer a bridge. Caso seja usado o parâmetro all, todas as interfaces físicas de rede serão usadas para fazer bridge (excluindo a lo
).
- Execute o ifdown -a (para desativar as interfaces antigas.
- Execute o ifup br0 para levantar as interface
br0
. O sistema poder demorar um pouco para levantar a bridge (as vezes até 40 segundos) mas isto é normal.
Pronto, você terá uma bridge simples já configurada e funcionando em seu sistema! As interfaces físicas serão configuradas com o IP 0.0.0.0 e estarão operando em modo promíscuo.
Configurações mais avançadas de bridge
editarA bridge permite ainda definir prioridade para utilização de interfaces, além de outras funcionalidades que lhe permitem ajustar a performance da máquina de acordo com sua rede. Um bom exemplo, é quando você deseja criar 2 bridges em uma mesma máquina envolvendo interfaces de rede específicas, uma atendendo a rede 192.168.0.x e outra a rede 192.168.1.x:
auto br0 iface br0 inet static address 192.168.0.2 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 bridge_ports eth0 eth1 auto br1 iface br1 inet static address 192.168.1.2 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.0.1 bridge_ports eth2 eth3 eth4
No exemplo acima, as interfaces eth0
e eth1
fazem parte da bridge br0
e as demais (eth2
, eth3
e eth4
da bridge br1
.
bridge_ports eth2 eth3 bridge_bridgeprio 16385 bridge_portprio eth1 100 bridge_fd 5
Configuração manual da bridge
editarInternamente, o que o ifup
faz é interpretar os parâmetros no arquivo de configuração e executar os comandos do pacote bridge-utils
para ativar a interface da bridge. O utilitário responsável por este processo é o brctl
. Será documentado aqui como ativar uma bridge através deste programa (que servirá para fazer uma bridge em qualquer sistema Linux
).
brctl addbr br0 brctl addif br0 eth0 brctl addif br0 eth1 ifconfig eth0 0.0.0.0 ifconfig eth1 0.0.0.0 ifconfig br0 192.168.0.4
O comando acima ativa uma bridge simples, como o primeiro exemplo. Tenha certeza que as interfaces físicas de rede estão desativadas antes de executar este comando.
Outros parâmetros que podem ser usados com o brctl
:
- setbridgeprio [bridge] [prioridade]
- Define a prioridade da bridge, o valor deve estar entre 0 e 65536 (16 bits). Valores menores definem uma prioridade maior.
- setfd [bridge] [tempo]
- Ajusta o delay da bridge especificada em [tempo] segundos.
- setmaxage [bridge] [tempo]
- Ajusta o tempo máximo de vida da bridge para [tempo] segundos.
- setportprio [bridge] [interface] [prioridade]
- Ajusta a prioridade da [interface] especificada na [bridge]. O valor de prioridade deve estar entre 0 e 255 (8 bits). Quanto menor o valor maior a prioridade. Isto é útil para otimizações o volume de tráfego em máquinas que possuem diversas interfaces configuradas fazendo parte da bridge.
brctl addbr br0 brctl addif br0 eth0 brctl addif br0 eth1 brctl setportprio br0 eth0 50 brctl setportprio br0 eth1 80 brctl setfd br0 2 ifconfig eth0 0.0.0.0 ifconfig eth1 0.0.0.0 ifconfig br0 192.168.0.4
Usando o iptables para construir um firewall na máquina da bridge
editarA construção de um firewall em uma bridge não tem maiores segredos, basta referir-se a interface lógica da bridge para construir suas regras (tendo em mente como uma bridge funciona e como os pacotes atravessarão as interfaces). Caso aplique o patch bridge nf, será possível referir-se as interfaces locais de rede e também a da bridge. Neste caso a interface da bridge será identificada como interface IN ou OUT PHYSIN e as interfaces físicas como PHYSOUT:
Oct 22 09:19:24 router kernel: IN=br0 PHYSIN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:d4:7d:ff:ff:ff:08:00 SRC=192.168.0.4 DST=1982.168.255.255 LEN=238 TOS=0x00 PREC=0x00 TTL=128 ID=23383 PROTO=UDP SPT=138 DPT=138 LEN=218
Mesmo que a bridge não necessite de ip_forward ativado para redirecionar os pacotes através das interfaces, isto será necessário para habilitar o uso do firewall para controlar o tráfego que atravessa as interfaces.
Filtrando pacotes não IP na bridge
editarPara fazer esta tarefa, utilize a ferramenta ebtables
disponível em (http://users.pandora.be/bart.de.schuymer/ebtables/
).