jueves, 20 de octubre de 2011

Ejercicios iptables 3.- Guardar las reglas y contadores de iptables

3- Probar los comandos de almacenamiento de reglas iptables-save y de restauración de reglas iptables-restore (el procedimiento será algo diferente dependiendo de la distribución de LINUX que se esté usando).

La manera básica, una vez que hemos insertado y probado las reglas de iptables en nuestro equipo, consiste en ejecutar el comando “iptables-save” seguido del nombre del fichero dónde guardaremos nuestras reglas, por ejemplo:

iptables-save > /etc/reglas.iptables

si además queremos guardar también los contadores (número de paquetes que se han ajustado a cada regla) podemos emplearlo junto con la opción -c.
una vez que hemos guardado el fichero podremos restaurarlo con el comando iptables-restore del siguiente modo:

iptables-restore < /etc/reglas.iptables

el contenido del fichero /etc/reglas.iptables podría ser algo similar a la siguiente imagen:image

Normalmente querremos que las reglas de iptables se carguen automáticamente al iniciar el sistema y/o que se graben automáticamente cada vez que lo apaguemos.

Para cargar las reglas tenemos dos opciones, en primer lugar podríamos crear un script que se ejecutase al inicio con todas las reglas que queramos añadir a nuestro cortafuegos o con un “iptables-restore” (bien llamándolo desde /etc/rc.local o creando un enlace al script en /etc/rc0.d para que se ejecute al reiniciar el equipo) también podríamos añadir un enlace en /etc/rc6.d a nuestro script para que se ejecutase al apagar el equipo (por ejemplo para grabar las reglas de iptables y los contadores). Esta manera de cargar las reglas en nuestro equipo puede presentar un problema de seguridad ya que durante unos segundos las tarjetas de red estarán activas pero todavía no se habrán ejecutado las reglas de nuestro cortafuegos, por lo que nuestro equipo estaría expuesto durante unos instantes.

En versiones anteriores de network-manager también había una opción -muy sencilla- que consistía en copiar nuestros scripts (con permisos de ejecución) en las carpetas /etc/network/if-pre-up.d (se ejecutaría antes de levantar la tarjeta de red) y en la carpeta /etc/network/if-post-down.d (se ejecutaría tras desactivar la interfaz de red). Desgraciadamente estas opciones no están disponibles en las versiones actuales de network-manager y las versiones actuales y posteriores (según se puede leer en la página de Network-Manager) no ejecutará los scritps que se incluyan en esos directorios.
Por ello, si queremos realizar algo similar podemos optar por cualquiera de las dos siguientes modalidades:

Opción 1: /etc/network/intefaces

En primer lugar grabamos las reglas que hemos definido:
iptables-save -c > /etc/reglas.iptables

Después, editamos el fichero /etc/network/intefaces y añadimos las siguientes líneas al final del fichero (en realidad lo asignará al último interfaz):
pre-up iptables-restore –c < /etc/reglas.iptablespost-down iptables-save -c > /etc/reglas.iptables

Finalmente, editamos /etc/NetworkManager/dispatcher.d/01firewall y añadimos las siguientes líneas bajo el epígrafe “pre-up)”:


if [ ! -r /etc/reglas.iptables ]; then
echo "No hay fichero de reglas a restaurar."
elif [ ! -x /sbin/iptables-restore ]; then
echo "no está instalado el programa de restauración iptables-restore" else
echo "Restaurando reglas de iptables"
/sbin/iptables-restore -c < /etc/reglas.iptables;;y añadimos las siguientes líneas bajo el epígrafe “post-down)”:
if [ ! -x /sbin/iptables-save ]; then
echo "No existe el programa iptables-save"
else
echo "Salvando reglas iptables"
/sbin/iptables-save -c > /etc/ reglas.iptables
;;




Opción 2: /etc/init/network-manager-security.conf

En las versiones actuales de Ubuntu (por ejemplo la 10.4) se incluyen el directorio /etc/init una serie de fichero para configurar distintas utilidades. Uno de ellos es el fichero /etc/init/network-manager-security.conf ( network-interface-security.conf en 11.10 ) que se carga una única vez antes de que la red esté activa, por lo que es el lugar ideal para cargar las reglas iptables:

# network-interface-security - configure network device security
#
# This is a one-time start-up script to load AppArmor profiles needed
# before the network comes up.
description "configure network device security"
# In order to avoid upstart bug LP: #447654, we cannot have an AND
# statement here (with the ORs). An "and virtual-filesystems" is desired
# here to make sure that the securityfs is mounted, but since each of the
# ORed services already require virtual-filesystems be mounted, this is safe:
start on (starting network-interface
or starting network-manager
or starting networking)
# Since we need these profiles to be loaded before any of the above services
# begin running, this service must be a pre-start so that its pre-start
# script finishes before the above services' start scripts begin.
pre-start script
[ -d /rofs/etc/apparmor.d ] && exit 0 # do not load on liveCD
[ -d /sys/module/apparmor ] || exit 0 # do not load without AppArmor
[ -x /sbin/apparmor_parser ] || exit 0 # do not load without parser
for link in /etc/apparmor/init/network-interface-security/* ; do
[ -L $link ] && /sbin/apparmor_parser -r -W $link || true
done
/sbin/iptables-restore < /etc/reglas.iptables
#/etc/init.d/cortafuegos.sh
end script
Para grabar las reglas antes del apagado también podemos crear un enlace simbólico en el directorio /etc/rc6.d para que se ejecute justo antes del apagado:
ln -s /etc/salvarreglas /etc/rc6.d/K99salvariptables
y en el fichero /etc/salvarreglas podemos poner:
iptables-save -c > /etc/reglas.iptables


 << Anterior                                                                                                                Siguiente >>
Para ver el resto de manuales de seguridad y enlaces a las siguientes entregas, puede acudir al índice de temas de seguridad en el enlace

2 comentarios:

Anónimo dijo...

Muy bien, el archivo de seguridad en 11.10 es network-interface-security.conf

Anónimo dijo...

En la ultima linea de tu post donde dices:

"y en el fichero /etc/salvarreglas podemos poner:
iptables-save -c > /etc/reglas.iptables"

No estoy seguro pero creo que lugar de eso sería:
iptables-save -c >> /etc/reglas.iptables

para no sobreescribir las reglas que ya tenias y añadirlas al final.
Me ayudó tu post.