Outils pour utilisateurs

Outils du site


tinyhoneypot

Ceci est une ancienne révision du document !


Tinyhoneypot

Une astuce pour sécuriser son serveur en utilisant Tiny Honeypot et Fail2Ban. (via http://book.knah-tsaeb.org/?SVAp2w )

Dernière mise à jour : 4 février 2017

Prérequis

Avoir changé le port ssh par défaut (22) .

Installation

Installation des programmes nécessaires :

    # apt-get update
    # apt-get install tinyhoneypot fail2ban xinetd

Cliquez pour afficher ⇲

Cliquez pour masquer ⇱

Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
fail2ban est déjà la plus récente version disponible.
Les paquets supplémentaires suivants seront installés : 
  libfile-copy-recursive-perl libpopt0 logrotate update-inetd
Les NOUVEAUX paquets suivants seront installés :
  libfile-copy-recursive-perl libpopt0 logrotate tinyhoneypot update-inetd xinetd
0 mis à jour, 6 nouvellement installés, 0 à enlever et 1 non mis à jour.
Il est nécessaire de prendre 318 ko dans les archives.
Après cette opération, 959 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] 

Copie d'un exemple de configuration :

    # cp -v /usr/share/doc/tinyhoneypot/examples/xinetd.d/thp-pasv /etc/xinetd.d//usr/share/doc/tinyhoneypot/examples/xinetd.d/thp-pasv’ ->/etc/xinetd.d/thp-pasv’

Modification de la configuration copiée juste avant :

    # vim /etc/xinetd.d/thp-pasv 
    # 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
        }

On regarde le statut du service xinetd :

    # service xinetd status

Cliquez pour afficher ⇲

Cliquez pour masquer ⇱

● xinetd.service - LSB: Starts or stops the xinetd daemon.
   Loaded: loaded (/etc/init.d/xinetd)
   Active: active (running) since sam. 2017-02-04 17:25:30 CET; 2min 56s ago
   CGroup: /system.slice/xinetd.service
           └─6351 /usr/sbin/xinetd -pidfile /run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6
 
févr. 04 17:25:30 C-3PO xinetd[6351]: removing daytime
févr. 04 17:25:30 C-3PO xinetd[6351]: removing daytime
févr. 04 17:25:30 C-3PO xinetd[6351]: removing discard
févr. 04 17:25:30 C-3PO xinetd[6351]: removing discard
févr. 04 17:25:30 C-3PO xinetd[6351]: removing echo
févr. 04 17:25:30 C-3PO xinetd[6351]: removing echo
févr. 04 17:25:30 C-3PO xinetd[6351]: removing time
févr. 04 17:25:30 C-3PO xinetd[6351]: removing time
févr. 04 17:25:30 C-3PO xinetd[6351]: xinetd Version 2.3.15 started with libwrap loadavg options compiled in.
févr. 04 17:25:30 C-3PO xinetd[6351]: Started working: 0 available services

On redémarre le service xinetd et on vérifie qu'il écoute bien sur le port SSH par défaut :

    # service xinetd restart
    # netstat -lptn | grep xinetd
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      4426/xinetd 

On peut maintenant essayer de se connecter sans spécifier de port (donc tenter une connexion sur le port 22 ou Xinetd écoute) : (en local) :

    # ssh 127.0.0.1
    ^C

(sur le serveur) :

    # cat /var/log/thpot/captures
    févr. 04 17:30:38 SID=589601AEBFC6C.nullresp PID=6419 SRC=127.0.0.1 SPT=41690 ET=00:00:05 BYTES=39

Ok, la première partie marche! On regarde maintenant pour utiliser Fail2ban avec ça. (ATTENTION : On ne doit pas modifier le fichier “jail.conf” mais uniquement le fichier “jail.local” !) On fait donc une copie de jail.conf ⇒ jail.local :

    # cp -v /etc/fail2ban/jail.conf /etc/fail2ban/jail.local/etc/fail2ban/jail.conf’ ->/etc/fail2ban/jail.local’
 
    # vim /etc/fail2ban/jail.local
    # cat /etc/fail2ban/jail.local
        (...)
        [ssh]
        enabled  = true
        port     = xxxx
        filter   = sshd
        logpath  = /var/log/auth.log
        maxretry = 6
 
    #SLF: (voir https://www.howtoforge.com/tutorial/increase-ipv4-security-with-fail2ban-and-tinyhoneypot-on-debian-jessie/ )
        [thp-ssh]
        enabled  = true
        port     = all
        filter   = thpot
        logpath  = /var/log/thpot/captures
        banaction = iptables-allports
        maxretry = 1
        findtime = 1800
        bantime  = 10800
        (...)

note: J'ai mis un bantime relativement court au départ (3600 secondes) le temps de tester que tout fonctionne bien. Au pire je suis banni juste une heure si je fais une bêtise… [Edit: j'ai mis 10800s pour le bantime à présent, je vais probablement augmenter encore dans les prochains jours.

On rajoute le filtre fail2ban pour Tiny Honeypot :

    # vim /etc/fail2ban/filter.d/thpot.local
    # cat /etc/fail2ban/filter.d/thpot.local
        # Fail2Ban configuration file for Tiny Honeypot
        [Definition]
        # patern : 
        # Mar 02 13:28:06 SID=56D6DC56E6F47.nullresp PID=4437 SRC=xxx.xxx.xxx.xxx SPT=45797 ET=00:00:09 BYTES=39
        # Mar 02 13:44:25 SID=56D6E02951E5.nullresp PID=4566 SRC=yyy.yyy.yyy.yyy SPT=44993 ET=00:00:04
 
        failregex   = .* SRC=<HOST> .*
        ignoreregex =

On peut tester si les regex de fail2ban fonctionnent bien :

    # fail2ban-regex /var/log/thpot/captures /etc/fail2ban/filter.d/thpot.local 
 
    Running tests
    =============
    Use   failregex file : /etc/fail2ban/filter.d/thpot.local
    Use         log file : /var/log/thpot/captures
 
    Results
    =======
    Failregex: 86 total
    |-  #) [# of hits] regular expression
    |   1) [86] .* SRC=<HOST> .*
    `-
    Ignoreregex: 0 total
 
    Date template hits:
    |- [# of hits] date format
    |  [86] MONTH Day Hour:Minute:Second
    `-
 
    Lines: 86 lines, 0 ignored, 86 matched, 0 missed

On redémarre ensuite le service fail2ban et on regarde ses logs et son statut :

    # service fail2ban restart
    # cat /var/log/fail2ban.log 
    2016-03-02 14:49:40,128 fail2ban.server [4862]: INFO    Stopping all jails
    2016-03-02 14:49:40,240 fail2ban.jail   [4862]: INFO    Jail 'ssh' stopped
    2016-03-02 14:49:41,244 fail2ban.jail   [4862]: INFO    Jail 'thp-ssh' stopped
    2016-03-02 14:49:41,245 fail2ban.server [4862]: INFO    Exiting Fail2ban
    2016-03-02 14:49:41,796 fail2ban.server [4934]: INFO    Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.13
    2016-03-02 14:49:41,797 fail2ban.jail   [4934]: INFO    Creating new jail 'ssh'
    2016-03-02 14:49:41,817 fail2ban.jail   [4934]: INFO    Jail 'ssh' uses pyinotify
    2016-03-02 14:49:41,833 fail2ban.jail   [4934]: INFO    Initiated 'pyinotify' backend
    2016-03-02 14:49:41,834 fail2ban.filter [4934]: INFO    Added logfile = /var/log/auth.log
    2016-03-02 14:49:41,835 fail2ban.filter [4934]: INFO    Set maxRetry = 6
    2016-03-02 14:49:41,836 fail2ban.filter [4934]: INFO    Set findtime = 600
    2016-03-02 14:49:41,837 fail2ban.actions[4934]: INFO    Set banTime = 600
    2016-03-02 14:49:41,865 fail2ban.jail   [4934]: INFO    Creating new jail 'thp-ssh'
    2016-03-02 14:49:41,865 fail2ban.jail   [4934]: INFO    Jail 'thp-ssh' uses pyinotify
    2016-03-02 14:49:41,868 fail2ban.jail   [4934]: INFO    Initiated 'pyinotify' backend
    2016-03-02 14:49:41,869 fail2ban.filter [4934]: INFO    Added logfile = /var/log/thpot/captures
    2016-03-02 14:49:41,870 fail2ban.filter [4934]: INFO    Set maxRetry = 1
    2016-03-02 14:49:41,871 fail2ban.filter [4934]: INFO    Set findtime = 1800
    2016-03-02 14:49:41,871 fail2ban.actions[4934]: INFO    Set banTime = 3600
    2016-03-02 14:49:41,876 fail2ban.jail   [4934]: INFO    Jail 'ssh' started
    2016-03-02 14:49:41,880 fail2ban.jail   [4934]: INFO    Jail 'thp-ssh' started
 
    # service fail2ban status
    ● fail2ban.service - LSB: Start/stop fail2ban
       Loaded: loaded (/etc/init.d/fail2ban)
       Active: active (running) since Wed 2016-03-02 14:49:41 CET;   8min ago
      Process: 4905 ExecStop=/etc/init.d/fail2ban stop (code=exited, status=0/SUCCESS)
      Process: 4922 ExecStart=/etc/init.d/fail2ban start (code=exited, status=0/SUCCESS)
       CGroup: /system.slice/fail2ban.service
               └─4934 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid
 
    Mar 02 14:49:41 xxxxxx fail2ban[4922]: Starting authentication failure monitor: fail2ban.

Malgré un “failure monitor: fail2ban …” ça fonctionne. Ma session active (dans un autre terminal) a même été dégagée.

Tests

(en local vers 15h10 :)

    $ ssh xxx.xxx.xxx.xxx
    ^C
    $ ssh xxx.xxx.xxx.xxx
    ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused
    $ ssh -p xxxx LOGIN@xxx.xxx.xxx.xxx
    ssh: connect to host xxx.xxx.xxx.xxx port xxxx: Connection refused

(dernière tentative à 15h16)

Par contre, le ping marche toujours. Surprenant!

Si on regarde les logs de fail2ban une fois qu'on est “débanni” du serveur, je remarque que j'ai déjà une “prise” :

    # cat /var/log/fail2ban.log 
    2016-03-02 15:23:22,329 fail2ban.actions[4934]: WARNING [thp-ssh] Ban 84.37.137.216

Tiens, c'est pas moi ça ! La suite : http://links.simonlefort.be/?Cif-aA

Bonus

Pour voir les ports utilisés :

    # netstat -lptn
tinyhoneypot.1486226157.txt.gz · Dernière modification : 2020/08/09 12:59 (modification externe)