Script de firewall para o gateway da rede

No post anterior mostrei um script de firewall simples, destinado a proteger uma máquina diretamente conectada à Internet. 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.

Fonte: Link

Anúncios

~ por 3c0linux em julho 28, 2010.

 
%d blogueiros gostam disto: