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:
- 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.
- Tiene una variable llamada PUERTOS_PERMITIDOS para abrir los puertos del apartado anterior que vayamos a necesitar.
- 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