Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Linux
  3. Seguridad del sistema
Extrait - Linux Administración del sistema y explotación de los servicios de red (5ª edición)
Extractos del libro
Linux Administración del sistema y explotación de los servicios de red (5ª edición) Volver a la página de compra del libro

Seguridad del sistema

Seguridad del sistema

Este capítulo trata de los diferentes aspectos de la seguridad de un sistema Linux en red: filtrado y traducción de direcciones a través del router, medidas de seguridad para un servidor FTP, gestión de SSH, tareas diarias de monitorio, implementación de una red privada virtual VPN.

1. Configuración de un router

El objetivo de esta sección es de enseñarle a:

  • configurar un sistema para transferir paquetes IP, efectuar la traducción de dirección de red (NAT, IP masquerading) y entender su importancia en la protección de una red;

  • configurar la redirección de puertos, la administración de las reglas de filtrado y la prevención de ataques.

a. Competencias principales

  • Archivos y herramientas de configuración iptables y ip6tables.

  • Archivos y herramientas de configuración para la gestión de las tablas de enrutamiento.

  • Rangos de direcciones privadas IPv4, direcciones locales únicas (Unique Local Addresses) y direcciones de enlace local (Link Local Addresses) IPv6.

  • Redirección de puertos y transmisión IP (IP forwarding).

  • Listar y escribir reglas y filtros basados en el protocolo, la dirección o los puertos de origen o destino, para aceptar o bloquear paquetes IP.

  • Guardar y cargar configuraciones de filtrado.

b. Elementos empleados

  • /proc/sys/net/ipv4/

  • /proc/sys/net/ipv6/

  • /etc/services

  • iptables

  • ip6tables

2. Gestión de servidores...

Configuración de un router

Un router IP es un equipo que participa en distintas redes IP y que puede transferir (forwarding) paquetes entre esas redes.

La función de enrutamiento está integrada directamente en el núcleo de Linux pero, por defecto, no está activada.

El router hace de intermediario entre esas redes, y se puede utilizar para controlar y filtrar el tráfico entre esas redes (firewall), o para esconder las redes internas del exterior (IP masquerading o NAT, Network Address Translation).

1. Configuración de un servidor Linux como router

Para que un sistema Linux pueda enrutar mensajes entre dos redes IP en las que participa, basta con activar la función de enrutamiento en el núcleo. También puede ser necesario configurar rutas estáticas en la tabla de enrutamiento del sistema, para especificar hacia qué router hay que transferir los mensajes según las redes de destino.

Por defecto, Linux es un router estático IP, no intercambia información de enrutamiento con otros routers de la red, a través de un protocolo de enrutamiento (RIP, OSPF…). Para que pueda hacerlo, habría que instalar un programa de enrutamiento dinámico como Quagga, Bird o Zebra.

a. Activación del enrutamiento

La activación del enrutamiento puede hacerse dinámicamente, usando el sistema de archivos virtual montado en /proc. El contenido del archivo /proc/sys/net/ipv4/ip_forward, 1 o 0, determinará si el núcleo actual enruta en IPv4 o no.

Ejemplo

Activación del enrutamiento:

echo 1 > /proc/sys/net/ipv4/ip_forward 

Desactivación del enrutamiento:

echo 0 > /proc/sys/net/ipv4/ip_forward 

También se puede usar el comando sysctl, que permite modificar todos los parámetros dinámicos del núcleo accesible a partir de /proc/sys. La ventaja es que el comando comprueba que el parámetro que se va a escribir es válido.

Ejemplo

Activación del enrutamiento:

sysctl net.ipv4.ip_forward=1 

Desactivación del enrutamiento:

sysctl net.ipv4.ip_forward=0 

Para que este cambio se aplique cada vez que se inicie el sistema, hay que especificarlo en el archivo de configuración /etc/sysctl.conf.

Sintaxis

net.ipv4.ip_forward = 1 

Para la configuración dinámica de IPv6, hay que usar el directorio /proc/sys/net/ipv6/. La activación o la desactivación...

Gestión de los servidores FTP

1. El protocolo FTP

FTP (File Transfer Protocol) es un protocolo cliente-servidor de transferencia de archivos. Definido en la RFC 114 de 1971, reemplazada por la RFC 959 de 1985, es uno de los protocolos más antiguos de la familia TCP/IP.

Implementado en muchas aplicaciones en el conjunto de los sistemas operativos, y particularmente Linux, sigue siendo muy usado. Sin embargo, necesita una configuración atenta en el servidor, para asegurar un nivel de seguridad suficiente.

Los tres servidores que se tienen que conocer para la certificación LPIC-2 son Pure-FTPd, vsftpd y, de manera menos profunda, ProFTPd.

a. Principios de funcionamiento

El protocolo de aplicaciones FTP se basa en TCP y usa el puerto bien conocido 21 para la transmisión de comandos entre el cliente y el servidor. Los datos se intercambian a través de una segunda conexión TCP con el puerto 20.

FTP puede funcionar en modo anónimo o autenticando los clientes. En este último caso, el cliente tiene que introducir una cuenta de usuario y contraseña válidos para el sistema del servidor. No obstante, el protocolo FTP usa intercambios no cifrados entre el cliente y el servidor, lo que es un problema de seguridad con respecto a la contraseña.

En modo anónimo, los servidores FTP asocian todas las conexiones de los clientes a una cuenta única del sistema, con derechos limitados a lo estrictamente necesario.

El protocolo FTP tiende a ser reemplazado por SFTP (SSH File Transfer Protocol), que utiliza comunicaciones cifradas.

b. Modos FTP activo y FTP pasivo

Históricamente, los clientes FTP utilizan el modo activo: el cliente envía una solicitud de conexión al servidor, en el puerto TCP 21. Para transferir los datos, el servidor abre una conexión desde el puerto TCP 20, hacia un puerto TCP del cliente, establecido dinámicamente.

Este tipo de funcionamientos puede causar problemas si existe un firewall entre el servidor y el cliente, porque la solicitud de conexión del servidor hacia un puerto dinámico del cliente podría ser bloqueada.

En modo pasivo, el cliente efectúa las dos solicitudes de conexión, en el puerto TCP 21 (para intercambio de comandos) y en un puerto dinámico del servidor, especificado al cliente por este último, a través de la conexión de control....

Shell seguro (SSH)

El protocolo SSH (Secured SHell) se basa en servicios de autentificación y de confidencialidad para asegurar los intercambios entre los clientes y el servidor a través de un transporte seguro de datos. Lo podemos usar para conectarnos como terminal a un servidor SSH para una sesión en modo de línea de comandos (como una especie de Telnet seguro), pero también puede asegurar funcionalidades de tipo transferencia de datos segura (SFTP, SCP) así como el transporte seguro para otros protocolos aplicativos.

1. Usos de OpenSSH

El protocolo Telnet se ha utilizado durante mucho tiempo para permitir a los clientes que se conecten en modo terminal a los sistemas remotos, a través de redes TCP/IP. Pero ese protocolo no es seguro: todos los intercambios entre el cliente y el servidor atraviesan las redes sin cifrar, incluyendo la contraseña del usuario que solicita la conexión.

El protocolo SSH, más reciente, usa una comunicación cifrada entre el cliente y el servidor, y procede a una auténticación entre el cliente y el servidor, que garantiza la confidencialidad de los intercambios.

OpenSSH es una implementación open source del protocolo SSH, muy usada en los entornos Linux y BSD.

a. Configuración del servidor OpenSSH

El archivo de configuración por defecto del servidor es /etc/ssh/sshd_config. Contiene una serie de directivas bajo la forma:

Directiva Valor,...,Valor 

Las directivas más habituales son las siguientes:

Protocol

Version del protocolo (a menudo la 2).

ListenAddress

Direcciones en las que el servidor SSH espera las solicitudes de conexión (por defecto: todas las direcciones locales).

Port

Número del puerto en el que el servidor se pone en escucha (por defecto: 22).

PermitRootLogin

Autoriza o no a un cliente a conectarse con la cuenta de superusuario (por defecto: yes).

AllowUsers

Lista de los usuarios autorizados. Los otros serán rechazados.

DenyUsers

Lista de los usuarios denegados. Los otros serán autorizados.

PasswordAuthentication

Autoriza o no la conexión con la contraseña del usuario (por defecto: yes).

PubkeyAuthentication

Autoriza o no la autenticación usando una clave pública.

b. Cifrado de las comunicaciones

El cifrado de los datos transmitidos entre el cliente y el servidor se basa en un par de claves que pertenecen al servidor SSH. Este último...

Tareas de seguridad

Debido a la interconexión cada vez más grande de las redes privadas y públicas, la seguridad se ha convertido en una preocupación mayor de los administradores del sistema. Existen diferentes herramientas que permiten seguir y diagnosticar las alertas de seguridad.

1. Comandos de prueba y de vigilancia

Existen diferentes comandos que permiten efectuar pruebas de accesibilidad en los servidores de red, para encontrar posibles fallos de seguridad.

Estos comandos están detallados en el capítulo Configuración de red de este libro.

a. El comando nc

El comando ncat o nc (netcat) es una herramienta multiusos, que permite establecer comunicaciones a través de sockets, locales o en red, en TCP y en UDP, en IPv4 o IPv6, como cliente o servidor, especificando un puerto de escucha.

Con todas sus opciones, este comando permite comprobar los diferentes tipos de comunicación, en particular a través de la red.

El comando nc reemplaza al comando tradicional telnet. Este ya no se encuentra generalmente en las distribuciones recientes, para disuadir de su uso en relación con un servidor telnet, lo que provoca un problema de seguridad (contraseña del usuario transmitida sin cifrar por la red).

b. El comando nmap

El comando nmap (Network Mapper), que se encuentra en el paquete nmap, es una herramienta potente de exploración de una red y de auditoría de seguridad. Permite determinar las máquinas activas en la red y los servicios de red disponibles en esas máquinas.

El comando puede ofrecer en particular una tabla de los puertos de cada máquina de destino, con su estado (abierto, cerrado o filtrado por un firewall). Este comando puede opcionalmente buscar y mostrar información más detallada: sistema operativo y aplicación a la escucha en cada puerto, incluyendo los números de la versión.

El uso de este comando tiene que hacerse con prudencia y respetando las obligaciones legales, porque comprobar...

OpenVPN

OpenVPN es un programa open source de gestión de redes virtuales privadas (VPN, Virtual Private Network). Apoyándose en SSL, permite crear un canal de comunicación seguro a través de una red IP. Lo proporciona el paquete openvpn.

1. Los principios de OpenVPN

OpenVPN ofrece servicios de autenticación y de confidencialidad. Permite conectar hosts con redes, dándoles un canal seguro (túnel) a través de redes IP.

a. Autentificación

Los extremos del túnel seguro, es decir los dos sistemas que aseguran el cifrado de los flujos salientes y el descifrado de los flujos entrantes, tienen que autenticarse mutuamente.

OpenVPN administra diferentes modos de autentificación, los dos más usados son la autenticación por clave compartida y la autentificación por certificados digitales X.509. La primera técnica es más simple de implementar, pero menos segura.

b. Confidencialidad

La confidencialidad de las comunicaciones la asegura la biblioteca OpenSSL. El cifrado de los intercambios utiliza por defecto el algoritmo Blowfish, pero acepta también algoritmos simétricos (AES especialmente). 

c. Tipos de funcionamiento de red

OpenVPN propone diferentes tipos de conexión entre sistemas y redes:

  • El modo punto a punto: la VPN conecta solamente dos máquinas.

  • El modo sitio a sitio: la VPN se usa para conectar dos redes entre ellas. Dos servidores OpenVPN aseguran la implementación del túnel, pero los extremos de tráfico son las dos redes conectadas. Los servidores OpenVPN tienen una función de enrutamiento seguro entre las dos redes.

  • El modo acceso remoto: la VPN permite conectar una máquina a una red.

  • El modo bridge: la VPN conecta dos redes remotas a nivel físico.

2. Creación de un túnel punto a punto

El túnel punto a punto permite conectar dos máquinas a través de una red.

a. Autentificación por clave compartida

El archivo de clave puede ser generado por el comando openvpn. Tiene que estar presente en el servidor y en el cliente, por lo tanto hay que copiarlo en la otra máquina después de haberlo generado, usando un medio seguro (pendrive USB, scp o sftp).

Sintaxis

openvpn --genkey --secret RutaArchivoClave 

Ejemplo

Creación del archivo de clave:

openvpn --genkey --secret secret.key    ...