La seguridad en los servidores Linux es un tema fundamental para garantizar la integridad, confidencialidad y disponibilidad de los datos. Esta guía cubrirá desde las configuraciones básicas hasta estrategias avanzadas para proteger un servidor Linux, incluyendo comandos, configuraciones y mejores prácticas.
1. Configuraciones Iniciales de Seguridad
1.1 Actualiza tu Sistema Operativo
Mantener el sistema operativo actualizado es una de las primeras y más importantes medidas de seguridad. Los desarrolladores lanzan actualizaciones regularmente para corregir vulnerabilidades y mejorar la funcionalidad. No realizar actualizaciones puede exponer el servidor a ataques que ya tienen soluciones conocidas.
Ejecuta los siguientes comandos:
sudo apt update && sudo apt upgrade -y
O para distribuciones basadas en Red Hat:
sudo yum update -y
Configura actualizaciones automáticas para garantizar que tu servidor siempre esté al día:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
1.2 Cambiar el Puerto por Defecto de SSH
El puerto 22 es el predeterminado para SSH, lo que lo convierte en un objetivo frecuente para bots y atacantes. Cambiar el puerto dificulta los intentos de fuerza bruta automatizados.
Edita el archivo de configuración de SSH:
sudo nano /etc/ssh/sshd_config
Cambia el puerto a un valor no usado, por ejemplo:
Port 2222
Guarda los cambios y reinicia el servicio SSH:
sudo systemctl restart sshd
Asegúrate de actualizar tu firewall para permitir el nuevo puerto SSH:
sudo ufw allow 2222/tcp
1.3 Crear Usuarios con Privilegios Limitados
Usar la cuenta root
para tareas cotidianas aumenta el riesgo de comprometer todo el sistema en caso de una vulneración. Crea usuarios con permisos limitados y otórgales acceso sudo solo cuando sea necesario.
Crea un usuario:
sudo adduser nombre_usuario
Otórgale privilegios administrativos:
sudo usermod -aG sudo nombre_usuario
Para mejorar la seguridad, deshabilita el acceso SSH directo del usuario root
:
sudo nano /etc/ssh/sshd_config
Modifica esta línea:
PermitRootLogin no
Reinicia SSH:
sudo systemctl restart sshd
2. Configuración del Cortafuegos
Un cortafuegos es esencial para controlar el tráfico que entra y sale del servidor, permitiendo solo las conexiones necesarias.
2.1 Configurar UFW (Uncomplicated Firewall)
UFW es una herramienta sencilla y efectiva para administrar reglas de firewall.
Habilita UFW y configura las reglas:
sudo ufw allow 2222/tcp # Puerto SSH
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
Revisa el estado del firewall:
sudo ufw status
2.2 Configurar Firewalld (Distribuciones Red Hat)
Firewalld es una alternativa popular para gestionar reglas de firewall en distribuciones basadas en Red Hat.
Inicia y habilita el servicio:
sudo systemctl start firewalld
sudo systemctl enable firewalld
Permite servicios y puertos necesarios:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
2.3 Mejorar la Seguridad del Firewall
Implementa listas blancas (whitelisting) para permitir solo conexiones específicas:
sudo ufw allow from 192.168.1.0/24 to any port 2222
Esto asegura que solo las IPs en tu red local puedan acceder al puerto SSH.
3. Configuración de Autenticación Avanzada
3.1 Configurar Autenticación de Llaves SSH
La autenticación por llaves SSH elimina la dependencia de contraseñas y proporciona una seguridad significativamente mayor.
- Genera un par de llaves en tu máquina local:
ssh-keygen -t rsa -b 4096
- Copia la clave pública al servidor:
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@ip_del_servidor
3.2 Deshabilitar Autenticación por Contraseña
Reducir la superficie de ataque deshabilitando el acceso por contraseña es una medida crítica.
Edita el archivo de configuración de SSH:
sudo nano /etc/ssh/sshd_config
Cambia las siguientes líneas:
PasswordAuthentication no
Reinicia SSH para aplicar los cambios:
sudo systemctl restart sshd
4. Instalación de Software de Seguridad
4.1 Fail2Ban
Fail2Ban ayuda a prevenir intentos de fuerza bruta bloqueando direcciones IP después de varios intentos fallidos.
- Instala Fail2Ban:
sudo apt install fail2ban -y
- Configura la protección para SSH:
sudo nano /etc/fail2ban/jail.local
Agrega estas líneas:
[sshd] enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
Reinicia el servicio:
sudo systemctl restart fail2ban
4.2 DDoS Deflate
DDoS Deflate es una herramienta ligera diseñada para mitigar ataques de denegación de servicio distribuidos (DDoS).
- Descarga e instala DDoS Deflate:
wget https://github.com/jgmdev/ddos-deflate/archive/master.zip
unzip master.zip
cd ddos-deflate-master
sudo ./install.sh
- Configura el archivo de configuración principal:
sudo nano /usr/local/ddos/ddos.conf
Ajusta los valores para los límites de conexiones y listas blancas según tus necesidades.
- Activa el servicio:
sudo /usr/local/ddos/ddos.sh -c
4.3 RKHunter y ClamAV
RKHunter y ClamAV son herramientas esenciales para proteger el servidor contra rootkits y malware.
- Instala RKHunter:
sudo apt install rkhunter -y
sudo rkhunter --update
sudo rkhunter --checkall
- Instala ClamAV y realiza un escaneo:
sudo apt install clamav -y
sudo freshclam
sudo clamscan -r /home
5. Monitoreo y Auditoría
5.1 Configurar Logwatch
Logwatch ofrece informes detallados sobre la actividad del servidor.
- Instala Logwatch:
sudo apt install logwatch -y
- Configura informes automáticos:
sudo nano /etc/cron.daily/00logwatch
Agrega:
/usr/sbin/logwatch --output mail --mailto [email protected] --detail high
5.2 Instalar y Configurar Auditd
Auditd registra eventos clave en el sistema para auditorías de seguridad.
- Instala Auditd:
sudo apt install auditd -y
- Define reglas personalizadas para monitorear cambios críticos:
sudo nano /etc/audit/audit.rules
Ejemplo:
-w /etc/passwd -p wa -k passwd_changes
-w /etc/ssh/sshd_config -p wa -k ssh_changes
Reinicia Auditd:
sudo systemctl restart auditd
6. Configuración de Backup y Recuperación
6.1 Configurar Backups Automatizados
Los backups son esenciales para garantizar la disponibilidad de los datos ante fallos o ataques. Usa rsync
para sincronizar directorios importantes con un servidor de respaldo.
Ejemplo:
rsync -avz /ruta/del/directorio usuario@backup-server:/ruta/de/backup
Automatiza este proceso con cron
:
crontab -e
Agrega:
0 2 * * * rsync -avz /ruta/del/directorio usuario@backup-server:/ruta/de/backup
6.2 Configurar Snapshots con LVM
Si usas LVM, puedes crear snapshots para restauraciones rápidas:
sudo lvcreate --size 1G --snapshot --name backup_nombre /dev/volume_group/logical_volume
Resumen
Implementar seguridad en un servidor Linux requiere un enfoque integral y constante. Siguiendo los pasos detallados en esta guía, lograrás:
- Asegurar el acceso SSH mediante cambios en el puerto predeterminado y autenticación por llaves.
- Configurar cortafuegos robustos con UFW o Firewalld.
- Implementar herramientas de protección como Fail2Ban, DDoS Deflate, RKHunter y ClamAV.
- Monitorear la actividad del servidor con Logwatch y Auditd.
- Establecer una estrategia de respaldo confiable usando rsync y snapshots con LVM.
🚀 Recuerda que la seguridad es un proceso continuo y requiere supervisión constante.