Seguridad para Servidores Linux

seguridad en linux

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:

cambiando puerto 22 de ssh

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!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *