Seguridad del sistema
Requisitos y objetivos
1. Requisitos
Los conocimientos necesarios para la certificación LPIC-1:
Comandos de seguimiento de los procesos.
Edición de archivos.
Comandos de gestión de directorios y archivos
Comandos de gestión de cuentas de usuario y control de accesos.
Los conocimientos adquiridos en los anteriores capítulos, especialmente:
Gestión de la red local.
Gestión de los servicios.
2. Objetivos
Al final de este capítulo, deberá poder:
Configurar un sistema Linux como un router.
Activar y configurar el firewall del núcleo con iptables.
Implementar reglas de gestión de los paquetes de redes con iptables.
Administrar la traducción de direcciones (NAT).
Configurar diferentes programas servidores FTP en modo seguro.
Configurar y proteger un servidor SSH.
Administrar las alertas de seguridad de diferentes fuentes.
Configurar y ejecutar sistemas de detección de intrusión.
Configurar una VPN (red privada virtual) con OpenVPN.
Seguridad del sistema
Este tema está divido en cinco partes con pesos diferentes.
1. Configuración de un router
Peso |
3 |
Objetivos |
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 FTP
Peso |
2 |
Objetivos |
Configurar un servidor FTP para descargar y enviar archivos de forma anónima. Este objetivo incluye las precauciones que se tienen que tomar en el caso en que el envío anónimo esté autorizado y también la configuración de accesos de los usuarios. |
a. Competencias principales
-
Archivos y herramientas de configuración de Pure-FTPd y vsftpd.
-
Conocimientos básicos de ProFTPd.
-
Comprender las diferencias entre las conexiones...
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
cat secret.key
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
1a0cf1144f1e99f9976cbb1609c917d3
44d4a7b8e9da0b0ec6a9a728a24ad545
0027ba5552bf1195ba4108beecb62b5a
b0cfe83e41007d250ce95e5f493312e9
7586f78da40b437138970b0246f9f4cf
296f95b5e477bc23bfd79ccc38bf12d9
51587df33fce4f3986ce930445887e47
9826d8276d5f5b9e1c6cde1c8e285e19
7ae80be18a3d4122cafdc8e6e49ec259
c3d810e2457b23c1bb58029b516feefa
8a4d503c556b06bbd5f32348f2082259
67e5a24bd7ff64e2a6c16e2e2b1a8fe2
24efb6061a53b8cc37bee3b4fa39ed37
2b883890046b1640de4b8c3887d17f1c
c0f07c9908808f859044df8a07d2d891
de44880fce62153b2ae3083bd7861183
-----END OpenVPN Static key V1-----
b. Archivos de configuración
Los archivos de configuración se encuentran por defecto en /etc/openvpn/client y /etc/openvpn/server. Son necesarios un archivo, con extensión .conf, para el cliente y otro para servidor.
Archivo de configuración OpenVPN
remote idServidor
dev tun
ifconfig IP_local IP_remota
secret RutaArchivoclave
route idRedRemota Máscara
Donde:
remote idServidor |
En el cliente: nombre o dirección del servidor OpenVPN. |
dev tun |
Modo de funcionamiento de red (tun = túnel). |
ifconfig IP_local IP_remota |
Dirección IP local y remota. Estarán asociadas, por OpenVPN, a una tarjeta de interfaz virtual punto a punto. |
secret RutaArchivoClave |
Camino de acceso al archivo de clave. |
route idRedRemota Máscara |
En el cliente: identificador y máscara de red accesible a partir del servidor OpenVPN. |
Ejemplo
Archivo de configuración en el servidor:
vi /etc/openvpn/server/server.conf
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret secret.key
Archivo de configuración en el cliente:
vi /etc/openvpn/client/client.conf
remote srvrh
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret secret.key ...
Validación de lo aprendido: preguntas/respuestas
Responda a estas preguntas abiertas, parecidas a las que le harán en el examen de la certificación, pero estas últimas serán de tipo test o pidiéndole una respuesta corta que introducirá mediante el teclado.
1. Preguntas
1 ¿Cómo activar el enrutamiento IPv4 en un sistema Linux?
2 ¿Cómo mostrar las cadenas de las reglas de la tabla nat de iptables?
3 ¿Qué cadena iptables se aplica a las operaciones de enrutamiento del sistema?
4 ¿Cuál es el principal problema de seguridad del protocolo FTP?
5 ¿Por qué el modo activo FTP puede ser problemático?
6 ¿Cuál es la ventaja de una conexión SSH con respecto a una de Telnet?
7 ¿Que es un túnel SSH?
8 ¿Qué línea de comandos permite copiar de manera segura un archivo de un sistema remoto a un sistema local?
9 ¿Cuál es el rol de ssh-agent?
10 ¿Qué significa IDS?
11 Hay reglas de iptables que aparecen a veces automáticamente en la configuración dinámica. ¿Por qué?
12 ¿Qué comando permite escanear los puertos de un sistema remoto?
13 ¿Cuál es la diferencia entre un túnel VPN sitio a sitio y uno punto a punto?
14 ¿Puede OpenVPN conectar dos máquinas remotas sin que haya enrutamiento...
Trabajos prácticos
Aquí se proponen ejercicios para implementar algunos de los puntos abordados en el capítulo. En cada uno de ellos se da un ejemplo comentado de la realización del ejercicio, que deberá adaptar a la configuración de sus sistemas.
1. Configuración de un firewall Linux
Decidimos implementar un firewall IPv4 en un servidor Linux Debian 10. Tendrá que filtrar todo el tráfico entrante o saliente, que no sea SSH, HTTP, HTTPS y DNS.
Comandos y archivos utiles
-
iptables
-
wget
-
ping
-
host
-
iptables-save
-
/etc/iptables/rules.v4
Etapas
1. |
En el servidor srvdebian, compruebe que el comando iptables está disponible y muestre las reglas de filtrado actuales. |
2. |
Configure el firewall para que acepte las conexiones entrantes y salientes SSH. |
3. |
Configure el firewall para que, por defecto, rechace cualquier tráfico de red. Compruebe que las reglas se han aplicado correctamente. |
4. |
Configure el firewall para autorizar el tráfico entrante y saliente HTTP, HTTPS y DNS. Compruebe que las reglas se han aplicado correctamente. |
5. |
Configure el servidor para que las reglas del firewall sean activadas automáticamente durante el inicio de la red. Compruebe que las reglas se han aplicado correctamente después del reinicio. |
Resumen de los comandos y resultado en pantalla
1. |
En el servidor srvdebian, compruebe que el comando iptables está disponible y muestre las reglas de filtrado actuales. |
¿Está el paquete de software instalado?
root@srvdebian:~# apt list iptables
Listando... Hecho
iptables/stable,now 1.8.2-4 amd64 [instalado, automático]
Las reglas iptables cargadas actualmente:
root@srvdebian:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
No hay ninguna restricción de acceso configurada.
2. |
Configure el firewall para que acepte las conexiones entrantes y salientes SSH. |
Se autorizan las conexiones entrantes hacia el servidor SSH local:
root@srvdebian:~# iptables -A INPUT...