Recibir una notificación cuando alguien inicia sesión en un servidor mediante SSH o Escritorio remoto

11

Tengo un mini servidor Mac que ejecuta OS X Lion Server 10.7.3. Se ejecuta prácticamente desatendido sin problemas. Sin embargo, el servidor está bajo constante "ataque" de acuerdo con los registros. Parece que el firewall y la seguridad están demorando.

¿Hay alguna aplicación / script que pueda enviarme un correo electrónico cada vez que alguien / alguien inicie sesión en el servidor mediante SSH, Admin Tools o ARD?

Dado que la máquina funciona sin supervisión, sin cabeza en un centro de datos en una ciudad diferente, me preocupa que alguien pueda (a través de la persistencia pura) lograr descifrar una contraseña o encontrar un compromiso en el sistema. Saber que me van a alertar me tranquilizará.

    
pregunta bloudraak 24.03.2012 - 15:16

6 respuestas

4

Tu mejor defensa es siempre desactivar los servicios innecesarios. Si no está utilizando el escritorio remoto: apáguelo. Si no está utilizando los servidores HTTP o FTP: desactívelos. Menos servicios en ejecución, menos puntos de entrada para posibles intrusos para explotar.

Además de bloquearlo, hay algunos productos gratuitos y de código abierto que son compatibles con OS X y que puede utilizar para detectar la intrusión en su máquina.

Snort

Aunque no lo he ejecutado personalmente, tengo colegas que lo saben y confían en él para la detección de intrusos. Es compatible con BSD, por lo que es un buen ajuste para OS X. Otra ventaja de ir con Snort es que está disponible como Homebrew paquete:

> brew info snort
snort 2.9.0.5
http://www.snort.org
Depends on: daq, libdnet, pcre
Not installed
https://github.com/mxcl/homebrew/commits/master/Library/Formula/snort.rb

==> Caveats
For snort to be functional, you need to update the permissions for /dev/bpf*
so that they can be read by non-root users.  This can be done manually using:
    sudo chmod 644 /dev/bpf*
or you could create a startup item to do this for you.

Por lo tanto, obtiene una ruta de instalación simplificada y algo de confianza en el hecho de que se adapta bien a OS X y se ejecuta allí. Con Homebrew instalado, solo debes hacerlo:

> brew install snort

Y ya está listo para comenzar con él.

Consulte esta Snort para la guía de configuración del servidor OS X Lion que la comunidad de Snort proporciona para comenzar. con la escritura de reglas para su máquina OS X. Es un gran documento y, además de recorrer la instalación de Snort desde la fuente (lo que no necesita hacer), habla de todas las cosas que debe hacer en su instancia de OS X Lion Server para ayudar a protegerlo. Si realiza la instalación a través de Homebrew, comience en la Sección 5 (página 13) en el PDF, ya que no tiene que preocuparse por instalarlo desde el código fuente.

Tripwire

He ejecutado Tripwire en las máquinas de Linux para realizar una detección y alerta rápidas de intrusiones. Es efectivo, pero es un poco de una bestia para configurar. Puede realizar acciones cuando las reglas coinciden con los archivos de registro. Por supuesto, un pirata informático inteligente sabrá que debe desactivar Tripwire tan pronto como entren, para que no termine su sesión.

La sugerencia de MacWorld habla sobre configuración de Tripwire en OS X . No es simple y el artículo termina con la mención de que no se ha probado.

    
respondido por el Ian C. 24.03.2012 - 17:34
4

Puedes endurecer ssh e instalar denyhosts, sshguard, Snort, Barnyard, Base y Swatch.

Vea estos enlaces para más detalles:

enlace enlace

  1. Desactivar el inicio de sesión de root y contraseña:

    vi /etc/sshd_config

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthenticatio no

    Luego use ssh-keygen en el cliente remoto para generar claves públicas / privadas que se pueden usar para iniciar sesión de forma remota en el servidor:

    client$ ssh-keygen -t rsa -b 2048 -C client_name [Securely copy ~/.ssh/id_rsa.pub from client to server.] server$ cat id_rsa.pub > ~/.ssh/known_hosts

  2. Instala denyhosts y sshguard.

    • sudo port install denyhosts sshguard
    • sudo port load denyhosts
    • sudo port load sshguard

    Puede configurar denyhosts para bloquear todo el tráfico, no solo el tráfico ssh.

  3. Snort, con un mapa mundial de ataques:

    enlace

respondido por el sss 28.10.2012 - 14:54
3

Para responder directamente a la pregunta planteada. Tengo otra secuencia de comandos que me envía un correo electrónico, de nuevo, alrededor de la medianoche, si alguien inicia sesión correctamente a través de ssh.

#!/usr/bin/env bash

mm='date +%b'
dd='date $1 +%d'
dd='expr $dd'
if [ "$dd" -ge "10" ]
  then 
    dt='echo "$mm $dd"' 
  else 
    dt='echo "$mm  $dd"' 
fi

cat /var/log/secure.log | grep -E '(Accepted|SUCCEEDED)'| grep -E -v '(my.ip.address|192.168.1)' | grep "$dt" >> /tmp/access_granted

/usr/bin/mail -E -s "Access granted" [email protected] < /tmp/access_granted
rm /tmp/access_granted

Edite el grep anterior para excluir su propia IP fija, si lo desea, y para usar su dirección de correo electrónico. Puede combinar parte del código en mi otra respuesta para agregar fallas para VNC.

    
respondido por el afragen 25.03.2012 - 18:29
2

Para expandir un poco en Fail2ban , una vez que esté configurado y funcionando tengo un script que Ejecuto justo antes de la medianoche, lo que raspa los registros y me envía por correo electrónico lo que Fail2ban ha estado haciendo durante el día anterior.

La secuencia de comandos es la siguiente y puede ejecutarse desde cron o desde una lista de inicio.

#!/usr/bin/env bash

mm='date +%b'
dd='date $1 +%d'
dd='expr $dd'
if [ "$dd" -ge "10" ]
  then 
    dt='echo "$mm $dd"' 
  else 
    dt='echo "$mm  $dd"' 
fi

cat /var/log/system.log | grep "$dt" | grep org.fail2ban | grep -v COMMAND > /tmp/fail2ban_deny
cat /var/log/fail2ban.log | grep -E '(WARN|ERR|rotation|target)' | grep 'date $1 +%Y-%m-%d' >> /tmp/fail2ban_deny
cat /var/log/ipfw.log | grep TCP | grep "$dt" >> /tmp/fail2ban_deny
cat /var/log/secure.log | grep VNC | grep FAILED | grep "$dt" >> /tmp/fail2ban_deny


/usr/bin/mail -E -s "Fail2ban ipfw" [email protected] < /tmp/fail2ban_deny
rm /tmp/fail2ban_deny

Obviamente, deberá utilizar la dirección de correo electrónico de su elección.

Configurar Fail2ban es un problema completamente distinto. He escrito mucho sobre esto.

    
respondido por el afragen 25.03.2012 - 18:18
0

Es bastante sencillo instalar el complemento PAM de Google Authenticator en Mac OS X si tienes instalado el compilador de línea de comandos con código X. El código y las instrucciones están aquí:

enlace

Una vez que inicialice su token (genere un código que alimenta a la aplicación en su teléfono), tendrá dos factores de autenticación para proteger su máquina. Cualquier cuenta sin un token inicializado no podrá iniciar sesión, por lo que si no desea permitir el inicio de sesión root, no inicialice una clave para esa cuenta.

Pero en serio, algo como DenyHosts solo tiene sentido si tiene que mantener abierto SSH en Internet. Desafortunadamente, desde Mac OS X V10.8, Apple eliminó el soporte de tcpwrappers del daemon SSH, por lo que ignora /etc/deny.hosts, que fue un movimiento tonto, si me preguntas, eliminar una característica de seguridad.

Para evitar eso, utilicé MacPorts para instalar un demonio openssh actualizado, y restauré la funcionalidad tcpwrappers completa, edité y usé el demonio DenyHosts para monitorear /var/log/system.log y prohibí las IPs que suponen Inicios de sesión y contraseñas. Y no olvide actualizar MacPorts y comprobar / reinstalar openssh / DenyHosts cada vez que actualice el sistema operativo.

¡Buena suerte!

    
respondido por el user2895719 17.01.2015 - 17:55
0

Me doy cuenta de que esta es una publicación antigua, pero me di cuenta de que esto podría ayudar a alguien que no puede programar o ahorrar tiempo en la búsqueda en la web. Acabo de escribir esto en mi hora de almuerzo y enviaré por correo electrónico los intentos exitosos y fallidos, así como los IP bloqueados a través de intentos fallidos. El programa está escrito en ruby. Sendmail se instala junto con el correo y las gemas del archivo.

Código fuente a continuación:

#!/usr/local/bin/ruby

require 'mail'
require 'file-tail'

def sendMail(mail_subject,mail_body,dest_email,port)
  Mail.defaults do
    delivery_method :smtp, address: "localhost", port: port
  end

  mail = Mail.new do
    from     '[email protected]'
    to        dest_email
    subject   mail_subject
    body      mail_body
  end

  mail.delivery_method :sendmail
  mail.deliver
end

File.open('/var/log/auth.log') do |log|
  log.extend(File::Tail)
  log.interval = 10
  log.backward(1)
  log.tail do |line| 
    puts line if line.match(/ssh.*accepted password.*$/i)
    sendMail('New SSH Connection',line,'[email protected]',445) if line.match(/ssh.*accepted password.*$/i)

    puts line if line.match(/ssh.*failed password.*$/i)
    sendMail('Failed SSH attempt',line,'[email protected]',445) if line.match(/ssh.*failed password.*$/i)

    puts line if line.match(/sshguard.*$/i)
    sendMail('SSH IP Blocked', line,'[email protected]',445) if line.match(/sshguard.*$/i)
  end
end
    
respondido por el Aguevara 28.11.2016 - 19:44

Lea otras preguntas en las etiquetas