Re: Need_help_with_this_script
Check it now, I did the changes you told me.
This firewall will be used in an little ISP that offers web, mail
(sendmail & pop3), primary dns & secundary dns.
That services will be behind that firewall with ipmasqadm except dns
services (I think)
Thanks for your support
LuisMi
#!/bin/sh
# IPchains Firewalling Script File
# Libreria de funciones
# ---------------------
. /etc/init.d/functions
# Configuracion de la red
# -----------------------
. /etc/sysconfig/network
# Comprobando que la red esta activa
# ----------------------------------
[ ${NETWORKING} = "no" ] && exit 0
# Variables
# ---------
interfaz0="eth0"
interfaz_loopback="lo"
ip_eth0=`ifconfig $interfaz0 | grep "inet addr:" | awk -F: {'print $2'} | cut -d\ -f 1`
CUALQUIERA="0.0.0.0/0"
LOOPBACK="127.0.0.0/8"
CLASE_A="10.0.0.0/8"
CLASE_B="172.16.0.0/12"
CLASE_C="192.168.0.0/16"
MULTICAST="224.0.0.0/4"
BROADCAST_SRC="0.0.0.0"
BROADCAST_DEST="255.255.255.255"
PRIVPORTS="0:1023"
UNPRIVPORTS="1024:65535"
LOCALPORTS=`cat /etc/sysctl.conf | awk '/local_port/{print $3 ":" $4}'`
TRACER_SRC_PORTS="32769:65535"
TRACER_DEST_PORTS="33434:33523"
SOCKS_PORT="1080"
OPENWINDOWS_PORT="2000"
NFS_PORT="2049"
XWINDOW_PORTS="6000"
SSH_PORTS="1020:1023"
# Servidor DNS
# ¡¡¡¡¡¡¡¡¡¡¡Faltan definir los servidores DNS!!!!!!!!!
# ¡¡¡¡¡¡¡¡¡¡¡Faltan definir los servidores DNS!!!!!!!!!
# ¡¡¡¡¡¡¡¡¡¡¡Faltan definir los servidores DNS!!!!!!!!!
# Servidor HORA
HORA=hora.uniovi.es
# Protecciones varias TCP/IP
# --------------------------
# Habilitar TCP SYN Cookie Protection
# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# *** /etc/sysctl.conf habilitado ***
# Activando protección contra IP spoofing en Source Addess Verification
# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
# echo 1 > $f
# done
# *** /etc/sysctl.conf habilitado ***
# Deshabilitar la aceptación de direcciones ICMP
# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
# echo 0 > $f
# done
# *** /etc/sysctl.conf habilitado ***
# Deshabilitar paquetes de origen enrutado
# for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
# echo 0 > $f
# done
# *** /etc/sysctl.conf habilitado ***
# Arranque cortafuegos
# --------------------
start() {
# Cargando el cortafuegos
echo -n "Cargando cortafuegos... "
echo
# Testeando los interfaces y las direcciones IP
# ---------------------------------------------
echo "interfaz0: ${interfaz0} con direccion ${ip_eth0}"
echo
# Estableciendo politicas por defecto a las cadenas INPUT, OUTPUT, FORWARD
/sbin/ipchains -P input REJECT
/sbin/ipchains -P output REJECT
/sbin/ipchains -P forward REJECT
# Limpiando todas las cadenas del cortafuegos
# -------------------------------------------
/sbin/ipchains -F
/sbin/ipchains -F spoofed
/sbin/ipchains -F tcp-c-o
/sbin/ipchains -F tcp-s-i
/sbin/ipchains -F udp-c-o
/sbin/ipchains -F udp-s-i
/sbin/ipchains -F tcp-c-i
/sbin/ipchains -F tcp-s-o
/sbin/ipchains -F misc-out
/sbin/ipchains -F misc-in
/sbin/ipchains -F icmp-in
/sbin/ipchains -F icmp-out
/sbin/ipchains -F log-in
/sbin/ipchains -F log-out
/sbin/ipchains -X spoofed
/sbin/ipchains -X tcp-c-o
/sbin/ipchains -X tcp-s-i
/sbin/ipchains -X udp-c-o
/sbin/ipchains -X udp-s-i
/sbin/ipchains -X tcp-c-i
/sbin/ipchains -X tcp-s-o
/sbin/ipchains -X misc-out
/sbin/ipchains -X misc-in
/sbin/ipchains -X icmp-in
/sbin/ipchains -X icmp-out
/sbin/ipchains -X log-in
/sbin/ipchains -X log-out
# Trafico ilimitado en el interfaz de bucle inverso
/sbin/ipchains -A input -i $interfaz_loopback -j ACCEPT
/sbin/ipchains -A output -i $interfaz_loopback -j ACCEPT
# Manejando las subcadenas
# ------------------------
/sbin/ipchains -A input -i eth0 -s $ip_eth0 -j DENY -l
# Direcciones reservadas por IANA
/sbin/ipchains -A input -i eth0 -s 1.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 2.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 5.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 7.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 23.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 27.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 31.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 37.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 39.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 41.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 42.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 58.0.0.0/7 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 60.0.0.0/8 -j DENY -l
# 65:01000001 - /3 incluye 64 - es necesario escribir 65-79
/sbin/ipchains -A input -i eth0 -s 65.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 66.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 67.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 68.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 69.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 70.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 71.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 72.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 73.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 74.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 75.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 76.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 77.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 78.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 79.0.0.0/8 -j DENY -l
# 80:01010000 - /4 enmascara 80-95
/sbin/ipchains -A input -i eth0 -s 80.0.0.0/4 -j DENY -l
# 126:01111110 - /3 incluye 127 - es necesario escribir 112-126
/sbin/ipchains -A input -i eth0 -s 112.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 113.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 114.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 115.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 116.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 117.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 118.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 119.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 120.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 121.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 122.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 123.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 124.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 125.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 126.0.0.0/8 -j DENY -l
# 217:11011001 - /3 incluye 216 - es necesario escribir 217-219
/sbin/ipchains -A input -i eth0 -s 217.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 218.0.0.0/8 -j DENY -l
/sbin/ipchains -A input -i eth0 -s 219.0.0.0/8 -j DENY -l
# 223:11011111 - /6 enmascara 220-223
/sbin/ipchains -A input -i eth0 -s 220.0.0.0/6 -j DENY -l
# Subcadenas
# ----------
/sbin/ipchains -A input -i eth0 -j spoofed
/sbin/ipchains -A input -i eth0 -j icmp-in
/sbin/ipchains -A input -i eth0 -j tcp-s-i
/sbin/ipchains -A input -i eth0 -j tcp-c-i
/sbin/ipchains -A input -i eth0 -j udp-s-i
/sbin/ipchains -A input -i eth0 -j misc-in
/sbin/ipchains -A output -i eth0 -j spoofed
/sbin/ipchains -A output -i eth0 -s $ip_eth0 -j tcp-c-o
/sbin/ipchains -A output -i eth0 -s $ip_eth0 -j tcp-s-o
# Interfaz LAN0 COMPROBAR QUE ESTA NO ES LA 1a REGLA
# /sbin/ipchains -A input -i $interfaz0 -j ACCEPT
# /sbin/ipchains -A output -i $interfaz0 -j ACCEPT
# Cadenas definidas por el usuario
# --------------------------------
# Proteccion en cualquier interfaz externa
# Rechazar cualquier conexión de sistios problemáticos
# /etc/init.d/firewall.bloqueados contiene una lista de
# /sbin/ipchains -A spoofed -s <direción/mascara> -j DENY
# reglas para bloquear todos los accesos
# Rechazar todos los paquetes que vienen o parecen venir de las direcciones prohibidas
if [ -f /etc/init.d/firewall.bloqueados ]; then
./etc/init.d/firewall.bloqueados
fi
# Cadena SPOOFED
# --------------
# Rechaza los paquetes spoofeados.
# Ignora los paquetes de red que sean claramente ilegales.
# Protege de enviar a direcciones erroneas.
/sbin/ipchains -A spoofed -s $LOOPBACK -j DENY
/sbin/ipchains -A spoofed -s $CLASE_A -j DENY
/sbin/ipchains -A spoofed -s $CLASE_B -j DENY
/sbin/ipchains -A spoofed -s $CLASE_C -j DENY
/sbin/ipchains -A spoofed -s $MULTICAST -j DENY -l
/sbin/ipchains -A spoofed -s $BROADCAST_DEST -j DENY -l
# Cadena definida por el usuario TCP-C-O
# --------------------------------------
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 80 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 119 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 110 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 25 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 113 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 23 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 22 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 20 ! -y -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 21 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA $UNPRIVPORTS -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 443 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 43 -p tcp -j ACCEPT
/sbin/ipchains -A tcp-c-o -d $CUALQUIERA 53 -p tcp -j ACCEPT
# Cadena definida por el usuario TCP-S-I
# --------------------------------------
/sbin/ipchains -A tcp-s-i -p tcp -s $CUALQUIERA 80 -j ACCEPT
#/sbin/ipchains -A tcp-s-i -p tcp -s $CUALQUIERA 119 -j ACCEPT
/sbin/ipchains -A tcp-s-i -p tcp -s $CUALQUIERA 110 -j ACCEPT
/sbin/ipchains -A tcp-s-i -p tcp -s $CUALQUIERA 25 -j ACCEPT
#/sbin/ipchains -A tcp-s-i -p tcp -s $CUALQUIERA 113 -j ACCEPT
#/sbin/ipchains -A tcp-s-i -p tcp --source-port 23 -j ACCEPT
/sbin/ipchains -A tcp-s-i -p tcp --source-port 22 -j ACCEPT
/sbin/ipchains -A tcp-s-i -p tcp --source-port $UNPRIVPORTS -j ACCEPT
/sbin/ipchains -A tcp-s-i -p tcp --source-port 21 -j ACCEPT
/sbin/ipchains -A tcp-s-i -s $CUALQUIERA 443 -p tcp -j DENY
/sbin/ipchains -A tcp-s-i -p tcp --source-port 43 -j ACCEPT
/sbin/ipchains -A tcp-s-i -p tcp -s $CUALQUIERA 53 -j ACCEPT
# Cadena definida por el usuario UDP-C-O
# --------------------------------------
#/sbin/ipchains -A udp-c-o -p udp --source-port 53 -D $NAMESERVER1 53 -j ACCEPT
/sbin/ipchains -A udp-c-o -p udp --source-port $UNPRIVPORTS -d $CUALQUIERA 53 -j ACCEPT
/sbin/ipchains -A udp-c-o -p udp --source-port $UNPRIVPORTS -d $CUALQUIERA 123 -j ACCEPT
# Cadena definida por el usuario UDP-S-I
# --------------------------------------
/sbin/ipchains -A udp-s-i -p udp -s $CUALQUIERA 53 --destination-port $UNPRIVPORTS -j ACCEPT
/sbin/ipchains -A udp-s-i -p udp -s $CUALQUIERA 123 --destination-port $UNPRIVPORTS -j ACCEPT
# Cadena definida por el usuario TCP-C-I -P TCP
# ---------------------------------------------
# Servidor HTTP
/sbin/ipchains -A tcp-c-i -p tcp --destination-port 80 -j ACCEPT
# Servidor HTTPS
/sbin/ipchains -A tcp-c-i -p tcp --destination-port 443 -j ACCEPT
# Servidor AUTH
# /sbin/ipchains -A tcp-c-i -p tcp --destination-port 113 -j ACCEPT
# Servidor SSH
/sbin/ipchains -A tcp-c-i -p tcp --destination-port 22 -j ACCEPT
# Servidor FTP
/sbin/ipchains -A tcp-c-i -p tcp --destination-port 21 -j ACCEPT
# Servidor SENDMAIL
/sbin/ipchains -A tcp-c-i -p tcp --destination-port 25 -j ACCEPT
# Servidor POP3
/sbin/ipchains -A tcp-c-i -p tcp --destination-port 110 -j ACCEPT
# PUERTOS NO PRIVILEGIADOS
# Evitar puertos sujetos a problemas de administración de sistema y protocolo
# ---------------------------------------------------------------------------
# Conexion entrante OpenWindows
/sbin/ipchains -A tcp-c-i -p tcp -y --destination-port $OPENWINDOWS_PORT -j DENY
# X Window: intento de conexion entrante
/sbin/ipchains -A tcp-c-i -p tcp -y --destination-port $XWINDOW_PORTS -j DENY -l
# Conexión entrante de SOCKS
/sbin/ipchains -A tcp-c-i -p tcp -y --destination-port $SOCKS_PORT -j DENY
# NFS: Conexiones TCP
/sbin/ipchains -A tcp-c-i -p tcp -y --destination-port $NFS_PORT -j DENY -l
# Cadena definida por el usuario TCP-S-O -p TCP
# ---------------------------------------------
/sbin/ipchains -A tcp-s-o -p tcp --source-port 80 -j ACCEPT
/sbin/ipchains -A tcp-s-o -p tcp --source-port 113 -j ACCEPT
# Cadena definida por el usuario MISC-OUT
# ---------------------------------------
/sbin/ipchains -A misc-out -p tcp --source-port $SSH_PORTS --destination-port 22 -j ACCEPT
/sbin/ipchains -A misc-out -p udp --source-port $TRACER_SRC_PORTS --destination-port $TRACER_DEST_PORTS -j ACCEPT
/sbin/ipchains -A misc-out -p icmp --icmp-type port-unreachable -j ACCEPT
/sbin/ipchains -A misc-out -p icmp --icmp-type time-exceed -j ACCEPT
/sbin/ipchains -A misc-out -p icmp --icmp-type echo-reply -d $lan0 -j ACCEPT
#/sbin/ipchains -A misc-out -p icmp --icmp-type echo-reply -d $lan1 -j ACCEPT
# Cadena definida por el usuario MISC-IN
# --------------------------------------
/sbin/ipchains -A misc-in -p tcp ! -y --source-port ssh --destination-port $SSH_PORTS -j ACCEPT
/sbin/ipchains -A misc-in -p tcp --source-port ftp-data --destination-port $UNPRIVPORTS -j ACCEPT
/sbin/ipchains -A misc-in -p udp --destination-port $NFS_PORT -j DENY -l
/sbin/ipchains -A misc-in -p icmp -s $lan0 echo-request -j ACCEPT
#/sbin/ipchains -A misc-in -p icmp -s $lan1 echo-request -j ACCEPT
# Cadena definida por el usuario ICMP ENTRANTE
# --------------------------------------------
/sbin/ipchains -A icmp-in -p icmp --icmp-type echo-reply -j ACCEPT
/sbin/ipchains -A icmp-in -p icmp --icmp-type destination-unreachable -j ACCEPT
/sbin/ipchains -A icmp-in -p icmp --icmp-type source-quench -j ACCEPT
/sbin/ipchains -A icmp-in -p icmp --icmp-type time-exceeded -j ACCEPT
/sbin/ipchains -A icmp-in -p icmp --icmp-type parameter-problem -j ACCEPT
# Cadena definida por el usuario ICMP SALIENTE
# --------------------------------------------
/sbin/ipchains -A icmp-out -p icmp --icmp-type fragmentation-needed -j ACCEPT
/sbin/ipchains -A icmp-out -p icmp --icmp-type source-quench -j ACCEPT
/sbin/ipchains -A icmp-out -p icmp --icmp-type echo-request -j ACCEPT
/sbin/ipchains -A icmp-out -p icmp --icmp-type parameter-problem -j ACCEPT
# Filtrado de paquetes
# --------------------
/sbin/ipchains -A input -i $interfaz0 -j spoofed
/sbin/ipchains -A input -i $interfaz0 -p tcp ! -y -d $ip_eth0 $UNPRIVPORTS -j tcp-s-i
/sbin/ipchains -A input -i $interfaz0 -p udp -d $ip_eth0 -j udp-s-i
/sbin/ipchains -A input -i $interfaz0 -p icmp -d $ip_eth0 -j icmp-in
/sbin/ipchains -A input -i $interfaz0 -p tcp -s $CUALQUIERA $UNPRIVPORTS -d $ip_eth0 -j tcp-c-i
/sbin/ipchains -A input -i $interfaz0 -d $ip_eth0 -j misc-in
#/sbin/ipchains -A input -i $interfaz1 -j spoofed
#/sbin/ipchains -A input -i $interfaz1 -p tcp ! -y -d $ip_eth1 $UNPRIVPORTS -j tcp-s-i
#/sbin/ipchains -A input -i $interfaz1 -p udp -d $ip_eth1 -j udp-s-i
#/sbin/ipchains -A input -i $interfaz1 -p icmp -d $ip_eth1 -j icmp-in
#/sbin/ipchains -A input -i $interfaz1 -p tcp -s $CUALQUIERA $UNPRIVPORTS -d $ip_eth1 -j tcp-c-i
#/sbin/ipchains -A input -i $interfaz1 -d $ip_eth1 -j misc-in
} # Fin de la opcion START
# Parando el Cortafuegos
stop() {
echo "Parando cortafuegos..."
/sbin/ipchains -P input ACCEPT
/sbin/ipchains -P output ACCEPT
/sbin/ipchains -P forward ACCEPT
/sbin/ipchains -F
echo "Cortafuegos detenido..."
} # Fin de la opcion STOP
# Arranque y parada del cortafuegos
# ---------------------------------
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Uso: firewall {start|stop|restart}"
exit 1
esac
# exit $?
Reply to: