Aqui está uma configuração que usei com grande sucesso em uma situação quase idêntica à sua. Eu entendo que suas circunstâncias são as seguintes (por favor corrija-me se eu estiver errado):
- Os clientes na LAN têm acesso total à Internet. As conexões de saída dos clientes da rede local são mascaradas para o endereço IP público fornecido ao seu servidor / roteador pelo seu provedor de serviços de Internet.
- Os clientes na LAN têm acesso total ao seu servidor por meio de sua interface conectada à rede local (eth1).
- Todo o tráfego de entrada da Internet (via eth0) é bloqueado, exceto: (1) tráfego envolvido em uma conexão preexistente, (2) tráfego vinculado às portas TCP 22 ou 80 ou (3) solicitações de ping ICMP.
- As portas TCP 22 e 80 estão abertas para a Internet (via eth0) e são gerenciadas pelo seu servidor.
- Seu servidor responde às solicitações de ping ICMP da Internet.
- Por conveniência, suponho que seu intervalo de endereços de rede LAN seja
10.10.10.0/24
. Modifique o script abaixo conforme necessário para usar seu endereço real.
Primeiro, verifique se o encaminhamento de IP está ativado. Em /etc/sysctl.conf
, você deve ter isto:
net.ipv4.ip_forward=1
Em seguida, crie suas regras do netfilter de acordo com o seguinte script:
#!/bin/sh
IPT=/sbin/iptables
# Flush all chains, to start with a clean slate.
$IPT -F
$IPT -t nat -F
# Set filter Policies. By default, DROP everything.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# Set server INPUT rules.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth1 -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
# Set server OUTPUT rules.
$IPT -A OUTPUT -j ACCEPT
# Set router FORWARD rules.
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i eth1 -o eth0 -j ACCEPT
# Masquerade outgoing LAN traffic.
$IPT -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
Isso deve ser o suficiente para criar uma estrutura.