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

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: