Gentoo Logo

[ << ] [ < ] [ Inicio ] [ > ] [ >> ]


10. Asegurando los servicios

Contenido:

10.a. Apache

Apache viene con un más que decente fichero de configuración pero todavía necesitamos mejorar algunas cosas, como enlazar Apache a una dirección y prevenir fugas de información. A continuación se describen las opciones que debería aplicar en el fichero de configuración:

Si usted no deshabilita ssl en su /etc/make.conf antes de instalar Apache, debería tener habilitado el acceso al servidor mediante ssl. Dentro de /etc/apache2/vhosts.d podemos encontrar archivos con ejemplos de configuración. Estos son ejemplos funcionales y es mejor verificarlos o deshabilitarlos.

Es importante definir en el archivo de configuració que se escuche a una dirección IP en particular (en vez de todas las direcciones IP de su sistema). Por ejemplo, en el archivo 00_default_vhost.conf:

Listado de Código 1.1: /etc/apache2/vhosts.d/00_default_vhost.conf

# Make it listen on your ip
Listen 127.0.0.1

También recomendamos que deshabilite el despliegue de información sobre la instalación Apache al resto del mundo. Por defecto, la configuración agregará la versión del servidor y nombre del anfitrión virtual a las páginas generadas por el servidor. Para desactivar esta característica, cambie la variable ServerSignature a Off:

Listado de Código 1.2: /etc/apache2/modules.d/00_default_settings.conf

ServerSignature Off

Apache está compilado con --enable-shared=max y --enable-module=all. Esto activará por defecto todos los módulos, así que puede "comentar" todos los módulos en la sección LoadModule (LoadModule y AddModule) que no use en el archivo principal de configuración /etc/apache2/httpd.conf. Reinicie el servicio ejecutando /etc/init.d/apache restart.

Puede encontrar más información en http://www.apache.org.

10.b. Bind

Puede encontrar información en Internet Software Consortium. El Manual de referencia del administrador en BIND 9 lo puede encontrar también en doc/arm.

Los nuevos "ebuilds" de BIND soportan el chrooting fuera del entorno. Después de instalar (emerge) bind siga estos sencillos pasos:

Listado de Código 2.1: Chrooting BIND

# emerge --config bind
(Antes de ejecutar el comando anterior debe tratar de cambiar)
(el directorio de chroot en /etc/conf.d/named.)
(En caso contrario será usado /chroot/dns.)

10.c. Djbdns

Djbdns es una implementación de DNS en cuya seguridad su autor está dispuesto a apostar dinero. Trabaja de forma muy diferente a Bind 9 pero vale la pena probarlo. Puede obtener más información en http://www.djbdns.org.

10.d. FTP

Generalmente, usar FTP (File Transfer Protocol) es una mala idea. Porque no cifra los datos (por ejemplo, las contraseñas circulan en texto claro), escucha en dos puertos (normalmente el 20 y el 21), y los atacantes buscan frecuentemente accesos anónimos para intercambiar warez. Puesto que protocolo FTP tiene varios problemas de seguridad, debería utilizar en su lugar sftp o HTTP . Si no lo hace, asegure tan bien como pueda sus servicios y prepárese.

10.e. Mysql

Si sólo necesita que las aplicaciones locales accedan a la base de datos mysql "descomente" la siguiente línea en /etc/mysql/my.cnf.

Listado de Código 5.1: Deshabilitar el acceso de red

skip-networking

Luego, deshabilitemos el uso del comando LOAD DATA LOCAL INFILE.Lo que nos prevendrá contra la lectura no autorizada de ficheros locales. Esto toma relevancia cuando se encuentran nuevas vulnerabilidades de Inyección SQL en PHP.

Listado de Código 5.2: Deshabilitar LOAD DATA LOCAL INFILE en la sección [mysqld]

set-variable=local-infile=0

A continuación, vamos a borrar la base de datos de ejemplo (test) y todas las cuentas excepto la cuenta local de root.

Listado de Código 5.3: Borrar la base de datos de ejemplo y todos los usuarios innecesarios

mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host="localhost" and user="root");
mysql> flush privileges;

Aviso: Tenga cuidado con lo anterior si usted previamente ya ha configurado cuentas de usuario.

Nota: Si ha cambiado las contraseñas desde la línea de introducción de comandos de MySQL deberá borrar siempre ~/.mysql_history y /var/log/mysql/mysql.log puesto que almacenan los comandos SQL ejecutados con las contraseñas en texto claro.

10.f. Proftpd

Proftpd ha tenido bastantes problemas de seguridad, pero parece que se han resuelto muchos de ellos. Aún así, es buena idea aplicar algunas mejoras:

Listado de Código 6.1: /etc/proftpd/proftpd.conf

ServerName "My ftp daemon"
# No muestre la identidad del servidor
ServerIdent on "Go away"

# Hace más fácil crear usuarios virtuales
RequireValidShell off

# Use unos ficheros de contraseñas y grupos alternativos (passwd usa cifrado)
AuthUserFile "/etc/proftpd/passwd"
AuthGroupFile "/etc/proftpd/group"

# Permisos
Umask 077

# Timeouts y limitaciones
MaxInstances 30
MaxClients 10 "Only 10 connections allowed"
MaxClientsPerHost 1 "You have already logged on once"
MaxClientsPerUser 1 "You have already logged on once"
TimeoutStalled 10
TimeoutNoTransfer 20
TimeoutLogin 20

# Chroot todo el mundo
DefaultRoot ~

# No lo ejecute como root
User  nobody
Group nogroup

# Registre cada transacción
TransferLog /var/log/transferlog

# Problemas con globbing
DenyFilter \*.*/

Puede encontrar más documentación en http://www.proftpd.org.

10.g. Pure-ftpd

Pure-ftpd es una variante del trollftpd original, modificado por Frank Dennis por razones de seguridad y funcionalidad.

Utilice usuarios virtuales (nunca cuentas del sistema) habilitando la opción AUTH. Configure esto con -lpuredb:/etc/pureftpd.pdb y cree sus usuarios mediante /usr/bin/pure-pw.

Listado de Código 7.1: /etc/conf.d/pure-ftpd

AUTH="-lpuredb:/etc/pureftpd.pdb"

## Misc. Others ##
MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15"

Configure la opción MISC_OTHER para no permitir accesos anónimos (-E), hacer chroot para todos (-A), para que los usuarios no puedan leer o escribir en los archivos que empiezan por . (punto) (-X), el tiempo máximo 'idle' (-I), el límite de recursión (-L), y una razonable umask.

Aviso: ¡No use las opciones -w or -W! Si usted quiere tener un sitio de warez, ¡no lea más esta guía!

Puede encontrar más documentación en http://www.pureftpd.org.

10.h. Vsftpd

Vsftpd (siglas de "very secure ftp", ftp realmente seguro) es un pequeño demonio ftp que se ejecuta con una razonable configuración por defecto. Es sencillo y no tiene algunas de las características de pureftp o proftp.

Listado de Código 8.1: /etc/vsftpd

anonymous_enable=NO
local_enable=YES

#sólo escritura
write_enable=NO

#permite el registro de transacciones
xferlog_std_format=YES

idle_session_timeout=20
data_connection_timeout=20
nopriv_user=nobody

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chrootlist

ls_recurse_enable=NO

Como puede ver, no hay forma en este servicio de tener permisos individuales, pero cuando se prepara con una configuración anónima es bastante bueno. Algunas veces es bueno tener un ftp anónimo (para compartir programas de código abierto) y entonces vsftpd hace muy buen papel.

10.i. Netqmail

Netqmail está frecuentemente considerado como un servidor de correo muy seguro. Está escrito pensando en la seguridad (y en la paranoia). Por defecto no permite el reenvío y no ha tenido un sólo agujero de seguridad desde 1996. ¡Simplemente instálelo con emerge netqmail y configúrelo!

10.j. Samba

Samba es un protocolo para compartir ficheros con redes Microsoft y Novell y no debería usarse a través de Internet. Aún así, continua necesitando ser asegurado.

Listado de Código 10.1: /etc/samba/smb.conf

[global]
  #Enlace a una interface
  interfaces = eth0 10.0.0.1/32

  #Indica el uso de contraseñas cifradas
  encrypt passwords = yes
  directory security mask = 0700

  #Permite el tráfico desde 10.0.0.*
  hosts allow = 10.0.0.

  #Habilita el modo de autentificación por usuario
  #(no use el modo compartido)
  security = user

  #Deshabilita las cuentas con privilegios
  invalid users = root @wheel

  #Tamaño máximo que smb muestra para un recurso compartido
  #(no es un límite)
  max disk size = 102400

  #Política de contraseñas
  min password length = 8
  null passwords = no

  #Uso de PAM (si se ha añadido su soporte)
  obey pam restrictions = yes
  pam password change = yes

Asegúrese que los permisos están correctamente establecidos en cada recurso compartido y recuerde leer la documentación.

Ahora reinicie el servidor y añada los usuarios que deban tener acceso a este servicio. Esto se hace mediante el comando /usr/bin/smbpasswd con el parámetro -a.

10.k. ssh

La única seguridad que OpenSSH necesita es habilitar la autentificación fuerte basada en cifrado de clave pública. Demasiados sitios (como http://www.sourceforge.net, http://www.php.net yhttp://www.apache.org) han sufrido accesos no autorizados debidos a filtraciones de contraseñas o a malas contraseñas.

Listado de Código 11.1: /etc/ssh/sshd_config

#Sólo habilitar la versión 2
Protocol 2

#No permitir el acceso directo a root
PermitRootLogin no

#Habilitar la autentificación de clave pública
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#Deshabilitar los ficheros .rhost y la autentificación normal con contraseña
HostbasedAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no

#Sólo los usuarios en los grupos wheel o admin pueden obtener acceso
AllowGroups wheel admin

#En dichos grupos sólo permite el acceso de los siguienes usuarios
#El @<nombre_de_dominio> es opcional, pero reemplaza la
#anterior directiva AllowHosts
AllowUsers kn@gentoo.org bs@gentoo.org

#Añadir registro de actividad
SyslogFacility AUTH
LogLevel INFO

(Cambie esto con su dirección)
ListenAddress 127.0.0.1

Verifique también que no tiene UsePAM yes en su fichero de configuración porque sobreescribe el mecanismo de autentificación de clave pública, o sino desactive PasswordAuthentication o ChallengeResponseAuthentication. Más información acerca de estas opciones puede encontrarse en la página man de sshd_config.

Ahora todo lo que sus usuarios tienen que hacer es crear una clave (en el ordenador desde el que se van a conectar) usando el comando siguiente:

Listado de Código 11.2: Crea un par de claves DSA

# /usr/bin/ssh-keygen -t dsa

Y teclear una contraseña-frase (passphrase).

Listado de Código 11.3: Salida de ssh-keygen

Generating public/private dsa key pair.
Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Pulse enter]
Created directory '/home/kn/.ssh'.
Enter passphrase (empty for no passphrase): [Escriba la frase de paso]
Enter same passphrase again: [Vuelva a escribir la frase de paso]
Your identification has been saved in /home/kn/.ssh/id_dsa.
Your public key has been saved in /home/kn/.ssh/id_dsa.pub.
The key fingerprint is:
07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen

Esto añadirá dos archivos a su directorio ~/.ssh/, llamados id_dsa y id_dsa.pub. El archivo id_dsa es su clave privada y debe ser accesible sólo por usted. El otro fichero id_dsa.pub debe ser distribuido en cada servidor al cual tenga acceso. Añada la clave en el directorio home del usuario en ~/.ssh/authorized_keys y el usuario debería ser capaz de hacer login:

Listado de Código 11.4: Añadir el fichero id_dsa.pub al fichero authorized_keys

$ scp id_dsa.pub other-host:/var/tmp/currenthostname.pub
$ ssh other-host
password:
$ cat /var/tmp/currenthostname.pub >> ~/.ssh/authorized_keys
 

Ahora, sus usuarios deberían salvaguardar su clave privada convenientemente. Poniéndola en un dispositivo que ellos lleven siempre encima o dejarla en su estación de trabajo (añada esto a las políticas de Contraseñas).

Para más información visite la página web de OpenSSH.

10.l. Uso de xinetd

xinetd es un sustituto de inetd (del cual no dispone Gentoo), el demonio de servicios de Internet. Soporta control de acceso basado en la dirección del host remoto y el tiempo de acceso. También proporciona extensas posibilidades de log, incluyendo una hora de arranque del servidor, dirección de host remoto, nombre de usuario remoto, tiempo de ejecución del servidor, y acciones solicitadas.

Como en todos los demás servicios es importante tener una buena configuración por defecto. Pero desde el momento que xinetd se ejecuta como root y soporta protocolos que puede que usted no conozca como funcionan, le recomendamos que no lo utilice. Pero si a pesar de todo lo quiere utilizar, aquí le explicamos como puede añadirle algo de seguridad:

Listado de Código 12.1: Instale xinetd

# emerge xinetd tcp-wrappers

Y edite el fichero de configuración:

Listado de Código 12.2: /etc/xinetd.conf

defaults
{
 only_from      = localhost
 instances      = 10
 log_type       = SYSLOG authpriv info
 log_on_success = HOST PID
 log_on_failure = HOST
 cps    = 25 30
}

# Esto configurará pserver (cvs) via xinetd con los siguientes parámetros:
# un máximo de 10 instancias (10 conexiones simultáneas)
# limita pserver a conexiones tcp solamente
# utiliza el usuario cvs para ejecutar este servicio
# enlaza una sola dirección IP en las interfaces de red
# permite el acceso desde 10.0.0.*
# limita el tiempo que los desarrolladores pueden usar cvs: desde 8am a 5pm
# usa tcpd wrappers (control de acceso especificado en
# /etc/hosts.allow y /etc/hosts.deny)
# la carga máxima del sistema se establece a 1.0
# el disable flag está a no por defecto, pero preferimos tenerlo
# en caso de querer desactivarlo
service cvspserver
{
 socket_type    = stream
 protocol       = tcp
 instances      = 10
 protocol       = tcp
 wait           = no
 user           = cvs
 bind           = 10.0.0.2
 only_from      = 10.0.0.0
 access_times   = 8:00-17:00
 server         = /usr/sbin/tcpd
 server_args    = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver
 max_load       = 1.0
 log_on_failure += RECORD
 disable        = no
}

Para más información consulte man 5 xinetd.conf.

10.m. X

Por defecto Xorg está configurado para actuar como un servidor X. Esto puede resultar peligroso puesto que X usa conexiones TCP no cifradas y está a la escucha para clientes X.

Importante: Si usted no necesita este servicio, ¡deshabilítelo!

Pero si piensa usar su estación de trabajo como servidor X use el comando /usr/X11R6/bin/xhost con precaución. Este comando permite a clientes desde otros hosts conectarse y usar su pantalla. Lo que puede ser práctico si usted necesita una aplicación X de un equipo diferente y la única manera de utilizarla es a través de la red, pero lo que también puede permitir ser aprovechado por un atacante. La sintaxis es /usr/X11R6/bin/xhost +nombre_de_host

Aviso: ¡No use nunca la opción xhost +! Esto permitirá a cualquier cliente conectarse y tomar el control de sus X. Si un atacante puede tener acceso a sus X, puede registrar lo que teclee y tomar el control de su escritorio. Recuerde especificar siempre un host si usted debe utilizarlo.

Un solución más segura es deshabilitar completamente esta característica arrancando X con startx -- -nolisten tcp o deshabilitándola permanentemente en la configuración.

Listado de Código 13.1: /usr/X11R6/bin/startx

defaultserverargs="-nolisten tcp"

Para asegurarse de que startx no será sobreescrito al 'emerger' una nueva versión de Xorg debe protegerlo. Añada la siguiente línea a /etc/make.conf:

Listado de Código 13.2: /etc/make.conf

CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"

Si usted usa un gestor gráfico de login necesitará cambiar otros archivos.

Para gdm (Gnome Display Manager):

Listado de Código 13.3: /etc/X11/gdm/gdm.conf

[server-Standard]
command=/usr/X11R6/bin/X -nolisten tcp

Para xdm (X Display Manager) y kdm (Kde Display Manager):

Listado de Código 13.4: /etc/X11/xdm/Xservers

:0 local /usr/bin/X11/X -nolisten tcp

[ << ] [ < ] [ Inicio ] [ > ] [ >> ]


Imprimir

Ver completo

Página actualizada 2 de abril, 2010

Sumario: Compruebe que los servicios son seguros.

Kim Nielsen
Autor

John P. Davis
Editor

Eric R. Stockbridge
Editor

Carl Anderson
Editor

Jorge Paulo
Editor

Sven Vermeulen
Editor

Benny Chuang
Editor

Sune Jeppesen
Editor

Tiemo Kieft
Editor

Zack Gilburd
Editor

Dan Margolis
Editor

Joshua Saddler
Editor

John Christian Stoddart
Traductor

José Luis Rivero
Traductor

Postel
Traductor

Carles Ferrer Peris
Traductor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.