Sécuriser un VPS debian buster

Tags: #<Tag:0x00007f63f4fec068> #<Tag:0x00007f63f042bd90>

Bonjour tous,

Nous sommes une association et proposons pour d’autres assos, petites mairies, clubs séniors, etc. des clouds privés, avec sauvegardes auromatiques.

Nous débarquons parce que nos VPS sont sous CentOS 8 (et qu’il n’est plus libre fin 21) avec Nextcloud d’installer.
Nous avons décidé de remplacer par Debian (nous espérons avoir pris la bonne décision) :wink:
Je m’en occupe et normalement, je passe par SSH mais des fois, je passe par Filezilla en SFTP.
Attention, c’est tout nouveau et nous sommes loin d’être des pros.

Notre nouveau VPS (chez Hosteur) à un Debian 10 Buster simple.
C’est un VPS de test, donc pas d’inquiétude si ça plante.
Ce que j’ai déjà fait :

  • Mettre a jour debian OK
  • Création d’un nouvel utilisateur OK
  • Vérifier que iptable est installé OK
  • Changer le port d’écoute ssh OK
  • Garder les sessions SSH ouvertes plus longtemps OK
  • Installer fail2ban OK

Déjà, comment vérifier si fail2ban est correctement installé et comment le configurer proprement ?
Ensuite, avant d’installer Nextcloud, comment finir de sécuriser (s’il le faut) le VPS.

Pas de Yunohost de prévu et désiré.

Titre trop vague à mon avis.

Bonjour PascalHambourg ,

Que proposes-tu comme titre ?
Bien installer Debian sur un VPS.
.

Non, toujours aussi vague. Si tu cherches de l’aide sur la sécurisation de fail2ban ou nextcloud, mets-le dans le titre.

et debian ne propose pas de paquet nextcloud.

https://wiki.debian.org/Nextcloud

The Nextcloud server is currently not officially packaged for Debian

RE

Voir prochaine réponse.

Bonjour jcsm33

Je suis d’accord, nextcloud serveur sera installé ensuite, d’abord sécuriser.
Merci pour le lien.

Merci pour le changement de titre, j’espère que PascalHambourg sera content :wink:

J’espère que je je n’arrive pas trop longtemps après la bataille, mais pour fail2ban, ça dépend de ce que tu veux protéger avec. Généralement je me contente de protéger ssh, avec les paramètres standards. Si tu as changé le port ssh, il faut adapter le fichier /etc/fail2ban/jail.conf en conséquence:

[sshd]

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
port    = ssh # changer ici par le numéro de port désiré
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Puis systemctl restart fail2ban. Pour surveiller que ça marche bien, tu peux faire

root@serveur:~# fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

et

root@serveur:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     9878
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     798
   `- Banned IP list:   35.242.136.58

Pour le reste, restreindre l’authentification des connexions ssh au compte root à la seule méthode ‹ clé publique › est aussi une bonne idée.
Ensuite, ça dépendra des autres logiciels choisis pour Nextcloud: le serveur web (apache ou nginx), et le SGBD (mysql ou postgresql) (et aussi php). Leur sécurisation est assez largement documentée, il me semble.

Bonjour Sputnik93,

J’ai bien modifier /etc/fail2ban/jail.conf.
J’ai relancé fail2ban : systemctl restart fail2ban
Mais pour root@serveur:~# fail2ban-client status

root@cloud-ciuvr1n7:~# fail2ban-client status
Failed to access socket path: /var/run/fail2ban/fail2ban.sock. Is fail2ban running?

Je n’ai pas fail2ban.sock
Le problème ???

Alors soit le service est crashé au démarrage (ça peut être une erreur de syntaxe par exemple), vérifie avec systemctl status fail2ban et journalctl -u fail2ban.

Sinon il y a un couac dans la conf du fichier socket. Tu peux afficher le retour de systemctl cat fail2ban ?
Tu devrais avoir une ligne comme ça, dedans:

PIDFile=/var/run/fail2ban/fail2ban.pid

Il faut s’assurer que la valeur est la même que dans le fichier /etc/fail2ban/fail2ban.conf:

pidfile = /var/run/fail2ban/fail2ban.pid

Ou un simple problème de droit pour accéder au dossier qui stockera le fichier .pid (je commencerai même par là).

RE

Ce que j’ai fait :

ExecStop=/usr/bin/fail2ban-client stop
ExecReload=/usr/bin/fail2ban-client reload
PIDFile=/var/run/fail2ban/fail2ban.pid
Restart=on-failure
RestartPreventExitStatus=0 255

Et dans
Il faut s’assurer que la valeur est la même que dans le fichier /etc/fail2ban/fail2ban.conf :

pidfile = /var/run/fail2ban/fail2ban.pid

Sinon, je continue :

root@cloud-ciuvr1n7:~# systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2021-07-27 14:29:22 CEST; 51min ago
     Docs: man:fail2ban(1)
  Process: 57247 ExecStartPre=/bin/mkdir -p /var/run/fail2ban (code=exited, status=0/SUCCESS)
  Process: 57248 ExecStart=/usr/bin/fail2ban-server -xf start (code=exited, status=255/EXCEPTION)
 Main PID: 57248 (code=exited, status=255/EXCEPTION)

juil. 27 14:29:22 cloud-ciuvr1n7 systemd[1]: Starting Fail2Ban Service...
juil. 27 14:29:22 cloud-ciuvr1n7 systemd[1]: Started Fail2Ban Service.
juil. 27 14:29:22 cloud-ciuvr1n7 fail2ban-server[57248]:  Failed during configuration: File contains no section headers.
juil. 27 14:29:22 cloud-ciuvr1n7 fail2ban-server[57248]: file: '/etc/fail2ban/jail.d/1nf02m4c0253845714.conf', line: 2
juil. 27 14:29:22 cloud-ciuvr1n7 fail2ban-server[57248]: '<VirtualHost *:80>\n'
juil. 27 14:29:22 cloud-ciuvr1n7 fail2ban-server[57248]:  Async configuration of server failed
juil. 27 14:29:22 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Main process exited, code=exited, status=255/EXCEPTION
juil. 27 14:29:22 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Failed with result 'exit-code'.

Et :

root@cloud-ciuvr1n7:~# journalctl -u fail2ban
-- Logs begin at Mon 2021-06-28 11:43:08 CEST, end at Tue 2021-07-27 15:17:01 CEST. --
juin 28 15:01:05 cloud-ciuvr1n7 systemd[1]: /lib/systemd/system/fail2ban.service:12: PIDFile= references path below legacy directory /var/ru
juin 28 15:01:05 cloud-ciuvr1n7 systemd[1]: /lib/systemd/system/fail2ban.service:12: PIDFile= references path below legacy directory /var/ru
juin 28 15:01:05 cloud-ciuvr1n7 systemd[1]: /lib/systemd/system/fail2ban.service:12: PIDFile= references path below legacy directory /var/ru
juin 28 15:01:05 cloud-ciuvr1n7 systemd[1]: Starting Fail2Ban Service...
juin 28 15:01:05 cloud-ciuvr1n7 systemd[1]: Started Fail2Ban Service.
juin 28 15:01:06 cloud-ciuvr1n7 fail2ban-server[38767]: Server ready
juin 28 15:01:06 cloud-ciuvr1n7 systemd[1]: /lib/systemd/system/fail2ban.service:12: PIDFile= references path below legacy directory /var/ru
juil. 27 14:22:25 cloud-ciuvr1n7 systemd[1]: Stopping Fail2Ban Service...
juil. 27 14:22:26 cloud-ciuvr1n7 fail2ban-client[57191]: Shutdown successful
juil. 27 14:22:26 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Main process exited, code=killed, status=15/TERM
juil. 27 14:22:26 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Succeeded.
juil. 27 14:22:26 cloud-ciuvr1n7 systemd[1]: Stopped Fail2Ban Service.
juil. 27 14:22:26 cloud-ciuvr1n7 systemd[1]: Starting Fail2Ban Service...
juil. 27 14:22:26 cloud-ciuvr1n7 systemd[1]: Started Fail2Ban Service.
juil. 27 14:22:26 cloud-ciuvr1n7 fail2ban-server[57199]:  Failed during configuration: File contains no section headers.
juil. 27 14:22:26 cloud-ciuvr1n7 fail2ban-server[57199]: file: '/etc/fail2ban/jail.d/1nf02m4c0253845714.conf', line: 2
juil. 27 14:22:26 cloud-ciuvr1n7 fail2ban-server[57199]: '<VirtualHost *:80>\n'
juil. 27 14:22:26 cloud-ciuvr1n7 fail2ban-server[57199]:  Async configuration of server failed
juil. 27 14:22:26 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Main process exited, code=exited, status=255/EXCEPTION
juil. 27 14:22:26 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Failed with result 'exit-code'.
juil. 27 14:23:12 cloud-ciuvr1n7 systemd[1]: Starting Fail2Ban Service...
juil. 27 14:23:12 cloud-ciuvr1n7 systemd[1]: Started Fail2Ban Service.
juil. 27 14:23:12 cloud-ciuvr1n7 fail2ban-server[57205]:  Failed during configuration: File contains no section headers.
juil. 27 14:23:12 cloud-ciuvr1n7 fail2ban-server[57205]: file: '/etc/fail2ban/jail.d/1nf02m4c0253845714.conf', line: 2
juil. 27 14:23:12 cloud-ciuvr1n7 fail2ban-server[57205]: '<VirtualHost *:80>\n'
juil. 27 14:23:12 cloud-ciuvr1n7 fail2ban-server[57205]:  Async configuration of server failed
juil. 27 14:23:12 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Main process exited, code=exited, status=255/EXCEPTION
juil. 27 14:23:12 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Failed with result 'exit-code'.
juil. 27 14:24:08 cloud-ciuvr1n7 systemd[1]: Starting Fail2Ban Service...
juil. 27 14:24:08 cloud-ciuvr1n7 systemd[1]: Started Fail2Ban Service.
juil. 27 14:24:08 cloud-ciuvr1n7 fail2ban-server[57213]:  Failed during configuration: File contains no section headers.
juil. 27 14:24:08 cloud-ciuvr1n7 fail2ban-server[57213]: file: '/etc/fail2ban/jail.d/1nf02m4c0253845714.conf', line: 2
juil. 27 14:24:08 cloud-ciuvr1n7 fail2ban-server[57213]: '<VirtualHost *:80>\n'
juil. 27 14:24:08 cloud-ciuvr1n7 fail2ban-server[57213]:  Async configuration of server failed
juil. 27 14:24:08 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Main process exited, code=exited, status=255/EXCEPTION
juil. 27 14:24:08 cloud-ciuvr1n7 systemd[1]: fail2ban.service: Failed with result 'exit-code'.
juil. 27 14:29:22 cloud-ciuvr1n7 systemd[1]: Starting Fail2Ban Service...
juil. 27 14:29:22 cloud-ciuvr1n7 systemd[1]: Started Fail2Ban Service.
juil. 27 14:29:22 cloud-ciuvr1n7 fail2ban-server[57248]:  Failed during configuration: File contains no section headers.
juil. 27 14:29:22 cloud-ciuvr1n7 fail2ban-server[57248]: file: '/etc/fail2ban/jail.d/1nf02m4c0253845714.conf', line: 2
juil. 27 14:29:22 cloud-ciuvr1n7 fail2ban-server[57248]: '<VirtualHost *:80>\n'
lines 1-42

C’est donc la 1ère hypothèse. Apparemment la syntaxe de ton fichier /etc/fail2ban/jail.d/1nf02m4c0253845714.conf ne lui plaît pas (« file contains no section headers »)

On dirait d’ailleurs le début d’un fichier de conf d’un site apache (" <VirtualHost *:80>"), une erreur de copier/coller ?

RE

Je suis allé vérifier, exact pour le fichier d’un site apache.
J’ai viré puis :

root@cloud-ciuvr1n7:~# systemctl restart fail2ban
root@cloud-ciuvr1n7:~# fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

root@cloud-ciuvr1n7:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

Merci pour la soluce.
Tu as dit aussi :

Je cherche un petit tuto car je n’ai jamais fait.

Le principe est d’utiliser le chiffrement asymétrique, avec une clé privée et une clé publique, c’est assez simple à mettre en oeuvre .

Tu peux suivre ce tuto par exemple, il a l’air correct.
Attention, ne perd pas ta clé privée ^^

RE

Je te remercie, je vais regarder à tête reposée et je reviens rendre compte.

Bonjour,

Personnellement, j’ai mis en place une connexion par clé sur un compte avec accès sudo et j’ai désactivé l’accès à root.

Et pense à mettre ton ip en whitelist dans fail2ban avant d’essayer de mettre en place la connexion par clé, juste au cas où ^^.

RE

OK c’est noté, merci.