76 votes

Comment configurer une alerte e-mail lorsque une connexion ssh réussit ?

Est-ce que quelqu'un a un script bash qui enverra un e-mail ou notifiera quelqu'un en cas de connexion réussie à un serveur ssh ? Je veux être notifié si quelqu'un se connecte à ma boîte personnelle.

Je suis sous Ubuntu 12.04 avec xfce.

2voto

RPiAwesomeness Points 237

Dans cette autre question, vous avez probablement ce que vous cherchez. En gros, vous pouvez ajouter un appel à la commande mail dans le script qui s'exécute lorsque qu'un utilisateur se connecte via ssh : /etc/pam.d/sshd

2voto

pacharanero Points 21

J'ai pris certaines des excellentes réponses de ce fil de discussion et j'ai créé quelque chose de plus ou moins copiable-collable. Il utilise Mailgun pour envoyer les e-mails afin que vous soyez épargné de tout problème lié à la configuration de STMP. Vous avez juste besoin d'une clé API Mailgun et d'un domaine d'envoi.

Après la connexion SSH, le script enverra les détails de la connexion (utilisateur, nom d'hôte, adresse IP et toutes les variables d'environnement actuelles) à une adresse e-mail. Il est facile d'ajouter d'autres paramètres que vous souhaitez envoyer en personnalisant la variable message.

#!/bin/sh

# ce script est déclenché lors de la connexion SSH et envoie un e-mail avec les détails de la connexion
# comme l'utilisateur, l'IP, le nom d'hôte et les variables d'environnement

# le script doit être placé quelque part sur le serveur, par ex. /etc/ssh
# pour déclencher lors de la connexion SSH, mettez cette ligne dans /etc/pam.d/sshd:
#   session optional pam_exec.so seteuid /etc/ssh/snippet-for-sending-emails-on-SSH-login-using-PAM.sh

# Paramètres du script
MAILGUN_API_KEY=
MAILGUN_DOMAIN=
SENDER_NAME=
SENDER_EMAIL_ADDRESS=
RECIPIENT_EMAIL_ADDRESS=

if [ "$PAM_TYPE" != "close_session" ]; then
    host=$(hostname)
    ip=$(dig +short myip.opendns.com @resolver1.opendns.com) # obtient l'IP publique
    # Message à envoyer, par exemple les variables d'environnement actuelles.
    subject="Connexion SSH - utilisateur : $USER pam-hôte : $PAM_RHOST hôte : $host ip : $ip" \
    message=$(env)
    curl -s --user '$MAILGUN_API_KEY' \
        https://api.mailgun.net/v3/$MAILGUN_DOMAIN/messages \
        -F from='$SENDER_NAME <$SENDER_EMAIL_ADDRESS>' \
        -F to=$RECIPIENT_EMAIL_ADDRESS \
        -F subject="$subject" \
        -F text="${subject} ${message}"
fi

2voto

Craig Hicks Points 709

J'utilise swatchdog du package swatch pour surveiller toutes les lignes contenant la phrase "fail" (insensible à la casse) dans /var/log/auth.log. Je l'ai configuré pour le lancer en tant que service systemd simple.

apt install swatch

Créez un fichier de configuration /etc/swatch/swatch-auth-log.conf avec le propriétaire root, la permission 644 --

watchfor /fail/i
  pipe /usr/local/sbin/sendmail -t auth.log@xxx.com

Le "/fail/i" est une expression régulière, avec le "i" indiquant qu'il est insensible à la casse. (Mon sendmail est un script qui envoie tout à une adresse fixe via mailgun, donc l'adresse importe peu).

Créez un fichier de service systemd /etc/systemd/system/swatch-auth-log.service avec le propriétaire root, la permission 644 --

[Unit]
Description=surveiller /var/log/auth.log, envoyer des notifications de fail par mail

[Service]
ExecStart=/usr/bin/swatchdog -c /etc/swatch/swatch-auth-log.conf -t /var/log/auth.log

[Install]
#WantedBy=multi-user.target
WantedBy=pre-network.target

Ensuite, activez, lancez et consultez l'état du service --

sudo systemctl enable swatch-auth-log.service
sudo systemctl start swatch-auth-log.service
sudo systemctl status swatch-auth-log.service

Un exemple de rapport d'état réussi --

 swatch-auth-log.service - surveiller /var/log/auth.log, envoyer des notifications de fail par mail
   Loaded: loaded (/etc/systemd/system/swatch-auth-log.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-01-31 21:41:52 PST; 17min ago
 Main PID: 27945 (swatchdog)
    Tasks: 3 (limit: 4915)
   CGroup: /system.slice/swatch-auth-log.service
           27945 /usr/bin/perl /usr/bin/swatchdog -c /etc/swatch/swatch-auth-log.conf -t /var/log/auth.log
           27947 /usr/bin/perl /.swatchdog_script.27945
           27949 /usr/bin/tail -n 0 -F /var/log/auth.log

Jan 31 21:41:52 ub18 systemd[1]: Started monitor /var/log/auth.log, send fail notices by mail.
Jan 31 21:41:52 ub18 swatchdog[27945]: *** swatchdog version 3.2.4 (pid:27945) started at Thu Jan 31 21:41:52 PST 2019

Le service sera automatiquement démarré au démarrage et surveillé par systemd.


Discussion

À l'origine, j'ai utilisé une solution pam similaire à celle ci-dessus, mais dans /etc/pam.d/common-auth et non sshd. C'était pour intercepter ssh, sudo et les connexions. Mais après une mise à jour, tous mes mots de passe ont cessé de fonctionner, même après les avoir changés en mode de secours. Finalement, j'ai remis /etc/pam.d/common-auth à son état d'origine et les mots de passe ont de nouveau fonctionné. Voici une description sur le forum Stack Exchange UNIX & Linux

J'ai décidé qu'il était plus sûr de ne pas toucher aux paramètres de sécurité difficiles à comprendre. Et toutes les informations se trouvent dans les fichiers journaux de toute façon.

1voto

Philippe Gachoud Points 5360

Ce script dans /etc/ssh/sshrc envoie un e-mail et ajoute un journal à l'enregistreur système. Une différence est faite (pour que vous puissiez le désactiver si vous le souhaitez) entre votre sous-réseau personnel et le World Wide Web (nécessite sudo apt-get install mailutils).

SUBNET="192.168.0"

IP=`echo $SSH_CONNECTION | cut -d " " -f 1`
CURRENT_SUBNET="$(echo $IP|cut -d'.' -f1-3)"
if [ "$CURRENT_SUBNET" = "$SUBNET" ]; then
        msg="Ce message provient du même sous-réseau ! L'utilisateur $USER vient de se connecter depuis $IP"
        echo $msg|mail -s "$msg" root
else
        msg="Ce message provient d'un sous-réseau différent ! L'utilisateur $USER vient de se connecter depuis $IP"
        echo $msg|mail -s "$msg" root
fi

logger -t ssh-wrapper $USER login from $IP

0voto

MrMesees Points 221

J'ai en fait juste modifié la réponse de @SirCharlo

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

logger -t ssh-wrapper $USER login from $ip
echo "L'utilisateur $USER vient de se connecter depuis $ip" | mail -s "Connexion SSH" "destinataire " &

Cela fonctionne sur les serveurs 14.04, 16.04 et Centos 6.5.x que j'ai configurés, je suis assez sûr que vous devez vous assurer que le mta est configuré, mais une fois que c'est fait, cela fonctionne à merveille. Prochaine étape: alertes Twilio

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X