Capítulo 4. Seguridad en Linux

Tabla de contenidos

4.1. Enmascaramiento y cortafuegos
4.2. SSH: operaciones de red seguras
4.3. Cifrado de particiones y archivos
4.4. Limitación de privilegios con AppArmor
4.5. Seguridad y confidencialidad

Resumen

La función de enmascaramiento y el cortafuegos garantizan el control en el flujo y el intercambio de los datos. SSH (shell seguro) permite iniciar la sesión en hosts remotos a través de una conexión cifrada. El cifrado de archivos o de particiones completas protege los datos en el caso de que usuarios externos consigan acceder al sistema. Además de instrucciones técnicas, se incluye información acerca de los aspectos relacionados con la seguridad de las redes Linux.


4.1. Enmascaramiento y cortafuegos

Siempre que Linux se utiliza en un entorno de red, se pueden emplear las funciones del núcleo que permiten la manipulación de los paquetes de red para conservar una separación entre las áreas de redes interna y externa. La estructura de Linux netfilter proporciona los recursos para instalar un cortafuegos efectivo que gestione las diferentes redes de forma distinta. Con la ayuda de iptables —una estructura genérica de tabla para la definición de los conjuntos de tablas—, controle de forma exhaustiva los paquetes que se permite que pasen a una interfaz de red. Este filtro de paquetes se puede configurar de forma relativamente sencilla con la ayuda de SuSEfirewall2 y el módulo YaST correspondiente.

4.1.1. Filtrado de paquetes con iptables

Los elementos netfilter e iptables son responsables del filtrado y de la manipulación de paquetes de redes, así como de la NAT (conversión de direcciones de red). Los criterios de filtrado y cualquier acción relacionada con ellos se almacenan en cadenas, que se agrupan una tras otra por paquetes de red individuales cada vez que se reciben. Las cadenas que se deben ordenar se almacenan en tablas. El comando iptables le permite alterar estas tablas y los conjuntos de reglas.

El núcleo de Linux mantiene tres tablas, cada una de ellas destinada a una categoría determinada de funciones del filtro de paquetes:

filter

Esta tabla incluye la totalidad de las reglas de filtros, debido a que implementa el mecanismo filtrado de paquetes en sentido estricto, lo que determina, por ejemplo, si se permiten los paquetes (ACCEPT) o si se descartan (DROP).

nat

Esta tabla define todos los cambios realizados en las direcciones de origen y destino de los paquetes. Haciendo uso de estas funciones podrá también recurrir al enmascaramiento, que es un caso especial de NAT que se emplea para enlazar una red privada a Internet.

mangle

Las reglas contenidas en esta tabla permiten manipular los valores almacenados en los encabezados IP (como, por ejemplo, el tipo de servicio).

Figura 4.1. iptables: posibles vías del paquete

iptables: posibles vías del paquete

Estas tablas contienen varias cadenas predefinidas para la coincidencia de paquetes:

ENCAMINAMIENTO PREVIO

Esta cadena se aplica a los paquetes entrantes.

ENTRADA

Esta cadena se aplica a los paquetes destinados a los procesos internos del sistema.

ENVÍO

Esta cadena se aplica solamente a los paquetes que se enrutan a través del sistema.

SALIDA

Esta cadena se aplica a los paquetes originados en el sistema.

ENCAMINAMIENTO POSTERIOR

Esta cadena se aplica a todos los paquetes salientes.

La Figura 4.1, “iptables: posibles vías del paquete” ilustra las vías por las que puede desplazarse un paquete de red en un sistema dado. Por razones de simplicidad, las ilustración muestra las tablas como partes de las cadenas, pero en realidad estas cadenas se sustentan en las propias tablas.

La más sencilla de las situaciones se produce cuando un paquete de entrada destinado al sistema llega a la interfaz eth0. En primer lugar, el paquete se deriva a la cadena PREROUTING de la tabla mangle y, a continuación, a la cadena PREROUTING de la tabla nat. El siguiente paso, referido al enrutamiento del paquete, establece que el destino real del paquete es un proceso del sistema. Después de pasar por las cadenas INPUT de las tablas mangle y filter, el paquete alcanza finalmente su objetivo, debido a que las reglas de la tabla filter son coincidentes.

4.1.2. Nociones básicas sobre el enmascaramiento

El enmascaramiento es la forma específica de NAT (conversión de direcciones de red) de Linux Se puede emplear para conectar una LAN pequeña (donde los hosts utilizan direcciones IP de rango privado; a este respecto, consulte la Sección 18.1.2, “Máscaras de red y encaminamiento”) a Internet (donde se emplean direcciones IP oficiales). Para que los hosts de la LAN puedan conectarse a Internet, sus direcciones privadas se traducen en direcciones oficiales. Esta operación se realiza en el router, que actúa de gateway entre la LAN e Internet. El principio subyacente es muy sencillo: El router tiene más de una interfaz de red, normalmente una tarjeta de red y una interfaz que lo conecta a Internet. Mientras que esta última enlaza el router con el exterior, una o varias de las demás lo conectan a los hosts de LAN. Con los hosts de la red local conectados a la tarjeta de red (como por ejemplo eth0) del router, es posible enviar cualquier paquete no destinado a la red local a su gateway o router por defecto.

[Important]Utilización de la máscara de red adecuada

Cuando configure su red, asegúrese de que tanto la dirección de difusión como la máscara de red son las mismas para todos los hosts locales. Si no toma esta precaución, los paquetes no se enrutarán adecuadamente.

Como se ha mencionado, cuando uno de los hosts de LAN envía un paquete destinado a una dirección de Internet, éste se dirige al router por defecto. Sin embargo, el router debe configurarse antes de poder reenviar los paquetes. Por razones de seguridad, SUSE Linux no habilita esta función en una instalación por defecto. Para habilitarla, fije la variable IP_FORWARD en el archivo /etc/sysconfig/sysctl como IP_FORWARD=yes.

El host de destino de la conexión puede tener constancia de la existencia de su router, pero no dispone de información acerca del host que se encuentra situado en la red interna y que es donde se originaron los paquetes. Por esta razón esta técnica se denomina enmascaramiento. A consecuencia de la conversión de direcciones, el router es el primer destino de todos los paquetes de respuesta. El router debe identificar estos paquetes entrantes y traducir sus direcciones de destino, de forma tal que los paquetes se reenvíen al host adecuado de la red local.

Gracias al enrutamiento del tráfico entrante dependiente de la tabla de enmascaramiento, no existe ninguna manera de abrir una conexión con un host interno desde el exterior. Para una conexión de este tipo no habría ninguna entrada en la tabla. Además, a cada conexión que se encuentre establecida se le asigna una entrada de estado en la tabla, por lo que la entrada no podrá emplear ninguna otra conexión.

Como consecuencia, es posible que se produzcan problemas con un número determinado de protocolos de aplicación, tales como ICQ, cucme, IRC (DCC, CTCP) y FTP (en modo PORT). Netscape, el programa FTP y muchos otros programas utilizan el modo PASV. Este modo pasivo origina muchos menos problemas en lo referente al enmascaramiento y filtrado de paquetes.

4.1.3. Nociones básicas sobre el empleo de cortafuegos

El término cortafuegos es probablemente el que se emplea con mayor frecuencia para describir un mecanismo que proporciona y gestiona un enlace entre redes al tiempo que controla también el flujo de datos entre ellos. Estrictamente hablando, el mecanismo que se describe en esta sección se denomina filtro de paquetes. El filtro de paquetes regula el flujo de datos de acuerdo con determinados criterios, tales como protocolos, puertos y direcciones IP. De esta manera, es posible bloquear paquetes que, de acuerdo con sus direcciones de origen, se pretende que no lleguen a su red. Para permitir el acceso público a, por ejemplo, su servidor Web, abra de forma explícita el puerto correspondiente. Sin embargo, el filtro de paquetes no examina el contenido de los paquetes provenientes de direcciones legítimas, como por ejemplo aquéllos que se envían a su servidor Web. Por ejemplo, si los paquetes entrantes están dirigidos a modificar un programa CGI de su servidor Web, el filtro de paquetes permitirá su acceso.

Un mecanismo más efectivo pero también más complejo es la combinación de distintos tipos de sistemas, como por ejemplo la interacción de un filtro de paquetes con un gateway o alterno de aplicación. En este caso, el filtro de paquetes rechaza cualquier paquete que tenga como objetivo la inhabilitación de puertos. Únicamente se aceptan los paquetes dirigidos a la gateway de aplicación. Esta gateway o este alterno simula ser el cliente real del servidor. En cierto modo, dicho alterno puede considerarse un host de enmascaramiento en el nivel de protocolo empleado por la aplicación. Un ejemplo para un alterno de este tipo es Squid, un servidor alterno HTTP. Para utilizar Squid, el navegador se debe configurar para que se pueda comunicar a través del alterno. Cualquier página HTTP que se solicite se sirve a partir de la caché alterna; en cuanto a las páginas no encontradas en la caché, éstas las recupera el alterno de Internet. En otro orden de cosas, el paquete SUSE Proxy-Suite (proxy-suite) proporciona un alterno para el protocolo.

La siguiente sección se centra en el filtro de paquetes que se proporciona con SUSE Linux. Para obtener más información sobre el filtrado de paquetes y el empleo de cortafuegos, consulte el documento Firewall HOWTO, que se incluye en el paquete howto. Si este paquete se encuentra ya instalado, lea el documento HOWTO mediante la opción less /usr/share/doc/howto/en/txt/Firewall-HOWTO.gz.

4.1.4. SuSEfirewall2

SuSEfirewall2 es un guión que lee las variables establecidas en /etc/sysconfig/SuSEfirewall2 para generar un juego de reglas de iptables. Se definen tres zonas de seguridad, aunque solamente se consideran la primera y la segunda en el siguiente ejemplo de configuración:

Zona externa

Debido a que no existe ninguna manera de controlar lo que sucede en la red externa, el host necesita estar protegido de dicha red. En la mayoría de los casos, la red externa es Internet, pero también podría tratarse de otra red insegura, como por ejemplo una red WLAN.

Zona interna

Hace referencia a la red privada, en la mayoría de los casos una red LAN. Si los hosts de esta red utilizan direcciones IP de rango privado (a este respecto, consulte la Sección 18.1.2, “Máscaras de red y encaminamiento”), habilite la conversión de direcciones de red (NAT), de forma tal que los hosts de la red interna puedan acceder a la red externa.

Zona desmilitarizada (DMZ)

Mientras que se puede llegar a los hosts que se ubican en esta zona tanto desde la red externa como interna, dichos hosts no pueden acceder a la red interna. Esta configuración puede emplearse para incluir una línea adicional de defensa ante la red interna, debido a que los sistemas DMZ están aislados de la red interna.

Todo tipo de tráfico de red no permitido de forma expresa por la regla de filtrado se suprime por la acción de las iptables. Por lo tanto, cada una de las interfaces con tráfico de entrada deben ubicarse en una de las tres zonas. Defina los servicios o protocolos permitidos para cada una de las zonas. La regla que se establezca se aplica solamente a los paquetes procedentes de hosts remotos. Los paquetes generados en la zona local no son capturados por el cortafuegos.

La configuración se puede realizar con YaST (a este respecto, consulte Sección 4.1.4.1, “Configuración con YaST”). También se puede llevar a cabo de forma manual en el archivo /etc/sysconfig/SuSEfirewall2, que se encuentra convenientemente comentado. En otro orden de cosas, se encuentra disponible a modo de ejemplo una serie de situaciones en /usr/share/doc/packages/SuSEfirewall2/EXAMPLES.

4.1.4.1. Configuración con YaST

[Important]Configuración automática del cortafuegos

Después de la instalación, YaST iniciará de forma automática un cortafuegos en todas las interfaces configuradas. Si se configura y se activa un servidor en el sistema, YaST puede modificar la configuración del cortafuegos que se ha generado automáticamente mediante las opciones Open Ports on Selected Interface in Firewall (Abrir puertos en la interfaz seleccionada del cortafuegos) o Open Ports on Firewall (Abrir puertos en el cortafuegos) de los módulos de configuración del servidor. Algunos cuadros de diálogo del módulo del servidor incluyen un botón denominado Detalles del cortafuegos que permite activar servicios y puertos adicionales. El módulo de configuración del cortafuegos de YaST se puede utilizar para activar, desactivar o volver a configurar el cortafuegos.

Se puede acceder a los cuadros de diálogo de YaST para la configuración gráfica a través del Centro de Control de YaST. Seleccione Seguridad y usuarios+Cortafuegos. La configuración se divide en siete secciones a las que se puede acceder directamente desde la estructura de árbol que se encuentra situada en la parte izquierda del cuadro de diálogo.

Inicio

Defina el comportamiento de inicio en este cuadro de diálogo. Cuando se trate de una instalación por defecto, SuSEfirewall2 se iniciará automáticamente. También puede iniciar aquí tanto el inicio como la detención del cortafuegos. Para implementar la nueva configuración en un cortafuegos que se esté ejecutando, utilice la opción Guardar la configuración y reiniciar cortafuegos.

Figura 4.2. Configuración de cortafuegos de YaST

Configuración de cortafuegos de YaST
Interfaces

En este cuadro de diálogo se muestra una lista con todas las interfaces de red conocidas. Para eliminar una interfaz de una zona, seleccione la interfaz y, a continuación, pulse Cambiar y seleccione Ninguna zona asignada. Para añadir una interfaz a una zona, seleccione la interfaz, pulse Cambiar y, a continuación, seleccione cualquiera de las zonas disponibles. También puede crear una interfaz especial con sus propios ajustes utilizando para ello la opción Personalizar.

Servicios autorizados

Esta opción es necesaria para poder ofrecer servicios desde su sistema a una zona que se encuentre protegida. Por defecto, el sistema se encuentra protegido únicamente de zonas externas. Autorice expresamente los servicios que deberían estar disponibles para los hosts externos. Active los servicios después de seleccionar la zona deseada en Allowed Services for Selected Zone (Servicios autorizados para zona seleccionada).

Enmascaramiento

El enmascaramiento oculta su red interna a las redes externas, como por ejemplo Internet, al tiempo que permite que los hosts de la red interna puedan acceder a la red externa de forma transparente. Las solicitudes enviadas de la red externa a la red interna se bloquean, mientras que las solicitudes enviadas por la red interna parecen ser enviadas por el servidor de enmascaramiento cuando éstas se ven externamente. Si los servicios especiales de una máquina interna necesitan estar disponibles para la red externa, añada reglas especiales de redirección para el servicio.

Broadcast

En este cuadro de diálogo, configure los puertos UDP que permiten difusiones. Añada los números o servicios de puertos necesarios a la zona adecuada, separados entre sí por espacios. Consulte igualmente el archivo /etc/services.

Es aquí, por otra parte, donde puede habilitarse el registro de las difusiones no aceptadas. Esto puede originar problemas, puesto que los hosts de Windows utilizan difusiones para saber obtener información unos de otros y, de esa forma, generan paquetes que no son aceptados.

Soporte IPsec

Determine si el servicio IPsec deberá estar disponible para la red externa en este cuadro de diálogo. Configure qué paquetes son confiables en Detalles.

Nivel de registro

Son dos las reglas existentes para el registro: paquetes aceptados y no aceptados. Los paquetes no aceptados son DROPPED (SUPRIMIDOS) o REJECTED (RECHAZADOS). Seleccione para ambos una de las siguientes opciones: Registrar todos, Log Critical (Registrar críticos) o No registrar ninguno.

Una vez que haya concluido la configuración del cortafuegos, salga de este cuadro de diálogo utilizando la opción Siguiente. Se abrirá a continuación un resumen de la configuración de su cortafuegos orientado a las zonas. En dicho resumen, compruebe todos los ajustes. Todos los servicios, puertos y protocolos que se han autorizado se indican en este resumen. Para modificar la configuración, utilice la opción Atrás. Pulse Aceptar para guardar su configuración.

4.1.4.2. Configuración manual

Los párrafos que aparecen a continuación ofrecen instrucciones detalladas para lograr una configuración adecuada. Cada elemento de la configuración se marca siempre y cuando sea relevante para los cortafuegos o el enmascaramiento. Los aspectos relacionados con la DMZ (zona desmilitarizada), de acuerdo con lo mencionado en el archivo de configuración, no se cubren en esta sección. Estos aspectos son de aplicación únicamente en infraestructuras de redes más complejas localizadas en organizaciones de mayor tamaño (redes corporativas), que precisan una configuración ampliada y un conocimiento exhaustivo sobre el tema.

En primer lugar, emplee los Servicios del sistema (niveles de ejecución) del módulo YaST para habilitar SuSEfirewall2 en su nivel de ejecución (3 ó 5 con mayor probabilidad). Los enlaces simbólicos para los guiones de SuSEfirewall2_* se establecen en los directorios /etc/init.d/rc?.d/.

FW_DEV_EXT (cortafuegos, enmascaramiento)

Es el dispositivo que está conectado a Internet. Para una conexión por módem, escriba ppp0. Para una conexión RDSI, utilice ippp0. Las conexiones DSL, por su parte, utilizan dsl0. Especifique auto para utilizar la interfaz que se corresponda con la ruta por defecto.

FW_DEV_INT (cortafuegos, enmascaramiento)

Es el dispositivo conectado a la red interna privada (como por ejemplo eth0). Deje esta opción en blanco si no existe una red interna y si el cortafuegos protege solamente el host en el que se ejecuta el cortafuegos.

FW_ROUTE (cortafuegos, enmascaramiento)

Si precisa la función de enmascaramiento, fije este valor en yes. Sus hosts internos no serán visibles desde el exterior, debido a que sus direcciones de redes privadas (como, por ejemplo, 192.168.x.x) no son tenidas en cuenta por los routers de Internet.

Para un cortafuegos sin enmascaramiento, únicamente fije este valor en yes si quiere permitir el acceso a la red interna. Sus hosts internos necesitan utilizar únicamente IPs registradas en este caso. Por norma general, sin embargo, se recomienda que no permita el acceso a su red interna desde el exterior.

FW_MASQUERADE (enmascaramiento)

Establezca este valor en yes si precisa la función de enmascaramiento. Esto proporciona a los hosts internos una conexión prácticamente directa a Internet. Es más seguro contar con un servidor alterno entre los hosts de la red interna e Internet. El enmascaramiento no es necesario para aquellos servicios proporcionados por servidores alternos.

FW_MASQ_NETS (enmascaramiento)

Especifique los hosts o las redes para las que se realizará el enmascaramiento; no olvide dejar un espacio entre cada una de las entradas individuales. Por ejemplo:

FW_MASQ_NETS="192.168.0.0/24 192.168.10.1"
FW_PROTECT_FROM_INT (cortafuegos)

Establezca este valor en yes para proteger el host del cortafuegos frente a ataques originados en la red interna. Los servicios estarán disponibles para la red interna únicamente si se han habilitado expresamente. A este respecto, consulte también FW_SERVICES_INT_TCP y FW_SERVICES_INT_UDP.

FW_SERVICES_EXT_TCP (cortafuegos)

Introduzca los puertos TCP que deberían estar disponibles. Deje esta opción en blanco en aquellas estaciones de trabajo normales de uso doméstico que no se emplean para ofrecer servicios.

FW_SERVICES_EXT_UDP (cortafuegos)

Deje esta opción en blanco excepto si se ejecuta un servicio UDP y quiere que se pueda acceder a él desde el exterior. Los servicios que emplean UDP incluyen, entre otros, a los servidores DNS, IPSec, TFTP y DHCP. En ese caso, escriba los puertos UDP que se van a emplear.

FW_SERVICES_INT_TCP (cortafuegos)

Defina con esta variable los servicios disponibles para la red interna. La notación es la misma que la empleada en FW_SERVICES_EXT_TCP, pero en este caso los ajustes se aplican a la red interna. La variable solamente necesita establecerse si FW_PROTECT_FROM_INT se ha fijado en el valor yes.

FW_SERVICES_INT_UDP (cortafuegos)

Consulte FW_SERVICES_INT_TCP.

Después de haber configurado el cortafuegos, compruebe la configuración del dispositivo. Los conjuntos de reglas del cortafuegos se crean escribiendo el comando SuSEfirewall2 start como usuario root. A continuación, utilice por ejemplo el comando telnet desde un host externo para comprobar si se ha denegado la conexión. Después de esta operación, consulte /var/log/messages, donde debería aparecer un mensaje como el que se muestra a continuación:


Mar 15 13:21:38 linux kernel: SFW2-INext-DROP-DEFLT IN=eth0 
OUT= MAC=00:80:c8:94:c3:e7:00:a0:c9:4d:27:56:08:00 SRC=192.168.10.0 
DST=192.168.10.1 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=15330 DF PROTO=TCP 
SPT=48091 DPT=23 WINDOW=5840 RES=0x00 SYN URGP=0 
OPT (020405B40402080A061AFEBC0000000001030300)

Otros paquetes que le permitirán probar la configuración del cortafuegos son nmap o nessus. Después de instalar los paquetes respectivos, la documentación de nmap se encuentra en /usr/share/doc/packages/nmap, mientras que la documentación de nessus se localiza en el directorio /usr/share/doc/packages/nessus-core.

4.1.5. Información adicional

La información más actualizada y la documentación adicional acerca del paquete SuSEfirewall2 se encuentra en /usr/share/doc/packages/SuSEfirewall2. La página Web del proyecto netfilter y iptables, http://www.netfilter.org, ofrece un amplio catálogo de documentos disponibles en diversas lenguas.