Guía de seguridad en una estación Linux

Servicios - Seguridad

Intentaremos dar una breve guia de cómo configurar, de forma más o menos segura, una máquina linux conectada a la red. No es una guía exhaustiva porque ésta dependería de la distribución linux que se usara y de los servicios que tendría que ofrecer. Pretende ser más una orientación que cada uno deberá adecuar a su entorno particular.

Revisión de servicios

Lo primero que tenemos que hacer es decidir qué servicios queremos dar con nuestra máquina. En esta guía trataremos de la configuración de una máquina que sirva como estación de trabajo, con pocos servicios y de acceso restringido.

Cómo se ven los servicios activos

Para ver los servicios que ofrece nuestra máquina se puede usar el comando netstat. Por ejemplo:


% netstat -atu | grep '*:*' | more
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:ftp *:* LISTEN
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 *:printer *:* LISTEN
tcp 0 0 *:6000 *:* LISTEN
udp 0 0 *:syslog *:*

En un sistema Linux con una instalación por defecto, esta lista será mucho más larga. Nuestro objetivo es hacerla lo más pequeña posible, pero de forma que cubra nuestras necesidades.

Los servicios más comunes suelen tener asociado un nombre, que aparece en la columna etiquetada como "Local Address". En el caso de que el servicio no tenga asociado un nombre, en esta columna aparecerá el número de puerto en el que el servidor se encuentra a la escucha. En este ejemplo aparece un servicio en el puerto 6000, que corresponde al servidor de X.

Durante la instalación del sistema operativo se puede seleccionar qué servidores deseamos instalar en nuestra máquina. Algunos de ellos se arrancan en el momento del botado, mientras que otros son ejecutados bajo demanda, es decir, el proceso sólo se ejecuta cuando se establece una petición de servicio.

Servicios de arranque directo

El mismo programa de instalación pregunta qué servicios se desea arrancar durante el botado de la máquina.

Entre estos servicios se encuentran:

Servicio de impresión: si quieres utilizar una impresora desde tu estación tendrás que dejar este servicio activo.
Syslog: no lo quites, es el servicio encargado de registrar los eventos que ocurren en tu máquina (por ejemplo, los intentos de conexión).
NFS: permite exportar directorios o discos a otros sistemas Unix. Aunque en principio esto puede parecer bastante deseable, con frecuencia NFS es fuente de problemas de seguridad, así que si se instala es conveniente revisar su configuración y estar pendiente de los parches de seguridad que vayan saliendo. A menos que realmente haga falta, nosotros recomendamos desactivarlo.
Samba: permite exportar directorios o discos a sistemas bajo Windows. Al igual que NFS, suele estar "en el punto de mira". A menos que realmente te simplifique la vida, no lo uses.
Correo SMTP: el programa que hace de servidor es difícil de configurar y tiene un amplio historial de agujeros de seguridad. Si dispones de una cuenta POP, te resultará mucho más sencillo utilizar un cliente de correo compatible (por ejemplo, pine para modo texto o netscape para X). Más adelante os detallamos un poco más sobre el sendmail.
Web, news, DNS: cualquiera de estos servicios requiere una configuración previa que cae fuera del ámbito de esta guía. Para una estación de trabajo, no hacen falta y es mejor no instalarlos.
Otros servicios: los siguientes servicios son muy específicos, y es bastante improbable que los necesites.

bootparamd
dhcpd
gated
routed
rusersd
rwalld
rwhod
snmpd
squid
xntpd
ypbind
yppasswdd
ypserv

Cómo eliminar estos servicios:

  1. entra como root
  2. busca todos los ficheros de nombre /etc/rc.d/rc*.d/S*XXX, donde XXX es:
    nfsfs, nfs NFS
    smb Samba
    httpd Web
    innd News
    sendmail SMTP
    el nombre del servicio; por ejemplo:
    % ls /etc/rc.d/rc*.d/S*nfs
  3. renombra cada uno de los ficheros anteriores, poniendo un punto (".") delante del nombre; por ejemplo:
    % mv /etc/rc.d/rc3.d/S50nfs /etc/rc.d/rc3.d/.S50nfs
    Los cambios tendrán efecto a partir del siguiente rebotado de la máquina. Si quieres pararlos de forma inmediata, puedes hacer:
    % /etc/rc.d/init.d/XXX stop
    donde XXX es el nombre del servicio.

Servicios de arranque bajo demanda

Los servicios de arranque bajo demanda aparecen listados en el fichero /etc/inetd.conf (en las nuevas versiones de Linux estos servicios son administrados por el nuevo demonio xinetd). La primera columna del fichero indica el nombre del servicio. Las líneas que comienzan por "#" se consideran comentarios y son ignoradas.

  • ftp: permite transferir ficheros hacia o desde nuestra estación de trabajo. Recomendamos permitir el acceso por FTP sólo desde un rango limitado de máquinas.
  • telnet: permite abrir una sesión remota en nuestra estación. También es recomendable limitar el acceso por máquinas.
  • shell (rsh), login (rlogin): es preferible quitarlos, siempre que sea posible, puesto que permiten entrar en la máquina o ejecutar comandos de forma remota sin necesidad de dar un password. Si se dejan, limitar siempre el acceso por máquinas. Otra posibilidad es utilizar un sustituto más seguro como el SSH (Secure Shell).
  • Gopher: se trata de un servicio de información poco usado en la actualidad; los detalles de su configuración quedan fuera del ámbito de esta guía.
  • talk, ntalk: permiten mantener una conversación interactiva con un usuario en la misma máquina o en otra remota.
  • pop-2: es una versión antigua del protocolo POP; se puede quitar.
  • pop-3: es el servidor del protocolo de correo POP3; si dispones de un a cuenta POP y simplemente quieres leer tu correo, este servicio NO hace falta para nada.
  • imap: otro protocolo de correo, similar al POP; tampoco hace falta en una estación de trabajo.
  • finger: puesto que puede dar información útil para un atacante (por ejemplo, si hay alguien conectado que pueda darse cuenta de una entrada anómala), la mayoría de los administradores suelen quitarlo.
    time: sirve para sincronizar el reloj entre un grupo de máquinas; lo mejor es quitarlo.
  • auth: mantiene un registro de qué usuario está ejecutando qué servicio TCP. Puede ser útil para el administrador.

Cómo eliminar estos servicios:

  1. entra como root
  2. guarda una copia de /etc/inetd.conf antes de quitar nada!!!
  3. en el fichero /etc/inetd.conf, por cada servicio que queramos quitar, insertar un "#" al principio de la línea
  4. refresca inetd:
    # /etc/rc.d/init.d/inet restart

Servicios bajo RPC

Si has quitado NFS, probablemente puedas quitar también el servicio portmap, también conocido como rpcbind.

Para ver qué servicios RPC ofrece actualmente tu máquina ejecuta el siguiente comando:


% rpcinfo -p
program vers proto port
100000 2 tcp 111 rpcbind
100000 2 udp 111 rpcbind

Si solamente aparecen estas dos líneas, entonces puedes quitar también el arranque de este servicio. Para ello, sigue las mismas instrucciones que con los servicios de arranque directo, usando como nombre de servicio "portmap". Si usas NFS, necesitas tener corriendo el rpcbind. Si este es el caso, es recomendable el acceso restringido por máquina al "portmap".

Restricción de acceso por máquina

Es útil restringir los servicios TCP con "wrappers". El tcpwrapper (tcpd) viene ya incluído en algunas distribuciones de linux. Si no es el caso, podéis traéroslo de:

http://www.cica.es/seguridad/HERRAMIENTAS/herramientas.es.html

El wrapper actúa de intermediario entre el servidor inetd y los servicios controlados por inetd definidos en /etc/inetd.conf (telnet, ftp,...), permitiendo el acceso sólo a las máquinas que configuremos, y por supuesto haciendo registro de todos los accesos a estos servicios. Para configurarlo, basta sustituir en el fichero /etc/inetd.conf, cada servicio por el demonio tcpd. Por ejemplo, si queremos restringir el acceso al servicio telnet, en lugar de esta línea:

telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd

aparecerá esta otra:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

Los ficheros en los que se restringe el acceso son /etc/hosts.allow y el fichero /etc/hosts.deny.

La configuración más normal es denegar todo lo que no esté permitido en el /etc/hosts.allow.

Por ejemplo, si sólo queremos permitir el acceso por telnet , rlogin y pop a la máquina xxx.xxx.xxx.xxx, y a todo nuestro dominio .cica.es salvo la máquina nomefiounpelo.cica.es, y el resto denegarlo, la configuración de estos dos ficheros sería:

En el /etc/hosts.allow:


in.telnetd: xxx.xxx.xxx.xxx .cica.es EXCEPT nomefiounpelo.cica.es
in.rlogind: .cica.es xxx.xxx.xxx.xxx EXCEPT nomefiounpelo.cica.es
ipop3d: .cica.es xxx.xxx.xxx.xxx EXCEPT nomefiounpelo.cica.es

y en el /etc/hosts.deny tener la siguiente línea:

ALL:ALL

Seguridad en la red

El administrador debe prevenirse ante posibles escuchas en la red. Un "sniffer" escucha todo lo que pasa por una puerta ethernet, inclusives passwords de cuentas de usuarios, superusuarios, passwords de POP... Para evitarlo, usar ssh u otros métodos de encriptación del passsword.

Servicio de correo: Sendmail

El sendmail es un servidor de mail que te permite leer mails. Es una de las principales fuentes de peligro como ya advertíamos. Si lees tu correo por POP de una máquina externa - por ejemplo de pop.cica.es - , o simplemente lees el correo en otra máquina externa, no es necesario tener corriendo el sendmail. Tampoco es necesario si sólo pretendes mandar mails desde tu máquina. Si usas sendmail, asegúrate de ejecutar siempre la última versión. Puedes obtener información sobre su instalación y configuración en http://www.rediris.es/mail/generador/ .

Seguridad de las cuentas

No olvides eliminar las cuentas que ya no se vayan a usar más.

Utiliza los "shadow" passwords en lugar de los passwords. Para ello basta ejecutar como root el comando:

%pwconv

La cuenta root es la más peligrosa. Usala sólo cuando sea necesario. Para el trabajo diario créate una cuenta con el comando useradd.

Revisa el path de la cuenta root en los ficheros de inicialización (.login, .cshrc, .profile ...) . El comando path o la variable de entorno PATH definen los directorios de búsqueda de los ejecutables. El directorio ".",es decir, el actual, NUNCA debe aparecer en el path del root.

El fichero /etc/securetty establece la lista de los terminales desde los cuales el root puede hacer login, que en algunas distribuciones, por defecto, queda limitado a la consola. Si es así, NO DESHABILITARLO. Comprueba de todas formas que en este fichero sólo aparezca tty1...tty8. Para acceder al root se puede usar alternativamente el comando:

>/bin/su

Seguridad de los ficheros

  • Como ya decíamos antes, en una máquina configurada como estación de trabajo NO SE DEBE USAR NFS. Si es necesario, asegurate de parchear convenientemente este paquete porque es fuente de numerosos problemas.
    El servidor NFS hace registro de todos los ficheros montados en /etc/mtab. Si no hay mas remedio que usar este servicio, se debe configurar lo más restrictivo posible. En el fichero /etc/exports se especifica a quién se exporta y cómo se exporta un sistema de ficheros (read-only, sin permiso de escritura al root...).

    Por ejemplo, si la máquina linux fulanita.cica.es necesita exportar el sistema de ficheros /home a la máquina zutanita.cica.es con dirección IP 192.4.32.1 :

    • fulatina.cica.es debe tener el servidor NFS instalado y el servidor rpcbind ejecutándose pero restringido por wrapper , es decir, el fichero /etc/hosts.allow debe contener:
      rpc.mountd: zutanita.cica.es
      portmap: zutanita.cica.es
    • El fichero /etc/exports de fulatina.cica.es debe contener una línea mas o menos así:
      /home zutanita.cica.es (ro)
      que especifica que el sistema de fichero /home sólo se exporta a la máquina zutanita y sólo con permiso de lectura.
    • La máquina zutanita no tiene por qué tener el servidor NFS corriendo.
  • Establecer en el /etc/profile el umask para los usuarios lo más restrictiva posible (022, 033 o incluso 077). La máscara del root debe ser 077.
  • No usar Samba. Si es necesario, asegurate de parchear convenientemente este paquete porque es fuente de numerosos problemas. También se debe configurar lo más restrictivo posible el fichero /etc/smb.conf. Puede ser útil si en la instalación del samba especificamos que se ejecute su arranque bajo el servidor inetd, restringir el acceso por el tcpwrapper.
  • Cuidado con los ficheros .rhosts. Garantizan el acceso a la máquina sin autentificación. No es una alternativa segura al telnet. Preferible es usar como método de acceso un cliente ssh. Sobre todo, revisa que no exista un fichero /root/.rhosts.
    Busca todos los ficheros SUID/SGID del sistema y monitoriza los cambios en los mismos:
    root# find / -type f \( -perm -04000 -o -perm -02000 \)
    Son ficheros especialmente explotados por intrusos potenciales. Todos aquéllos ficheros setuid root que no usen, protégelos. Algunas distribuciones linux , por ejemplo Debian, lo traen ya implementado.

Registros de log

Como administrador de una máquina linux, revisa los ficheros de registro. Sirven para detectar posibles fallos de seguridad en nuestra máquina linux. Los ficheros de registro se encuentran en /var/log :

  • auth y auth-priv: mensajes de seguridad y autenticación.
  • cron: mensajes generados por el demonio cron.
  • secure: mensajes de seguridad de acceso (conexiones, wrappers...).
  • htmalaccess.log: mensajes de acceso al servidor WWW, si lo hubiese.
  • utmp: contiene información sobre los usuarios que se encuentran actualmente en el sistema. La información la consultamos con comandos como who,w,users...
  • wtmp: contiene información sobre las entradas y salidas de los usuarios al sistema. La información la consultamos con el comando last.

Si ves que en estos ficheros se repiten registros continuos desde máquinas desconocidas, probablemente tu máquina esté siendo objeto de una posible incidencia de seguridad.

El fichero de configuración de los registros es el /etc/syslog.conf y el demonio encargado de registrar los eventos es, como ya decíamos, el syslogd.

Integridad de los ficheros

Herramientas como el tripwire nos ayudan a detectar alteraciones en los ficheros binarios y de configuración de sistema. Conviene incluso ejecutarlo automáticamente desde el crontab diariamente.

Instalaciones de software seguras

Para prevenir posibles troyanos asegurate antes de la instalación de un paquete (RPM, LSM..) su checksum MD5 y su firma PGP. El MD5 te comprueba la integridad y no alteración del paquete, y la firma PGP la autenticidad de su autor. Ambas herramientas se pueden traer también de la red.

Firewalls

Los firewalls restringen los accesos desde o hacia tu máquina linux. Una máquina linux, a partir del 2.0 con kernel y con dos tarjetas de red, puede ser usado como firewall. Además, linux posee herramientas como el ipfwadm o el ipchains que te ayudan a configurarlo.

Nunca olvides, sin embargo, que el firewall sólo te permite limitar el acceso a los servicios que tú especifiques. NO TE PROTEGE frente a errores de seguridad o de configuración en esos servicios.

 

 

 

Centro Informático Científico de Andalucía | Aviso legal | Accesibilidad

XHTML válido CSS válido