Dans cet article, nous allons détailler les étapes pour installer et sécuriser un serveur Debian 12. Nous aborderons l’installation de divers services et outils, ainsi que la configuration de mesures de sécurité pour protéger votre serveur. Chaque section contient les commandes nécessaires et des explications sur leur utilisation.

Sommaire

  1. Installation et configuration de Auditd
  2. Configuration de Rsyslog
  3. Configuration de GRUB
  4. Configuration de Iptables
  5. Installation et configuration de Sudo
  6. Gestion des fichiers sensibles
  7. Séparer les répertoires temporaires des utilisateurs avec PAM
  8. Veille et Maintenance
  9. Sécurisation du SSH
  10. Installation de Fail2Ban
  11. Paramètres de Sécurité du Noyau Linux
  12. Installation et Sécurisation de Docker

1. Installation et configuration de Auditd

Installation d’Auditd

Auditd est un démon de suivi des événements de sécurité. Il permet de surveiller et d’enregistrer les actions des utilisateurs et des processus.

apt-get install auditd
systemctl enable auditd
systemctl start auditd

Configuration des règles d’audit

Éditez le fichier de règles pour spécifier les événements à surveiller.

nano /etc/audit/rules.d/audit.rules

Ajoutez les règles suivantes :

-a always,exit -F arch=b64 -S execve
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k actions
-w /var/log/faillog -p wa -k auth
-w /var/log/lastlog -p wa -k auth
-a always,exit -F path=/usr/bin/chmod -F perm=x -F auid>=1000 -F auid!=4294967295 -k perm_mod
-a always,exit -F path=/usr/bin/chown -F perm=x -F auid>=1000 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S connect -S accept -k network

Configuration d’auditd.conf

Modifiez le fichier de configuration principal d’auditd pour gérer la rotation des logs.

nano /etc/audit/auditd.conf

Ajoutez les paramètres suivants :

max_log_file = 8
num_logs = 5
max_log_file_action = ROTATE

Redémarrez le service pour appliquer les modifications.

systemctl restart auditd
systemctl status auditd

Pour vérifier si la configuration est bien prise en compte :

nano /etc/audit/audit.rules

2. Configuration de Rsyslog

Rsyslog est un démon de journalisation qui permet de gérer et de centraliser les logs système.

Installation de Rsyslog

apt install rsyslog

Configuration de Rsyslog

Éditez le fichier de configuration pour définir les règles de journalisation.

nano /etc/rsyslog.conf

Ajoutez les lignes suivantes pour configurer les fichiers de log spécifiques :

*.*;auth,authpriv.none          -/var/log/syslog
daemon.*                        -/var/log/daemon.log
lpr.*                           -/var/log/lpr.log

Redémarrez le service pour appliquer les modifications.

systemctl restart rsyslog
systemctl status rsyslog

3. Configuration de GRUB

GRUB est le chargeur de démarrage utilisé par Debian pour initialiser le système.

Vérification des failles du CPU

lscpu

Configuration de GRUB

Éditez le fichier de configuration de GRUB pour ajouter des options de sécurité.

nano /etc/default/grub

Ajoutez ou modifiez la ligne suivante :

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash page_poison=on pti=on slab_nomerge=yes slub_debug=FZP spec_store_bypass_disable=seccomp spectre_v2=on mce=0 page_alloc.shuffle=1 rng_core.default_quality=500 iommu=force"

Appliquez les modifications et redémarrez le serveur.

update-grub
reboot

4. Configuration de Iptables

Iptables est un outil de filtrage des paquets pour le pare-feu.

Installation d’Iptables

systemctl status ufw
apt install iptables iptables-persistent

Configuration des règles Iptables

Éditez le fichier des règles temporaires.

nano /etc/iptables.test.rules

Ajoutez les règles suivantes :

*filter

# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allows all outbound traffic
-A OUTPUT -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
# -A INPUT -p tcp --dport 80 -j ACCEPT
# -A INPUT -p tcp --dport 443 -j ACCEPT

# Allow port docker for local
-A INPUT -i lo -p tcp --dport 2375 -j ACCEPT
-A INPUT -s 127.0.0.1 -p tcp --dport 2375 -j ACCEPT
-A INPUT -s 10.0.0.0/8 -p tcp --dport 2375 -j ACCEPT
-A INPUT -s 172.16.0.0/12 -p tcp --dport 2375 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -p tcp --dport 2375 -j ACCEPT

# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Allow SSH connections on port 2121
-A INPUT -p tcp --dport 2121 -j ACCEPT

# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

Appliquez les règles et enregistrez-les pour les rendre persistantes.

iptables-restore < /etc/iptables.test.rules
iptables -L
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

5. Installation et configuration de Sudo

Sudo permet à des utilisateurs spécifiques d’exécuter des commandes en tant qu’autres utilisateurs, y compris root.

Installation de Sudo

apt-get update
apt-get install sudo

Configuration des utilisateurs sudo

Ajoutez un groupe et un utilisateur sudo.

groupadd sudoers
useradd -s /bin/bash -d /home/xxx -m -G sudo xxx
usermod -aG sudoers xxx

Configuration de sudoers

Éditez le fichier sudoers pour définir les permissions.

nano /etc/sudoers

Ajoutez les lignes suivantes :

# Directives de sécurité
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults    requiretty
Defaults    use_pty
Defaults    ignore_dot
Defaults    umask=0077

# User privilege specification
root    ALL=(ALL:ALL) ALL
xxx     ALL=(ALL:ALL) /usr/bin/apt-get, /usr/bin/systemctl, /usr/bin/docker

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

6. Gestion des Fichiers Sensibles

Surveillance des fichiers critiques

Utilisez auditctl pour surveiller les fichiers critiques.

auditctl -w /etc/passwd -p war -k audit_passwd

Propriétés des fichiers sensibles

Assurez-vous que les fichiers sensibles appartiennent à root et au groupe root.

chown root /etc/shadow
chgrp root /etc/shadow

7. Séparer les ré

pertoires temporaires des utilisateurs avec PAM

Installation de libpam-tmpdir

Libpam-tmpdir permet de créer des répertoires temporaires distincts pour chaque utilisateur.

apt-get install libpam-tmpdir

Configuration de PAM

Éditez le fichier de session commune de PAM.

nano /etc/pam.d/common-session

Ajoutez la ligne suivante :

session optional pam_tmpdir.so

Redémarrez le service SSH pour appliquer les modifications.

systemctl restart sshd

8. Veille et Maintenance

Installation des mises à jour automatiques

Installez le package unattended-upgrades pour automatiser les mises à jour de sécurité.

apt-get install unattended-upgrades

Configuration des mises à jour automatiques

Éditez le fichier de configuration des mises à jour automatiques.

nano /etc/apt/apt.conf.d/50unattended-upgrades

Ajoutez les lignes suivantes :

Unattended-Upgrade::Allowed-Origins {
      "${distro_id}:${distro_codename}";
      "${distro_id}:${distro_codename}-security";
      // "${distro_id}:${distro_codename}-updates";
      // "${distro_id}:${distro_codename}-proposed";
      // "${distro_id}:${distro_codename}-backports";
};

Test des mises à jour

Testez la configuration des mises à jour automatiques.

dpkg-reconfigure -plow unattended-upgrades
unattended-upgrade --dry-run
tail -f /var/log/unattended-upgrades/unattended-upgrades.log

9. Sécurisation du SSH

Configuration de SSH

Utilisez SSH pour sécuriser l’accès à votre serveur. Ajoutez une clé publique pour l’utilisateur xxx.

su xxx
mkdir ~/.ssh
echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA/5ykU14M0wim5vPSz2vcb4DOP6zju/nyMJPPopjZEc xxx' >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
su root
passwd xxx
getent passwd sddm

Configuration de sshd

Modifiez la configuration de SSH pour améliorer la sécurité.

nano /etc/ssh/sshd_config

Ajoutez ou modifiez les lignes suivantes :

AllowUsers xxx
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM no
Protocol 2
ClientAliveInterval 180
MaxAuthTries 3
PermitEmptyPasswords no
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
HostKeyAlgorithms ecdsa-sha2-nistp256,ssh-ed25519
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
MACs hmac-sha2-512,hmac-sha2-256
AllowTcpForwarding no
AllowAgentForwarding no
X11Forwarding no
port 2121
LogLevel VERBOSE

Redémarrez le service SSH pour appliquer les modifications.

systemctl restart sshd

10. Installation de Fail2Ban

Fail2Ban est un outil qui surveille les logs et bannit les adresses IP suspectes.

Installation de Fail2Ban

apt install fail2ban python3-systemd

Configuration de Fail2Ban

Copiez le fichier de configuration par défaut et éditez-le.

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local

Ajoutez les paramètres suivants :

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]

enabled = true port = 2121

Redémarrez Fail2Ban et vérifiez son statut.

systemctl restart fail2ban
systemctl status fail2ban
fail2ban-client status
fail2ban-client status sshd

11. Paramètres de Sécurité du Noyau Linux

Configuration des paramètres de sécurité

Appliquez et vérifiez les paramètres de sécurité du noyau Linux.

sysctl -p
echo "vm.max_map_count = 262144" | sudo tee -a /etc/sysctl.d/99-sysctl.conf
sudo sysctl --system
reboot

12. Installation et Sécurisation de Docker

Docker est une plateforme de conteneurisation qui simplifie le déploiement des applications.

Configuration de l’environnement

Modifiez le fichier hosts et l’environnement.

sudo nano /etc/hosts

Ajoutez la ligne suivante :

127.0.0.1 lombardandco.fr
sudo nano /etc/environment

Ajoutez la ligne suivante :

HOST=lombardandco.fr

Appliquez les modifications.

export HOST=lombardandco.fr

Configuration de Docker avec Remote TLS

Créez les certificats et configurez Docker.

mkdir -p /docker/tls
cd /docker/tls

# Créer la clé et le certificat de l'autorité de certification (CA)
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem

# Créer la clé et le certificat du serveur
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1,IP:51.159.97.59 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

# Créer la clé et le certificat du client
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf

# Supprimer les fichiers inutiles et sécuriser les clés
rm -v client.csr server.csr extfile.cnf extfile-client.cnf
sudo chmod -v 0400 ca-key.pem key.pem server-key.pem
sudo chmod -v 0444 ca.pem server-cert.pem cert.pem

chown 100000:100000 -R *

Installation de Docker

Ajoutez la clé GPG officielle de Docker et le dépôt.

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run --rm hello-world
sudo docker run -it --rm -d -p 80:80 --name web nginx
sudo docker stop web

Configuration du service Docker

Modifiez le fichier de service Docker pour ajouter les options de démarrage.

sudo nano /etc/systemd/system/multi-user.target.wants/docker.service

Retirez -H fd:// et ajoutez :

ExecStart=/usr/bin/dockerd  --containerd=/run/containerd/containerd.sock

Rechargez les démons systemd et configurez Docker.

sudo systemctl daemon-reload
mkdir -p /docker/data
sudo nano /etc/docker/daemon.json

Ajoutez les paramètres suivants :

{
  "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"],
  "tls": true,
  "tlscert": "/docker/tls/server-cert.pem",
  "tlskey": "/docker/tls/server-key.pem",
  "tlscacert":

 "/docker/tls/ca.pem",
  "tlsverify":true,
  "debug": false,
  "data-root" : "/docker/data/",
  "live-restore": true,
  "no-new-privileges": true,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3",
    "labels": "production_status",
    "env": "os,customer"
  },
  "icc": true,
  "userns-remap": "xxx"
}

Appliquez les permissions et redémarrez Docker.

sudo mkdir -p /docker/data/100000.100000
sudo chmod 777 /docker/ -R
sudo chown 100000:100000 /docker/data/ -R
sudo chmod 700 /docker/data/ -R
sudo chown 100000:100000 /docker/tls -R
sudo systemctl restart docker
sudo systemctl status docker

Pour voir les erreurs qui ne sont pas dans les logs Docker :

sudo tail -f /var/log/syslog
sudo tail -f /var/log/syslog | grep dockerd

Limitation des capacités Docker

Ajoutez les directives suivantes dans vos fichiers docker-compose.yml pour limiter les capacités des conteneurs Docker :

cap_drop:
  - ALL
cap_add:
  - NET_BIND_SERVICE

Limitation avec Seccomp

Vérifiez la prise en charge de Seccomp :

cat /proc/self/status | grep Seccomp

Vous devriez voir une réponse indiquant que Seccomp est activé. Téléchargez le profil par défaut de Seccomp et configurez-le dans vos fichiers docker-compose.yml :

mkdir -p /docker/dockerUser/seccomp_profils
wget https://raw.githubusercontent.com/moby/moby/master/profiles/seccomp/default.json -O /docker/dockerUser/seccomp_profils/default.json

Ajoutez ceci dans vos fichiers docker-compose.yml :

security_opt:
  - seccomp=/docker/dockerUser/seccomp_profils/default.json

Création du réseau Docker frontend

Créez un réseau Docker pour isoler vos conteneurs :

docker network create frontend

Installation de Traefik

Téléchargez et installez Traefik, un reverse proxy moderne et flexible :

# Téléchargez et décompressez le fichier, puis uploadez-le sur le serveur
touch .certs/acme.json
chmod 600 ./certs/acme.json

sudo chown 100000:100000 /docker/compose/perso/traefik/ -R
sudo groupadd -g 100000 xxx-group
sudo usermod -aG xxx-group xxx

Reconnectez-vous et lancez Traefik :

sudo docker compose up -d

Installation de CrowdSec

Téléchargez et installez CrowdSec pour une protection collaborative contre les cybermenaces :

# Téléchargez et décompressez le fichier, puis uploadez-le sur le serveur
sudo docker compose up -d
alias cscli='docker exec -t crowdsec cscli'
cscli bouncers add traefik-bouncer
cscli collections install crowdsecurity/base-http-scenarios
cscli collections install crowdsecurity/nextcloud
cscli scenarios install aidalinfo/tcpudp-flood-traefik

Testez l’intégration et configurez le tableau de bord CrowdSec en vous inscrivant sur CrowdSec.


Ce guide complet devrait vous aider à configurer et sécuriser efficacement votre serveur Debian 12. N’hésitez pas à adapter les configurations selon vos besoins spécifiques et à consulter les documentations officielles pour des informations supplémentaires.