[Ubuntu-BR] Ajuda com script de firewall de WAN+LAN para apenas LAN como roda default
hamacker
sirhamacker em gmail.com
Sexta Novembro 26 16:45:51 UTC 2010
Olá pessoal,
Tenho um script com regras de iptables que contem algumas politicas de
bloqueio de portas e redirecionamento.
O problema é que este script está adaptado para ser usado num
computador com duas placas de rede WAN e LAN.
Só que agora estou numa rede diferente que possui uma LP de dados cujo
roteador tem ip 192.168.1.1, porem a rede inteira tem como GW
192.168.1.254, este por sua vez tem como rota padrão o 192.168.1.1.
Nesta rede, não existe mais WAN, é tudo LAN.
Gostaria de saber se alguem poderia me mostrar onde devo adaptar meu
script para refletir essa mudança, se eu apenas mudar :
LAN=eth1
WAN=eth0
para :
LAN=eth1
WAN=192.168.1.1
A rede inteira passa a navegar e segundo as politicas do script,
apenas IPs especificos tem acesso a esse tipo de navegação.
segue o script :
#!/bin/bash
# Para colocar este script no momento do boot :
# rm /etc/rc2.d/S95firewall
# ln -s /etc/init.d/firewall.sh /etc/rc2.d/S95firewall
#
# trap ctrl-c and call ctrl_c() trap ctrl_c INT
trap ctrl_c INT
function ctrl_c() {
echo "*** interrompido pelo usuario ***" ;
exit 2;
}
#
# Debug
#
#exit 0;
# Variaveis importantes para este script
. /home/administrador/menu/mainmenu.var
# carregando funcoes importantes
. /home/administrador/fw-scripts/firewall.functions
# criando arquivos importantes
. /home/administrador/fw-scripts/firewall.files
#
# Inicio do Script
#
# Lista de DNSs
# Comente os que nao deseja usar, e mantenha apenas os que deseja
# O maximo de DNS que podem haver sao 3
#do_resolv_conf
# 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.1.0/24"
# 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.08 #"
echo "########################################"
echo
echo "##########################################################"
echo "# A CARGA DO FIREWALL ESTA INICIANDO #"
echo "##########################################################"
# Limpando regras atuais
$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t mangle -F
$IPTABLES -t nat -F
$IPTABLES -X
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
$IPTABLES -I FORWARD -i $LAN -j ACCEPT
$IPTABLES -I FORWARD -i $WAN -o $LAN -m state --state
ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -I INPUT -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -I INPUT -m state --state RELATED -j ACCEPT
$IPTABLES -I OUTPUT -p icmp -d $WAN -j ACCEPT
$IPTABLES -I INPUT -p icmp -j ACCEPT
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"
#
# A politica de negar certos sites simplesmente não funciona
# porque se libero um IP de forma transparente, tais
# regras se sobrepoem a negação
#
echo "Bloqueando o acesso de nossa rede a algumas redes externas :"
echo "Lista : $LISTA_SITES_NEGADOS"
while read LINHA ; do
SITE=`semremarks "$LINHA"`
SITE=`convert_url2site "$SITE"`
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
$IPTABLES -A FORWARD -d $SITE -j DROP
fi
done <"$LISTA_SITES_NEGADOS"
echo "Liberando portas do servidor ($WAN):"
echo "Lista : $LISTA_PORTAS_LIBERADAS"
while read LINHA ; do
INSTRUCAO=`semremarks "$LINHA"`
PROTO=`echo $INSTRUCAO | cut -d '|' -f 1` #recebe o protocolo a ser
redirecionado
PORTA=`echo $INSTRUCAO | cut -d '|' -f 2` #recebe a porta a ser redirecionado
[ "$PROTO" = "" ] && PROTO="tcp"
if [ "$PORTA" != "" ] ; then
echo -e "\tLiberando Protocolo/Porta : $PROTO:$PORTA"
$IPTABLES -A INPUT -p $PROTO --dport $PORTA -j ACCEPT
$IPTABLES -A FORWARD -p $PROTO --dport $PORTA -j ACCEPT
$IPTABLES -A OUTPUT -p $PROTO --sport $PORTA -j ACCEPT
$IPTABLES -I FORWARD -p tcp --dport $PORTA -j ACCEPT
fi
done <"$LISTA_PORTAS_LIBERADAS"
echo "Redirecionando portas ($WAN) a outros servidores :"
echo "Lista : $LISTA_REDIRECIONAMENTOS"
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
# liberando a porta
echo -e "\tLiberando Protocolo/Porta : $REDIPROTO:$REDIPORTA"
$IPTABLES -A INPUT -p $REDIPROTO --dport $REDIPORTA -j ACCEPT
$IPTABLES -A FORWARD -p $REDIPROTO --dport $REDIPORTA -j ACCEPT
$IPTABLES -A OUTPUT -p $REDIPROTO --sport $REDIPORTA -j ACCEPT
$IPTABLES -I FORWARD -p tcp --dport $REDIPORTA -j ACCEPT
# redirecionando a porta
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
$IPTABLES -t nat -A PREROUTING -m $REDIPROTO -p $REDIPROTO -i $WAN
--dport $REDIPORTA -j DNAT --to-destination $REDIP
# log
#echo iptables -A INPUT -p tcp --dport $REDIPROTO -i $WAN -j LOG
--log-level 6 --log-prefix "FIREWALL: $REDISERVICO: "
fi
done <"$LISTA_REDIRECIONAMENTOS"
echo "Liberando IPs/Sites com acesso transparente e direito"
echo "Lista : $SQUIDACL/sites_diretos.txt"
while read LINHA ; do
LIBERAR_SITE=`semremarks "$LINHA"`
LIBERAR_SITE=`convert_url2site "$LIBERAR_SITE"`
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"
echo "Lista : $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"
echo "Lista : $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 ataque conhecido como Ping da Morte"
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
$IPTABLES -N PING-MORTE
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j PING-MORTE
$IPTABLES -A PING-MORTE -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A PING-MORTE -j DROP
echo "Bloqueando ataque conhecido como SYN-FLOOD"
echo "0" > /proc/sys/net/ipv4/tcp_syncookies
$IPTABLES -N syn-flood
$IPTABLES -A INPUT -i $WAN -p tcp --syn -j syn-flood
$IPTABLES -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A syn-flood -j DROP
echo "Bloqueando ataque de ssh por meio de força bruta"
$IPTABLES -N SSH-BRUT-FORCE
$IPTABLES -A INPUT -i $WAN -p tcp --dport 21 -j SSH-BRUT-FORCE
$IPTABLES -A SSH-BRUT-FORCE -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A SSH-BRUT-FORCE -j DROP
#echo "Bloqueando ataque conhecido como Anti-Spoofings"
#$IPTABLES -A INPUT -s 10.0.0.0/8 -i $WAN -j DROP
#$IPTABLES -A INPUT -s 127.0.0.0/8 -i $WAN -j DROP
#$IPTABLES -A INPUT -s 172.16.0.0/12 -i $WAN -j DROP
#$IPTABLES -A INPUT -s 192.168.1.0/16 -i $WAN -j DROP
#echo "Bloqueando scanners ocultos (Shealt Scan)"
#$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK, FIN, -m limit
--limit 1/s -j ACCEPT
#echo "Bloqueando algumas de portas :"
#while read LINHA ; do
# PORTA=`semremarks "$LINHA"`
# if [ "$PORTA" != "" ] ; then
# echo -e "\tPorta :$PORTA"
# $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"
#echo "Estabelecendo este servidor como Proxy Transparente."
#$IPTABLES -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT
--to-port 3128
#echo "Mascaramento de rede, mas ninguem terá acesso completo"
#echo "porque o acesso porta 80 esta desviado para o squid."
#$IPTABLES -t nat -A POSTROUTING -o $WAN -j MASQUERADE
echo "fim do firewall" >/tmp/fim_do_firewall.txt
echo "##########################################################"
echo "# A CARGA DO FIREWALL ESTA COMPLETA #"
echo "##########################################################"
exit 0
More information about the ubuntu-br
mailing list