Script de firewall para o gateway da rede

Vamos agora aprimorar a configuração, gerando um script de firewall mais elaborado, voltado para um servidor de rede local, configurado como gateway da rede.

Este é um exemplo de script de firewall que inclui as regras para compartilhar a conexão e ativar o proxy transparente. Ao usá-lo, comente as linhas que não se aplicam à sua instalação e substitua o “eth1” e o “eth0” pelas interfaces da Internet e da
rede local, caso diferente:

#!/bin/bash
iniciar(){
    # Compartilha a conexão:
    modprobe iptable_nat
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    echo "Compartilhamento ativado"
    # Proxy transparente:
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
    echo "Proxy transparente ativado"
    # Permite conexões na interface de rede local e na porta 22:
    iptables -A INPUT -i eth0 -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    # Regras básicas de firewall:
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
    iptables -A INPUT -p tcp --syn -j DROP
    # Bloqueia as portas UDP de 0 a 1023:
    iptables -A INPUT -p udp --dport 0:1023 -j DROP
    echo "Regras de firewall e compartilhamento ativados"
}
parar(){
    iptables -F
    iptables -t nat -F
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    echo 0 > /proc/sys/net/ipv4/ip_forward
    echo "Regras de firewall e compartilhamento desativados"
}
case "$1" in
    "start") iniciar ;;
    "stop") parar ;;
    "restart") parar; iniciar ;;
    *) echo "Use os parâmetros start ou stop"
esac

Em relação ao script do post anterior, Veja que agora a função “parar” do script inclui também os comandos “iptables -t nat -F” e “echo 0 > /proc/sys/net/ipv4/ip_forward”, destinados a limpar as regras de roteamento e desativar o encaminhamento de
pacotes quando o script é desativado, parando também o compartilhamento da conexão.

Outra novidade é a regra que bloqueia as portas UDP de 0 a 1023, adicionada no final do script. Ao contrário do TCP, o protocolo UDP não é baseado na abertura de conexões, os dados são simplesmente enviados diretamente, sem serem precedidos por um
pacote SYN ou qualquer aviso. Por isso, não é possível utilizar uma regra que bloqueie a abertura de novas conexões UDP mas permita respostas a conexões iniciadas por você, como no caso da “iptables -A INPUT -p tcp –syn -j DROP”. No caso das portas UDP é
tudo ou nada, ou seja, ou você mantém a porta aberta para qualquer tipo de pacote, ou a fecha completamente.

Não podemos simplesmente bloquear todas as portas UDP, pois elas são usadas para o recebimento de requisições DNS. Você pode fazer o teste limpando as regras de firewall e usando a regra “iptables -A INPUT -p tcp –syn -j DROP”, que fecha todas as
portas UDP; tente navegar e você verá que a resolução de nomes parará de funcionar até que você remova a regra usando o “iptables -F”. Entretanto, podemos bloquear as portas UDP privilegiadas, que são as usadas pelos serviços conhecidos. Este acaba sendo
um bom meio-termo.

Ver Mais

Esta postagem foi modificada pela última vez em 18/11/2010 18:10

Postagem relacionada