Isso é bastante fácil de fazer com o iptables. No abaixo, 'wan-iface' é a interface na qual sua conexão WAN está ligada. Dependendo de como ele está conectado, pode ser eth2, ppp0, etc. Além disso, observe que você pode renomear as interfaces Ethernet editando /etc/udev/rules.d/70-persistent-net.rules
- altamente recomendado quando você tem várias. -i lan
é muito mais claro que -i eth0
.
Você pode escrever um script init.d para aplicar essas regras na inicialização ou usar o pacote iptables-persistent. Ou existem vários geradores de regras de firewall empacotados (pessoalmente, eu escrevo as regras do iptables diretamente, já que muitas vezes eu quero fazer coisas estranhas).
Você precisará de uma regra de NAT, se a sua existente já não a cobrir:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wan-iface -j SNAT --to-source external-ip
External-ip é o seu endereço IP real. Se você tiver um dinâmico, altere essa linha para:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wan-iface -j MASQUERADE
Em seguida, você precisará de uma regra de firewall para permitir o tráfego. Estou dando dois aqui, dependendo se seu padrão para encaminhamento é DROP ou não. deve ser descartado, mas ...
iptables -A FORWARD -i eth1 -o wan-iface -j ACCEPT # default is drop
iptables -A FORWARD -i eth1 ! -o wan-iface -j DROP # default is accept
Agora, você só precisa permitir o DHCP. Supondo que seu firewall esteja executando o DHCP e que o DNS esteja na WAN (caso contrário, você precisará permitir que eles falem com o servidor DNS):
iptables -A INPUT -i eth1 -p udp --dport bootps -j ACCEPT
iptables -A INPUT -i eth0 -j DROP # only if your default isn't drop
Isso é, creio eu, a configuração mínima para isso. Você também pode limitar o tráfego que sai para a Internet. Por exemplo, se você quisesse navegar apenas na Web, em vez das regras FORWARD acima, você faria isso (novamente assumindo o DNS na WAN):
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport domain -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p udp --dport domain -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport http -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport https -j ACCEPT
iptables -A FORWARD -i eth1 -j DROP # only if default is accept
Observe que o acima permite três portas, domínio (TCP e UDP, para DNS), http (TCP) e https (TCP).
editar:
Em resposta ao seu esclarecimento:
Parece que nenhum NAT está sendo realizado nesta caixa. Além disso, não há interface WAN, o tráfego sai pela LAN. Não é a melhor configuração, mas factível.
Eu usarei "lan-ip" para indicar o endereço IP da caixa Debian em sua LAN (eth0). Usarei "guest-ip" para indicar o endereço IP da mesma caixa em sua rede de convidados (eth1).
Estou ficando confuso com a sua nomeação de interface enquanto escrevo isso, então vou assumir que você siga meu conselho e renomeie as interfaces para "lan" (eth0) e "guest" (eth1). Se não, você pode encontrar um & substituir.
Parece que atualmente você não tem roteamento ou firewall configurados nessa caixa, então darei regras completas, não apenas as que serão adicionadas. Você pode precisar adicionar mais alguns, é claro.
Você precisará ativar o encaminhamento de IP (edite /etc/sysctl.conf para fazer isso). E ative o filtro de caminho inverso no mesmo arquivo.
Você precisará configurar o DHCP para oferecer serviços em sua rede eth1. Observe que o gateway padrão que ele armazena (somente para a rede de convidado eth1) precisará ser guest-ip, não 192.168.7.1.
Sua regra de NAT será um pouco diferente. Seria preferível não ter isso e, em vez disso, fazer isso em 192.168.7.1, mas vou adivinhar que isso não é possível. Se for possível, pule esta regra nat, adicione-a no 7.1 e adicione uma rota para 192.168.1.0/24 via lan-ip.
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o lan -j SNAT --to-source lan-ip
agora, já que você não tem um firewall configurado atualmente, as coisas padrão a serem negadas. Esta é a maneira mais segura de fazer as coisas, geralmente.
iptables -P INPUT DROP # default for traffic to firewall (this box)
iptables -P FORWARD DROP # default for forwarded traffic
iptables -F # clear rules
iptables -X # delete custom chains
iptables -t nat -F # same, but for nat table
iptables -t nat -X
iptables -A INPUT -i lo -j ACCEPT # let the box talk to itself. Important.
Neste ponto, sua caixa ficará completamente inacessível. Não é o que você quer. As próximas regras consertam isso. Os dois primeiros configuram o rastreamento de conexão, permitindo que os pacotes façam parte de uma conexão existente (ou muito próximos dela)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Então, vamos supor agora que você confia nas máquinas na LAN do escritório e permitir todo o tráfego delas. Você pode alterar isso para regras mais restritas, se desejar. Observe que a regra FORWARD permitirá que você acesse máquinas na rede guest da LAN do escritório. Se isso não for desejado, omita-o.
iptables -A INPUT -i lan -j ACCEPT
iptables -A FORWARD -i lan -o guest -j ACCEPT
Agora, para permitir algum tráfego da rede de convidados. Primeiro, você precisa permitir o DHCP.
iptables -A INPUT -i guest -p udp --dport bootps -j ACCEPT # dhcp
Em seguida, suponho que você não queira permitir o acesso de convidado a nenhuma das suas redes privadas. Então, vamos deixar todo o tráfego de visitantes para o espaço RFC1918 (privado).
iptables -A FORWARD -i guest -d 10.0.0.0/8 -j DROP
iptables -A FORWARD -i guest -d 172.16.0.0/12 -j DROP
iptables -A FORWARD -i guest -d 192.168.0.0/16 -j DROP
Como deixamos de usar todo o espaço de endereço privado, o restante é público. Então permita. Esta linha é um pouco assustador, como se uma das linhas anteriores desaparecesse, seria um problema.
iptables -A FORWARD -i guest -o lan -j ACCEPT
Você poderia, é claro, limitar isso a protocolos e portas específicas (como no exemplo da navegação na Web).
Você também pode adicionar regras para registrar pacotes descartados, etc.