Ubuntu, sécurisation des accès SSH avec le port d'écoute et ufw (Uncomplicated Firewall)

Introduction

Les trois premières étapes à réaliser pour sécuriser son nouveau serveur Ubuntu, dans le cloud ou pas :

  • Modifier le port par défaut pour les connexions SSH.
  • Désactiver les accès directs en SSH avec le compte root.
  • Activer le parefeu ufw (Ubuntu Uncomplicated Firewall) en autorisant les connexions entrantes SSH.
Putty ufw ssh

Cet article n'explique pas comment activer et utiliser le parefeu ufw, il y a déjà beaucoup de tutoriels à propos d'ufw, cet article se concentre sur comment pour la première fois activer ufw en toute sécurité en autorisant les connexions SSH avec SSH s'exécutant sur un port différent de celui par défaut. Dans de nombreux articles, le lecteur est averti d'être prudent lors de l'activation d'ufw mais sans mentionner la commande ufw show added, cette commande garantissant qu'il n'y a pas d'erreur humaine avant l'activation d'ufw, erreur humaine qui peut couper les connexions SSH existantes sans possibilité d'en établir de nouvelles autrement qu'en contactant le fournisseur (cloud) ou en accèdant physiquement au serveur.

Dans cet article, le service ssh écoutera sur le port 1857 et ufw sera activé en autorisant les connexions SSH entrantes sur ce port. Des vérifications complémentaires sont faites avant l'activation d'ufw (IP v6 et les stratégies par défaut).

Modification du port par défaut des connexions SSH

Par défaut, le service SSH écoute sur le port 22. Sans configuration de sécurité et de parefeu définie, des tentatives de connexions nombreuses apparaissent rapidement dans le fichier de log /var/log/auth.log

/var/log/auth.log
Mar 26 12:29:18 vps sshd[26691]: Failed password for invalid user cb from 103.36.30.157 port 56224 ssh2
Mar 26 12:29:18 vps sshd[26691]: Received disconnect from 103.36.30.157 port 56224:11: Bye Bye [preauth]
Mar 26 12:29:18 vps sshd[26691]: Disconnected from invalid user cb 103.36.30.157 port 56224 [preauth]

Donc, première chose à faire, modifier le port 22 par défaut du service SSH : ici le port 1857 est choisi.

Modifier le port du service SSH dans le fichier /etc/ssh/sshd_config :

/etc/ssh/sshd_config
Port 1857

Redémarrer ensuite le service SSH :

root@vps$ /etc/init.d/ssh restart

Toutes les nouvelles connexions SSH avec Putty, ou tout autre outil (FTP Filezilla...), seront définies avec ce nouveau port.

Putty new port

netstat ou lsof sont des binaires pratiques pour verifier les ports d'écoute et l'id de process du service ssh :

root@vps$ lsof -i -P -n | grep LISTEN | grep 'sshd'
          
sshd       939            root    3u  IPv4  18880      0t0  TCP *:1857 (LISTEN)
sshd       939            root    4u  IPv6  18891      0t0  TCP *:1857 (LISTEN)
root@vps$ netstat -tulpn | grep LISTEN | grep 'sshd'
          
tcp        0      0 0.0.0.0:1857            0.0.0.0:*               LISTEN      939/sshd
tcp6       0      0 :::1857                 :::*                    LISTEN      939/sshd

Désactiver les accès directs avec le compte root

Pour renforcer la sécurité, désactiver les accès directs avec le compte root via des connexions SSH.

Créér un compte qui servira de compte de rebond pour les accès root, par exemple un compte qui s'appellera gateway :

root@vps$ useradd -d /home/gateway -m -g wapp -s/bin/bash gateway

Appliquer un mot de passe fort pour ce compte gateway :

root@vps$ passwd gateway

Enter new UNIX password:...
passwd: password updated successfully

Dans le fichier /etc/ssh/sshd_config, appliquer la valeur no au paramètre PermitRootLogin dans la section Authentication :

/etc/ssh/sshd_config
# Authentication:
...
PermitRootLogin no
...

Redémarrer le service SSH :

root@vps$ /etc/init.d/ssh restart

Le compte gateway précédemment créé sera utilisé pour les accès root :

gateway@vps$ su - root

Configuration et activation d'ufw

Un port différent du port par défaut est à présent défini pour SSH et les accès directs avec le compte root ne sont plus permis. ufw va pouvoir être activé pour la première fois en autorisant les connexions SSH entrantes sur le port 1857.

Mais tout d'abord, IP v6 et les stratégies par défaut sont vérifiés.

IP v6

Avant d'activer ufw, vérifier si IP v6 est désactivé ou non sur le système Ubuntu.

IP v6 est supporté et activé si le fichier /proc/net/if_inet6 existe.

root@vps$ ls /proc/net/if_inet6

Ce fichier liste toutes les interfaces réseaux pour lesquelles IP v6 est activé :

root@vps$ cat /proc/net/if_inet6
          
fe80000000000000f8163efffeb7a0f0 02 40 20 80     ens3
00000000000000000000000000000001 01 80 10 80       lo

Ici, IP v6 est actif pour les interfaces réseaux ethernet (ens3, anciennement eth0) et loopback (lo).

Si IP v6 est actif sur le serveur Ubuntu, il faut s'assurer que ufw est configuré pour le support d'IP v6, ainsi ufw gérera les règles de parefeu pour IP v6 en addition d'IP v4. Vérifier que le paramètre IPV6 est défini à yes dans le fichier /etc/default/ufw.

/etc/default/ufw
IPV6=yes

Avec ce paramètre, lorsque ufw est activé, les règles de parefeu seront configurées à la fois pour IP v4 et IP v6.

Policies

Toujours dans le fichier /etc/default/ufw, s'assurer que les paramètres DEFAULT_INPUT_POLICY et DEFAULT_OUTPUT_POLICY sont définis respectivement à DROP et ACCEPT.

/etc/default/ufw
DEFAULT_INPUT_POLICY="DROP"
DEFAULT_OUTPUT_POLICY="ACCEPT"

Avec ces valeurs, lorsque ufw est activé pour la première fois, le règles de parefeu seront :

  • autorisation de toutes les connexions sortantes (allow outgoing).
  • interdiction de toutes les connexions entrantes (deny ingoing).

Autorisation des connexions SSH entrantes

Ajouter alors la règle de parefeu autorisant les connexions entrantes SSH sur le port 1857 :

root@vps$ ufw allow 1857

Rules updated
Rules updated (v6)

Vérifier que la règle est ajoutée correctement avec la commande show added :

root@vps$ ufw show added

Added user rules (see 'ufw status' for running firewall):
ufw allow 1857

Activation d'ufw

Maintenant ufw peut être activé en tout sécurité, les connexions SSH existantes et futures ne seront pas rompues :

root@vps$ ufw enable

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Pour vérifier le statut de ufw :

root@vps$ ufw status verbose
          
Status: active
Logging: off
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
1857                       ALLOW IN    Anywhere
1857 (v6)                  ALLOW IN    Anywhere (v6)

2 règles autorisant les connexions entrantes sur le port 1857 sont créées : une règle pour IP v4, la deuxième pour IP v6.