Shieldlist

Installer le contrôleur

Le contrôleur est un binaire statique avec un magasin SQLite ; il tourne sur n'importe quel Linux avec systemd. Choisissez une machine que les serveurs peuvent joindre sur le port 17453 — en général pas une que vous protégez, même si elle peut cohabiter avec un agent.

Installer le paquet

Sur Debian et ses dérivées :

curl -fsSL https://repo.lrob.net/apt/shieldlist/shieldlist.gpg -o /usr/share/keyrings/shieldlist.gpg
echo "deb [signed-by=/usr/share/keyrings/shieldlist.gpg] https://repo.lrob.net/apt/shieldlist stable main" > /etc/apt/sources.list.d/shieldlist.list
apt update && apt install shieldlist-controller

stable porte les versions publiées. Il existe aussi une suite dev avec nos builds de développement : en avance sur les versions publiées, et faits pour casser.

Le paquet crée l'utilisateur système shieldlist, écrit une arborescence de départ sous /etc/shieldlist/controller, installe l'unité et démarre le service. Pour les autres systèmes, ou à la main : Installing.

Une seule machine ? Vous n'avez peut-être pas besoin de contrôleur : voir l'agent autonome. L'agent protège une machine tout seul, et l'enrôler plus tard conserve sa configuration.

Mettre la Web UI derrière TLS

L'API et la Web UI écoutent sur 127.0.0.1:17454 et attendent un reverse proxy avec certificat devant ; le port des agents, :17453, n'a besoin de rien — le contrôleur signe son propre certificat et les agents l'épinglent.

nginx et le greffon nginx de certbot d'abord, s'ils ne sont pas là — sans le greffon, --nginx n'est pas une option que certbot connaît :

apt install nginx certbot python3-certbot-nginx      # Debian, Ubuntu
dnf install nginx certbot python3-certbot-nginx      # Red Hat et sa famille

Puis le vhost, dans /etc/nginx/sites-available/shield.example.net.conf sur Debian et Ubuntu, ou /etc/nginx/conf.d/shield.example.net.conf sur Red Hat et sa famille, où il n'y a pas de lien à faire :

server {
    server_name shield.example.net;
    listen 80;
    listen [::]:80;
    location / {
        proxy_pass http://127.0.0.1:17454;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 300s;
    }
}

proxy_read_timeout compte : la Web UI tient des requêtes longues, et le défaut de soixante secondes de nginx les coupe.

ln -s /etc/nginx/sites-available/shield.example.net.conf /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d shield.example.net --redirect

certbot ajoute le certificat, les lignes listen 443 ssl et la redirection depuis le 80 sur place, et renouvelle tout seul. Le nom doit déjà résoudre vers cette machine : certbot prouve qu'il vous appartient par le port 80 que vous venez d'ouvrir.

À travers un pare-feu : le port des agents doit être joignable depuis chaque machine protégée vers ce contrôleur — sortant côté agent, entrant ici. Rien ne circule dans l'autre sens : le contrôleur n'ouvre jamais de connexion vers un agent, donc un agent derrière un NAT sans la moindre règle entrante fonctionne. Le port de l'interface (443 via votre proxy) est pour les personnes, pas pour les agents.

Créer le premier compte

sudo -u shieldlist shieldlist-controller account -name vous    # demande un mot de passe deux fois

Douze caractères au minimum, et la sévérité a une raison : un compte n'est jamais verrouillé, quel que soit le nombre de mots de passe refusés. Verrouiller les comptes donnerait à un attaquant le moyen de vous verrouiller dehors ; les refus sont journalisés à la place, et une règle à vous peut bannir qui les collectionne. Un mot de passe court sans verrouillage derrière est la seule combinaison qui ne tient pas.

Ouvrez https://shield.example.net, connectez-vous. La Web UI est vide : aucun serveur encore. Elle vous dit quoi faire ensuite — un jeton d'enrôlement, et une commande à lancer sur la première machine. C'est la page suivante.

Le détail — écouteurs, rétention, géolocalisation, mises à jour, qui peut lever un ban : Contrôleur → Configuration.