Cortafuegos básico

Cortafuegos básico

Aquí tenéis un script que sirve para configurar un cortafuegos básico. Lo que hace este script es lo siguiente:

  1. Bloquea por defecto los puertos del 1 al 1024 (los llamados well-known ports) que son los que utilizan los servicios más comunes que tenemos corriendo habitualmente en nuestras máquinas.
  2. Tiene una variable llamada PUERTOS_PERMITIDOS para abrir los puertos del apartado anterior que vayamos a necesitar.
  3. Tiene una variable llamada PUERTOS_PROHIBIDOS para cerrar algun otro puerto que queramos cerrar explícitamente.

El script está configurado con la política por defecto de INPUT en ACCEPT, ya que usualmente no tendremos ningún programa que no hayamos puesto explícitamente nosotros escuchando por puertos mayores al 1024. Evidentemente esto puede modificarse y poner la política por defecto de INPUT a DROP y configurar el script al gusto.

Si no estáis familiarizados con estos conceptos, podéis leer el tutorial de introducción a iptables.

Para que este script se inicie cada vez que se inicia el sistema, deberéis ponerlo como demonio. Recomiendo también leer los otros dos tutoriales que hay aquí también sobre iptables ya que seguramente ayuden un poco a comprender lo que hace el script y a modificarlo en caso de necesidad.

Script:

#!/bin/bash

###### Configuración del script ######

# Modificar el valor de las siguientes variables para
# abrir/cerrar puertos de nuestro PC.
# Escribir los puertos separados por comas y sin espacios.
# Ejemplo: PUERTOS_PERMITIDOS=21,80

IFACE=eth0
PUERTOS_PERMITIDOS=
PUERTOS_PROHIBIDOS=10000

###### Definicion de reglas de filtrado ######

# Para configurar las reglas utilizar en la
# medida de lo posible las variables anteriores
# y modificar lo mínimo esta parte del script

case "$1" in
    start)
        echo "Generando reglas de filtrado..."

        # Borramos las reglas de las cadenas y los contadores
        iptables -F
        iptables -X
        iptables -Z

        # Establecemos las politicas por defecto
        iptables -P INPUT ACCEPT
        iptables -P OUTPUT ACCEPT
        iptables -P FORWARD DROP

        # Asegurarnos de que las nuevas conexiones tcp sean SYN
        iptables -A INPUT -i $IFACE -p tcp ! --syn -m state --state NEW -j DROP 

        # Permitimos conexiones ya establecidas y desde loopback
        iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
        iptables -A INPUT -m state --state NEW -i lo -j ACCEPT

        ##### Filtrado de puertos ######

        # Permitimos acceso a los puertos permitidos
        if [ $PUERTOS_PERMITIDOS ]; then
            iptables -A INPUT -m state --state NEW -i $IFACE -p tcp -m multiport --dports $PUERTOS_PERMITIDOS -j ACCEPT 
        fi

        # Cerramos cerramos los puertos prohibidos
        if [ $PUERTOS_PROHIBIDOS ]; then
            iptables -A INPUT -m state --state NEW -i $IFACE -p tcp -m multiport --dports $PUERTOS_PROHIBIDOS -j DROP 
        fi

        # Cerramos los puertos del 1 al 1024
        iptables -A INPUT -i $IFACE -p tcp --dport 1:1024 -j DROP
        iptables -A INPUT -i $IFACE -p udp --dport 1:1024 -j DROP 
    ;;
    stop)
        echo "Borrando reglas de filtrado..."

        # Borramos las reglas de las cadenas y los contadores
        iptables -F
        iptables -X
        iptables -Z

        # Establecemos la política por defecto
        iptables -P INPUT ACCEPT
        iptables -P OUTPUT ACCEPT
        iptables -P FORWARD DROP 
    ;;
    restart)
        $0 stop
        $0 start 
    ;;
    status)
        iptables -nL 
    ;;
    *)
        echo "Uso: $0 { start | stop | restart | status }"
        exit 1 
    ;; 
esac

exit 0

 

Elaborado por Nacx para ADSLAyuda.com

Este sitio web utiliza cookies para mejorar su experiencia. Asumiremos que estás de acuerdo, pero puedes optar por no seguir si lo deseas. Aceptar Leer más