Outils pour utilisateurs

Outils du site


ssh-fail2ban

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
ssh-fail2ban [2019/07/04 18:28] – [5. Installer et configurer fail2ban] crustssh-fail2ban [2020/12/30 17:30] (Version actuelle) – [6.1. Avoir un rapport des IP bannis] cyrille
Ligne 31: Ligne 31:
 En local, rien de plus à faire. Reste maintenant à rediriger le port 22 de votre box au port 6789 de votre serveur/PC. En local, rien de plus à faire. Reste maintenant à rediriger le port 22 de votre box au port 6789 de votre serveur/PC.
 Pour cela, section administration, et modifier la règle comme dans l'image ci-dessous (pour une livebox pro, mais sensiblement identique pour toutes les box). Pour cela, section administration, et modifier la règle comme dans l'image ci-dessous (pour une livebox pro, mais sensiblement identique pour toutes les box).
 +Supprimer la règle SSH si existante, demander une nouvelle règle avec les nouveaux numéros de ports.
  
 +
 +{{:2019_07_05_16_01_00_hnm.png?400|}}
  
 Dès lors se connecter depuis l'extérieur Dès lors se connecter depuis l'extérieur
Ligne 110: Ligne 113:
  
 Pendant donc une journée, cette IP sera donc rejetée automatiquement. Pendant donc une journée, cette IP sera donc rejetée automatiquement.
 +
 +<WRAP center round tip 60%>
 +Mettez votre IP dans ignoreip !
 +</WRAP>
 +
 +
 Bien sûr, il est conseillé, si vous avez une IP fixe, d'ignorer cette règle sur cette IP (afin de vous éviter de mauvaises surprises (vous ne pourrez plus vous connecter si vous bous plantez...)) et d'ajouter cette directive dans la section [DEFAULT]. Bien sûr, il est conseillé, si vous avez une IP fixe, d'ignorer cette règle sur cette IP (afin de vous éviter de mauvaises surprises (vous ne pourrez plus vous connecter si vous bous plantez...)) et d'ajouter cette directive dans la section [DEFAULT].
 Faire de même bien sûr avec la boucle locale : 127.0.0.1 Faire de même bien sûr avec la boucle locale : 127.0.0.1
Ligne 153: Ligne 162:
  
 Bannir une IP manuellement Bannir une IP manuellement
-fail2ban-client set sshd banip 12.34.56.78+<code bash>fail2ban-client set sshd banip 12.34.56.78</code>
  
 Débannir une IP manuellement  Débannir une IP manuellement 
-fail2ban-client set sshd unbanip 12.34.56.78+<code bash>fail2ban-client set sshd unbanip 12.34.56.78</code>
  
  
-6. Gérer les notifications.+===== 6. Gérer les notifications. =====
  
-6.1. Avoir un rapport des IP bannis 
-Voici un petit script à position sur un cron (ici envoyer 2 fois par jour) donnant le statut des jails. 
  
 +==== 6.1. Avoir un rapport des IP bannis ====
  
 +Voici un petit script à position sur un **cron** (ici envoyer 2 fois par jour) donnant le statut des jails.
  
 +
 +
 +<code bash>
 +sudo crontab -l
 +[...]
 # Rapport de fail2ban # Rapport de fail2ban
-15 6,19 * * * /home/admin/scripts/fail2ban-status-ban.sh+15 6,19 * * * /home/TOTO/scripts/fail2ban-status-ban.sh</code>
  
  
 Et le script Et le script
-serveurProliant@serveur# cat fail2ban-status-ban.sh +<code bash>serveurProliant@serveur# cat fail2ban-status-ban.sh 
 #!/bin/sh #!/bin/sh
 # Script de rapport fail2ban # Script de rapport fail2ban
Ligne 180: Ligne 194:
 msg=$(fail2ban-client status | sed -n 's/,//g;s/.*Jail list://p' | xargs -n1 fail2ban-client status); msg=$(fail2ban-client status | sed -n 's/,//g;s/.*Jail list://p' | xargs -n1 fail2ban-client status);
 echo "$msg" | mail -s "Rapport Fail2ban De $(hostname -s) $(date)" $dest echo "$msg" | mail -s "Rapport Fail2ban De $(hostname -s) $(date)" $dest
 +</code>
  
 +==== 6.2 Avoir un rapport de connexion SSH ====
  
- +Un autre script pour être notifié d'une connexion SSH sur son serveur (notification par mail ou par SMS (**//pour ceux ayant un forfait free, même à 2 €//**).
-6.2 Avoir un rapport de connexion SSH +
-Un autre script pour être notifié d'une connexion SSH sur son serveur (notification par mail ou par SMS (pour ceux ayant un forfait free, même à 2 €).+
 Permet également dans la configuration par SMS d'ignorer une IP donnée (ou plusieurs) afin que le téléphone ne passe pas son temps à sonner. Permet également dans la configuration par SMS d'ignorer une IP donnée (ou plusieurs) afin que le téléphone ne passe pas son temps à sonner.
  
-Etre notifié par mail d'une connexion+=== Être notifié par mail d'une connexion === 
  
-serveurProliant@serveur# cd /etc/ssh/ ; ls+<code bash>serveurProliant@serveur# cd /etc/ssh/ ; ls
 moduli       ssh_host_ecdsa_key      ssh_host_ed25519_key.pub moduli       ssh_host_ecdsa_key      ssh_host_ed25519_key.pub
 ssh_config   ssh_host_ecdsa_key.pub  ssh_host_rsa_key ssh_config   ssh_host_ecdsa_key.pub  ssh_host_rsa_key
-sshd_config  ssh_host_ed25519_key    ssh_host_rsa_key.pub+sshd_config  ssh_host_ed25519_key    ssh_host_rsa_key.pub</code>
  
-Dans ce répertoire, créer le script suivant, remplacer $DEST par votre mail.+Dans ce répertoire, créer le script suivant, remplacer **$DEST** par votre mail.
  
-serveurProliant@serveur# nano sshrc+<code bash>serveurProliant@serveur# nano sshrc
 #!/bin/sh #!/bin/sh
 $DEST=votre.mail@domaine.ext $DEST=votre.mail@domaine.ext
Ligne 207: Ligne 222:
 Date: $DATE" Date: $DATE"
 echo "$MSG" | mail -s "$(echo $DATE) : Connexion de $(echo $USER) sur $(hostname -s)" $DEST echo "$MSG" | mail -s "$(echo $DATE) : Connexion de $(echo $USER) sur $(hostname -s)" $DEST
 +</code>
 +<WRAP center round important 60%>
 +Ce script doit appartenir à root mais être accessible en lecture à tous.
 +</WRAP>
  
-Ce script doit apartenir à root mais être accessible en lecture à tous. +<code bash>serveurProliant@serveur# ls -la
-serveurProliant@serveur# ls -la+
 ... ...
--rw-r--r--   1 root root     54 Jul  4 11:02 sshrc+-rw-r--r--   1 root root     54 Jul  4 11:02 sshrc</code>
  
  
-Etre notifié par mail ET SMS (free seulement)+=== Etre notifié par mail ET SMS (free seulement) === 
  
 On devra créer 3 fichiers (les deux derniers sont positionnés dans un répertoire /home/TOTO/scripts/ ; à adapter à votre configuration) On devra créer 3 fichiers (les deux derniers sont positionnés dans un répertoire /home/TOTO/scripts/ ; à adapter à votre configuration)
-/etc/ssh/sshrc +  * /etc/ssh/sshrc 
-/home/TOTO/scripts/send-notification-data.txt +  /home/TOTO/scripts/send-notification-data.txt 
-/home/TOTO/scripts/send-notification.sh+  /home/TOTO/scripts/send-notification.sh
  
-Pour des raisons de sécurité, le fichier send-notification-data.txt ne devra être lisible que par root, il contient les données d'identification free et les données nécessaires au script. +Pour des raisons de sécurité, le fichier **send-notification-data.txt** ne devra être lisible que par root, il contient les données d'identification free et les données nécessaires au script. 
-Si vous ne souhaitez pas recevoir de notification depuis une ou des IP(s) précise(s), mettre cela dans la variable $IP_AUTHORIZED. La variable $DEST contient le mail de notification.+Si vous ne souhaitez pas recevoir de notification depuis une ou des IP(s) précise(s), mettre cela dans la variable **$IP_AUTHORIZED**. La variable **$DEST** contient le mail de notification.
  
  
  
  
-serveurProliant@serveur#  cat send-notification-data.txt +<code bash>serveurProliant@serveur#  cat send-notification-data.txt 
 ## ##
 ## IP A AUTORISER SANS ALERTE SMS ## IP A AUTORISER SANS ALERTE SMS
Ligne 255: Ligne 274:
  
 # Nom du destinaire de la notification  par mail # Nom du destinaire de la notification  par mail
-  DEST=mon.mail@domaine.com+  DEST=mon.mail@domaine.com</code> 
 + 
 +<WRAP center round important 60%> 
 +Adapter les droits, très important :  
 +</WRAP>
  
-Adpater les droits, très important :  +<code bash>serveurProliant@serveur# chmod 600 send-notification-data.txt</code>
-serveurProliant@serveur# chmod 600 send-notification-data.txt+
  
-serveurProliant@serveur# ls -la+<code bash>serveurProliant@serveur# ls -la
 ... ...
 -rw------- 1 admin 1007  644 Jul  4 10:57 send-notification-data.txt -rw------- 1 admin 1007  644 Jul  4 10:57 send-notification-data.txt
 On incluera ce fichier dans le script bash afin qu'on ne puisse pas lire son contenu. On incluera ce fichier dans le script bash afin qu'on ne puisse pas lire son contenu.
 +</code>
 Enfin le script Enfin le script
  
 La fonction d'envoi via l'API de free est à l'origine ici : La fonction d'envoi via l'API de free est à l'origine ici :
-https://github.com/C-Duv/freemobile-smsapi-client +[[ https://github.com/C-Duv/freemobile-smsapi-client [ DUVERGIER Claude (http://claude.duvergier.fr) ] ]]
-[ DUVERGIER Claude (http://claude.duvergier.fr) ]+
 Modifiée pour les besoins. Modifiée pour les besoins.
  
  
-serveurProliant@serveur# cat send-notification.sh+<code bash>serveurProliant@serveur# cat send-notification.sh
 #!/bin/sh #!/bin/sh
  
Ligne 459: Ligne 480:
 ## ENVOI SMS / MAIL ## ENVOI SMS / MAIL
 ## ##
 +
 +
 +# QUOI QU'IL EN SOIT ON ENVOIE UN MAIL
 +  echo "$MSG" | mail -s "$(echo $DATE) : Connexion de $(echo $USER) sur $(hostname -s)" $DEST
 +
 +# GESTION DES IP AUTORISEES / SMS
   if echo "$IP" | egrep $IP_AUTHORIZED ; then   if echo "$IP" | egrep $IP_AUTHORIZED ; then
     echo "MATCH NO SEND SMS";     echo "MATCH NO SEND SMS";
Ligne 465: Ligne 492:
   fi   fi
  
 +</code>
  
-QUOI QU'IL EN SOIT ON ENVOIE UN MAIL +Enfin on colle tu cela dans le script de connexion ssh 
-  echo "$MSG" | mail -s "$(echo $DATE) : Connexion de $(echo $USER) sur $(hostname -s)" $DEST +<code bash> 
 +serveurProliant@serveur$ cat /etc/ssh/sshrc  
 +#!/bin/sh 
 +. /home/TOTO/scripts/send-notification.sh > /dev/null</code>
  
 Après tout cela, vous devriez à a voir quelque chose qui tient la route... Après tout cela, vous devriez à a voir quelque chose qui tient la route...
 Par contre, un iptable en toile de fond reste bien sûr nécessaire.... Par contre, un iptable en toile de fond reste bien sûr nécessaire....
ssh-fail2ban.1562257715.txt.gz · Dernière modification : 2019/07/17 19:24 (modification externe)