Il s'agit d'un exercice de cinq minutes pour augmenter la sécurité sur une machine adressée IPv4. Le but de la configuration décrite dans ce didacticiel est de verrouiller les analyseurs de ports et les ouvre-ports malveillants pendant un certain temps. Cet exercice n'est testé et appliqué que sur Debian Jessie. Pendant l'exercice, chaque commande est validée en tant que root. C'est à vous de décider comment obtenir un accès root.
Soit su -, sudo, login console, etc...
Instruction pour les débutants paresseux :lorsque je représente l'invite bash, copiez simplement la partie en gras du texte dans la vôtre.
Les ingrédients
- Le logiciel fail2ban est capable de gérer dynamiquement vos règles de pare-feu pour bloquer les pirates.
- Le tinyhoneypot est capable d'écouter sur un port TCP/IP et de consigner les détails des ouvreurs.
- Le service xinetd démarre tinyhoneypot et gère ses ports d'écoute.
Installer les ingrédients : (Il suffit de copier-coller la partie en gras du texte)
[email protected]:~# apt-get install tinyhoneypot fail2ban xinetd
Paramètres
Pour que SSH écoute sur un port différent, remplacez votre fichier de configuration ssh par un autre port ssh :
[email protected]:~# sed -i.orig 's/Port 22/Port 2201/m' /etc/ssh/sshd_config
Votre configuration /etc/ssh/sshd_config d'origine est enregistrée sous /etc/ssh/sshd_config.orig
Lorsque vous redémarrez votre service SSH, il écoutera désormais sur le port 2201 (pas sur le 22).
[email protected]:~# service ssh restart
[email protected]:~# netstat -lptn | grep ssh
tcp 0 0 0.0.0.0:2201 0.0.0.0:* LISTEN 4313/sshd
tcp6 0 0 :::2201 :::* LISTEN 4313/sshd
Jusqu'ici tout va bien..
Configurez Xinetd pour démarrer tinyhoneypot et écouter sur le port 22 de TCP :
[email protected]:~# cp -v /usr/share/doc/tinyhoneypot/examples/xinetd.d/thp-pasv /etc/xinetd.d/
Modifiez votre /etc/xinetd.d/thp-pasv comme suit :
[email protected]:~# cat /etc/xinetd.d/thp-pasv
# default: on # description: thp-ftpd calls the generic thpsvcs with param "ftp", # resulting in an ftpd emulation. service thp-pasv { type = UNLISTED socket_type = stream protocol = tcp port = 22 wait = no user = thpot server = /usr/sbin/thpot server_args = nullresp nice = 10 disable = no instances = 1 per_source = 1 }
(RE)Démarrez xinetd avec vos nouveaux paramètres et assurez-vous qu'il écoute sur le port 22.
[email protected]:~# service xinetd restart
[email protected]:~# netstat -lptn | grep xinetd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 4567/xinetd
Assurez-vous qu'il fonctionne
Ouvrez une connexion ssh depuis une autre machine.
[email protected]:~$ ssh 192.168.88.212
Au bout d'un moment, rien ne devrait se passer, interrompez-le par [Ctrl + C]
Et vérifiez les entrées du journal sur votre ordinateur de test :
[email protected]:~# cat /var/log/thpot/captures
Feb 29 13:02:10 SID=56D4334221165.nullresp PID=4837 SRC=192.168.88.242 SPT=47187 ET=00:00:11 BYTES=39
Si tout s'est bien passé, il devrait y avoir une entrée dans votre journal de capture.
Permet de régler votre Fail2Ban pour coopérer avec TinyHoneyPot
[email protected]:~# cd /etc/fail2ban/
[email protected]:/etc/fail2ban# cp -v jail.conf jail.local
Ne modifiez jamais votre jail.conf !! Faites-en une copie sous jail.local et modifiez UNIQUEMENT le fichier .local !
Trouvez la section [ssh] dans votre jail.local et modifiez-la en fonction du [Port 2201] de /etc/ssh/sshd_config
[ssh] enabled = true port = 2201 filter = sshd logpath = /var/log/auth.log maxretry = 6
Marque et entrée dans la section JAIL de jail.local :
Cela obligera Fail2Ban à lire le fichier journal de tinyhoneypot et à en obtenir l'adresse IPv4 à refuser. Je recommande de le placer après la section [ssh]. Il s'agit de la 137e rangée.
[thp-ssh] enabled = true port = all filter = thpot logpath = /var/log/thpot/captures banaction = iptables-allports maxretry = 1 findtime = 1800 bantime = 99999
Fail2ban devrait avoir un filtre afin de savoir quoi refuser. Là
[email protected]:~# cat /etc/fail2ban/filter.d/thpot.local
[Definition]
failregex = SRC=<HOST>
ignoreregex =
C'est fait !
Juste un petit test....
[email protected]:~# service fail2ban restart
Vous devriez voir quelque chose de similaire à la fin de /var/log/fail2ban.log
2016-02-29 13:54:06,915 fail2ban.jail [6102]: INFO Creating new jail 'thp-ssh' 2016-02-29 13:54:06,915 fail2ban.jail [6102]: INFO Jail 'thp-ssh' uses pyinotify 2016-02-29 13:54:06,920 fail2ban.jail [6102]: INFO Initiated 'pyinotify' backend 2016-02-29 13:54:06,922 fail2ban.filter [6102]: INFO Added logfile = /var/log/thpot/captures 2016-02-29 13:54:06,923 fail2ban.filter [6102]: INFO Set maxRetry = 1 2016-02-29 13:54:06,925 fail2ban.filter [6102]: INFO Set findtime = 1800 2016-02-29 13:54:06,926 fail2ban.actions[6102]: INFO Set banTime = 99999 2016-02-29 13:54:06,934 fail2ban.jail [6102]: INFO Jail 'ssh' started 2016-02-29 13:54:06,940 fail2ban.jail [6102]: INFO Jail 'thp-ssh' started
Vous pouvez voir vos valeurs personnalisées depuis jail.local et les ajuster si nécessaire.
findtime = 1800 bantime = 99999
Jetez un œil à vos règles iptables actuelles :
[email protected]:~# iptables-save
# Generated by iptables-save v1.4.21 on Mon Feb 29 14:05:17 2016 *filter :INPUT ACCEPT [2:64] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :fail2ban-ssh - [0:0] :fail2ban-thp-ssh - [0:0] -A INPUT -p tcp -j fail2ban-thp-ssh -A INPUT -p tcp -m multiport --dports 2201 -j fail2ban-ssh -A fail2ban-ssh -j RETURN -A fail2ban-thp-ssh -j RETURN COMMIT # Completed on Mon Feb 29 14:05:17 2016
Vérifions la règle de refus d'une autre machine :
[email protected]:~# ssh 192.168.88.212
^C
[email protected]:~# ssh 192.168.88.212
ssh: connect to host 192.168.88.212 port 22: Connection refused
La première action ne fera rien. L'attaquant l'interrompra probablement au bout d'un moment La deuxième action sera refusée.
Vos règles iptables devraient maintenant ressembler à ceci :
[email protected]:~# iptables-save
# Generated by iptables-save v1.4.21 on Mon Feb 29 14:10:53 2016 *filter :INPUT ACCEPT [4:542] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [1:88] :fail2ban-ssh - [0:0] :fail2ban-thp-ssh - [0:0] -A INPUT -p tcp -j fail2ban-thp-ssh -A INPUT -p tcp -m multiport --dports 2201 -j fail2ban-ssh -A fail2ban-ssh -j RETURN -A fail2ban-thp-ssh -s 192.168.88.242/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-thp-ssh -j RETURN COMMIT # Completed on Mon Feb 29 14:10:53 2016
Le résultat est :le PC de l'attaquant est REJETÉ sur chaque port.
Le post-scriptum
Au moment de la rédaction de ce HowTo, ni Fail2Ban ni tinyhoneypot n'étaient capables de gérer IPv6 Si vous pensez que ce HowTo est utile, partagez-le ! Faites-le savoir à vos amis.