Sencillo firewall local con iptables en Linux

En este artículo se muestra un ejemplo de un sencillo firewall local con iptables para Linux el cual permite el acceso por SSH y permite a una IP concreta visualizar una página web alojada en el sistema. El resto de intentos de acceso serán rechazados.

Para que este script se ejecute automáticamente al inicio del sistema bastará con ejecutar el siguiente comando:

aitor@blogdeaitor:$ sudo update-rc.d firewall defaults

Siempre y cuando, este script esté guardado en /etc/init.d con el nombre “firewall”. A continuación se muestra el script:

#! /bin/sh
# /etc/init.d/firewall

# Firewall
# 15-05-2012

### BEGIN INIT INFO
# Provides:          firewall
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: manage firewall
# Description:       Manage server firewall
### END INIT INFO

case "$1" in

'start')
touch /var/lock/firewall

echo -n "Iniciando Firewall: "

echo "Regalas por defecto:"
echo "    INPUT DROP"
echo "    OUTPUT ACCEPT"
echo

#Politicas por defecto
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

#Empezamos a filtrar

#Descartamos paquetes invalidos
#iptables -A INPUT -m state --state INVALID -j LOG --log-prefix " ####-FW INVALID-#### "
iptables -A INPUT -m state --state INVALID -j DROP
echo "Rechazando paquetes invalidos"

echo "Abriendo puerto SSH"
#Abrimos puerto SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

#Aceptando conexiones pre-establecidas
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
echo "   * Aceptando conexiones pre-establecidas por el equipo"

#Acceso localhost
iptables -A INPUT -i lo -j ACCEPT
echo "Aceptando a localhost"

#Aceptando acceso a Web
iptables -A INPUT -p tcp --dport 80 -s 87.50.154.97 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -s 87.50.154.97 -j ACCEPT
echo "Aceptando acceso Web"

#Rechazando conexiones no establecidas previamente (nuevas)
#iptables -A INPUT -m state --state NEW -j LOG --log-prefix " ####-FW NEW-#### "
iptables -A INPUT -m state --state NEW -j DROP
echo "Rechazando conexiones nuevas no solicitadas"

#Cerrando puertos del 1 al 1024
iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP
echo "Cerrando TODOS los puertos conocidos"

#Cerramos puertos del 1024 al 65535
iptables -A INPUT -p tcp --dport 1025:65535 -j DROP
iptables -A INPUT -p udp --dport 1025:65535 -j DROP
echo "Cerrando el resto de puertos"

#Log de conexiones a revisar (las que superan las reglas del firewall)
iptables -A INPUT -p tcp -j LOG --log-prefix " ####-FW WARNING-#### "
echo "Creando LOG de conexiones entrantes ilegales"

echo
echo "Firewall activado."
echo "Para ver los detalles: firewall status / firewall show"
echo

#FIN
;;

'stop')
rm -f /var/lock/firewall

echo -n "Deteniendo Firewall..."
echo "   Haciendo flush de reglas cargadas" 
#Flush de reglas cargadas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

echo "   Estableciendo reglas predeterminadas de entrada y salida"
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
echo "   Reglas de entrada y salida cargadas"

echo
echo "ATENCIÓN: Todos los puertos y conexiones abiertas."
echo "El equipo no esta protegido contra amenazas externas."
echo
echo "El firewall se restaurara manualmente o en el próximo reinicio del equipo"
;;

'restart')
echo "Reiniciando " $0
$0 stop
$0 start
;;

'status')
iptables -L -n
echo
;;

'show')
watch iptables -nvL
;;

*)

echo "Usage: /etc/init.d/$0 {start|stop|restart|status|show}"
exit 1

esac
exit 0
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: