Una buena práctica, dentro de la administración de sistemas, es la revisión periódica de los registros (logs) de seguridad de nuestro servidor dedicado.
Los servidores, por norma general, guardan en un fichero de texto llamado registro o log, la lista de eventos ocurridos (generalmente problemas o fallos) para una posible revisión posterior, detección y solución de problemas, etc.
En nuestro caso, vamos a basarnos en un servidor linux dedicado. En algunos servidores compartidos también es posible examinar logs, sin embargo no es lo más común. Echa un vistazo a este artículo si no sabes la diferencia entre servidores dedicados y compartidos.
Debemos saber que en los sistemas linux hay dos ficheros de registro principales:
- /var/log/secure: Registra los accesos al servidor que tienen relación con procesos de autentificación.
- /var/log/messages: Registra los mensajes de información o nivel superior. Similar al anterior, pero incluyendo otro género de mensajes.
El funcionamiento de estos registros puede ajustarse en el fichero /etc/syslog.conf y suele venir acompañado del uso de un programa llamado logrotate (/etc/logrotate.conf), que se encarga de comprimir los registros cuando ocupan demasiado o ha pasado bastante tiempo.
Asumiendo que todo está como acabo de decir (suele ser lo más común en los servidores en producción), vamos a centrarnos en el fichero /var/log/secure, que es el que tiene la información de los accesos de seguridad y ver una secuencia de comandos para mostrarnos los intentos de conexión que se han efectuado:
Concatenaremos estas tres partes en una sola para llevarla a cabo (recordar, que debemos hacer un sudo o ser usuario con privilegios para leer los logs del sistema):
zgrep -hi "Failed password for " /var/log/secure* sed "s/invalid user //" tr -s " " awk '{print $11" "$9}' sort uniq -c sort -n
Esto nos mostrará un listado de los intentos de conexión (al servidor ssh, al servidor ftp, etc...) desglosado por número de intentos, ip y nombre de usuario utilizado respectivamente.
Veamos algunos fragmentos de la lista:
21 207.36.196.14 roberts
21 207.36.196.14 rodriguez
21 207.36.196.14 scott
21 207.36.196.14 taylor
38 190.144.81.150 patrick
41 207.36.196.14 amanda
Si se fijan, muchos de los intentos de conexión, tienen el mismo número de repeticiones (21). Esto no es casualidad, sino que generalmente se trata de ataques por fuerza bruta utilizando un diccionario de nombres comunes (ingleses).
38 58.246.63.10 root
41 190.144.81.150 amanda
50 190.144.81.150 mysql
54 216.228.254.211 admin
60 190.144.81.150 oracle
178 190.144.81.150 admin
225 190.144.239.44 root
355 222.41.213.238 root
Es muy común también el intento de utilizar nombres de usuario de software como mysql, oracle, samba intentando buscar vulnerabilidades conocidas. Como se puede imaginar, el acceso al nombre de usuario root es de los más frecuentes.
1 117.135.9.34 apple
1 117.135.9.34 arianna
1 117.135.9.34 ashley
Conviene prestar atención a los accesos menos frecuentes, que aunque son los más numerosos, son los que más probablemente sean de algún usuario malicioso (y no de un sistema automático que realiza barridos buscando servidores vulnerables).
83 216.228.254.211 test
Para saber más información sobre un atacante, podemos realizar un host 216.228.254.211 (o usando el comando dig o nslookup) y así conocer el nombre de host y más información sobre el atacante.
# host 216.228.254.211
211.254.228.216.in-addr.arpa domain name pointer cs.211.cs.byuh.edu
Aquí podemos ver que la Brigham Young University (Hawaii) tiene probablemente alguna botnet que están utilizando sin consentimiento (suele ser lo más común) o algún usuario travieso utilizando algún software de ataques por fuerza bruta.
Bloquear accesos
Como siempre, existen varias vías para bloquear accesos que no queremos que estén autorizados, ya sea porque no nos interesa o porque representan un riesgo de seguridad para nuestro servidor.
- Iptables: Es la manera más bruta de bloquearlo. Esto haría que no pueda intentar acceder mediante ssh, ftp, no podría cargar la página web, hasta podríamos bloquear los ping que pudiera hacer.
- Lista blanca: En el fichero /etc/hosts.allow podemos establecer una lista blanca de ips desde donde podremos conectar a servicios como ssh o ftp.
- Lista negra: En el fichero /etc/hosts.deny podemos establecer una lista negra de ips que no queremos que puedan intentar realizar conexiones a servicios ssh o ftp.
En estas dos últimas opciones aunque se deniegue el acceso a servicios ssh o ftp, se puede seguir accediendo a la página web. Este sería el código a insertar en el fichero /etc/hosts.deny:
ALL: 216.228.254.211
ALL: 117.135.9.34
Quizás, la mejor opción para tener controlado el acceso, sería utilizar DenyHosts.
También es una buena idea tener presentes técnicas de seguridad para servidores como Mod Evasive, Mod Security o Port Knocking.
No hay comentarios:
Publicar un comentario