A continuación vamos a ver como instrumentar «algo» de Seguridad para Servidores Linux con algunas buenas practicas que veremos a continuación, como siempre paso a paso.
Actualizaciónes de Sistema Operativo
sudo apt update && sudo apt ugprade -y
En un servidor en «producción» hay quienes quieren mantener todo actualizado de manera automática y otros que no. Cada maestro con su libro dicen, asi que si sos de los que queres mantener actualizaciones automáticas el comando seria:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Ingreso por SSH
Como todos sabemos el servicio ssh es muy útil, pero sin cuidados nos puede jugar una mala pasada. El puerto por defecto de ssh es el 22 y vamos a cambiarlo editando el archivo:
sudo nano /etc/ssh/sshd_config
Buscamos la linea #Port 22 y la descomentamos y ponemos el puerto que queramos, como por ejemplo:

Luego de guardar los cambios debemos reiniciar el servicio ssh para que tome los valores asignados.
sudo systemctl restart sshd
Deshabilitar el accesso de ROOT por SSH
Otra practica muy recomendada en ssh es que deshabilitar el accesso del usuario root por ssh. Para esto volvemos a editar el archivo (lo hago en partes diferentes para que quede claro y no se mesclen conceptos):
sudo nano /etc/ssh/sshd_config
Esta vez buscamos #PermitRootLogin Yes y dejamos PermitRootLogin no
Luego volvemos a reiniciar el servicio ssh como lo vimos anteriormente.
Utilizar autenticación con SSH Key
Algunos le dicen autenticación avanzada, pero nos referimos a ingresar a un servidor desde nuestras maquinas usando un SSH Key. Primero contarles que es un SSH Key son un par de claves criptográficas (pública y privada) que se utilizan para autenticar conexiones SSH y proporcionar acceso seguro a sistemas remotos.
Esto se puede hacer tanto en windows como en linux obviamente asi que ahi vamos:
ssh-keygen -t rsa -b 4096
Cuando la crees te va a pedir un nombre y podes dejarle el que viene por defecto id_rsa.pub
Tambien te va a pedir una contraseña que debe ser segura (Minimo 12 caracteres, Mayuscula, Minuscula, Numeros y Simbolos).
Luego de concluido tenemos que copiar la clave PUBLICA (id_rsa.pub) al servidor.
EN linux:
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@ipdelservidor -p puerto
Te aclaro la parte del puerto por si venis haciendo caso y usas uno distinto al 22, si no cambiaste de puerto, tendrias que sacarlo.
En Windows:
La herramienta ssh-copy-id no existe en windows por lo que vamos a usar scp:
scp -P 2233 id_rsa.pub usuario@ipdelservidor:/home/usuario/.ssh/authorized_keys
En el servidor, en el usuario que se utilice tiene que estar creado el archivo authorized_keys (no es carpeta es archivo) sino no les va a funcionar. Pueden ir al servidor, ubicarse en la carpeta .ssh y dentro ejecutar:
touch authorized_keys
Con esto ya estaria creado el archivo y ahi si pueden copiar la clave publica.
Una vez que comenzamos con esta practica y estamos administrando servidores de producción, una practica recomendada es hacer backup del archivo id_rsa que es la clave privada.
Deshabilitar acceso SSH por contraseña
Ya que venimos haciendo muy buenas practicas y ahora no usamos más contraseña para ingresar a nuestro servidor, tenemos que deshabilitar el acceso ssh por contraseña, o sea que solo ingresamos con SSH Key!
sudo nano /etc/ssh/sshd_config
Buscamos la linea #PasswordAuthentication no y la descomentamos PasswordAuthentication no , luego reinciamos el servicion ssh:
sudo systemctl restart sshd
Implementar Fail2Ban
Es una herramienta de código abierto que funciona en Linux y está diseñada para proteger servidores contra ataques de fuerza bruta y otros accesos no deseados.
La tenemos que instalar con el comando:
sudo apt install fail2ban -y
Luego vamos a editar el siguiente archivo:
sudo nano /etc/fail2ban/jail.local
y en su interior vamos a escribir:
[sshd] enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
Revisar que el puerto sea el mismo que venis usando! Lo que estamos haciendo es decirle a fail2ban que controle ssh en el puerto 2222 y que el maximo de pruebas fallidas puede ser 5.
Reiniciamos el servicio para aplicar los cambios:
sudo systemctl restart fail2ban
Malware y Rootkit?
Que las hay las hay, y si bien casi nunca pasa nada, es una buena practica prevenir la aparicion de Malware y de Rootkit. Para esto tenemos dos herramientas geniales.
RKHunter
Es una herramienta de código abierto, basada en Unix/Linux, diseñada para detectar rootkits, puertas traseras y posibles exploits locales en sistemas Linux. Funciona revisando el sistema en busca de archivos ocultos, permisos incorrectos, cadenas sospechosas en el kernel y comparando hashes de archivos importantes con versiones conocidas
sudo apt install rkhunter -y
sudo rkhunter --update
Una vez instalada y actualizada la herramienta la podemos pasar con:
sudo rkhunter --checkall
Si te da este aviso:

Es tambien por seguridad ya que para actualizarse web_cmd requiere de curl de o wget para mantenerse actualizado y biene en false «por seguridad». Para solucionar editamos el archivo:
sudo nano /etc/rkhunter.conf

Una vez que encontramos la linea vamos a reemplazar todo lo que esta dentro de corchetes por «» o sea, borramos todo.
Cada vez que hagamos un sudo apt update && sudo apt upgrade -y
Al ejecutar el –chekall va a ir mirando nuestros ejecutables (comandos) y va a devolver si tuvieron tocados o no! Si esta OK esta todo bien!

Luego da una pasada ejecutando controles de rootkits y finaliza!
ClamAv
es un software antivirus de código abierto y gratuito, especialmente diseñado para analizar correo electrónico en pasarelas de correo. Es un conjunto de herramientas antimalware multiplataforma que detecta varios tipos de software malicioso, incluyendo virus, gusanos, troyanos y más. Aunque es popular en sistemas basados en Linux, también está disponible para Windows y otros sistemas operativos.
sudo apt install clamav -y
sudo freshclam
sudo clamscan -r /home
Monitoreo y Auditoria
Estamos trabajando muy bien y paso a paso, por lo cual no podemos dejar de lado el monitoreo y las auditorias. Para esto lo primero que vamos a usar es Logwatch
LogWatch:
Herramienta de software gratuita y de código abierto que se utiliza para analizar y resumir los registros del sistema en sistemas basados en Linux. Proporciona a los administradores de sistemas una forma sencilla de monitorizar la actividad del sistema, detectar posibles problemas de seguridad y rendimiento, y recibir informes de estos eventos. En esencia, Logwatch analiza los registros del sistema (como dmesg, auth.log, etc.), identifica los eventos importantes (como fallos de seguridad, errores, etc.) y genera un informe resumido que puede ser enviado por correo electrónico o mostrado en la línea de comandos. Esto permite a los administradores de sistemas mantenerse informados sobre la salud y el comportamiento de sus servidores sin tener que analizar manualmente cada registro.
sudo apt install logwatch -y
Luego vamos a editar el archivo:
sudo nano /etc/cron.daily/00logwatch
y al final del archivo vamos a agregar algo asi:
/usr/sbin/logwatch --output mail --mailto [email protected] --detail high
ver que donde dice tuemail debes ingresar un correo correcto.
Auditd
Es un servicio de Linux que registra eventos del sistema, proporcionando un registro detallado de las actividades de los usuarios, cambios en el sistema y acceso a la seguridad. Este registro de auditoría es fundamental para la seguridad y la gestión de sistemas, permitiendo a los administradores monitorear y analizar la actividad del sistema
Ahora vamos a editar el archivo donde estarán incluidas las reglas que queremos que auditd lleve a cabo:
sudo nano /etc/audit/audit.rules
Les muestro como esta el mio:

Auditar en un servidor con recursos es una cosa, auditar en una raspberry es otra…. esto lo aclaro por que algunos logs no tienen sentido y solo consumen muchos recursos.
Archivos criticos del sistema:
-w /etc/group -p wa -k group_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/gshadow -p wa -k gshadow_changes
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/sudoers.d/ -p wa -k sudoers_includes
Configuraciones de ssh:
-w /etc/ssh/ -p wa -k ssh_config_changes
-w /etc/passwd -p wa -k passwd_changes
-w /etc/ssh/sshd_config -p wa -k ssh_changes
Accesos administrativos:
-w /bin/su -p x -k su_attempt
-w /usr/bin/sudo -p x -k sudo_attempt
Modificación de Binarios Criticos:
-w /bin/ -p wa -k bin_changes
-w /sbin/ -p wa -k sbin_changes
-w /usr/bin/ -p wa -k usr_bin_changes
-w /usr/sbin/ -p wa -k usr_sbin_changes
Archivos importantes de logs:
-w /var/log/ -p wa -k log_file_changes
Servicios o Demonios
-w /etc/systemd/system/ -p wa -k systemd_changes
-w /etc/init.d/ -p wa -k init_changes
Archivos de Autenticación:
-w /etc/pam.d/ -p wa -k pam_changes
-w /etc/security/ -p wa -k security_conf_changes
Cambios en tareas programadas
-w /etc/cron.d/ -p wa -k cron_d_changes
-w /etc/cron.daily/ -p wa -k cron_daily_changes
-w /etc/cron.hourly/ -p wa -k cron_hourly_changes
-w /etc/cron.monthly/ -p wa -k cron_monthly_changes
-w /etc/cron.weekly/ -p wa -k cron_weekly_changes
-w /var/spool/cron/ -p wa -k user_cron_changes
Cambios en configuración de red
-w /etc/network/ -p wa -k network_conf_changes
-w /etc/hosts -p wa -k hosts_file_changes
-w /etc/resolv.conf -p wa -k resolv_conf_changes
Luego podemos reiniciar el servicio para que tome las modificaciones:
sudo service auditd restart
Este #tutorial se hizo un poco extenso pero creo que con todo lo que hicimos ya estamos muchisimo más seguros!!
