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. La version 2 est un WAF host-based (pare-feu applicatif) réécrit en Go : il combine un pare-feu nftables, un moteur de détection L7 natif, des blocklists, du blocage ASN, du géoblocage, WireGuard pour masquer l'administration et une synchronisation haute disponibilité. Ce n'est pas un SIEM ni un IDS complet, c'est un bouclier périmétrique qui filtre tôt le bruit d'Internet.

  • Comprendre à quoi sert SysWarden v2 et ce qu'il ne fait pas
  • Installer SysWarden via son paquet .deb ou .rpm
  • Configurer les options clés avec syswarden config : whitelist, blocklists, ASN, géoblocage, WireGuard, HA
  • Gérer les IP au quotidien avec le CLI unifié
  • Vérifier le déploiement et choisir un profil adapté : 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.01, licence GPL-3.0) se présente comme un « Next-Gen Host-based WAF and Security Orchestrator ». Il s'articule autour de trois binaires Go :

ComposantRôle
syswarden (CLI)Orchestration : installation, configuration, gestion des IP, audit
syswarden-coreMoteur WAF L7 (algorithme Aho-Corasick), tourne en daemon systemd
syswarden-tuiTableau de bord terminal temps réel (zéro CPU à l'idle)

Il agrège plusieurs mécanismes :

MécanismeRôle
Pare-feu nftablesFiltrage kernel, backend détecté automatiquement
Moteur WAF natifDétection L7 et brute force en Go, remplace Fail2ban
BlocklistsDizaines de milliers d'IP malveillantes injectées dans le kernel
Blocage GeoIPFiltrage par pays (activé par défaut, liste paramétrable)
Blocage ASNListes d'AS à risque, Spamhaus ASN-DROP en option
WireGuardTunnel VPN pour isoler l'administration
Haute disponibilitéSynchronisation chiffrée de la blocklist entre nœuds
Durcissement CISHardening kernel/OS niveau CIS Benchmark L2 (optionnel)
TUIDashboard et alertes en temps réel dans le terminal

Le backend pare-feu est détecté selon la distribution :

DistributionBackend firewall
Debian / Ubuntunftables (transactions atomiques)
RHEL / AlmaLinux / RockyFirewalld ou nftables selon SYSWARDEN_FIREWALL_BACKEND
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)
  • un cluster de deux nœuds où il faut synchroniser les bannissements

SysWarden ne remplace pas :

  • une supervision centralisée (Wazuh, Grafana, Prometheus)
  • un moteur de détection comportementale avancée multi-sources
  • 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 et L7, pas comme une réponse complète à tous les risques.

  • Un serveur Ubuntu 24.04+, Debian 13+, RHEL/AlmaLinux/Rocky 9+ ou Alpine
  • Accès root (ou sudo)
  • La commande wget (ou curl) pour récupérer le paquet
  • 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

SysWarden v2 est exclusivement distribué par paquets .deb et .rpm. La compilation Go et les dépendances sont placées dans /opt/syswarden/bin/.

  1. Télécharger le paquet et sa somme de contrôle

    Récupérez le paquet correspondant à votre distribution depuis la page des releases, ainsi que le fichier SHA256SUMS.

    Fenêtre de terminal
    wget https://github.com/duggytuxy/syswarden/releases/download/v2.01.11/syswarden_2.01.11_all.deb
    wget https://github.com/duggytuxy/syswarden/releases/download/v2.01.11/SHA256SUMS.txt
  2. Vérifier l'intégrité

    Fenêtre de terminal
    sha256sum -c SHA256SUMS.txt --ignore-missing
    syswarden_2.01.11_all.deb: OK

    N'installez jamais un paquet dont la somme ne correspond pas.

  3. Installer le paquet

    Fenêtre de terminal
    sudo apt-get install -y ./syswarden_2.01.11_all.deb

    Le paquet dépose le CLI et la configuration par défaut, sans encore modifier le pare-feu.

  4. Adapter la configuration

    La configuration est embarquée. Ouvrez l'éditeur interactif pour la personnaliser :

    Fenêtre de terminal
    sudo syswarden config

    Renseignez au minimum votre IP d'administration dans SYSWARDEN_WHITELIST_IPS.

  5. Appliquer les politiques

    Fenêtre de terminal
    sudo syswarden install

    Cette commande exécute le pipeline complet : pare-feu, blocklists, moteur WAF, durcissement et, si activé, WireGuard et HA.

Fenêtre de terminal
sudo nft list tables
table inet syswarden_table

Vérifiez ensuite le daemon du moteur WAF :

Fenêtre de terminal
systemctl status syswarden-core.service

Si vous voyez syswarden_table dans nftables et syswarden-core.service actif, le déploiement est fonctionnel.

La configuration vit dans /opt/syswarden/syswarden-auto.conf. Deux manières de l'éditer :

  • Interactive : sudo syswarden config (ouvre votre $EDITOR, nano ou vi en repli).
  • Non interactive (CI/CD, Ansible, cloud-init) : éditer directement le fichier puis lancer sudo syswarden install.
ParamètreDescription
SYSWARDEN_WHITELIST_IPSIP à ne jamais bloquer, le plus important
SYSWARDEN_WHITELIST_INFRAAuto-whitelist de l'IP d'admin détectée (anti-lockout), y par défaut
SYSWARDEN_SSH_PORTPort SSH de votre serveur
SYSWARDEN_FIREWALL_BACKENDnftables, iptables ou keep (ne pas toucher Firewalld)
SYSWARDEN_ENABLE_WGActiver WireGuard pour masquer SSH
SYSWARDEN_LIST_CHOICENiveau de blocklist : 1 Standard, 2 Critical, 3 Custom
SYSWARDEN_ENABLE_GEO / SYSWARDEN_GEO_CODESBlocage par pays et liste des codes
SYSWARDEN_ENABLE_ASN / SYSWARDEN_ASN_LISTBlocage par numéro d'AS
SYSWARDEN_HARDENINGDurcissement CIS Benchmark L2 du système
SYSWARDEN_HA_ENABLED / SYSWARDEN_HA_PEER_IPHaute disponibilité entre deux nœuds
SYSWARDEN_SIEM_ENABLED / SYSWARDEN_SIEM_IPExport des événements vers un SIEM (syslog TLS)
SYSWARDEN_ENTERPRISE_MODEy désactive toute télémétrie tierce (conformité interne)

Tout passe désormais par le CLI syswarden, qui agit sur les trois couches : fichiers de persistance, sets kernel et moteur WAF.

Fenêtre de terminal
sudo syswarden check 1.0.164.165

La commande renvoie un diagnostic global : présence en whitelist, en blocklist kernel, et statut côté moteur WAF.

Les commandes acceptent plusieurs IP à la fois :

Fenêtre de terminal
# Bloquer une ou plusieurs IP (kernel + persistance)
sudo syswarden block 203.0.113.66 203.0.113.67
# Débloquer
sudo syswarden unblock 203.0.113.66
# Whitelister (bypass global, port optionnel)
sudo syswarden whitelist 10.0.0.42
# Lister les IP gérées manuellement
sudo syswarden list
CommandeAction
check <IP>Diagnostic complet (kernel + WAF + persistance)
block <IP>...Blocage kernel + fichier persistant
unblock <IP>...Suppression de toutes les couches
whitelist <IP>... [PORT]Bypass global (accès VIP)
unwhitelist <IP>Révoque le bypass global
allow-ssh <IP>Exemption SSH (contourne WireGuard)
revoke-ssh <IP>Révoque l'exemption SSH
whitelist-infraAuto-détecte et whiteliste les IP d'infrastructure
listAffiche toutes les IP gérées
reloadResynchronisation complète

En v2, c'est syswarden-core qui détecte les comportements hostiles, sans Fail2ban. Il lit les journaux des services (sshd, nginx, apache2) et applique l'algorithme Aho-Corasick pour la mitigation L7 en temps réel. Le seuil de brute force se règle dans la configuration :

ParamètreDescription
SYSWARDEN_BRUTEFORCE_THRESHOLDNombre d'échecs avant bannissement (défaut 5)
SYSWARDEN_BRUTEFORCE_WINDOWFenêtre d'observation en secondes (défaut 60)
SYSWARDEN_BRUTEFORCE_LOGSJournaux supplémentaires à surveiller
SYSWARDEN_MODSEC_LOGSLogs ModSecurity à corréler

SysWarden v2 embarque un tableau de bord terminal :

Fenêtre de terminal
sudo syswarden tui

Pour suivre uniquement les alertes en flux continu :

Fenêtre de terminal
sudo syswarden alerts

Ces interfaces sont compilées en Go (raw terminal mode) et consomment zéro CPU à l'idle, contrairement à un dashboard web permanent.

Sur un cluster de deux nœuds, SysWarden synchronise la blocklist de façon chiffrée. Activez SYSWARDEN_HA_ENABLED et renseignez SYSWARDEN_HA_PEER_IP, puis forcez une synchronisation :

Fenêtre de terminal
sudo syswarden ha-sync

La synchronisation passe par un canal chiffré (port 62026 par défaut) et garantit qu'un bannissement décidé sur un nœud s'applique aussi sur l'autre, sans doublon.

L'audit intégré remplace l'ancien script syswarden-audit.sh :

Fenêtre de terminal
sudo syswarden audit

Il analyse en plusieurs phases le durcissement OS, le bouclier kernel, le moteur WAF, la télémétrie, l'accès distant et la cartographie des services exposés.

Fenêtre de terminal
# Mettre à jour SysWarden (binaires + politiques)
sudo syswarden update
# Rafraîchir uniquement les flux de Threat Intelligence
sudo syswarden update-feeds

Un cron natif (géré en Go) rafraîchit automatiquement les blocklists en arrière-plan. La mise à jour des paquets relance syswarden reload pour réparer au besoin les tâches planifiées.

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_WHITELIST_INFRA="y"
SYSWARDEN_LIST_CHOICE="1" # Standard
SYSWARDEN_ENABLE_ASN="y"
SYSWARDEN_ENABLE_GEO="n" # désactivé au départ, audience large
SYSWARDEN_ENABLE_WG="y" # WireGuard si possible
SYSWARDEN_HARDENING="y"

Après syswarden install, je lance syswarden audit et j'observe les alertes (syswarden alerts) quelques jours avant de durcir.

Le but : exposer le strict minimum.

Fenêtre de terminal
SYSWARDEN_WHITELIST_IPS="<IP-admin>"
SYSWARDEN_LIST_CHOICE="1"
SYSWARDEN_ENABLE_ASN="y"
SYSWARDEN_ENABLE_GEO="y"
SYSWARDEN_ENABLE_WG="y"
SYSWARDEN_SSH_PORT="<port-non-standard>"
SYSWARDEN_HARDENING="y"

SSH n'est pas exposé publiquement, tout passe par WireGuard, le géoblocage est actif et le durcissement CIS est en place.

Fenêtre de terminal
SYSWARDEN_WHITELIST_IPS="<IP-admin>"
SYSWARDEN_HA_ENABLED="y"
SYSWARDEN_HA_PEER_IP="<IP-du-second-noeud>"
SYSWARDEN_HA_STRICT_HOST_KEY="y"

Chaque bannissement décidé sur un nœud est propagé à l'autre, ce qui évite qu'une IP bloquée d'un côté reste joignable de l'autre.

CheminRôle
/opt/syswarden/bin/Binaires Go (CLI, core, TUI)
/opt/syswarden/syswarden-auto.confConfiguration principale
syswarden-core.serviceDaemon systemd du moteur WAF
Fenêtre de terminal
sudo syswarden uninstall
SymptômeCause probableSolution
Impossible de se connecter en SSHVotre IP n'est pas whitelistéeConsole KVM/IPMI → syswarden whitelist <IP>
Le moteur ne démarre passyswarden-core.service en échecsystemctl status syswarden-core puis journalctl -u syswarden-core
nft list tables ne montre pas syswarden_tablesyswarden install non exécutéRelancer sudo syswarden install
Faux positif sur une IP légitimeBlocklist, ASN ou géoblocage trop largessyswarden whitelist <IP> et relire SYSWARDEN_GEO_CODES
Vrais visiteurs bloquésGéoblocage actif par défautDésactiver SYSWARDEN_ENABLE_GEO ou ajuster la liste
HA non synchroniséeSYSWARDEN_HA_PEER_IP vide ou pare-feuVérifier le port 62026 et syswarden ha-sync
  • SysWarden v2 est un WAF host-based réécrit en Go : il filtre tôt, il ne protège pas tout
  • Il orchestre nftables, un moteur WAF natif (qui remplace Fail2ban), blocklists, ASN, GeoIP, WireGuard et la haute disponibilité
  • L'installation se fait par paquet .deb/.rpm, puis syswarden config et syswarden install
  • Le CLI syswarden est l'outil du quotidien : check, block, whitelist, audit, tui
  • SYSWARDEN_WHITELIST_INFRA limite l'auto-blocage, mais gardez toujours un accès console
  • Le géoblocage est actif par défaut : relisez la liste de pays avant de l'appliquer

Ce site vous est utile ?

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

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn