Linux : Securiser un serveur Linux
Désactiver l'accès SSH Root
Editer le fichier de configuration SSH
sudo nano /etc/ssh/sshd_config
- Vérifier la présence ou non de cette ligne :
- PermitRootLogin yes
- La remplacer par :
- PermitRootLogin no
- Paramétrer le protocol SSH (Imposer le protocol 2 uniquement)
- Protocol 2
Enregistrer le fichier et redémarrer le service SSHD
sudo systemctl restart sshd
Utilisation d'une clé SSH pour l'authentification
Générer la clé SSH sur la station locale pour créer une paire de clé Privée/Publique
ssh-keygen -t rsa -b 4096
Copier la clé publique sur le serveur distant
ssh-copy-id username@server_ip
Désactiver l'authentification SSH par mot de passe
Editer le fichier de configuration SSH
sudo nano /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
Redémarrer le service SSH
sudo systemctl restart sshd
Configurer une politique de mots de passe complexe
Editer une fichier de configuration de la politique de mot de passe
sudo nano /etc/security/pwquality.conf
Exemple de paramètres
minlen = 12 minclass = 3
- minlen : 12 caractères
- minclass : 3 types de caractères différents
Activer les mises à jours automatiques sur Ubuntu
sudo apt install unattended-upgrades
Configurer le Firewall
Exemple
sudo apt install ufw
sudo ufw allow 22 # Allow SSH
sudo ufw allow 80 # Allow HTTP
sudo ufw allow 443 # Allow HTTPS
sudo ufw enable
Configurer Fail2ban (Détection d'intrusion)
Installation de Fail2ban
sudo apt install fail2ban
Edition de la configuration
sudo nano /etc/fail2ban/jail.conf
Exemple pour la surveillance du service SSH
[sshd]
enabled = true
maxretry = 5
bantime = 3600
- Block l'IP pendant 1 heure après 5 échecs d'authentification
Liens
Désactiver les services non nécessaires
Listing des services actifs
sudo systemctl list-unit-files --type=service --state=enabled
Désactiver les services non nécessaires
sudo systemctl disable service_name
Vérifier les droits d'accès aux fichiers de configuration importants
Exemple
sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 640 /var/log/auth.log
chattr / lsattr
- chattr modifie les attributs étendus
- lsattr liste les attributs étendus de sécurité des répertoires/fichiers
Liens
Linux : Commande chattr / lsattr
Activer le monitoring & les logs
(Sera l'objet d'une page dédiée plus tard)
- Utiliser des outils comme Rsyslog ou (plus centralisé) Elasticsearch, Logstash, Kibana
Configurer Auditd
sudo apt install auditd
Ajout des règles dans le fichier /etc/audit/audit.rules pour surveiller les fichiers importants
-w /etc/passwd -p wa -k passwd_changes
Redémarrage du service auditd
sudo systemctl restart auditd
Paramètres du Kernel
Edition du fichier /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
Application des paramètres
sudo sysctl -p
Limitation des ressources systèmes
Edition du fichier /etc/security/limits.conf
sudo nano /etc/security/limits.conf
Paramètres
* soft nproc 4096
* hard nproc 8192
Outils de détection de failles de sécurité
Lynis
sudo apt install lynis
Scan du système
sudo lynis audit system
Antivirus
Clamav
sudo apt install clamav
Mise à jour & scan
sudo freshclam
sudo clamscan -r /directory_to_scan
Authentification multi-facteurs MFA
Google Authenticator
sudo apt install libpam-google-authenticator
Paramétrage
google-authenticator
Activation de l'authentification par mot de passe + MFA obligatoires dans la configuration PAM
sudo nano /etc/pam.d/sshd
- Ajouter
auth required pam_google_authenticator.so
Activation du MFA dans la configuration SSH
sudo nano /etc/ssh/sshd_config
- Ajouter
UsePAM yes
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
- Redémarrage du service
sudo systemctl restart sshd
Ces paramétrages activeront à la fois l'authentification par mot de passe + MFA même si l'authentification par partage de clé est activé.
Paramétrages Clé SSH + MFA
Activation du MFA dans la configuration PAM
sudo nano /etc/pam.d/sshd
- Ajouter
auth required pam_google_authenticator.so
Activation du MFA dans la configuration SSH
sudo nano /etc/ssh/sshd_config
- Ajouter
UsePAM yes
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
sudo nano /etc/pam.d/sshd
- Commenter
# Standard Un*x authentication.
# @include common-auth
- Redémarrage du service SSHD
sudo systemctl restart sshd
Liens
https://www.it-connect.fr/linux-comment-activer-le-mfa-sur-un-acces-ssh/
https://www.tech2tech.fr/configurer-la-double-authentification-ssh-sur-ubuntu-server/
Observations
Albator
16/03/2024 à 14:32
Bonjour
il faut mettre à jour votre tuto pour préciser deux choses :
– à partir de Debian 12, dans sshd_config c’est l’option « KbdInteractiveAuthentication » qu’il faut définir sur « yes » (à la place de « ChallengeResponseAuthentication » qui n’apparaît plus)
– quand on utilise l’authentification par clé, il faut commenter dans le fichier /etc/pam.d/sshd l’option « @include common-auth » du paragraphe « # Standard Un*x authentication. » Sans quoi le mot de passe est demandé.
Limitation des accès Sudo
Edition du fichier sudoers
sudo visudo
Définition des droits spécifiques en fonction des utilisateurs
username ALL=(ALL) NOPASSWD: /path/to/specific_command
File Integrity Monitoring (FIM)
- Détecte les modifications non autorisées sur les fichiers critiques
Installation de AIDE
sudo apt install aide
Initialisation de la base AIDE
sudo aideinit
Planification des contrôles
sudo crontab -e
0 3 * * * /usr/bin/aide --check
Liens
https://help.ubuntu.com/community/FileIntegrityAIDE
DNS Security Extensions (DNSSEC)
Activation de DNSSEC dans named.conf
dnssec-enable yes; dnssec-validation auto;
Sur Ubuntu client DNS
sudo nano /etc/systemd/resolved.conf
Exemple de configuration
[Resolve]
# Some examples of DNS servers which may be used for DNS= and FallbackDNS=:
# Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
# Google: 8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
DNS=9.9.9.9 149.112.112.112
FallbackDNS=192.168.1.1
LLMNR=no
MulticastDNS=no
DNSSEC=allow-downgrade
DNSOverTLS=opportunistic
Cache=no-negative
DNSStubListener=yes
ReadEtcHosts=yes
Si vous êtes sûrs de votre serveur DNS, vous pouvez passer l'option DNSSEC=true & DNSOverTLS=true
- Recharger la configuration DNS
sudo systemctl restart systemd-resolved
- Test
sudo resolvectl status
root@linux:~# resolvectl status
Global
Protocols: -LLMNR -mDNS DNSOverTLS=opportunistic DNSSEC=allow-downgrade/unsupported
resolv.conf mode: stub
Current DNS Server: 9.9.9.9
DNS Servers: 9.9.9.9 149.112.112.112
Fallback DNS Servers: 192.168.1.1
Link 2 (ens18)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS DNSOverTLS=opportunistic DNSSEC=allow-downgrade/supported
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1
root@linux:~#
resolvectl query www.yakakliker.org
root@linux:~# resolvectl query www.yakakliker.org
www.yakakliker.org: 194.164.204.65 -- link: ens18
-- Information acquired via protocol DNS in 478.4ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: yes
-- Data from: network
root@linux:~#
Liens
https://wiki.archlinux.org/title/Systemd-resolved_(Fran%C3%A7ais)
Host-Based Intrusion Detection System (HIDS)
Installation de OSSEC
sudo apt install ossec-hids
Liens
https://bobcares.com/blog/install-ossec-ubuntu-like-a-pro/
https://www.ossec.net/docs/docs/manual/installation/installation-requirements.html
Rkhunter (Analyseur de rootkits)
Installation
sudo apt-get install rkhunter
Configuration /etc/default/rkhunter
# Defaults for rkhunter automatic tasks
# sourced by /etc/cron.*/rkhunter and /etc/apt/apt.conf.d/90rkhunter
#
# This is a POSIX shell fragment
#
# Set this to yes to enable rkhunter daily runs
# (default: false)
CRON_DAILY_RUN="yes"
# Set this to yes to enable rkhunter weekly database updates
# (default: false)
CRON_DB_UPDATE="yes"
# Set this to yes to enable reports of weekly database updates
# (default: false)
DB_UPDATE_EMAIL="false"
# Set this to the email address where reports and run output should be sent
# (default: root)
REPORT_EMAIL="webmaster@yakakliker.org"
# Set this to yes to enable automatic database updates
# (default: false)
APT_AUTOGEN="yes"
# Nicenesses range from -20 (most favorable scheduling) to 19 (least favorable)
# (default: 0)
NICE="0"
# Should daily check be run when running on battery
# powermgmt-base is required to detect if running on battery or on AC power
# (default: false)
RUN_CHECK_ON_BATTERY="false"
Liens
Linux : Sécuriser avec Rkhunter
Liens
https://jay75chauhan.medium.com/%EF%B8%8Fsecure-linux-server-1bbbaaa465d6