Registro de intentos de acceso SSH

60

He configurado un servidor ubuntu con openssh para conectarme a él y ejecutar comandos desde un sistema remoto como un teléfono o una computadora portátil. El problema es ... probablemente no soy el único.

¿Hay alguna manera de conocer todos los intentos de inicio de sesión que se han realizado en el servidor?

UserK
fuente
También debe considerar ejecutar sshd en un puerto no estándar. Además, es posible configurar iptables para negar nuevos intentos de conexión si una sola IP intenta una nueva conexión ssh X veces en un minuto.
ivanivan
Para mí la cuestión no era fail2ban pero sshguard, algo que nunca había oído hablar de
Ray Foss

Respuestas:

55

En los servidores Ubuntu, puede encontrar quién inició sesión cuando (y desde dónde) en el archivo /var/log/auth.log. Allí, encontrará entradas como:

May  1 16:17:02 owl CRON[9019]: pam_unix(cron:session): session closed for user root
May  1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May  1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)
Anthon
fuente
2
Por curiosidad, ¿Ubuntu tiene el lastbcomando ?
Bratchley
1
@JoelDavis Mi Ubuntu 12.04 sí, pero la salida es una sola línea que no se parece en nada a tu salida. Tal vez necesita ser configurado.
Anthon
¿Es esto relevante ?
Bratchley
En Ubuntu Server 14.04 y superior, esto debería leer/var/log/auth.log
Serge Stroobandt
29

En distribuciones basadas en Red Hat como Fedora / CentOS / RHEL, puede verificar si los usuarios han iniciado sesión dentro del archivo /var/log/secure.

Si desea obtener más información, lea las preguntas y respuestas de SuperUser tituladas: ¿Cómo puedo registrar los intentos de acceso SSH y realizar un seguimiento de lo que los usuarios SSH terminan haciendo en mi servidor? .

Ramesh
fuente
1
No hay ninguno /var/log/secureen ninguno de mis sistemas Ubuntu.
Anthon
@Anthon, sorprendentemente no tengo /var/log/authen mis sistemas. Es por eso que antes de publicar la respuesta, verifiqué si tenía /var/log/secureen mi sistema, que también es un servidor Ubuntu :)
Ramesh
Había comprobado 14.04, 12.04 y una máquina anterior con 8.04. ¿Qué versión está usando? ¿Has hecho algo especial para obtener ese archivo?
Anthon
@Anthon, resulta que el servidor en el que probé era RHEL. Sin embargo, la respuesta en el enlace que había proporcionado era para Ubuntu, lo que parece extraño, ya que ha verificado 3 variaciones de ubuntu y no hay ninguna /var/log/secure.
Ramesh
66
/var/log/securees un ismo Fedora / CentOS / RHEL.
slm
8

En Ubuntu, puede iniciar sesión a través de SSH y usar el comando de cola de Linux para mostrar la última x cantidad de líneas de su /var/log/auth.logarchivo. Cuando inicie sesión a través de SSH, use el siguiente comando para ver 100 últimas líneas de su registro SSH:

tail /var/log/auth.log -n 100

o incluso más limpio

tail -100 /var/log/auth.log | grep 'sshd'
WebComer
fuente
7

Tenga en cuenta que la configuración predeterminada en Ubuntu es NO registrar inicios de sesión ssh en el /var/log/autharchivo. Este es el INFOnivel de registro.

Si desea que incluya intentos de inicio de sesión en el archivo de registro, deberá editar el /etc/ssh/sshd_configarchivo (como root o con sudo) y cambiar el LogLevelde INFOa VERBOSE.

Después de eso, reinicie el demonio sshd con

sudo service rsyslog restart

Después de eso, los intentos de inicio de sesión ssh se registrarán en el /var/log/auth.logarchivo.

Shay Walters
fuente
4

Mi recomendación es usar auditado . Esto es iniciar sesión utilizando el subsistema de auditoría del kernel de Linux y, en mi opinión, la forma correcta de hacerlo si es serio. Y dada la naturaleza de la pregunta {relacionada con la seguridad}, también debería usar PAM . En el nivel predeterminado de solo haber auditado e instalado PAM , debería obtener automáticamente todos los intentos SSH exitosos y no exitosos registrados en su archivo audit.log. Entonces, realmente no tiene que configurar nada, solo ha auditado y PAM instalado. Sé esto de primera mano para SLES. Y apostaría a RHEL y cualquier otra versión empresarial de Linux funcionaría de manera similar.

http://manpages.ubuntu.com/manpages/precise/man8/auditd.8.html

dentro del registro de auditoría sin procesar generado por auditd , puede usar algo como aureportfiltrarlo, que se describe en las páginas de manual de auditd , escribir su propio analizador de texto o simplemente usar VI y buscar palabras clave.

Aquí hay una excepción de mi /var/log/audit/audit.logarchivo conmigo en mi servidor Linux.

node=shark type=CRED_DISP msg=audit(1480622612.317:2211277): user pid=117768 uid=0 auid=23456 ses=2201 msg='op=PAM:setcred acct="ron" exe="/usr/sbin/sshd" (hostname=abc415.mycompany.us, addr=172.16.152.5, terminal=ssh res=success)'
  • de lo anterior, mi nombre de servidor es tiburón .
  • muchas líneas como esta están en audit.log, quiero esta basada en exe = "/ usr / sbin / sshd"
  • el uid de la cuenta en la que se ingresa es el valor de auid, que es 23456 para este ejemplo
  • el nombre de la cuenta de usuario asociada con auid se especifica mediante acct = "ron"
  • la mayoría de las veces el sistema de auditoría registrará el nombre de host dns del sistema que intenta conectarse, pero siempre tiene su dirección IP
  • la fecha de la entrada que está en tiempo de época, por lo que tendrá que convertirla a través de algo como lo date --date @1480622612.317que resulta Thu Dec 1 15:03:32 EST 2016y es cuando ingresé a mi servidor.

Cuándo res=failedes cuando desea investigar esas direcciones IP y nombres de host para ver qué sistemas intentaban conectarse, bajo qué nombre de usuario intentó. Y, obviamente, el exitoso ssh intenta comprender lo que está sucediendo en su sistema, por ejemplo, su compañero de trabajo Bob que se sienta en el mismo escritorio todos los días con hostname = bobscomputer y dirección IP = 192.168.5.5; Si ve un intento de ssh exitoso a las 2 de la mañana de ayer con su nombre de usuario de la dirección IP 10.10.5.6, por ejemplo, podría serle de su interés hablar con Bob para investigar. ¿Posible intento de pirateo por parte de otra persona? Y poco después, ¿hay intentos de rootear el registro de auditoría desde la cuenta de Bob?

cuando vea repetitivo res=failedy auid=0y acct=rootentonces eso es alguien que trata de ssh en su caja en la cuenta raíz, y es cuando se modifica /etc/hosts.denycon esa dirección IP para sshd.

ron
fuente
2

Sé que esto es antiguo, pero escribí algo para monitorear conexiones / intentos ssh exitosos y fallidos. Además de las direcciones IP prohibidas si está utilizando sshguard. El software está escrito en Python. Le enviará un correo electrónico cuando alguien se conecte con éxito a través de ssh, cuando alguien obtenga la contraseña de ssh de forma incorrecta o cuando alguien sea bloqueado debido a muchos intentos fallidos. ¡Espero que esto ayude a alguien en el futuro que busque este problema y encuentre mi código!

https://github.com/amboxer21/SSHMonitor

Para el script de Python, escribí un script de bash para monitorear el proceso. Comprueba si se ejecuta cada minuto a través de la tarea cron de root. Si no se está ejecutando, inicia otro proceso. El cual es llamado por una tarea cron de root cada minuto.

Aguevara
fuente
-2

Lo mejor que he encontrado para el registro de comandos SSH es que esta herramienta permite al administrador obtener todos los comandos de cada sesión con un nivel extenso de registro.

He escrito un script para instalar y configurar ROOTSH en ubuntu y CentOS / RHEL

descargar desde github aquí está el enlace

https://gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh
Mansur Ali
fuente
Creo que esta es una mala manera de promocionar tu perfil de Github ... Básicamente, estás pidiendo descargar un script de la web y ejecutarlo usando root. Votación negativa
UserK
No estoy promocionando mi perfil de github, solo intenté simplificar las cosas como lo hace la gente arriba si me rechazas por promocionar el perfil, vota también. Además, en la guía de reglas de intercambio de pila, nada está escrito así, no podemos compartir archivos de código de repositorios personales.
Mansur Ali el
Por favor, perdona mi mal sentido del humor. En primer lugar, gracias por la respuesta Mansur. El voto negativo proviene del hecho de que está solicitando ejecutar un montón de comandos desconocidos como usuario root. La última vez que lo hice hubo un 'rm -R slash' dentro.
UserK
1
Está bien, por cierto, stack-exchange no me permitirá códigos tan largos, por eso pongo ese script en mi respuesta. Linux es muy simple.
Mansur Ali