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