Script de firewall não funciona, pq ?
Olá pessoal, será que seria possivel uma mãozinha aqui :
Estou desenvolvendo um script para firewall que bloqueia/libera
portas, dá acesso transparente a alguns ips, etc...
O script funciona perfeitamente no servidor onde coloco, porém quando
vou a uma estação e ponho tal servidor como gateway simplesmente não
funciona.
Sei que tá funcionando porque faço um ssh neste servidor e as regras
alí estão funcionando sem problemas, além disso, coloquei até um
proxy lá e com o proxy tá funcionando.
Vou colar aqui o script, só em suas regras e se alguem for ninja em
iptables e puder me dizer qual é o problema, eu seria muito grato.
Gostaria de dizer que comentei todas as linhas para depurar e mesmo
que eu dê um :
$IPTABLES -t nat -A POSTROUTING -o $WAN -j MASQUERADE
para mascarar tudo, não adianta.
Falha com DNS estão descartados.
Qualquer ajuda será bem vinda.
#
# Inicio do Script
#
# Declaração de variaveis
IPTABLES="/sbin/iptables"
FWDIR="$FIREWALL/config"
# criando arquivos importantes para servirem de samples
. /home/servidor/fw-scripts/firewall.files
# Interfaces de Rede
# Se precisar mudar a ordem das placas fisicamente, entao
# edite o arquivo :
# /etc/udev/rules.d/70-persistent-net.rules
LAN=eth1
WAN=eth0
REDE_INTERNA="192.168.0.0/16"
# Os diversos módulos do iptables são chamdos através do modprobe
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ipt_state
modprobe ipt_multiport
modprobe iptable_mangle
modprobe ipt_tos
modprobe ipt_limit
modprobe ipt_mark
modprobe ipt_MARK
# Mensagem de inicialização do script
echo "########################################"
echo "# Script de Firewall - v2010.05 by Hamacker #"
echo "########################################"
$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t mangle -F
$IPTABLES -t nat -F
$IPTABLES -X
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
echo "Ativando o redirecionamento entre as placas de rede (ip_forward)"
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "Ativando entrada/saida da interface de loopback"
$IPTABLES -I INPUT -i lo -j ACCEPT
$IPTABLES -I OUTPUT -o lo -j ACCEPT
echo "Liberando portas do servidor ($WAN):"
while read LINHA ; do
PORTA=`semremarks "$LINHA"`
if [ "$PORTA" != "" ] ; then
echo -e "\tPorta : $PORTA"
$IPTABLES -A INPUT -p tcp --dport $PORTA -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport $PORTA -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --sport $PORTA -j ACCEPT
fi
done <"$LISTA_PORTAS_LIBERADAS"
$IPTABLES -I INPUT -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -I INPUT -m state --state RELATED -j ACCEPT
$IPTABLES -I OUTPUT -p icmp -o $WAN -j ACCEPT
$IPTABLES -I INPUT -p icmp -j ACCEPT
echo "Redirecionando portas ($WAN) a outros servidores :"
while read LINHA ; do
i=`semremarks "$LINHA"`
if [ "$i" != "" ] ; then
REDIPROTO=`echo $i | cut -d ';' -f 1` #recebe o protocolo a ser
redirecionado
REDIPORTA=`echo $i | cut -d ';' -f 2` #recebe a porta a ser redirecionado
REDIP=`echo $i | cut -d ';' -f 3` #recebe o ip a ser redirecionado
REDISERVICO=`echo $i | cut -d ';' -f 4` #recebe o nome do serviço
REDIHOST=`echo $i | cut -d ';' -f 5` #recebe o nome do host
echo -e "\t$WAN:$REDIPORTA($REDISERVICO) ->$REDIP($REDIHOST)"
$IPTABLES -A FORWARD -p $REDIPROTO --dport $REDIPORTA -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p $REDIPROTO -i $WAN --dport
$REDIPORTA -j DNAT --to $REDIP
fi
done <"$LISTA_REDIRECIONAMENTOS"
echo "Bloqueando MacAddr da lista $LISTA_MACLIST_BLOQUEADOS :"
echo "(este bloqueio precede outras permissoes)"
while read LINHA ; do
MACSOURCE=`semremarks "$LINHA"`
if [ "$MACSOURCE" != "" ] ; then
echo -e "\tBloqueado MacAddr:$LINHA"
$IPTABLES -t filter -A FORWARD -m mac --mac-source $MACSOURCE -j DROP
$IPTABLES -t filter -A INPUT -m mac --mac-source $MACSOURCE -j DROP
#$IPTABLES -t filter -A PREROUTING -m mac --mac-source $MACSOURCE -j DROP
fi
done < "$LISTA_MACLIST_BLOQUEADOS"
echo "Liberando IPs/Sites com acesso transparente e direito"
while read LINHA ; do
LIBERAR_SITE=`semremarks "$LINHA"`
if [ "$LIBERAR_SITE" != "" ] ; then
echo -e "\tSite transparente : $LINHA"
$IPTABLES -t nat -A POSTROUTING -s $REDE_INTERNA -d $LIBERAR_SITE
-j MASQUERADE
fi
done <"$SQUIDACL/sites_diretos.txt"
echo "Liberando IPs transparentes fixos a partir de
$LISTA_IP_TRANSPARENTES_FIXO"
while read LINHA ; do
LIBERAR_IP=`semremarks "$LINHA"`
if [ "$LIBERAR_IP" != "" ] ; then
echo -e "\tIP transparente [fixo] : $LINHA"
$IPTABLES -t nat -A POSTROUTING -s $LIBERAR_IP -j MASQUERADE
fi
done <"$LISTA_IP_TRANSPARENTES_FIXO"
echo "Liberando IPs transparentes temporarios a partir de
$LISTA_IP_TRANSPARENTES_TEMP"
while read LINHA ; do
LIBERAR_IP=`semremarks "$LINHA"`
if [ "$LIBERAR_IP" != "" ] ; then
echo -e "\tIP transparente [temp] : $LINHA"
$IPTABLES -t nat -A POSTROUTING -s $LIBERAR_IP -j MASQUERADE
fi
done <"$LISTA_IP_TRANSPARENTES_TEMP"
echo "Bloqueando o acesso de nossa rede a algumas redes externas :"
while read LINHA ; do
SITE=`semremarks "$LINHA"`
if [ "$SITE" != "" ] ; then
echo -e "\tSite :$SITE"
$IPTABLES -t filter -A FORWARD -s $REDE_INTERNA -d $SITE -j DROP
$IPTABLES -t filter -A FORWARD -s $SITE -d $REDE_INTERNA -j DROP
$IPTABLES -t filter -A INPUT -s $SITE -j DROP
$IPTABLES -t filter -A OUTPUT -d $SITE -j DROP
fi
done <"$LISTA_SITES_NEGADOS"
echo "Bloqueando algumas de portas :"
while read LINHA ; do
PORTA=`semremarks "$LINHA"`
if [ "$i" != "" ] ; then
echo -e "\tPorta :$i"
$IPTABLES -A INPUT -p tcp -i $WAN --dport $PORTA -j DROP
$IPTABLES -A INPUT -p udp -i $WAN --dport $PORTA -j DROP
$IPTABLES -A FORWARD -p tcp --dport $PORTA -j DROP
fi
done <"$LISTA_PORTAS_BLOQUEADAS"
exit 0;
Reply to: