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 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]