Skip to main content
Cybersécurité4 juillet 20267 min read

Linux/Windows Serveur de Sécurisation : Guide étape par étape pour les Configurations de Sécurité

Rudra Chauhan, Senior Systems Architect

Linux/Windows Serveur de Sécurisation : Guide étape par étape pour les Configurations de Sécurité

Linux/Windows Serveur de Sécurisation : Guide étape par étape pour les Configurations de Sécurité

La sécurisation des serveurs est un processus continu qui commence par une configuration de base solide et évolue avec l'intelligence de menace. Ce guide vous guide à travers la sécurisation des surfaces d'attaque les plus critiques — SSH, TLS, pare-feu, et en-têtes de sécurité HTTP — sur les deux plateformes Linux et Windows, et relie ensuite tout cela avec un flux de travail de mitigation de risque répétable.


Configuration du Serveur SSH - Meilleures Pratiques pour les Connexions Sécurisées

Réponse directe : Sécurisez sshd en désactivant les protocoles legacy, en imposant l'authentification basée sur les clés, en limitant l'accès, et en appliquant des paramètres cryptographiques solides.

Étapes de Sécurisation de Base (Linux)

bash
# /etc/ssh/sshd_config – remplacez le fichier entier ou ajoutez ces lignes
Port 2222                                 # port non standard réduit les scans automatiques
Protocol 2
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes
AuthenticationMethods publickey
AllowUsers alice bob@192.0.2.0/24          # restreint par utilisateur et par CIDR source
MaxAuthTries 3
LoginGraceTime 20
ClientAliveInterval 300
ClientAliveCountMax 2
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com

Rechargez : systemctl reload sshd

Serveur OpenSSH Windows (Win32-OpenSSH)

powershell
# C:\ProgramData\ssh\sshd_config
Port 2222
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey
AllowUsers alice,bob
MaxAuthTries 3
LoginGraceTime 20
ClientAliveInterval 300
ClientAliveCountMax 2
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

Redémarrez le service : Restart-Service sshd

Tableau de Référence Rapide – Paramètres de Sécurisation SSH

ParamètreValeur recommandéeRaison
Port2222 (ou tout >1024)Réduit le bruit des scanners de bots
PermitRootLoginnoPrévient la compromission directe de la racine
PasswordAuthenticationnoForce l'authentification basée sur les clés
AuthenticationMethodspublickeyGarantit un contrôle MFA-style
Cipherschacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.comCiphers AEAD modernes uniquement
KexAlgorithmscurve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256Échange de clés sécurisé à l'avance
AllowUsersalice bob@192.0.2.0/24Segment de réseau de moindre privilège

Aide en surplomb : Générez un sshd_config prêt à coller avec le Générateur de Config SSH et validez la syntaxe via sshd -t.


Configuration SSL/TLS Sécurisée – Mise en œuvre des Meilleures Pratiques pour l'Encryption

Réponse directe : Déployez TLS 1.2 + 1.3 uniquement, utilisez des ensembles de ciphers solides, activez HSTS, OCSP stapling, et imposez la transparence de certificat.

Exemple Nginx (Linux)

nginx
# /etc/nginx/conf.d/ssl-hardening.conf
server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # Protocole & Ensemble de ciphers
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256';
    ssl_prefer_server_ciphers off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
    resolver_timeout 5s;

    # HSTS (1 an, inclure les sous-domaines, précharger)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" toujours;

    # En-têtes de sécurité (voir la section suivante)
    include /etc/nginx/security-headers.conf;
}

IIS (Windows) – Hardening PowerShell

powershell
# Désactivez TLS 1.0/1.1, activez 1.2/1.3
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server' -Name 'Enabled' -Value 0
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server' -Name 'Enabled' -Value 0
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'Enabled' -Value 1
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -Name 'Enabled' -Value 1

# Limitez les ensembles de ciphers (exemples : seuls AES-GCM & CHACHA20)
$ciphers = @(
    'TLS_AES_256_GCM_SHA384',
    'TLS_CHACHA20_POLY1305_SHA256',
    'TLS_AES_128_GCM_SHA256'
)
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers' -Name 'Functions' -Value ($ciphers -join ',')

# Activez HSTS via web.config (ajoutez à la racine du site)
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

Référence

  • RFC 7519 de l'IETF – Jeton Web JSON (JWT) utilisé pour l'authentification sans état ; assurez-vous que les jetons sont transmis uniquement sur des canaux TLS protégés.

Règles de Pare-feu – Configuration de iptables, nftables, ufw, et Pare-feu Windows pour un Accès Réseau Sécurisé

Réponse directe : Adoptez une posture de refus par défaut, autorisez uniquement les ports d'entrée requis (SSH, HTTPS, gestion), et enregistrez les paquets rejetés pour audit.

Linux – nftables (moderne, atomique)

bash
#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        iif "lo" accept
        ct state established,related accept
        # SSH (port non standard)
        tcp dport 2222 ct state new limit rate 5/minute accept
        # HTTP/HTTPS
        tcp dport {80,443} accept
        # ICMP (taux limité)
        icmp type echo-request limit rate 1/second accept
        # Enregistrez & rejetez
        log prefix "DROP_IN: " level info
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Linux – UFW (Ubuntu/Debian amical)

bash
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp comment 'SSH port sécurisé'
ufw allow 80,443/tcp comment 'Traffic web'
ufw limit 2222/tcp comment 'Taux limité SSH'
ufw enable

Pare-feu Windows – PowerShell (profils Domaine/Privé)

powershell
# Réinitialisez à la configuration de base
Set-NetFirewallProfile -All -DefaultInboundAction Block -DefaultOutboundAction Allow -NotifyDisplayEnabled False

# Autorisez SSH (port non standard)
New-NetFirewallRule -DisplayName "Allow SSH 2222" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow -Profile Domain,Private -Enabled True

# Autorisez HTTP/HTTPS
New-NetFirewallRule -DisplayName "Allow HTTP/HTTPS" -Direction Inbound -Protocol TCP -LocalPort 80,443 -Action Allow -Profile Domain,Private -Enabled True

# Activez l'enregistrement des paquets rejetés
Set-NetFirewallProfile -All -LogFileName "%systemroot%\system32\LogFiles\Firewall\pfirewall.log" -LogMaxSizeKilobytes 4096 -LogAllowed False -LogBlocked True -LogIgnored True

Aide en surplomb : Utilisez le Générateur de Règles de Pare-feu pour produire les commandes exactes iptables, nftables, ufw, ou Pare-feu Windows pour votre environnement.


En-têtes de Sécurité – Mise en œuvre de CSP, HSTS, et Autres En-têtes Essentiels pour les Applications Web Sécurisées

Réponse directe : Déployez un ensemble d'en-têtes de défense en profondeur sur chaque réponse HTTP : Content-Security-Policy, Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, et Cross-Origin-Opener-Policy.

Exemple Nginx (/etc/nginx/security-headers.conf)

nginx
# Politique de Sécurité du Contenu – ajustez les sources à vos actifs
add_header Content-Security-Policy
    "default-src 'self';
     script-src 'self' 'nonce-$request_id' https://cdn.example.com;
     style-src  'self' 'nonce-$request_id' https://fonts.googleapis.com;
     img-src    'self' data: https://cdn.example.com;
     font-src   'self' https://fonts.gstatic.com;
     connect-src 'self' https://api.example.com;
     frame-ancestors 'none';
     base-uri 'self';
     form-action 'self';"
    toujours;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" toujours;
add_header X-Content-Type-Options "nosniff" toujours;
add_header X-Frame-Options "DENY" toujours;
add_header Referrer-Policy "strict-origin-when-cross-origin" toujours;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" toujours;
add_header Cross-Origin-Opener-Policy "same-origin" toujours;
add_header Cross-Origin-Resource-Policy "same-origin" toujours;

Apache (/etc/apache2/conf-available/security-headers.conf)

apache
Header toujours set Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-%{UNIQUE_ID}e' https://cdn.example.com; style-src 'self' 'nonce-%{UNIQUE_ID}e' https://fonts.googleapis.com; img-src 'self' data: https://cdn.example.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://api.example.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self';"
Header toujours set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header toujours set X-Content-Type-Options "nosniff"
Header toujours set X-Frame-Options "DENY"
Header toujours set Referrer-Policy "strict-origin-when-cross-origin"
Header toujours set Permissions-Policy "geolocation=(), microphone=(), camera=()"
Header toujours set Cross-Origin-Opener-Policy "same-origin"
Header toujours set Cross-Origin-Resource-Policy "same-origin"

IIS – web.config (ajoutez sous <system.webServer>)

xml
<httpProtocol>
  <customHeaders>
    <add name="Content-Security-Policy" value="default-src 'self'; script-src 'self' 'nonce-{RANDOM}' https://cdn.example.com; style-src 'self' 'nonce-{RANDOM}' https://fonts.googleapis.com; img-src 'self' data: https://cdn.example.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://api.example.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self';" />
    <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
    <add name="X-Content-Type-Options" value="nosniff" />
    <add name="X-Frame-Options" value="DENY" />
    <add name="Referrer-Policy" value="strict-origin-when-cross-origin" />
    <add name="Permissions-Policy" value="geolocation=(), microphone=(), camera=()" />
    <add name="Cross-Origin-Opener-Policy" value="same-origin" />
    <add name="Cross-Origin-Resource-Policy" value="same-origin"

Ce guide vous a-t-il été utile ?

Vous dépannez ou testez ce guide ?

Teksolvr propose 97 outils gratuits pour inspecter les configurations DNS, valider les certificats DKIM, tester les ports ouverts, vérifier les listes noires de serveurs et effectuer des calculs.