5. Sobre la seguridad del sistema Debian

Inicio
Última actualización: 16 de diciembre, 2008

Tabla de Contenido

Introducción

La seguridad de un sistema operativo es un asunto importante. Muchos archivos pueden contener información reservada o privada y restringir el acceso puede ser necesario y a veces obligatorio. Aquí vamos a abordar algunos aspectos generales de seguridad en Debian.

Advertimos que muchas veces la seguridad se ve comprometida por el descuido de los usuarios y prácticas poco inteligentes. Es rol del administrador del sistema informar y enseñar a los usuarios sobre aspectos de seguridad del sistema tal de minimizar posibles desastres.

Claves

Una de las maneras más frecuentes de entrar a un sistema es mediante el robo de claves. Esto se hace con un sniffer instalado en un computador controlado por el intruso. El sniffer busca ("olfatea"), en el flujo de datos de una interfase de red, paquetes asociados a passwd, login y su para luego registrar los datos que siguen (una clave). Lo que generalmente busca un intruso es la clave de root, o vulnerabilidades del sistema, para apoderarse de los recursos del computador.

Es menos frecuente que los intentos de entrar a un sistema se hagan directamente ingresando claves al azar. Sin embargo, se recomienda no usar como clave palabras que puedan estar en algún diccionario, ni tampoco sobrenombres, nombre de alguna mascota o fechas como cumpleaños, aniversarios, etc. Este tipo de claves son tan comunes que son las primeras que un intruso prueba. El intruso en este caso puede ser alguien de tu entorno. Recuerda que una clave debe ser difícil de adivinar, que debe concebirse como un instrumento de seguridad y no para ser fácil de recordar. Una buena práctica es incluir en tu clave a lo menos una letra en mayúsculas y un número.

Seguridad de la red

Linux es un sistema operativo que tiene incorporado soporte de red en el núcleo mismo. Este es el motivo por el cual Linux es capaz de prestar todo tipo de servicios de red en forma natural. Sin embargo, la red también puede poner al computador en riesgo de intrusión. Si un intruso se apodera de los recursos del sistema puede usarlo para fines ilegales y en el mejor de los casos para fines de dudosa moralidad.

Cada servicio tiene asociado un protocolo que especifica las reglas de comunicación, un programa para manejar la comunicación llamados daemon y un puerto (port) identificado con un número por el cual se envían y reciben paquetes de datos con una estructura definida por el protocolo. Existen muchos tipos de protocolos, los más comunes son Transmission Control Protocol (TCP), User Datagram Protocol (UDP) e Internet Control Message Protocol (ICMP). El archivo /etc/services define el puerto y tipo de cada protocolo. Ejemplos son:

  FTP  (File Transfer Protocol, puerto 21, tipo TCP)
  SSH  (Secure Shell, puerto 22, tipo TCP, UDP)
  TELNET  (TELNET Protocol, puerto 23, tipo TCP)
  SMTP  (Simple Mail Transfer Protocol, puerto 25, tipo TCP)
  HTTP  (Hyper Text Transfer Protocol, puerto 80, tipo TCP, UDP)
  POP3  (POP 3, puerto 110, TCP, UDP)
  NTP  (Network Time Protocol, puerto 123, UDP)

Los paquetes de datos que viajan por la red y llegan a la interfase del computador (eth0, ppp0) tienen un encabezado que indica el emisor y destinatario (sus números IP), puerto, el tipo y protocolo del paquete. Luego el daemon asignado al protocolo, si es que está instalado y corriendo, negocia la comunicación con el emisor del paquete antes de que continúe la transferencia de datos. La negociación puede requerir una contraseña.

Algunos daemon están corriendo constantemente, "escuchando" (listen) la red. Otros corren cuando se ha establecido un requerimiento. Estos últimos los maneja otro daemon llamado inetd que corre constantemente, escuchando la red, para luego remitir cualquier requerimiento al respectivo daemon de acuerdo al protocolo y puerto del paquete recibido. El archivo de configuración /etc/inetd.conf define los protocolos manejados por inetd y los daemon asociados. Este tipo de super daemon se conocen como tcp wrappers.

Existen dos archivos de configuración que son consultados cada vez que algún daemon recibe un requerimiento de conexión por red. Estos son:

  /etc/hosts.deny
  /etc/hosts.allow

El primero define aquellos daemon, usuarios, dominios o números IP que no tienen permiso de conexión. El segundo, de igual manera, define aquellos que sí tienen permiso.

Lo más fácil es denegar todo permiso en /etc/hosts.deny y luego dar permisos individuales, por grupo o globales en /etc/hosts.allow.

Ingresa a root, por ejemplo, corriendo un "Terminal de <Root>" en el menú "Aplicaciones/Accesorios" o, en el mismo menú, un "Terminal" y luego el comando su (super user).

Edita el archivo /etc/hosts.deny,

# nano /etc/hosts.deny

para que lea,

# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5), hosts_options(5)
#                  and /usr/doc/netbase/portmapper.txt.gz
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "portmap" for the 
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper.  See portmap(8)
# and /usr/doc/portmap/portmapper.txt.gz for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.
#
# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID
ALL: ALL

La última línea van a negar todo acceso. Ahora edita el archivo /etc/hosts.allow,

# nano /etc/hosts.allow

Da permisos de la siguiente manera:

  daemon[,daemon]: dominio [,dominio]

ALL (todos) es equivalente a *. Por ejemplo,

# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5), hosts_options(5)
#                   and /usr/doc/netbase/portmapper.txt.gz
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8), rpc.mountd(8) and
# /usr/share/doc/portmap/portmapper.txt.gz for further information.
#
ALL : fisica.ciencias.uchile.cl
sshd : .ciencias.uchile.cl, 200.89.64.
imapd, ipopd : ALL

El primer ejemplo da todo tipo de permisos al computador llamado fisica.ciencias.uchile.cl. Este debe ser un computador del cual confías plenamente, ya que estás concediendo acceso ilimitado, incluso por aquellos puertos considerados inseguros. El segundo ejemplo da permiso a todo computador en el dominio ciencias.uchile.cl y 200.89.64.xxx para conectarse vía Secure Shell. El tercer ejemplo permite que todo el mundo se conecte a imapd y ipopd, los servidores IMAP y POP3, respectivamente.

Esta forma de bloquear servicios puede ser considerado como la segunda línea de defensa ante ataques de red. Si deseas incrementar la seguridad, puedes configurar un cortafuego de primeros principios.

Copyright © 2002-2008 Ricardo Yanez


This document was generated using AFT v5.096