Proyecto

General

Perfil

#! /bin/sh
#----------------------------------------------------------------------------------------
# Antonio J. Abasolo Sierra (Mayo-2010)
#----------------------------------------------------------------------------------------
# Controla la activación/desactivación de reglas iptables
# que cortan el tráfico https para todas las webs externas, e ips del centro
# que indiquemos en su fichero de configuración.
#
# Depende del fichero de configuración "/etc/network/deny_https.conf",
# el cual se genera a partir del fichero "/etc/network/deny_https.all"
# obtenido a diario del repositorio general, mas el fichero "/etc/network/deny_https.ies",
# el cual será modificado por cada IES según sus necesidades.
# Dichos ficheros podrán tener dos tipos de líneas (no importa el orden):
# - web's de destino que queremos bloquear vía https
# iptables -A FORWARD -p tcp --dport 443 -d WEB -j REJECT
# - ip's de equipos locales del IES a los que queremos restringir el tráfico https
# iptables -A FORWARD -p tcp --dport 443 -s IP -j REJECT
#
# La regla "iptables-restore < /etc/network/iptables" se pone por seguridad:
# ya que se ejecuta tras eliminar las reglas, en cuyo momento la situación
# ya debería ser la misma que plantea esta línea; y justo antes de añadir las reglas,
# para garantizar que partimos del estado inicial.
# Dicho fichero, a partir de ahora, se gestionará vía puppet para garantizar el mismo
# contenido en todos los IES.
#----------------------------------------------------------------------------------------

# Variables
IPTABLES=/sbin/iptables
DENY_HTTPS=/etc/network/deny_https.conf
RED=`ifconfig | grep Bcast | cut -f2 -d: | awk '{print }' | cut -f1 -d.`
#----------------------------------------------------------------------------------------

# Unimos y filtramos los ficheros de configuración
cat deny_https.all deny_https.ies | egrep -v '#|^$' | awk '{print $1}' | sort | uniq > $DENY_HTTPS
#----------------------------------------------------------------------------------------

# Bail out if no iptables binary or no configuration
[ -x ${IPTABLES} -a "$DENY_HTTPS" ] || exit 0
#----------------------------------------------------------------------------------------

#----------------------------------------------------------------------------------------
do_status() {
echo ""
echo "ESTADO ACTUAL DE LAS REGLAS ..."
echo "----------------------------------------------------"
$IPTABLES -L
echo "----------------------------------------------------"
}

#----------------------------------------------------------------------------------------
do_start() {
echo "ACTIVANDO reglas para controlar el tráfico https:"
echo "-------------------------------------------------"
iptables-restore < /etc/network/iptables
cat $DENY_HTTPS | while read LINEA; do
if [ `echo $LINEA | grep $RED` ]; then OPCION="-s"; else OPCION="-d"; fi
echo " * Denegando https a $LINEA ..."
$IPTABLES -A FORWARD -p tcp --dport 443 $OPCION $LINEA -j REJECT 2> /dev/null
done
echo " ----------------------------------------------"
echo " * EL TRAFICO HTTPS ESTA RESTRINGIDO."
}

do_stop() {
echo "DESACTIVANDO reglas para controlar el tráfico https:"
echo "-------------------------------------------------"
cat $DENY_HTTPS | while read LINEA; do
if [ `echo $LINEA | grep $RED` ]; then OPCION="-s"; else OPCION="-d"; fi
echo " * Eliminando regla https para $LINEA ..."
$IPTABLES -D FORWARD -p tcp --dport 443 $OPCION $LINEA -j REJECT 2> /dev/null
done
iptables-restore < /etc/network/iptables
echo " -----------------------------------------------"
echo " * EL TRAFICO HTTPS ESTA LIBERADO."
}

do_restart() {
do_stop
do_start
}

# INICIO --------------------------------------------------------------------------------
clear
case "$1" in
start)
do_start
do_status
;;
stop)
do_stop
do_status
;;
restart|force-reload)
do_restart
do_status
;;
status)
do_status
;;
*)
echo "Usage: $0 {start|stop|restart|force-reload|status}"
exit 2
;;
esac
exit 0
# FIN -----------------------------------------------------------------------------------

(1-1/4)