Desde hace más de diez años, HP-UX incorpora en todas sus releases
un mecanismo de control de acceso a los servicios que el sistema ofrece a
través de inetd; se trata de un esquema muy similar al ofrecido por TCP Wrappers, esto es, basado en la dirección IP de la máquina o red
solicitante del servicio, y procesado antes de ejecutar el demonio que
va a servir la petición correspondiente. De esta forma, se establece un nivel
de seguridad adicional al ofrecido por cada uno de estos demonios.
Evidentemente, este esquema basa su configuración en un determinado archivo;
el equivalente ahora a los ficheros /etc/hosts.allow y /etc/hosts.deny de TCP Wrappers es /usr/adm/inetd.sec (si no
existe, el sistema funciona de la forma habitual, sin ningún nivel de
protección adicional). El formato de cada línea del mismo es muy simple:
servicio allowdeny direccion
La directiva `servicio' indica el nombre del servicio a proteger tal y
como aparece en el archivo /etc/services (esto es una diferencia con
respecto a TCP
Wrappers, que se guía por el nombre concreto del demonio y no por el del
servicio); `allow' o `deny' (opcionales, si no se indica este campo
se asume un `allow') definen si vamos a permitir o denegar
el acceso, respectivamente, y por último en el campo `direccion' podemos
indicar (también es un campo opcional) la dirección IP de uno o más hosts o redes, así como los
nombres de los mismos. Si para un mismo servicio existe más de una entrada,
sólo se aplica la última de ellas; aunque a primera vista esto nos pueda
parecer una limitación importante, no lo es: si definimos una entrada `allow', a todos los sistemas no contemplados en ella se les negará el
acceso, si definimos una `deny' se le permitirá a todo el mundo excepto
a los explícitamente indicados, y si para un servicio no existe una entrada
en el fichero, no se establece ningún tipo de control.
Imaginemos que el contenido de /usr/adm/inetd.sec es el siguiente:
marta:/# grep -v ^\# /usr/adm/inetd.sec
finger allow localhost 158.42.*
ssh allow localhost 158.42.* 192.168.0.*
pop allow
marta:/#
En este caso lo que estamos haciendo es permitir el acceso al servicio finger a todas las máquinas cuya dirección comience por 158.42.,
así como a la máquina local, y
negarlo al resto, permitir acceso a ssh además de a estas a las que
tengan una dirección 192.169.0., y dejar que cualquier sistema (no
definimos el tercer campo) pueda consultar nuestro servicio POP3
(la entrada mostrada sería equivalente a un indicar únicamente el
nombre del servicio, o a no definir una entrada para el mismo). Así,
en el momento que un sistema trate de acceder a un servicio para el que no
tiene autorización obtendrá una respuesta similar a la ofrecida por TCP Wrappers (esto es, el cierre de la conexión):
luisa:~# telnet 158.42.2.1 79
Trying 158.42.2.1...
Connected to 158.42.2.1.
Escape character is '^]'.
Connection closed by foreign host.
luisa:~#
Como vemos, se trata de un mecanismo sencillo que, aunque no ofrezca el mismo
nivel de protección que un buen cortafuegos (nos podemos fijar que la
conexión se establece y luego se corta, en lugar de denegarse directamente
como haría un firewall), y aunque no sea tan parametrizable - ni
conocido - como TCP Wrappers, puede ahorrar más de un problema a los
administradores de una máquina HP-UX; y ya que existe, no cuesta nada
utilizarlo junto a cualquier otra medida de seguridad adicional que se nos
ocurra (recordemos que en el mundo de la seguridad hay muy pocos mecanismos
excluyentes, casi todos son complementarios). Para obtener más información
acerca de este, podemos consultar la página de manual de inetd.sec(4).
© 2002 Antonio Villalón Huerta