jueves, 15 de mayo de 2008

Ficheros basicos de configuración de red

Hay varios ficheros de configuración importantes, que controlan qué servicios ejecuta Linux y cómo lo hacen. Por desgracia, muchos de ellos se encuentran en diferentes localizaciones dependiendo de qué/cómo instalaras Linux y los servicios. Los lugares habituales son:

Fichero de configuración del servidor Inetd:

/etc/inetd.conf

Ficheros de inicio de varios tipos:

/etc/rc.d/*

/etc/*

Lo mejor que se puede hacer es imaginarse qué servicios se quiere ejecutar, y deshabilitar/borrar el resto. Échale un vistazo a la sección apropiada de gestión de paquetes de tu sistema (RPM, dpkg, tarballs)



inetd.conf

inetd.conf es el responsable de iniciar los servicios, generalmente aquellos que no necesitan ejecutarse de continuo, o que están basados en sesiones (como telnet o ftpd). Ello es debido a que la sobrecarga que supondría ejecutar un servicio constantemente (como telnet) sería mayor que el costo de inicio ocasional (o que arrancar in.telnetd) cuando el usuario quisiera utilizarlo. Para algunos servicios (como DNS) que sirven a muchas conexiones rápidas, la sobrecarga de arrancar servicios cada pocos segundos sería mayor que tenerlo constantemente ejecutándose. De igual forma ocurre con servicios como DNS y el correo, donde el tiempo es crítico, sin embargo unos pocos segundos de retraso en empezar una sesión de ftp no le hacen daño a nadie. La página del manual de inetd.conf cubre los básicos ("man inetd.conf"). El servicio en sí se llama inetd y se ejecuta al arrancar, de modo que se le puede parar/arrancar/recargar manipulando el proceso inetd. Cada vez que se hagan cambios a inetd.con, hay que reiniciar inetd para hacer efectivos los cambios, killall –1 inetd lo reiniciará correctamente. Como de costumbre, las lineas del inetd.conf se pueden comentar con un # (lo cual es una forma muy simple y efectiva de deshabilitar servicios como rexec). Se aconseja desabilitar tantos servicios de inetd.conf como sea posible, por lo general los que se suelen usar son ftp, pop e imap. Se debería reemplazar telnet y los servicios r por el SSH y servicios como systat/netstat y finger proporcionan demasiada información. El acceso a programas arrancados por inetd se puede controlar con facilidad mediante el uso de TCP_WRAPPERS.



TCP_WRAPPERS

Usar TCP_WRAPPERS hace que el asegurar servidores contra intrusiones externas sea bastante más simple y menos doloroso de lo que te imaginas. TCP_WRAPPERS se controla desde dos ficheros:

/etc/hosts.allow

/etc/hosts.deny

Primero se comprueba hosts.allow, y las reglas se comprueban desde la primera a la última. Si encuentra una regla que te permita específicamente entrar (p. ej., una regla que permita a tu host, dominio, máscara de subred, etc.) te deja conectarte al servicio. Si no puede encontrar ninguna regla que te corresponda en hosts.allow, entonces va a comprobar hosts.deny en busca de una regla que te deniegue la entrada. De nuevo comprueba las reglas de hosts.deny desde la primera a la última, y la primera regla que encuentre que te deniega acceso (p. ej., una regla que deshabilite tu host, dominio, máscara de subred, etc.) significa que no te deja entrar. Si tampoco puede encontrar una regla denegándote la entrada, entonces por defecto te deja entrar. Si eres tan paranoico como yo, la última regla (o la única regla si se va a utilizar una política por defecto no optimista en cuanto a seguridad) debería ser:

ALL: 0.0.0.0/0.0.0.0

lo que significa que todos los servicios, todos los lugares, de modo que cualquier servicio al que no se le permita específicamente acceder, queda bloqueado (recuerda que por defecto es permitir). Quizás también preferirías simplemente denegar el acceso por defecto a, digamos, telnet, y dejar el ftp abierto al mundo. Habría que hacer lo siguiente:

en hosts.allow:

in.telnetd: 10.0.0.0/255.255.255.0 # permitir acceso desde la red interna de 10.0.0.*

in.ftpd: 0.0.0.0/0.0.0.0 # permitir acceso desde cualquier parte del mundo

en hosts.deny:

in.telnetd: 0.0.0.0/0.0.0.0 # denegar acceso a telnetd desde cualquier parte

o si quieres estar realmente a salvo:

ALL: 0.0.0.0/0.0.0.0 # denegar el acceso a todo desde cualquier parte

Lo cual puede afectar a servicios como ssh y nfs, de modo que ¡ten cuidado!

Quizás simplemente prefieras listar por separado todos los servicios que se están usando:

in.telnetd: 0.0.0.0/0.0.0.0

ipop3d: 0.0.0.0/0.0.0.0

Si se deja activado un servicio que no debería figurar en inetd.conf y NO se tiene una política de denegación por defecto, se pueden tener problemas. Es más seguro (y lleva un poco más de trabajo, pero a la larga es menor que tener que reinstalar el servidor) tener reglas de denegación por defecto para el cortafuegos y TCP_WRAPPERS, de modo que si se olvida algo por accidente, por defecto no tendrá acceso. Si se instala algo para lo cual necesitan tener acceso los usuarios y se olvida poner reglas, enseguida se quejarán y se podrá rectificar el problema rápidamente. Fallar por precaución y denegar accidentalmente algo es más seguro que dejarlo abierto.

Las páginas del manual de TCP_WRAPPERS son bastante buenas y están disponibles haciendo:

man hosts.allow

y/o (son la misma página del manual)

man hosts.deny

Una pequeña advertencia con TCP_WRAPPERS de aparición reciente en Bugtraq.

TCP_WRAPPERS interpreta la líneas de hosts.allow y hosts.deny de la forma siguiente:


1.se eliminan todos los \’s (continuación de línea), completando todas las líneas (también hay que darse cuenta de que la longitud máxima de una línea es de unos 2k, en algunos casos es mejor utilizar múltiples líneas)
2.se eliminan las líneas que empiezan con #’s, p. ej. todas las líneas comentadas. De modo que:

# esto es una prueba

# in.ftpd: 1.1.1.1 \

in.telnetd: 1.1.1.1

esto significa que la línea "in.telnetd: 1.1.1.1" también se ignoraría.



/etc/services

El fichero de servicios es una lista de números de puertos, el protocolo y el nombre correspondiente. El formato es:

nombre-de-servicio puerto/protocolo alias

# comentario opcional

por ejemplo:

time 37/udp timserver

rlp 39/udp resource # localización de recursos

name 42/udp nameserver

whois 43/tcp nicname # generalmente al sri-nic

domain 53/tcp

domain 53/udp

Por ejemplo, este fichero se utiliza cuando se ejecuta ‘netstat -a’, y por supuesto no se utiliza cuando se ejecuta ‘netstat -an’

No hay comentarios: