[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

script cortafuegos seguro?



me gustaria que me dieran sus comentarios y sugerencias acerca de este
script que implemente para un cortafuegos, les encargo si dicho
presenta fallos de seguridad entre otras cosas.

#!/bin/bash
clear
# Registramos el inicio del firewall
FECHA=$(date +"%C%y-%m-%d %H:%M")
#echo $FECHA
/usr/bin/logger -p kern.notice  -t NETFILTER  \
echo "    ======    Iniciando Cortafuegos a las: $FECHA"
echo "    ========================================================="


# PARAMETRIZACION DEL SCRIPT
##########################################
### Definimos constantes para usar en el
###+ script
echo -n "    Cargando parametros..."

# Binario de iptables
IPTABLES=/sbin/iptables

# INTERFACES
# eth0 - conectado a internet con IP FIJA
EXT_IF=eth0
EXT_IP=192.168.0.1
# eth1 - conectado a LAN
LAN_IF=eth1
LAN_IP=192.168.1.1
LAN_RED=192.168.1.0/24
# lo - interfaz de loopback
LOO_RED=127.0.0.0/8
# cualquier red
ANY_RED=0.0.0.0/0

# MAQUINAS INTERNAS
IP_SERVIDOR_WEB=192.168.1.203
IP_SERVIDOR_WEB2=192.168.1.1
IP_MAQUINA_RAMA=192.168.1.200
IP_MAQUINA_GERMAN=192.168.1.27

IP_ADMIN=192.168.1.203

#PUERTO ESPECIALES
PUERTO_VNC=5900
PUERTO_NETOP=6502

ABRIR_WEB=0
ABRIR_VNC=0
ABRIR_NETOP=1

RANGO_PUERTO_CERRADOS=1:65535

echo -e  "\t\t\t\t\t [OK]"

echo -n "    Cargando modulos..."
##########################################
### Nos aseguramos que tenemos cargados
###+ los modulos necesarios
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp
modprobe ip_nat_irc
modprobe ip_nat_ftp
echo -e  "\t\t\t\t\t\t [OK]"


echo -n "    Limpiando Cortafuegos..."
##########################################
### Limpiamos la configuracion existente
# Limpiamos (flush) las reglas
$IPTABLES -F
# Borramos 'cadenas' de usuario
$IPTABLES -X
# Ponemos a cero paquetes y contadores
$IPTABLES -Z
# Limpiamos las reglas de NAT
$IPTABLES -t nat -F
# Borramos 'cadenas' de usuario de NAT
$IPTABLES -t nat -X
echo -e  "\t\t\t\t\t [OK]"


echo -n "    Estableciendo politicas..."
##########################################
### Establecemos las politicas por omision
###+ de las 'cadenas'
# Por omision descartamos los paquetes
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
# PREROUTING - NAT sobre la IP destino: normalmente desde inet hacia LAN
# POSTROUTING - NAT sobre la IP origen: normalmente desde LAN hacia inet
$IPTABLES -t nat -P PREROUTING DROP
$IPTABLES -t nat -P POSTROUTING DROP
# Relajamos la politica de salida
#+ Dejamos salir paquetes de LAN_IP por LAN_IF
$IPTABLES -A OUTPUT -o $LAN_IF -s $LAN_IP -j ACCEPT
#+ Dejamos salir paquetes de EXT_IP por EXT_IF
$IPTABLES -A OUTPUT -o $EXT_IF -s $EXT_IP -j ACCEPT
echo -e  "\t\t\t\t\t [OK]"


echo -n "    -> Denegacion de redes invalidas..."
##########################################
# No admitimos desde el exterior redes locales (RFC 1918)
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 192.168.0.0/16  -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 10.0.0.0/8      -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 172.16.0.0/12   -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 224.0.0.0/4     -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 240.0.0.0/5     -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s $LOO_RED        -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 0.0.0.0/8       -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 169.254.0.0/16  -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 255.255.255.255 -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s $EXT_IP         -j DROP
# Desde el interior solo admitimos nuestra red LAN
$IPTABLES -t nat -A PREROUTING -i $LAN_IF -s ! $LAN_RED      -j DROP
echo -e  "\t\t\t\t [OK]"



echo -n "    -> Denegacion de broadcast de NetBIOS..."
##########################################
# Bloquear paquetes broadcast de NetBios salientes
iptables -A FORWARD -p tcp --sport 137:139 -o $EXT_IF -j DROP
iptables -A FORWARD -p udp --sport 137:139 -o $EXT_IF -j DROP
iptables -A OUTPUT  -p tcp --sport 137:139 -o $EXT_IF -j DROP
iptables -A OUTPUT  -p udp --sport 137:139 -o $EXT_IF -j DROP
echo -e  "\t\t\t [OK]"



echo -n "    Activando NAT..."
##########################################
# Activamos el bit de forward
echo 1 > /proc/sys/net/ipv4/ip_forward
# Enmascaramos la salida de la LAN
$IPTABLES -t nat -A POSTROUTING -s $LAN_RED -o $EXT_IF -j MASQUERADE
echo -e  "\t\t\t\t\t\t [OK]"


echo "    Accesos a la maquina local permitidos"
##########################################
### Permitimos ciertos accesos a la maquina
echo -n "    -> loopback..."
# Permitimos todas las conexiones del interfaz loopback
#$IPTABLES -A INPUT  -i lo -j ACCEPT
#$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A INPUT  -i lo -s $LOO_RED -d $LOO_RED -j ACCEPT
$IPTABLES -A OUTPUT -o lo -s $LOO_RED -d $LOO_RED -j ACCEPT
# Permitimos el PostEnrutado de paquetes enviados localmente
$IPTABLES -t nat -A POSTROUTING -o lo -s $LOO_RED -j ACCEPT
echo -e  "\t\t\t\t\t\t [OK]"



echo -n "    -> LAN..."
# Damos acceso desde la red local
$IPTABLES -A INPUT  -s $LAN_RED -i $LAN_IF -j ACCEPT
$IPTABLES -A OUTPUT -d $LAN_RED -o $LAN_IF -j ACCEPT
echo -e  "\t\t\t\t\t\t\t [OK]"

echo -n "    -> DNS..."
# Aceptamos conexiones DNS
$IPTABLES -A INPUT  -s $ANY_RED -i $EXT_IF -p udp -m udp --sport 53
--dport 1024:65535 -j ACCEPT
$IPTABLES -A OUTPUT -d $ANY_RED -o $EXT_IF -p udp -m udp --dport 53
--sport 1024:65535 -j ACCEPT
echo -e  "\t\t\t\t\t\t\t [OK]"

#echo -n "    -> ntpd..."
# Aceptamos conexiones ntpd
#$IPTABLES -A INPUT  -p udp -m udp --dport 123 -i $EXT_IF -s $ANY_RED -j ACCEPT
#$IPTABLES -A OUTPUT -p udp -m udp --sport 123                        -j ACCEPT
#echo -e  "\t\t\t\t\t\t\t [OK]"

echo -n "    -> icmp..."
# Permitimos paquetes ICMP (ping, traceroute...)
#+ con limites para evitar ataques de DoS
# Aceptamos ping y pong
$IPTABLES -A INPUT   -p icmp --icmp-type echo-request  -m limit
--limit 2/s -j ACCEPT
$IPTABLES -A OUTPUT  -p icmp --icmp-type echo-request  -m limit
--limit 2/s -j ACCEPT
$IPTABLES -A INPUT   -p icmp --icmp-type echo-reply    -m limit
--limit 2/s -j ACCEPT
$IPTABLES -A OUTPUT  -p icmp --icmp-type echo-reply    -m limit
--limit 2/s -j ACCEPT
# Aceptamos redirecciones
$IPTABLES -A INPUT   -p icmp --icmp-type redirect      -m limit
--limit 2/s -j ACCEPT
$IPTABLES -A OUTPUT  -p icmp --icmp-type redirect      -m limit
--limit 2/s -j ACCEPT
# Aceptamos tiempo excedido
$IPTABLES -A INPUT   -p icmp --icmp-type time-exceeded -m limit
--limit 2/s -j ACCEPT
$IPTABLES -A OUTPUT  -p icmp --icmp-type time-exceeded -m limit
--limit 2/s -j ACCEPT
# Aceptamos destino inalcanzable
$IPTABLES -A INPUT   -p icmp --icmp-type destination-unreachable -m
limit --limit 2/s -j ACCEPT
$IPTABLES -A OUTPUT  -p icmp --icmp-type destination-unreachable -m
limit --limit 2/s -j ACCEPT
echo -e  "\t\t\t\t\t\t\t [OK]"

echo -n "    -> ssh..."
# Abrimos el puerto 22 para ssh
#$IPTABLES -A INPUT  -p tcp -i $EXT_IF -s $ANY_RED -m tcp --dport 22
--sport 256 -j ACCEPT
$IPTABLES -A INPUT  -p tcp -s $IP_ADMIN -m tcp --dport 22 --sport 22
-m state --state NEW -j LOG --log-prefix "[FW - SSH] "
$IPTABLES -A INPUT  -p tcp -s $IP_ADMIN -m tcp --dport 22 --sport 22 -j ACCEPT
# ...y conexiones salientes relacionadas
$IPTABLES -A OUTPUT -p tcp -m tcp --sport 22 -m state --state
RELATED,ESTABLISHED -j ACCEPT
echo -e  "\t\t\t\t\t\t\t [OK]"

echo "    Redirecciones"
##########################################
### Generamos redireccionamientos
###+ transparentes para el resto de maquinas
echo -n "    -> Proxy web transparente (Squid)..."
#+ Con la redireccion activa (primera linea)
#+  no se llega a la segunda linea
#+ Para bloquear todo acceso a la web comentar
#+  solo la primera linea
#+ Para anular el proxy comentar las dos reglas
$IPTABLES -t nat -A PREROUTING -i $LAN_IF -s $LAN_RED -p tcp --dport
80 -j REDIRECT --to-port 3128
$IPTABLES -A FORWARD -i $LAN_IF -p tcp --dport 80 -j DROP
echo -e  "\t\t\t [OK]"


if [ $ABRIR_WEB = "1" ]; then
echo -n "    -> DNAT (SERVIDORES APACHE Y TOMCAT)..."
# Redirigimos "$EXT_IP":80 8080 a "$IP_SERVIDOR_WEB":80 8080
$IPTABLES -t nat -A PREROUTING  -i $EXT_IF -d $EXT_IP -p tcp --dport
80 -j DNAT --to "$IP_SERVIDOR_WEB":80
$IPTABLES -t nat -A PREROUTING  -i $EXT_IF -d $EXT_IP -p tcp --dport
8080 -j DNAT --to "$IP_SERVIDOR_WEB":8080
$IPTABLES -t nat -A PREROUTING  -i $EXT_IF -d $EXT_IP -p tcp --dport
8081 -j DNAT --to "$IP_SERVIDOR_WEB2":8081
# ...y conexiones salientes relacionadas
$IPTABLES -t nat -A PREROUTING  -m state --state RELATED,ESTABLISHED -j ACCEPT
# Permitimos postruteos a "$IP_SERVIDOR_WEB":80 8080
$IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_SERVIDOR_WEB -p tcp
--dport 80 -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_SERVIDOR_WEB -p tcp
--dport 8080 -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_SERVIDOR_WEB2 -p tcp
--dport 8081 -j ACCEPT
# Permitimos reenvios desde el exterior a "$IP_SERVIDOR_WEB":80 8080
$IPTABLES -A FORWARD -i $EXT_IF -d $IP_SERVIDOR_WEB -p tcp --dport 80 -j ACCEPT
$IPTABLES -A FORWARD -i $EXT_IF -d $IP_SERVIDOR_WEB -p tcp --dport
8080 -j ACCEPT
$IPTABLES -A FORWARD -i $EXT_IF -d $IP_SERVIDOR_WEB2 -p tcp --dport
8081 -j ACCEPT
echo -e  "\t\t\t [OK]"
fi



if [ $ABRIR_VNC = "1" ]; then
echo -n "    -> DNAT (GERMAN VNC)..."
$IPTABLES -t nat -A PREROUTING  -i $EXT_IF -d $EXT_IP -p tcp --dport
$PUERTO_VNC -j DNAT --to $IP_MAQUINA_GERMAN:$PUERTO_VNC
$IPTABLES -t nat -A PREROUTING  -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_MAQUINA_GERMAN -p
tcp --dport $PUERTO_VNC -j ACCEPT
$IPTABLES -A FORWARD -i $EXT_IF -d $IP_MAQUINA_GERMAN -p tcp --dport
$PUERTO_VNC -j ACCEPT
echo -e  "\t\t\t\t [OK]"
fi
if [ $ABRIR_NETOP = "1" ]; then

echo -n "    -> DNAT (RAMA NETOP)..."
#PROTOCOLO UDP
$IPTABLES -t nat -A PREROUTING  -i $EXT_IF -d $EXT_IP -p udp --dport
$PUERTO_NETOP -j LOG --log-prefix "[FW - NETOP-UDP] "
$IPTABLES -t nat -A PREROUTING  -i $EXT_IF -d $EXT_IP -p udp --dport
$PUERTO_NETOP -j DNAT --to $IP_MAQUINA_RAMA:$PUERTO_NETOP
$IPTABLES -t nat -A PREROUTING  -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_MAQUINA_RAMA -p udp
--dport $PUERTO_NETOP -j ACCEPT
$IPTABLES -A FORWARD -i $EXT_IF -d $IP_MAQUINA_RAMA -p udp --dport
$PUERTO_NETOP -j ACCEPT
#PROTOCOLO TCP
$IPTABLES -t nat -A PREROUTING  -i $EXT_IF -d $EXT_IP -p tcp --dport
$PUERTO_NETOP -j LOG --log-prefix "[FW - NETOP-TCP] "
$IPTABLES -t nat -A PREROUTING  -i $EXT_IF -d $EXT_IP -p tcp --dport
$PUERTO_NETOP -j DNAT --to $IP_MAQUINA_RAMA:$PUERTO_NETOP
$IPTABLES -t nat -A PREROUTING  -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_MAQUINA_RAMA -p tcp
--dport $PUERTO_NETOP -j ACCEPT
$IPTABLES -A FORWARD -i $EXT_IF -d $IP_MAQUINA_RAMA -p tcp --dport
$PUERTO_NETOP -j ACCEPT
echo -e  "\t\t\t\t\t [OK]"
fi


echo "    Reenvios"
##########################################
### Aceptamos algunos reenvios
echo -n "    -> icmp..."
# Permitimos paquetes ICMP (ping, traceroute...)
#+ con limites para evitar ataques de DoS
# Aceptamos ping y pong
$IPTABLES -A FORWARD -p icmp --icmp-type echo-request  -m limit
--limit 2/s -j ACCEPT
$IPTABLES -A FORWARD -p icmp --icmp-type echo-reply    -m limit
--limit 2/s -j ACCEPT
# Aceptamos redirecciones
$IPTABLES -A FORWARD -p icmp --icmp-type redirect      -m limit
--limit 2/s -j ACCEPT
# Aceptamos tiempo excedido
$IPTABLES -A FORWARD -p icmp --icmp-type time-exceeded -m limit
--limit 2/s -j ACCEPT
# Aceptamos destino inalcanzable
$IPTABLES -A FORWARD -p icmp --icmp-type destination-unreachable -m
limit --limit 2/s -j ACCEPT
# Aceptamos todas en LAN_IF
$IPTABLES -t nat -A PREROUTING  -i $LAN_IF -p icmp --icmp-type any -m
limit --limit 2/s -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $LAN_IF -p icmp --icmp-type any -m
limit --limit 2/s -j ACCEPT
echo -e  "\t\t\t\t\t\t\t [OK]"



echo -n "    Salida general..."
##########################################
### Aceptamos conexiones salientes

# Permitimos cualquier salida tcp desde la propia maquina
$IPTABLES -A OUTPUT -o $EXT_IF -p tcp -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
# ...y conexiones entrantes relacionadas
$IPTABLES -A INPUT  -i $EXT_IF -p tcp -m state --state
ESTABLISHED,RELATED     -j ACCEPT

# Permitimos el reenvio de paquetes enviados desde la LAN
$IPTABLES -A FORWARD -i $LAN_IF -j ACCEPT
# ...y conexiones salientes relacionadas
$IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

# Permitimos el NAT de paquetes enviados desde la LAN
$IPTABLES -t nat -A PREROUTING  -i $LAN_IF -j ACCEPT
# ...y conexiones salientes relacionadas
$IPTABLES -t nat -A PREROUTING  -m state --state RELATED,ESTABLISHED -j ACCEPT

# Permitimos el NAT de paquetes enviados desde inet hacia la IP publica
$IPTABLES -t nat -A PREROUTING  -i $EXT_IF -d $EXT_IP -j ACCEPT
# ...y conexiones salientes relacionadas
$IPTABLES -t nat -A PREROUTING  -m state --state RELATED,ESTABLISHED -j ACCEPT

# Permitimos el NAT de paquetes enviados desde la IP publica hacia inet
$IPTABLES -t nat -A POSTROUTING -o $EXT_IF -s $EXT_IP -j ACCEPT
# ...y conexiones salientes relacionadas
$IPTABLES -t nat -A POSTROUTING -m state --state RELATED,ESTABLISHED -j ACCEPT

# Permitimos el PostEnrutado de paquetes enviados localmente
$IPTABLES -t nat -A POSTROUTING -o $LAN_IF -s $LAN_RED -j ACCEPT
echo -e  "\t\t\t\t\t\t [OK]"



echo -n "    Cerrando puertos restringidos ["$RANGO_PUERTO_CERRADOS"]..."
##########################################
### Puertos restringidos (telnet, ftp, imap, pop3, etc.)
###+ Reiterativo: para pruebas
$IPTABLES -A INPUT -p tcp --dport $RANGO_PUERTO_CERRADOS -j DROP
$IPTABLES -A INPUT -p udp --dport $RANGO_PUERTO_CERRADOS -j DROP
echo -e  "\t\t\t [OK]"


echo -n "    ACTIVADO DEBUG..."
##########################################
### Reglas utilizadas en debug para detectar
#+ paquetes no tratados todavia
#+ -j LOG --log-prefix "--PR> "
$IPTABLES -t nat -A PREROUTING  -j LOG --log-prefix "[FW - PR] "
$IPTABLES -t nat -A POSTROUTING -j LOG --log-prefix "[FW - PO] "
$IPTABLES -A FORWARD -j LOG --log-prefix "[FW - FW] "
$IPTABLES -A INPUT  -j LOG --log-prefix "[FW - IN] "
$IPTABLES -A OUTPUT -j LOG --log-prefix "[FW - OU] "
echo -e  "\t\t\t\t\t\t [OK]"



echo "    Configuracion Cortafuegos terminada."
echo ""
echo "     - verificar reglas: iptables -nvL && iptables -nvL -t nat"
##########################################
exit 0


--
visita http://parquesoftibague.com/
juega http://ogame.com.es/
riete http://blog.smaldone.com.ar/2006/12/10/no-tener-ni-idea/

Si el SO que usas es windows, intentar usar Linux Debian [1] o Linux Ubuntu [2]

[1] http://www.debian.org/intro/about.es.html
[2] http://www.ubuntu-es.org/ubuntu/introduccion

Linux User #449182



Reply to: