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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »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.
Ce que fait SysWarden
Section intitulée « Ce que fait SysWarden »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écanisme | Rôle |
|---|---|
| Pare-feu nftables | Filtrage kernel avec détection du backend disponible |
| Blocklists Data-Shield | ~98 000 IP malveillantes injectées dans le kernel |
| Blocage GeoIP | Filtrage par pays (optionnel) |
| Blocage ASN | Spamhaus ASN-DROP et autres listes (optionnel) |
| Fail2ban | Jusqu’à 51 jails selon les services détectés |
| WireGuard | Tunnel VPN pour isoler l’administration |
| Dashboard web | Monitoring sur le port 9999 |
| Audit | Vérification post-installation en 8 phases |
Le script détecte automatiquement le backend de votre distribution :
| Distribution | Backend firewall |
|---|---|
| Debian / Ubuntu | nftables (transactions atomiques) |
| RHEL / AlmaLinux | Firewalld (Rich Rules + IPSets XML) |
| Alpine (OpenRC) | nftables |
Quand l’utiliser
Section intitulée « Quand l’utiliser »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
Quand ne pas en attendre trop
Section intitulée « Quand ne pas en attendre trop »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.
Prérequis
Section intitulée « Prérequis »- Un serveur Ubuntu 24.04+, Debian 13+, RHEL/AlmaLinux 9+ ou Alpine
- Accès root (ou
sudo) - Les paquets
curl,gitetwgetinstallé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
Installer SysWarden
Section intitulée « Installer SysWarden »-
Cloner le dépôt et préparer les scripts
Fenêtre de terminal git clone https://github.com/duggytuxy/syswarden.gitcd syswardenchmod +x *.sh -
Lancer l’installation
Fenêtre de terminal sudo ./install-syswarden.shFenêtre de terminal sudo ./install-syswarden-alpine.shFenêtre de terminal sudo ./install-syswarden.shLe script détecte automatiquement Firewalld et utilise les Rich Rules natives.
L’installeur interactif pose des questions sur le port SSH, WireGuard, le GeoIP, le niveau de blocklist, etc.
-
Vérifier l’installation
Fenêtre de terminal sudo nft list tablestable inet filtertable inet syswarden_tableFenêtre de terminal sudo fail2ban-client statusStatus|- Number of jail: 26`- Jail list: drupal-auth, nginx-http-auth, nginx-scanner, sshd,syswarden-aibots, syswarden-apimapper, ...Si vous voyez
syswarden_tabledans 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.
Exemple minimal
Section intitulée « Exemple minimal »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 :
sudo ./install-syswarden.sh syswarden-auto.confParamètres importants
Section intitulée « Paramètres importants »| Paramètre | Description |
|---|---|
SYSWARDEN_WHITELIST_IPS | IP à ne jamais bloquer — le plus important |
SYSWARDEN_SSH_PORT | Port SSH de votre serveur |
SYSWARDEN_ENABLE_WG | Activer WireGuard pour masquer SSH |
SYSWARDEN_USE_DOCKER | Injection des règles dans la chaîne DOCKER-USER |
SYSWARDEN_LIST_CHOICE | Niveau de blocklist : 1 Standard, 2 Critical, 3 Custom |
SYSWARDEN_ENABLE_GEO | Blocage géographique par pays |
SYSWARDEN_ENABLE_ASN | Blocage par numéro d’AS |
SYSWARDEN_USE_SPAMHAUS | Active Spamhaus ASN-DROP |
SYSWARDEN_ENABLE_ABUSE | Reporting automatique vers AbuseIPDB |
SYSWARDEN_ENABLE_WAZUH | Intégration agent Wazuh XDR |
Comprendre les options clés
Section intitulée « Comprendre les options clés »Whitelist des IP
Section intitulée « Whitelist des IP »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.
WireGuard
Section intitulée « WireGuard »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.
Niveau de blocklist
Section intitulée « Niveau de blocklist »SYSWARDEN_LIST_CHOICE propose plusieurs niveaux :
| Valeur | Niveau | Contenu |
|---|---|---|
1 | Standard | Data-Shield + CINS Army + Blocklist.de |
2 | Critical | Liste réduite, moins de faux positifs |
3 | Custom | URL personnalisée via SYSWARDEN_CUSTOM_URL |
Pour démarrer, le niveau Standard est le plus raisonnable.
Blocage ASN
Section intitulée « Blocage ASN »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.
Géoblocage
Section intitulée « Géoblocage »SYSWARDEN_ENABLE_GEO bloque le trafic par pays. Efficace sur un service à audience limitée, risqué sur un service public international.
Gérer les IP au quotidien
Section intitulée « Gérer les IP au quotidien »L’utilitaire syswarden-manager.sh agit sur les trois couches simultanément : fichiers de persistance, sets kernel et jails Fail2ban.
Diagnostiquer une IP
Section intitulée « Diagnostiquer une IP »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.
Bloquer, débloquer, whitelister
Section intitulée « Bloquer, débloquer, whitelister »# 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 manuellementsudo ./syswarden-manager.sh listCommandes disponibles
Section intitulée « Commandes disponibles »| Commande | Action |
|---|---|
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 |
list | Affiche toutes les IP gérées |
reload | Resynchronisation complète |
Mettre à jour les blocklists
Section intitulée « Mettre à jour les blocklists »SysWarden configure un cron automatique pour rafraîchir les blocklists. Vous pouvez forcer une mise à jour :
sudo ./install-syswarden.sh updateLe 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.
Vérifier le déploiement
Section intitulée « Vérifier le déploiement »Audit post-installation
Section intitulée « Audit post-installation »sudo ./syswarden-audit.shLe 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.
Dashboard
Section intitulée « Dashboard »SysWarden déploie un dashboard web sur le port 9999 :
https://<IP_DU_SERVEUR>:9999Protégé par Nginx en reverse proxy avec TLS auto-signé, whitelist IP et CSP strict.
Inspecter les jails Fail2ban
Section intitulée « Inspecter les jails Fail2ban »sudo fail2ban-client status sshdStatus 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.
Ce que je configure chez moi
Section intitulée « Ce que je configure chez moi »Voici les profils que je recommande selon le cas d’usage.
Profil VPS public (premier déploiement)
Section intitulée « Profil VPS public (premier déploiement) »Le but : réduire le bruit sans prendre de risques.
SYSWARDEN_WHITELIST_IPS="<votre-IP>"SYSWARDEN_LIST_CHOICE="1" # StandardSYSWARDEN_ENABLE_ASN="y"SYSWARDEN_USE_SPAMHAUS="y"SYSWARDEN_ENABLE_GEO="n" # désactivé au départSYSWARDEN_ENABLE_WG="y" # WireGuard si possibleAprès installation, je lance l’audit et j’observe les logs pendant quelques jours avant de durcir davantage.
Profil bastion (accès restreint)
Section intitulée « Profil bastion (accès restreint) »Le but : exposer le strict minimum.
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.
Profil hôte Docker
Section intitulée « Profil hôte Docker »SYSWARDEN_WHITELIST_IPS="<IP-admin>"SYSWARDEN_USE_DOCKER="y" # injection dans DOCKER-USERSYSWARDEN_LIST_CHOICE="1"SYSWARDEN_ENABLE_ASN="y"SYSWARDEN_ENABLE_WG="n" # pas de VPN sur un hôte DockerDocker 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.
Fichiers importants
Section intitulée « Fichiers importants »| Chemin | Rôle |
|---|---|
/etc/syswarden.conf | Configuration principale |
/etc/syswarden/whitelist.txt | IP whitelistées (persistant) |
/etc/syswarden/blocklist.txt | IP bloquées manuellement |
/etc/syswarden/active_global_blocklist.txt | Blocklist fusionnée (~98 000 IP) |
/etc/syswarden/syswarden.nft | Table nftables incluse au boot |
/var/log/syswarden-audit.log | Résultats d’audit |
Désinstallation
Section intitulée « Désinstallation »sudo ./install-syswarden.sh uninstallDépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
'unknown': I need something more specific | Le script utilise clear sans TTY | Ajouter -t à la commande SSH |
| Impossible de se connecter en SSH | Votre IP n’est pas whitelistée | Console KVM/IPMI → syswarden-manager.sh whitelist <IP> |
reload échoue | Script pas copié dans /usr/local/bin/ | Relancer ./install-syswarden.sh update |
| Dashboard ne répond pas | Nginx n’écoute pas sur 9999 | sudo ss -tlnp | grep 9999 |
| Fail2ban ne détecte rien | Logs au mauvais format | Vérifier File list dans fail2ban-client status <jail> |
| Faux positif sur une IP légitime | Blocklist ou ASN trop large | syswarden-manager.sh whitelist <IP> |
À retenir
Section intitulée « À retenir »- 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.shest 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