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
- Installation et configuration de Auditd
- Configuration de Rsyslog
- Configuration de GRUB
- Configuration de Iptables
- Installation et configuration de Sudo
- Gestion des fichiers sensibles
- Séparer les répertoires temporaires des utilisateurs avec PAM
- Veille et Maintenance
- Sécurisation du SSH
- Installation de Fail2Ban
- Paramètres de Sécurité du Noyau Linux
- 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.