La creencia de que Linux es seguro por defecto está muy extendida, pero, ¿qué pasaría si un ladrón se lleva tu portátil sin que lo hayas asegurado correctamente? ¿O si un atacante logra acceso físico o remoto a tu servidor? En esos escenarios, las configuraciones predeterminadas de usuario y contraseña en distribuciones como Kali Linux podrían convertirse en una puerta abierta para el acceso no autorizado, especialmente si no has configurado un usuario root de forma segura.
En este artículo, te guiaré a través de una serie de pasos esenciales para fortalecer la seguridad de tu host Linux. Aunque existen múltiples distribuciones y cada una tiene su propia forma de interactuar en la línea de comandos, los principios fundamentales de seguridad se mantienen. Mi objetivo es proporcionarte una guía clara y práctica para endurecer tu sistema, minimizando riesgos y elevando su nivel de protección.
Independientemente de la distribución que utilices, estos consejos te ayudarán a construir una primera línea de defensa sólida para tu máquina Linux
Asegura tu distribución de Linux con los siguientes pasos:
- Documenta la información del host Linux
- Protección del BIOS
- Cifrado del disco duro (confidencialidad)
- Particionamiento del disco (disponibilidad)
- Bloquear el directorio de arranque
- Deshabilitar el uso de USB
- Actualizar tu sistema Linux
- Comprobar los paquetes instalados
- Comprobar los puertos abiertos
- Asegurar SSH
- Habilitar SELinux
- Establecer parámetros de red
- Gestionar las políticas de contraseñas
- Permisos y verificaciones
- Fortalecimiento adicional del proceso de la distro
1. Documenta la información del host Linux
Cada vez que trabajes en un nuevo fortalezimiento de Linux, necesitas crear un documento nuevo que tenga todos los elementos de la lista de verificación enumerados en este artículo y necesitas marcar cada elemento que aplicaste en el sistema. Además, en la parte superior del documento, debes incluir la información del host Linux:
- Nombre de la máquina
- Dirección IP
- Dirección MAC
- Nombre de la persona que está realizando el fortalezimiento (probablemente tú)
- Fecha
- Número de activo (si estás trabajando para una empresa, entonces necesitas incluir el número de activo que tu empresa utiliza para etiquetar los hosts)
Es sumamente necesario ser ordenado y meticuloso a la hora de configurar un nuevo servidor, además, ayuda a ordenar y saber con certeza cuáles son los puntos de fortalizamiento pendientes sobre todo a la hora de tener certezas frente a una pérdida o robo del equipo.
2. Protección del BIOS
Necesitas proteger el BIOS del host con una contraseña para que el usuario final no pueda cambiar y anular la configuración de seguridad en el BIOS; es importante mantener esta área protegida de cualquier cambio. Cada fabricante de ordenadores tiene un conjunto diferente de teclas para entrar en el modo BIOS, entonces es cuestión de encontrar la configuración donde se establece la contraseña administrativa. A continuación, debes deshabilitar el arranque desde dispositivos de medios externos (USB/CD/DVD). Si omites cambiar esta configuración, cualquiera puede usar una memoria USB que contenga un sistema operativo de arranque y puede acceder a los datos de tu sistema operativo. Las placas base de los servidores más recientes tienen un servidor web interno al que se puede acceder de forma remota. Asegúrate de cambiar la contraseña predeterminada de la página de administración o deshabilitarla si es posible.
3. Cifrado del disco duro (confidencialidad)
La mayoría de las distribuciones de Linux te permitirán cifrar tus discos antes de la instalación. El cifrado del disco es importante en caso de robo porque la persona que robó tu ordenador no podrá leer tus datos si conecta el disco duro a su máquina. En la imagen de abajo, elige la tercera opción de la lista: Guiado — usar todo el disco y configurar LVM cifrado (gestor de volúmenes lógicos).

4. Particionamiento del disco (disponibilidad)
Las copias de seguridad tienen muchas ventajas en caso de un sistema dañado, errores en la actualización del sistema operativo, etc. Para los servidores importantes, la copia de seguridad debe transferirse fuera del sitio en caso de algún “desastre”. La copia de seguridad también debe gestionarse. Por ejemplo, ¿cuánto tiempo conservarás las copias de seguridad antiguas? ¿Cuándo necesitas hacer una copia de seguridad de tu sistema (cada día, cada semana, etc)? Los sistemas críticos deben separarse en diferentes particiones para:
- /
- /boot
- /usr
- /home
- /tmp
- /var
- /opt
El particionamiento de discos te da la oportunidad de rendimiento y seguridad en caso de un error del sistema. En la imagen de abajo, puedes ver la opción de cómo separar particiones en Kali Linux durante la instalación.

5. Bloquear el directorio de arranque (boot)
El directorio de arranque contiene archivos importantes relacionados con el kernel de Linux, por lo que debes asegurarte de que este directorio esté bloqueado con permisos de sólo lectura siguiendo los siguientes pasos sencillos. Primero, abre el archivo “fstab”.

Luego, añade la última línea resaltada en la parte inferior.

Cuando termines de editar el archivo, necesitas establecer el propietario ejecutando el siguiente comando:
Bash
chown root:root /etc/fstab
Permisos para la configuración de arranque seguro
A continuación, establezco algunos permisos para asegurar la configuración de arranque:
- Establece el propietario y el grupo de /etc/grub.conf al usuario root:
chown root:root /etc/grub.conf
- Establece el permiso en el archivo /etc/grub.conf para leer y escribir sólo para root:
chmod og-rwx /etc/grub.conf
- Requiere autenticación para el modo de usuario único (single-user):
sed -i "/SINGLE/s/sushell/sulogin/" /etc/sysconfig/init
sed -i "/PROMPT/s/yes/no/" /etc/sysconfig/init
6. Deshabilitar el uso de USB
Dependiendo de lo crítico que sea tu sistema, a veces es necesario deshabilitar el uso de memorias USB en el host Linux. Hay múltiples maneras de denegar el uso de almacenamiento USB; aquí hay una forma bastante popular:
- Abre el archivo “blacklist.conf” usando tu editor de texto favorito:
nano /etc/modprobe.d/blacklist.conf
- Cuando se abra el archivo, añade la siguiente línea al final del archivo (guarda y cierra):
blacklist usb_storage
- Después de esto, abre el archivo rc.local:
nano /etc/rc.local
- Finalmente, añade las siguientes dos líneas:
modprobe -r usb_storage
exit 0
7. Actualiza tu sistema Linux
Lo primero que hay que hacer después del primer arranque es actualizar el sistema; este debería ser un paso fácil. Generalmente, abres la ventana de tu terminal y ejecutas los comandos apropiados. En Kali Linux, lo consigues ejecutando los comandos de las imágenes de abajo:


8. Comprueba los paquetes instalados
Lista todos los paquetes instalados en tu sistema operativo Linux y elimina los innecesarios. Tienes que ser muy estricto si el host que estás tratando de fortalecer es un servidor porque los servidores necesitan el menor número de aplicaciones y servicios instalados en ellos. Aquí tienes un ejemplo de cómo listar los paquetes instalados en Kali Linux:

Recuerda que deshabilitar los servicios innecesarios reducirá la superficie de ataque, por lo que es importante eliminar los siguientes servicios heredados si los encuentras instalados en el servidor Linux:
- Servidor Telnet
- Servidor RSH
- Servidor NIS
- Servidor TFTP
- Servidor TALK
9. Comprueba si hay puertos abiertos
Identificar las conexiones abiertas a Internet es una misión crítica al momento de fotalecer la seguridad de tu servidor. En Kali Linux, utilizo el siguiente comando para detectar cualquier puerto abierto oculto:

Si necesitas abrir o cerrar puertos, puedes usar herramientas firewalls como iptables o ufw. En algún artículo futuro profundizaré más este punto en particular.
10. Asegurar SSH
SSH es seguro, pero deberías fortalecer este servicio de igual manera (también es una opción deshabilitarlo en caso de que tengas acceso directo a la máquina). Sin embargo, si quieres usarlo, entonces tienes que cambiar la configuración predeterminada de SSH. Para ello, navega hasta /etc/ssh y abre el archivo “sshd_config” usando tu editor de texto favorito.

- Cambia el número de puerto predeterminado 22 a otro, por ejemplo, 99.
- Asegúrate de que root no pueda iniciar sesión remotamente a través de SSH:
PermitRootLogin no
- Permite algunos usuarios específicos:
AllowUsers [nombre de usuario]
La lista puede seguir y seguir, pero esto debería ser suficiente para empezar. Por ejemplo, algunas empresas añaden banners para disuadir a los atacantes y desanimarlos de continuar. Te animo a que consultes el manual de SSH para entender todas las configuraciones de este archivo. Aquí tienes algunas opciones adicionales que debes asegurarte de que existan en el archivo “sshd_config”:
Protocol2
IgnoreRhosts to yes
HostbasedAuthentication no
PermitEmptyPasswords no
X11Forwarding no
MaxAuthTries 5
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
ClientAliveInterval 900
ClientAliveCountMax 0
UsePAM yes
Finalmente, establece los permisos en el archivo sshd_config para que sólo los usuarios root puedan cambiar su contenido:
chown root:root /etc/ssh/sshd_config
chmod 6
11. Habilitar SELinux
Security Enhanced Linux (SELinux) es un mecanismo de seguridad del kernel para soportar políticas de seguridad de control de acceso. SELinux tiene tres modos de configuración:
- Deshabilitado: Desactivado.
- Permisivo: Imprime advertencias.
- Enforcing: La política se aplica.
Usando un editor de texto, abre el archivo de configuración:
nano /etc/selinux/config
Y asegúrate de que la política se aplica:
SELINUX=enforcing

12. Establecer parámetros de red
Asegurar las actividades de red de tu host Linux es una tarea esencial. No asumas siempre que tu firewall se encargará de todo. Aquí hay algunas características importantes a considerar para asegurar la red de tu host:
- Deshabilita el reenvío de IP estableciendo el parámetro
net.ipv4.ip_forward
en 0 en/etc/sysctl.conf
. - Deshabilita las redirecciones de paquetes de envío estableciendo los parámetros
net.ipv4.conf.all.send_redirects
ynet.ipv4.conf.default.send_redirects
en 0 en/etc/sysctl.conf
. - Deshabilita la aceptación de redirecciones ICMP estableciendo los parámetros
net.ipv4.conf.all.accept_redirects
ynet.ipv4.conf.default.accept_redirects
en 0 en/etc/sysctl.conf
. - Habilita la protección contra mensajes de error incorrectos estableciendo el parámetro
net.ipv4.icmp_ignore_bogus_error_responses
en 1 en/etc/sysctl.conf
.
Recomiendo encarecidamente usar el firewall de Linux aplicando las reglas de iptables y filtrando todos los paquetes entrantes, salientes y reenviados. Configurar tus reglas de iptables llevará algún tiempo, pero vale la pena el esfuerzo.
13. Gestionar las políticas de contraseñas
La gente a menudo reutiliza sus contraseñas, lo cual es una mala práctica de seguridad. Las contraseñas antiguas se almacenan en el archivo /etc/security/opasswd
. Por lo que recomiendo utilizar el módulo PAM para gestionar las políticas de seguridad del host Linux y forzar a los usuarios a usar contraseñas distintas sin repetir las últimas cuatro. En una distribución Debian (te recomiendo buscar como se configura este módulo en tu distribución), abre el archivo /etc/pam.d/common-password
usando un editor de texto y añade las siguientes dos líneas:
auth sufficient pam_unix.so likeauth nullok
password sufficient pam_unix.so remember=4
(No permitirá a los usuarios reutilizar las últimas cuatro contraseñas). Otra política de contraseñas que debe ser forzada es la de contraseñas fuertes. El módulo PAM ofrece un pam_cracklib
que protege tu servidor de ataques de diccionario y de fuerza bruta. Para lograr esta tarea, abre el archivo /etc/pam.d/system-auth
usando cualquier editor de texto y añade la siguiente línea:
/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
Linux aplicará un hash a la contraseña para evitar guardarla en texto plano, por lo que debes asegurarte de definir un algoritmo de hash de contraseña seguro SHA512. Otra funcionalidad interesante es bloquear la cuenta después de cinco intentos fallidos. Para que esto suceda, necesitas abrir el archivo /etc/pam.d/password-auth
y añadir las siguientes líneas:
auth required pam_env.so
auth required pam_faillock.so pre
auth audit silent deny=5 unlock_time=604800
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=604800
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=604800
auth required pam_deny.so
Aún no hemos terminado, se necesita un paso adicional. Abre el archivo /etc/pam.d/system-auth
y asegúrate de que estas líneas existan, si no, agrégalas:
auth required pam_env.so
auth required pam_faillock.so pre
auth audit silent deny=5 unlock_time=604800
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=604800
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=604800
auth required pam_deny.so
Después de 5 intentos fallidos, sólo un administrador podrá desbloquear al usuario usando el siguiente comando:
/usr/sbin/faillock --user <usuariobloqueado> --reset
Además, otra buena práctica es configurar la contraseña para que caduque después de 90 días, para lograr esta tarea necesitas:
- Establecer el parámetro
PASS_MAX_DAYS
en 90 en/etc/login.defs
. - Cambiar el usuario activo ejecutando el siguiente comando:
chage --maxdays 90 <usuario>
El siguiente consejo para mejorar las políticas de contraseñas es restringir el acceso al comando su
estableciendo los parámetros pam_wheel.so
en /etc/pam.d/su
:
auth required pam_wheel.so use_uid
El último consejo para la política de contraseñas es deshabilitar las cuentas del sistema para usuarios que no sean root usando el siguiente script bash:
#!/bin/bash
for user in `awk -F: '($3 < 500) {print $1 }' /etc/passwd`; do
if [ $user != "root" ]
then
/usr/sbin/usermod -L $user
if [ $user != "sync" ] && [ $user != "shutdown" ] && [ $user != "halt" ]
then /usr/sbin/usermod -s /sbin/nologin $user
fi
fi
done
14. Permisos y verificación
Prepárate mentalmente porque esta va a ser una larga lista. Pero, los permisos son una de las tareas más importantes y críticas para lograr el objetivo de seguridad en un host Linux.
Establece el propietario y los permisos de usuario/grupo en /etc/anacrontab
, /etc/crontab
y /etc/cron.*
ejecutando los siguientes comandos:
chown root:root /etc/anacrontab
chmod og-rwx /etc/anacrontab
chown root:root /etc/crontab
chmod og-rwx /etc/crontab
chown root:root /etc/cron.hourly
chmod og-rwx /etc/cron.hourly
chown root:root /etc/cron.daily
chmod og-rwx /etc/cron.daily
chown root:root /etc/cron.weekly
chmod og-rwx /etc/cron.weekly
chown root:root /etc/cron.monthly
chmod og-rwx /etc/cron.monthly
chown root:root /etc/cron.d
chmod og-rwx /etc/cron.d
Establece los permisos correctos en /var/spool/cron
para «root crontab»
chown root:root <crontabfile>
chmod og-rwx <crontabfile>
Establece el propietario y los permisos de usuario/grupo en el archivo “passwd”
chmod 644 /etc/passwd
chown root:root /etc/passwd
Establece el propietario y los permisos de usuario/grupo en el archivo “group”
chmod 644 /etc/group
chown root:root /etc/group
Establece el propietario y los permisos de usuario/grupo en el archivo “shadow”
chmod 600 /etc/shadow
chown root:root /etc/shadow
Establece el propietario y los permisos de usuario/grupo en el archivo “gshadow”
chmod 600 /etc/gshadow
chown root:root /etc/gshadow
15. Fortalecimiento adicional del proceso de la distro
Para este último elemento de la lista, incluyo algunos consejos adicionales que deben considerarse al fortalecer un host Linux.
Primero, restringe los volcados de memoria (core dumps):
- Añadiendo
hard core 0
al archivo/etc/security/limits.conf
. - Añadiendo
fs.suid_dumpable = 0
al archivo/etc/sysctl.conf
.
Segundo, configura Exec Shield:
- Añadiendo
kernel.exec-shield = 1
al archivo/etc/sysctl.conf
.
Tercero, habilita la ubicación aleatoria de la región de memoria virtual:
- Añadiendo
kernel.randomize_va_space = 2
al archivo/etc/sysctl.conf
.
Esta lista de verificación ofrece una base sólida para fortalecer tu servidor Linux, pero es solo el comienzo. El fortalecimiento de servidores es un campo vasto con configuraciones complejas y matices que van más allá de lo que describo en este artículo. Por lo que te invito a profundizar en el tema, explorar herramientas avanzadas y mantenerte actualizado sobre las últimas amenazas y mejores prácticas. La seguridad es un proceso continuo que requiere vigilancia y aprendizaje constante para proteger tus sistemas de forma efectiva.