Criando um firewall simples e compartilhando a conexão usando o IPtables
Este artigo aborda o processo de criação de um firewall baseado no iptables, onde o administrador de sistemas poderá bloquear acesso à portas desnecessárias, compartilhar a conexão do servidor com sua rede interna e redirecionar portas.
Parte 2: Compartilhando conexão com a rede interna
Vamos então à segunda receita, para compartilhar a conexão. Ela é ainda mais
simples e também permite ativar ou desativar o compartilhamento a qualquer
momento.
Em primeiro lugar, você deve configurar as suas placas de rede e modem e verificar se tanto a conexão com a Internet quanto a conexão com os micros da rede local estão funcionando normalmente. O compartilhamento da conexão em si pode ser feito com apenas três comandos. Para compartilhar a conexão do modem com a rede local:
# modprobe iptable_nat
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
Para compartilhar uma conexão via ADSL ou cabo instalada na eth0:
# modprobe iptable_nat
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
Para desativar o compartilhamento, você deve usar o comando:
# iptables -t nat -F
Isso mesmo, é só isso... :-)
O compartilhamento é ativado ou desativado imediatamente, sem que seja necessário reiniciar a conexão. Rápido, prático e confiável.
As três linhas respectivamente ativam o módulo nat do iptables, responsável pela tradução de endereços, avisam para o iptables que ele deve direcionar todas as conexões recebidas para a interface ppp0 (o modem) ou eth0 (a primeira placa de rede) e devolver as respostas para os clientes e confirmam a ativação no arquivo de configuração do TCP/IP.
Não faz mal se você acessa via modem e não fica permanentemente conectado. A regra mantém o compartilhamento ativo mesmo que você desconecte e reconecte várias vezes.
Se os clientes da rede já estiverem configurados para acessar a web através do endereço IP usado pelo servidor (192.168.0.1 se você quiser substituir uma máquina Windows compartilhando através do ICS) você já deve ser capaz de acessar a web automaticamente nos demais PCs da rede.
Uma observação é que estas regras não incluem um servidor DHCP, você deve configurar os clientes com endereço IP fixo ou então ativar o serviço DHCPD na sua distribuição. No Mandrake ou Red Hat basta ativar o serviço no painel de controle e o DHCP já irá funcionar automaticamente.
A configuração nos clientes fica:
Em primeiro lugar, você deve configurar as suas placas de rede e modem e verificar se tanto a conexão com a Internet quanto a conexão com os micros da rede local estão funcionando normalmente. O compartilhamento da conexão em si pode ser feito com apenas três comandos. Para compartilhar a conexão do modem com a rede local:
# modprobe iptable_nat
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
Para compartilhar uma conexão via ADSL ou cabo instalada na eth0:
# modprobe iptable_nat
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
Para desativar o compartilhamento, você deve usar o comando:
# iptables -t nat -F
Isso mesmo, é só isso... :-)
O compartilhamento é ativado ou desativado imediatamente, sem que seja necessário reiniciar a conexão. Rápido, prático e confiável.
As três linhas respectivamente ativam o módulo nat do iptables, responsável pela tradução de endereços, avisam para o iptables que ele deve direcionar todas as conexões recebidas para a interface ppp0 (o modem) ou eth0 (a primeira placa de rede) e devolver as respostas para os clientes e confirmam a ativação no arquivo de configuração do TCP/IP.
Não faz mal se você acessa via modem e não fica permanentemente conectado. A regra mantém o compartilhamento ativo mesmo que você desconecte e reconecte várias vezes.
Se os clientes da rede já estiverem configurados para acessar a web através do endereço IP usado pelo servidor (192.168.0.1 se você quiser substituir uma máquina Windows compartilhando através do ICS) você já deve ser capaz de acessar a web automaticamente nos demais PCs da rede.
Uma observação é que estas regras não incluem um servidor DHCP, você deve configurar os clientes com endereço IP fixo ou então ativar o serviço DHCPD na sua distribuição. No Mandrake ou Red Hat basta ativar o serviço no painel de controle e o DHCP já irá funcionar automaticamente.
A configuração nos clientes fica:
- Endereço IP: qualquer endereço dentro da faixa de endereços usada
pelo servidor.
Ex: 192.168.0.3. - Servidor DNS: Os endereços dos servidores DNS do seu provedor.
Ex: 200.177.250.10. - Gateway Padrão: o endereço do servidor.
Ex: 192.168.0.1 - Domínio: o domínio do seu provedor.
Ex: terra.com.br
# Carrega os módulos
modprobe iptables
modprobe iptable_nat
# Compartilha a conexão
modprobe iptable_nat
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
# Abre algumas portas (opcional)
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 1021 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 1080 -j ACCEPT
# Abre para a rede local
iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
# Fecha o resto
iptables -A INPUT -p tcp --syn -j DROP
modprobe iptables
modprobe iptable_nat
# Compartilha a conexão
modprobe iptable_nat
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
# Abre algumas portas (opcional)
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 1021 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 1080 -j ACCEPT
# Abre para a rede local
iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
# Fecha o resto
iptables -A INPUT -p tcp --syn -j DROP
Se você quiser que o PC também não responda a pings, adicione a linha:
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
Mais uma linha interessante de se adicionar, que protege contra pacotes danificados (usados em ataques DoS por exemplo) é:
# iptables -A FORWARD -m unclean -j DROP
(esta linha deve ser adicionada antes das demais)
liberei a porta 80,21 que possuo um servidor apache
e um proftp do mais novo que tem no site
a pergunta e a seguinte agora quero liberar a porta 3128
para a rede interna e nao liberar para a rede externa?
# iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
# iptables -A INPUT -p tcp --destination-port 21 -j ACCEPT
# iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
# iptables -A INPUT -p tcp --syn -j DROP