Aller au contenu
Sécurité medium

SysWarden : protéger rapidement un serveur Linux exposé

14 min de lecture

SysWarden réduit très vite l’exposition d’un serveur Linux connecté à Internet. Il installe une couche de défense réseau fondée sur le pare-feu, des blocklists, du blocage ASN, du géoblocage, Fail2ban et, si besoin, WireGuard pour masquer les accès d’administration. Ce n’est pas un SIEM ni un IDS complet. C’est un bouclier périmétrique léger pour filtrer tôt une partie du bruit Internet.

  • Comprendre à quoi sert SysWarden et ce qu’il ne fait pas
  • Installer SysWarden sur un serveur Linux en mode interactif ou automatisé
  • Configurer les options clés : whitelist, blocklists, ASN, géoblocage, WireGuard
  • Vérifier que le déploiement fonctionne et gérer les IP au quotidien
  • Choisir un profil adapté à votre cas : VPS, bastion, hôte Docker

Sur un serveur exposé, une grande partie du trafic reçu n’a aucune valeur :

  • Scans automatisés sur tous les ports, toutes les minutes
  • Tentatives de brute force SSH par centaines chaque heure
  • Bots opportunistes qui cherchent des failles connues
  • Trafic issu d’infrastructures déjà connues pour des activités hostiles

SysWarden cherche à bloquer ce trafic avant qu’il n’atteigne vos services. L’intérêt est simple : moins de bruit dans les logs, moins de surface d’exposition, une mise en place plus rapide qu’un empilement manuel de scripts.

SysWarden (v2.03, licence GPL-3.0) est un orchestrateur pare-feu écrit en Bash. Il ne remplace pas votre firewall — il l’orchestre en injectant des règles optimisées dans le backend natif de votre distribution.

Il agrège plusieurs mécanismes :

MécanismeRôle
Pare-feu nftablesFiltrage kernel avec détection du backend disponible
Blocklists Data-Shield~98 000 IP malveillantes injectées dans le kernel
Blocage GeoIPFiltrage par pays (optionnel)
Blocage ASNSpamhaus ASN-DROP et autres listes (optionnel)
Fail2banJusqu’à 51 jails selon les services détectés
WireGuardTunnel VPN pour isoler l’administration
Dashboard webMonitoring sur le port 9999
AuditVérification post-installation en 8 phases

Le script détecte automatiquement le backend de votre distribution :

DistributionBackend firewall
Debian / Ubuntunftables (transactions atomiques)
RHEL / AlmaLinuxFirewalld (Rich Rules + IPSets XML)
Alpine (OpenRC)nftables

SysWarden est surtout pertinent pour :

  • un VPS public qui reçoit du trafic non sollicité en permanence
  • un bastion dont l’accès doit être restreint au maximum
  • un petit serveur web que vous ne pouvez pas mettre derrière un WAF cloud
  • un hôte Docker exposé (SysWarden injecte les règles dans la chaîne DOCKER-USER)
  • une machine d’administration que vous voulez protéger vite, sans écrire de règles à la main

SysWarden ne remplace pas :

  • une supervision centralisée (Wazuh, Grafana, Prometheus)
  • un moteur de détection comportementale avancée
  • une stratégie IAM solide
  • la gestion des vulnérabilités et des correctifs
  • la sécurisation applicative (authentification, injection, chiffrement)

Il faut le voir comme une première couche réseau, pas comme une réponse complète à tous les risques.

  • Un serveur Ubuntu 24.04+, Debian 13+, RHEL/AlmaLinux 9+ ou Alpine
  • Accès root (ou sudo)
  • Les paquets curl, git et wget installés
  • Connaître l’IP publique autorisée à administrer le serveur
  • Prévoir une fenêtre de test pour éviter de se bloquer soi-même
  1. Cloner le dépôt et préparer les scripts

    Fenêtre de terminal
    git clone https://github.com/duggytuxy/syswarden.git
    cd syswarden
    chmod +x *.sh
  2. Lancer l’installation

    Fenêtre de terminal
    sudo ./install-syswarden.sh

    L’installeur interactif pose des questions sur le port SSH, WireGuard, le GeoIP, le niveau de blocklist, etc.

  3. Vérifier l’installation

    Fenêtre de terminal
    sudo nft list tables
    table inet filter
    table inet syswarden_table
    Fenêtre de terminal
    sudo fail2ban-client status
    Status
    |- Number of jail: 26
    `- Jail list: drupal-auth, nginx-http-auth, nginx-scanner, sshd,
    syswarden-aibots, syswarden-apimapper, ...

    Si vous voyez syswarden_table dans nftables et des jails actives dans Fail2ban, le déploiement est fonctionnel.

Installation automatisée (CI/CD, Ansible, cloud-init)

Section intitulée « Installation automatisée (CI/CD, Ansible, cloud-init) »

SysWarden fournit un fichier syswarden-auto.conf pour les déploiements non interactifs. C’est la meilleure option pour industrialiser l’installation.

Fenêtre de terminal
SYSWARDEN_ENTERPRISE_MODE="n"
SYSWARDEN_SSH_PORT="22"
SYSWARDEN_WHITELIST_IPS="203.0.113.10"
SYSWARDEN_ENABLE_WG="y"
SYSWARDEN_WG_PORT="51820"
SYSWARDEN_WG_SUBNET="10.66.66.0/24"
SYSWARDEN_USE_DOCKER="n"
SYSWARDEN_HARDENING="n"
SYSWARDEN_LIST_CHOICE="1"
SYSWARDEN_ENABLE_GEO="n"
SYSWARDEN_ENABLE_ASN="y"
SYSWARDEN_USE_SPAMHAUS="y"
SYSWARDEN_ENABLE_ABUSE="n"
SYSWARDEN_ENABLE_WAZUH="n"

Lancez ensuite :

Fenêtre de terminal
sudo ./install-syswarden.sh syswarden-auto.conf
ParamètreDescription
SYSWARDEN_WHITELIST_IPSIP à ne jamais bloquer — le plus important
SYSWARDEN_SSH_PORTPort SSH de votre serveur
SYSWARDEN_ENABLE_WGActiver WireGuard pour masquer SSH
SYSWARDEN_USE_DOCKERInjection des règles dans la chaîne DOCKER-USER
SYSWARDEN_LIST_CHOICENiveau de blocklist : 1 Standard, 2 Critical, 3 Custom
SYSWARDEN_ENABLE_GEOBlocage géographique par pays
SYSWARDEN_ENABLE_ASNBlocage par numéro d’AS
SYSWARDEN_USE_SPAMHAUSActive Spamhaus ASN-DROP
SYSWARDEN_ENABLE_ABUSEReporting automatique vers AbuseIPDB
SYSWARDEN_ENABLE_WAZUHIntégration agent Wazuh XDR

La variable SYSWARDEN_WHITELIST_IPS autorise explicitement vos IP d’administration. C’est l’option la plus importante pour éviter l’auto-blocage. Séparez les IP par des espaces.

SYSWARDEN_ENABLE_WG="y" active WireGuard. SSH n’écoute plus que sur l’interface wg0 et loopback — l’administration est cachée derrière un tunnel VPN. C’est la meilleure option pour un bastion.

SYSWARDEN_LIST_CHOICE propose plusieurs niveaux :

ValeurNiveauContenu
1StandardData-Shield + CINS Army + Blocklist.de
2CriticalListe réduite, moins de faux positifs
3CustomURL personnalisée via SYSWARDEN_CUSTOM_URL

Pour démarrer, le niveau Standard est le plus raisonnable.

Le couple SYSWARDEN_ENABLE_ASN et SYSWARDEN_USE_SPAMHAUS bloque des ASN jugés à risque. Utile contre certaines infrastructures d’hébergement fréquemment utilisées dans des attaques opportunistes.

SYSWARDEN_ENABLE_GEO bloque le trafic par pays. Efficace sur un service à audience limitée, risqué sur un service public international.

L’utilitaire syswarden-manager.sh agit sur les trois couches simultanément : fichiers de persistance, sets kernel et jails Fail2ban.

Fenêtre de terminal
sudo ./syswarden-manager.sh check 1.0.164.165
=== SysWarden Global XDR Search: 1.0.164.165 ===
[Storage] Global Whitelist : Not Found
[Storage] SSH-Only Bypass : Not Found
[Storage] Global Blocklist : Not Found
[Kernel] L3 Firewall : DROPPED (In Active Set)
[WAF] L7 Fail2ban : CLEAR (No active behavioral bans)

Cette IP est dans la blocklist kernel mais n’a pas été ajoutée manuellement.

Fenêtre de terminal
# Bloquer une IP (kernel + fichier persistant)
sudo ./syswarden-manager.sh block 203.0.113.66
# Débloquer (suppression de toutes les couches)
sudo ./syswarden-manager.sh unblock 203.0.113.66
# Whitelister (bypass global + accès dashboard)
sudo ./syswarden-manager.sh whitelist 10.0.0.42
# Lister les IP gérées manuellement
sudo ./syswarden-manager.sh list
CommandeAction
check <IP>Diagnostic complet (kernel + Fail2ban + persistance)
block <IP>Blocage kernel + fichier persistant
unblock <IP>Suppression de toutes les couches
whitelist <IP>Bypass global + accès dashboard
allow-ssh <IP>Exemption SSH (contourne WireGuard)
revoke-ssh <IP>Révoque l’exemption SSH
listAffiche toutes les IP gérées
reloadResynchronisation complète

SysWarden configure un cron automatique pour rafraîchir les blocklists. Vous pouvez forcer une mise à jour :

Fenêtre de terminal
sudo ./install-syswarden.sh update

Le script benchmark les miroirs (GitHub, GitLab, Bitbucket, Codeberg) et télécharge depuis le plus rapide. Les sets nftables sont rechargés par transaction atomique — pas d’interruption de service.

Fenêtre de terminal
sudo ./syswarden-audit.sh

Le script analyse la conformité du serveur en 8 phases : durcissement OS, bouclier kernel, moteur Fail2ban, télémétrie, accès distant, cartographie des services exposés. Les résultats sont écrits dans /var/log/syswarden-audit.log.

SysWarden déploie un dashboard web sur le port 9999 :

https://<IP_DU_SERVEUR>:9999

Protégé par Nginx en reverse proxy avec TLS auto-signé, whitelist IP et CSP strict.

Fenêtre de terminal
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:

Les jails système (sshd) surveillent le journal systemd. Les jails web surveillent les fichiers de logs Nginx.

Voici les profils que je recommande selon le cas d’usage.

Le but : réduire le bruit sans prendre de risques.

Fenêtre de terminal
SYSWARDEN_WHITELIST_IPS="<votre-IP>"
SYSWARDEN_LIST_CHOICE="1" # Standard
SYSWARDEN_ENABLE_ASN="y"
SYSWARDEN_USE_SPAMHAUS="y"
SYSWARDEN_ENABLE_GEO="n" # désactivé au départ
SYSWARDEN_ENABLE_WG="y" # WireGuard si possible

Après installation, je lance l’audit et j’observe les logs pendant quelques jours avant de durcir davantage.

Le but : exposer le strict minimum.

Fenêtre de terminal
SYSWARDEN_WHITELIST_IPS="<IP-admin>"
SYSWARDEN_LIST_CHOICE="1"
SYSWARDEN_ENABLE_ASN="y"
SYSWARDEN_USE_SPAMHAUS="y"
SYSWARDEN_ENABLE_GEO="y"
SYSWARDEN_GEO_CODES="<pays-autorisés-inversés>"
SYSWARDEN_ENABLE_WG="y"
SYSWARDEN_SSH_PORT="<port-non-standard>"

SSH n’est pas exposé publiquement — tout passe par WireGuard. Le géoblocage est activé. Les règles sont les plus restrictives possibles.

Fenêtre de terminal
SYSWARDEN_WHITELIST_IPS="<IP-admin>"
SYSWARDEN_USE_DOCKER="y" # injection dans DOCKER-USER
SYSWARDEN_LIST_CHOICE="1"
SYSWARDEN_ENABLE_ASN="y"
SYSWARDEN_ENABLE_WG="n" # pas de VPN sur un hôte Docker

Docker contourne les règles iptables classiques. L’option SYSWARDEN_USE_DOCKER="y" force l’injection des blocklists dans la chaîne DOCKER-USER pour que les conteneurs soient aussi protégés.

CheminRôle
/etc/syswarden.confConfiguration principale
/etc/syswarden/whitelist.txtIP whitelistées (persistant)
/etc/syswarden/blocklist.txtIP bloquées manuellement
/etc/syswarden/active_global_blocklist.txtBlocklist fusionnée (~98 000 IP)
/etc/syswarden/syswarden.nftTable nftables incluse au boot
/var/log/syswarden-audit.logRésultats d’audit
Fenêtre de terminal
sudo ./install-syswarden.sh uninstall
SymptômeCause probableSolution
'unknown': I need something more specificLe script utilise clear sans TTYAjouter -t à la commande SSH
Impossible de se connecter en SSHVotre IP n’est pas whitelistéeConsole KVM/IPMI → syswarden-manager.sh whitelist <IP>
reload échoueScript pas copié dans /usr/local/bin/Relancer ./install-syswarden.sh update
Dashboard ne répond pasNginx n’écoute pas sur 9999sudo ss -tlnp | grep 9999
Fail2ban ne détecte rienLogs au mauvais formatVérifier File list dans fail2ban-client status <jail>
Faux positif sur une IP légitimeBlocklist ou ASN trop largesyswarden-manager.sh whitelist <IP>
  • SysWarden est un bouclier périmétrique léger : il filtre tôt, il ne protège pas tout
  • Il orchestre nftables, Fail2ban, blocklists, ASN, GeoIP et WireGuard en un seul outil
  • Le mode unattended (syswarden-auto.conf) permet un déploiement reproductible
  • syswarden-manager.sh est l’outil du quotidien : check, block, unblock, whitelist
  • Commencez par le profil Standard, observez les logs, puis durcissez progressivement
  • Ne comptez jamais sur SysWarden seul — c’est une couche complémentaire dans une stratégie plus large

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn