En versiones más o menos recientes de AIX el operativo proporciona `de serie' unos interesantes mecanismos de seguridad IP basados en túneles y filtros de
paquetes, algo similar - guardando las distancias - a ipchains o iptables en Linux; el uso de túneles requiere filtros, pero el de filtros no
necesita para nada los túneles. Para poder utilizar ambos mecanismos
necesitamos tener instalado el paquete (más concretamente, el fileset)
bos.net.ipsec.rte:
bruja:/# lslpp -l bos.net.ipsec.rte
Fileset Level State Description
----------------------------------------------------------------------------
Path: /usr/lib/objrepos
bos.net.ipsec.rte 4.3.3.0 COMMITTED IP Security
Path: /etc/objrepos
bos.net.ipsec.rte 4.3.3.0 COMMITTED IP Security
bruja:/#
Un túnel define una asociación entre dos máquinas en las que se han
especificado parámetros de seguridad compartidos entre los dos extremos del
túnel; el hecho de que se implique a otra máquina hace que, excepto en
entornos muy homogénos - sistemas AIX - o en casos concretos, no se suela
utilizar este mecanismo. En cambio, el filtrado de paquetes sí que se
utiliza, ya que proporciona a un entorno aislado una protección frente a
otras máquinas sin tener que modificar para nada el operativo o las
aplicaciones de estas: proporciona un sistema de filtrado sencillo pero
efectivo en máquinas en las que por cualquier motivo - dinero, utilización,
rendimiento...- no se pueden implantar otras soluciones cortafuegos más
completas, como CheckPoint Firewall-1 o IBM SecureWay Firewall. Por
este motivo, en este punto vamos a comentar brevemente algunos aspectos del
filtrado de paquetes en AIX, sin entrar en el apartado de túneles; si alguien
está interesado en profundizar más en estos mecanismos de seguridad IP para
AIX, puede consultar [IBM97b].
Para gestionar este sistema de filtrado podemos utilizar órdenes como rmfilt, mkfilt, genfilt o lsfilt; como siempre, es
recomendable consultar las páginas de ayuda de cada una de ellas, aunque en
este caso más que recomendable podríamos decir imprescindible, ya
que el manejo de los filtros no es ni mucho menos inmediato, y la sintaxis para
definir reglas es relativamente compleja. Para poner en marcha el sistema de
filtrado necesitamos generar reglas y posteriormente activarlas; en el fichero
/usr/samples/ipsec/filter.sample tenemos ejemplos de como definir
una regla, un filtro de red, mediante genfilt.
El uso de genfilt puede llegar a ser bastante complicado, debido
principalmente a su sintaxis (como acabamos de decir, es imprescindible
consultar su página de manual). Para definir una regla nueva es obligatorio
indicar al menos el protocolo sobre el que se aplicará (IPv4 o IPv6), así
como el host o red origen y su máscara correspondiente; el resto de
parámetros (destino, puertos de conexión, interfaz de red...) son
opcionales, aunque como sucede en muchas otras ocasiones, es necesario estar
atento a los valores que el sistema toma por defecto: por simple Ley de Murphy,
serán restrictivos cuando nos interese que sean permisivos y viceversa. Para
hacernos una idea de cómo se definen reglas mediante genfilt, si por
ejemplo necesitáramos permitir todo el tráfico de una red local contra una
máquina AIX situada en ella (192.168.0.10), la orden para lograrlo sería
similar a:
bruja:/# genfilt -v 4 -a P -s 192.168.0.0 -m 255.255.0.0 -d 192.168.0.10 -M \
> 255.255.255.255 -i all
bruja:/#
Aunque no vamos a entrar aquí en detalles de la sintaxis de las reglas,
veremos al final de este punto un shellscript como ejemplo de filtrado en
una máquina AIX en el que se incluirán algunas definiciones de filtros; en
cualquier caso, como ya hemos dicho, existe un fichero con ejemplos de reglas en
/usr/samples/ipsec/filter.sample que podemos consultar para hacernos una
idea de la sintaxis de genfilt.
Para activar el conjunto de reglas de filtrado que hayamos definido
previamente mediante tenemos que utilizar la orden mkfilt; no obstante,
antes de esto
debemos haber generado los dispositivos especiales ipsec_v4 e ipsec_v6 (como su nombre indica, el segundo hace referencia a IPv6, mientras
que el primero es relativo al protocolo clásico) en el sistema de ficheros
utilizando mkdev, ya que de lo contrario la activación no será
posible:
bruja:/# mkfilt -v 4
Device ipsec_v4 not found.
Filter activation for IPv4 not performed.
bruja:/# /usr/sbin/mkdev -c ipsec -t 4
ipsec_v4 Available
bruja:/# /usr/sbin/mkdev -c ipsec -t 6
ipsec_v6 Available
bruja:/#
Una vez creados ambos ficheros especiales ya podemos activar el ruleset
definido; por ejemplo, el siguiente shellscript - o modificaciones del
mismo - puede utilizarse para definir un sencillo sistema de filtrado en
nuestra máquina:
bruja:/# cat /etc/filtros
#!/bin/sh
#
# Script para filtrar paquetes en una maquina AIX.
# Antonio Villalon, Noviembre 2001
#
#############
# Eliminamos y deshabilitamos reglas anteriores
#############
/usr/sbin/rmfilt -v 4 -n all
/usr/sbin/rmfilt -v 6 -n all
/usr/sbin/mkfilt -v 4 -d
/usr/sbin/mkfilt -v 6 -d
#############
# Permitimos todo desde LAN
#############
genfilt -v 4 -a P -s 192.168.0.0 -m 255.255.0.0 -d 192.168.0.10 -M \
255.255.255.255 -i all
#############
# Salida, todo abierto
#############
genfilt -v 4 -a P -s 192.168.0.10 -m 255.255.255.255 -d 0 -M 0
#############
# Vuelta de DNS
#############
genfilt -v 4 -a P -s 0 -m 0 -d 0 -M 0 -g N -c udp -o eq -p 53 -O gt -P 1023
#############
# Prohibimos todo lo no habilitado por defecto
#############
genfilt -v 4 -a P -s 0 -m 0 -d 192.168.0.10 -M 255.255.255.255 -c tcp/ack
genfilt -v 4 -a D -s 0 -m 0 -d 192.168.0.10 -M 255.255.255.255
#############
# Activamos las reglas para IP e IPv6
#############
/usr/sbin/mkfilt -v 4 -u
/usr/sbin/mkfilt -v 6 -u
bruja:/#
Podemos ver que la activación del conjunto de reglas se realiza mediante la
opción `-u' de mkfilt, tanto para IPv4 como para IPv6; esto
significa que es a partir de la ejecución de esta orden cuando el sistema de
filtrado comienza a funcionar.
Para consultar el conjunto de reglas definidas en nuestra máquina podemos
utilizar el comando lsfilt (si lo ejecutamos sin ninguna opción nos
proporcionará el listado de todas las reglas, tanto activas - las que se
están aplicando - como inactivas - definidas pero sin ser aplicadas -).
Como en otros sistemas de filtrado, a cada regla se le asigna un número de
orden, y es ese número el que indica la precedencia de su aplicación: si
un paquete hace match con una cierta regla, es esa la que se aplica,
descartando las que son posteriores; es una aproximación similar a la seguida
en Firewall-1 o ipchains, pero diferente de la de otros cortafuegos
como IP Filter. Para consultar una regla concreta podemos utilizar las
diferentes opciones de la orden lsfilt:
bruja:/# lsfilt -v 4 -n 3
Rule 3:
Rule action : permit
Source Address : 192.168.0.0
Source Mask : 255.255.0.0
Destination Address : 192.168.0.10
Destination Mask : 255.255.255.255
Source Routing : yes
Protocol : all
Source Port : any 0
Destination Port : any 0
Scope : both
Direction : both
Logging control : no
Fragment control : all packets
Tunnel ID number : 0
Interface : all
Auto-Generated : no
bruja:/#
Para acabar este punto quizás es necesario saber cómo deshabilitar el
sistema de filtrado; ya lo hemos visto antes, en el shellscript de
ejemplo, pero hay que recordar que mediante la opción `-d' de la orden
mkfilt podemos hacerlo. Esto es especialmente importante en situaciones en
las que un filtro incorrecto deja inaccesible el sistema o alguna aplicación
crítica, ya que la posibilidad de deshabilitar todo el filtrado mediante
una orden sencilla, en línea de comandos, proporciona una solución
rápida y efectiva este tipo de problemas.
© 2002 Antonio Villalón Huerta