# Guia do Linux/Avançado/Configurações especiais de Rede/Bridge
## Bridge

Uma 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

É 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

Nos 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 e eth1). 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.
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

A 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:
No exemplo acima, as interfaces eth0 e eth1 fazem parte da bridge br0 e as demais (eth2, eth3 e eth4 da bridge br1.

### Configuração manual da bridge

Internamente, 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).
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.

### Usando o iptables para construir um firewall na máquina da bridge

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

Para fazer esta tarefa, utilize a ferramenta ebtables disponível em (http://users.pandora.be/bart.de.schuymer/ebtables/).