OVH Community, your new community space.

Fail2ban [ssh-notify]


danyel
05/08/2014, 18h23
Merci tous les 2 pour toutes ces infos.
C'est certain que non truc sur le bashrc n'est pas infaillible, mais ca fonctionnera quand meme si bash est execute.
Ce n'est pas un protection en tant que tel, mais juste un petit plus

Pour le script fail2ban, c'est un peu la meme chose, car il ne s'execute pas en temps reel ... donc on peut aussi l'arreter aussitot connecte.

nomwhat a raison, Faut-pas que 'il' entre, c'est tout. mais nous savons tous qu'aucun systeme n'est fiable a 100%
Donc ca ne coute pas grand chose de rajouter ce genre de petit truc ... faut juste s'en fier qu'a son niveau de securite, c'est a dire ... pas haut

nowwhat
02/08/2014, 05h28
Yep, comme c'est déjà dit plus haut.
Dès que t'as ça
Citation Envoyé par danyel
Code:
echo 'NOTIFICATION - Acces SSH en ROOT sur `hostname` .....
Enjoy
c'est du no-joy - c'est carrément trop tard, le serveur est considéré comme perdu.

Le truc "te faire envoyer un mail" est loin d'être parfait car ... le moindre accès SFTP (en root) te donne PAS ce mail (non plus) or le type a accès à TOUT ton serveur.

Faut-pas que 'il' entre, c'est tout.

Mais bon, le plupart des serveurs qui tombent aujourd'hui n'ont pas eu un accès SSH avec root d'un tiers- c'est simplement l’utilisation des scripts PHPd'une qulaité plus que douteux qui l'on rendu vulnérable;

Kam
02/08/2014, 03h11
Bonsoir,

Ce n'est pas forcément une "bonne" solution.
Il suffit pour un attaquant potentiel de ne pas charger le fichier /etc/bash.bashrc.
Le script ne tourne donc pas, tu n'es même pas notifié lorsqu'une faille est exploitée.

Exemple : ssh -t user@fqdn "bash --noprofile --norc"

(Source : http://superuser.com/questions/48147...a-linux-server)

L'idée du script fail2ban est une bonne piste.

Sinon tu peux toujours faire un script qui se base sur le fichier /var/log/auth.log
Plus particulièrement sur le motif Allowed qui enregistre les connexions réussies.
Tu peux les comparer avec une liste d'adresses IPs autorisées, et si l'ip ne correspond pas, tu reçois un mail.

danyel
17/03/2014, 10h03
Je reviens un peu sur le sujet car j'ai trouve une bonne solution qui envoi un email immediatement lors de l'acces ssh et pour tous les users.
Rajouter ce code (en changeant votre email bien sur) dans le fichier /etc/bash.bashrc
Code:
# notification email de chaque connexion ssh
echo 'NOTIFICATION - Acces SSH en ROOT sur `hostname` le:' `date` `who` | mail -s "NOTIFICATION - Connexion en ROOT via SSH depuis: `who | cut -d"(" -f2 | cut -d")" -f1`" votre@email.com
Enjoy

nowwhat
04/03/2014, 22h23
Citation Envoyé par danyel
.....
Ce que je reproche un peu a ton script, c'est qu'il est uniquement base sur 'root' (oui oui j'imagine tjrs le pire )
Car ce script marche comme ça chez moi - j'ai que 'root' donc il est la.
Si t'as un autre utilisateur, disons: bidule t'as que à le placer aussi dans /home/bidule/.ssh/rc

Avec le "skelleton" de adduser (man man adduser.conf), t'as qu'à automatiser le tout, dès que t'as un utilisateur crée, ce script sera mise en place pour lui.

danyel
04/03/2014, 16h14
Citation Envoyé par nowwhat
Pour autant, c'est ça, la vraie mission sécrète de fail2ban.
Ben oui ... mais non lolololololol

Citation Envoyé par nowwhat
Je préfère mon script, le session est lancé après que le script rc a fini son travail, quoi que, le MTA n'est travaille pas en temps réel non plus ....
Ce que je reproche un peu a ton script, c'est qu'il est uniquement base sur 'root' (oui oui j'imagine tjrs le pire )

nowwhat
04/03/2014, 01h23
Citation Envoyé par danyel
....
Mais c'est vrai que regex est pas trop ma tasse de the
Pour autant, c'est ça, la vraie mission sécrète de fail2ban.

Code:
sshd[xxx]: Accepted password for xxx from xxx.xxx.xxx.xxx port xxx ssh2
Jamais vu dans mes logs ....

Donne ton 'user' un clé privé. T'auras jamais le 'mail'. Ce qui fait que tu puisse passer à autre chose comme des bonnes stratégies de sauvegardes

PS: sache que fail2ban n'est pas instantané. Le type qui shut-down ton serveur mail - ou mieux, il lance un
iptables -I OUTPUT -j DROP
dès qu'il entre reste inaperçu pour faire son 'ménage'.

Je préfère mon script, le session est lancé après que le script rc a fini son travail, quoi que, le MTA n'est travaille pas en temps réel non plus ....

danyel
04/03/2014, 01h03
Citation Envoyé par nowwhat
Me faut un ligne de ton /var/log/auth qui devrait matcher.
Je suis comme toi sous debian 7.4 et les logs sont identiques
Code:
sshd[xxx]: Accepted password for xxx from xxx.xxx.xxx.xxx port xxx ssh2
Citation Envoyé par nowwhat
Je pense aussi que te fait fausse route.
Car, quand t'as reçu un mail que xxxx a réussi son login - et ce n'est pas toi, .... c'est déjà trop tard.
Je suis d'accord avec toi, mais c'est juste pour etre averti le plus rapidement possible au cas ou ...
Deja, l'acces root est interdit, le port est change, et uniquement 1 seul user peut logguer en ssh.
Si tu connais d'autres moyens d'augmenter la securite, je suis preneur

Pour les logs, j'utilise la rotation automatique, donc ...
Et merci pour ton code

Merci pour les liens, je vais aller zieutter tout ca
Mais c'est vrai que regex est pas trop ma tasse de the

phil_
04/03/2014, 00h00
Hello

j'aurais tendance à dire, va lire un tuto j'en connais 2 biens
http://regexone.com
http://regex101.com/r/cJ2zT8

Sinon, pour répondre à ta question:
  • le / me parait bizarre
  • essaye à la place du [-/\w]+ un \w* (n'importe quel caractère alphanumérique répété)
  • ou un (?assword|publickey) (ou password ou publickey)

Et adapte par rapport à ton /var/log/auth.log. Ensuite comme dit nowwhat, c'est déjà trop tard quand tu reçois la notification. Enfin, au moins ça t'informe qu'il est temps de te connecter au manager ovh pour faire une ré-installe de ton serveur

Philippe

nowwhat
03/03/2014, 23h12
Citation Envoyé par danyel
.....
Qq saurail-il le corriger ?
Impossible de répondre.
Me faut un ligne de ton /var/log/auth qui devrait matcher.
Une qui montre un login réussi .....

Je pense aussi que te fait fausse route.
Car, quand t'as reçu un mail que xxxx a réussi son login - et ce n'est pas toi, .... c'est déjà trop tard.

Concernant le login avec SSH, ça devrait carrément pas exister. Garder un login par clavier, c'est pour le "neuneus".

Chez moi, je me retrouve avec des
Mar 3 21:55:11 mail sshd[3840]: Accepted publickey for root from 90.60.171.206 port 53573 ssh2
dès que je procède à un login. Avec mon clé privé bien sur - login avec mot de passe == INTERDIT.
Ça, c'est déjà plus sur.

Pour la reste, je "fail2ban" tout ça pour la semaine:
Code:
failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from \s*$
            ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from \s*$
            ^%(__prefix_line)sFailed (?:password|publickey) for .* from (?: port \d*)?(?: ssh\d*)?$
            ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM \s*$
            ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from \s*$
            ^%(__prefix_line)sUser .+ from  not allowed because not listed in AllowUsers$
            ^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=(?:\s+user=.*)?\s*$
            ^%(__prefix_line)srefused connect from \S+ \(\)\s*$
            ^%(__prefix_line)sAddress  .* POSSIBLE BREAK-IN ATTEMPT!*\s*$
            ^%(__prefix_line)sUser .+ from  not allowed because none of user's groups are listed in AllowGroups\s*$
            ^%(__prefix_line)sreverse mapping checking getaddrinfo for .* \[\] failed - POSSIBLE BREAK-IN ATTEMPT!*\s*$
            ^%(__prefix_line)sConnection closed by  \[preauth\]\s*$
Donc, dès qu'un règle match, c'est ban d'office.

A priori, je ne fail2ban même pas pour empêcher les logins SSH .... ils n'ont pas mon clé (de 2048 bits ...).
C'est pour éviter le le log /var/log/auth.log explose en taille
(application de la loi: trop d'info tue l'info).

Pour recevoir un mail dès que p.a. 'root' a fait un login, il suffit de créer ce fichier:
/root/.ssh/rc
Code:
#!/bin/bash
DATE=`date "+%d.%m.%Y--%Hh%Mm"`
IP=`echo $SSH_CONNECTION | awk '{print $1}'`
REVERSE=`dig -x $IP +short`

echo "User connecté
IPx: $IP
REVERSE: $REVERSE
Date: $DATE
User: $USER " | mail -s "User connect on `hostname`" mon-mail-chez@orange.fr
N'oubli pas le
chmod 0700 /root/.ssh/rc


PS: tout ça, ça marche chez moi, j'ai un OS 'normal' = Debian 7.4.

danyel
03/03/2014, 21h47
Soir all,

J'ai trouve cette page : http://blog.kdecherf.com/2009/06/15/...connexion-ssh/
qui permet d'envoyer une alerte f2b lors de chaque login ssh reussi.
Je trouve cela plutot interessant, mais le failregex n'est plus compatible avec la nouvelle version de f2b.

Code:
failregex = Accepted [-/\w]+ for .* from 
Qq saurail-il le corriger ?

Merci pour votre aide.


ps : le code au gout du jour (sauf le failregex que je ne suis pas arrive a realiser)
Code:
[ssh-notify]
enabled    = true
port        = ssh
filter        = sshd-notify
logpath    = /var/log/auth.log
maxretry    = 1