Blog
DevOps·13 min read

Je Clawdbot-server beveiligen: een complete securitygids

binnen 60 seconden na het opzetten van fail2ban ving het een actieve brute-force aanval op. zo vergrendel je je clawdbot-server goed.

Jo V·January 27, 2026
Je Clawdbot-server beveiligen: een complete securitygids

Ik heb vanavond fail2ban opgezet op mijn Clawdbot-server. Binnen 60 seconden blokkeerde het zijn eerste aanvaller.

Geen test. Een echte bot was actief bezig SSH te brute-forcen terwijl ik de firewall aan het configureren was.

Jan 27 02:46:55 sshd: Invalid user oracle from 217.154.38.135
Jan 27 02:47:25 sshd: Invalid user main from 217.154.38.135
Jan 27 02:47:56 sshd: Invalid user HwHiAiUser from 217.154.38.135
Jan 27 02:48:26 sshd: Invalid user guest from 217.154.38.135
Jan 27 02:48:57 sshd: Invalid user git from 217.154.38.135

Elke 30 seconden. Andere gebruikersnamen. Geautomatiseerd. Meedogenloos.

Toen greep fail2ban in:

2026-01-27 02:50:54 NOTICE [sshd] Ban 217.154.38.135

Klaar. 30 dagen verbannen. Als je Clawdbot op een VPS draait, heb je dit nodig.

Waarom Clawdbot-servers doelwitten zijn

Clawdbot-servers zijn aantrekkelijke doelwitten omdat ze doorgaans het volgende hebben:

  • Shell-toegang — De agent kan commando's uitvoeren
  • API-credentials — Anthropic, OpenAI, berichtenplatforms
  • Persoonlijke gegevens — Sessielogs, geheugenbestanden, contacten
  • Altijd online — 24/7 uptime op een cloud-VPS

Een aanvaller die je Clawdbot-server compromitteert krijgt toegang tot alle mogelijkheden van je AI-assistent. Ze kunnen je gesprekken lezen, je identiteit misbruiken op berichtenplatforms, of je API-kosten laten oplopen.

Laten we dat oplossen.

Stap 1: SSH-sleutelauthenticatie (Cruciaal)

Dit is de allerbelangrijkste beveiligingsstap. Wachtwoordauthenticatie is de zwakste schakel. SSH-sleutels zijn cryptografisch veilig en onmogelijk te brute-forcen.

Op je lokale machine, genereer een sleutelpaar:

ssh-keygen -t ed25519 -C "your_email@example.com"

Dit maakt twee bestanden aan:

  • ~/.ssh/id_ed25519 — Je privésleutel (deel deze nooit)
  • ~/.ssh/id_ed25519.pub — Je publieke sleutel (gaat naar de server)

Kopieer je publieke sleutel naar de server:

ssh-copy-id user@your-server-ip

Of handmatig:

# Op je lokale machine
cat ~/.ssh/id_ed25519.pub
# Kopieer de output, dan op je server:
echo "your-public-key-here" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Test of het werkt:

ssh user@your-server-ip

Als je binnenkomt zonder wachtwoordprompt, werkt het.

Stap 2: Wachtwoordauthenticatie uitschakelen

Zodra SSH-sleutels werken, schakel je wachtwoordauthenticatie volledig uit:

sudo nano /etc/ssh/sshd_config

Zoek en wijzig deze regels:

PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no

Herstart SSH:

sudo systemctl restart sshd

Nu is de enige manier om binnen te komen met je privésleutel. Brute-force aanvallen worden compleet zinloos — ze proberen een wachtwoord te raden dat niet bestaat.

Stap 3: fail2ban installeren

Zelfs met SSH-sleutels willen we fail2ban als extra beveiligingslaag om logs schoon te houden en verspilde resources te voorkomen.

sudo apt update
sudo apt install -y fail2ban

Maak een lokale configuratie aan:

sudo tee /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 2592000
findtime = 600
EOF

Wat dit doet:

  • maxretry = 3 — Drie mislukte pogingen = geblokkeerd
  • bantime = 2592000 — 30 dagen ban (als je SSH-sleutels gebruikt, is elke mislukte poging sowieso een aanvaller)
  • findtime = 600 — Pogingen worden geteld binnen een venster van 10 minuten

Start het op:

sudo systemctl enable fail2ban
sudo systemctl restart fail2ban

Controleer of het werkt:

sudo fail2ban-client status sshd

Stap 4: ufw-firewall configureren

# Standaard: alles inkomend blokkeren
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Sta alleen toe wat Clawdbot nodig heeft
sudo ufw allow 22/tcp # SSH (dit wijzigen we later)
sudo ufw allow 80/tcp # HTTP (bij gebruik van webhooks)
sudo ufw allow 443/tcp # HTTPS
# Inschakelen
sudo ufw --force enable

Controleren:

sudo ufw status verbose

Stap 5: SSH-tarpit met endlessh (Het leuke deel)

Hier wordt het interessant. Het idee: verplaats echte SSH naar een niet-standaard poort, zet endlessh op poort 22. Bots verbinden met poort 22 en worden gevangen in een oneindig trage banner die elke 10 seconden één willekeurige byte stuurt. Ze krijgen nooit een loginprompt. Ondertussen draait echte SSH ongestoord op een andere poort.

Wat endlessh doet

endlessh is een SSH-tarpit. Wanneer een bot verbinding maakt, stuurt het oneindig langzaam een SSH-banner — één willekeurige byte per 10 seconden. De SSH-specificatie staat banners toe tot 255 tekens, maar schrijft geen minimumsnelheid voor. De meeste bots wachten geduldig op de volledige banner, bezetten een connectieslot en verspillen hun tijd.

Het is als digitaal drijfzand voor SSH-bots.

endlessh installeren

sudo apt install endlessh

Echte SSH verplaatsen naar poort 2222

Op moderne Ubuntu wordt SSH beheerd door systemd-sockets, dus moeten we de socket-configuratie overschrijven:

sudo mkdir -p /etc/systemd/system/ssh.socket.d/
sudo tee /etc/systemd/system/ssh.socket.d/override.conf << 'EOF'
[Socket]
ListenStream=
ListenStream=2222
EOF

Herladen en herstarten:

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh

Controleer of SSH nu op 2222 draait:

ss -tlnp | grep :2222

endlessh configureren voor poort 22

sudo mkdir -p /etc/endlessh
sudo tee /etc/endlessh/config << 'EOF'
Port 22
Delay 10000
MaxLineLength 32
MaxClients 4096
LogLevel 1
EOF

Dit configureert:

  • Port 22 — De standaard SSH-poort (bots vinden deze)
  • Delay 10000 — Eén byte per 10 seconden verzenden
  • MaxClients 4096 — Veel gevangen bots aankunnen
  • LogLevel 1 — Verbindingen loggen voor het vermaak

De systemd-service repareren

endlessh kan falen met een NAMESPACE-fout op moderne systemen. Maak een service-override aan:

sudo mkdir -p /etc/systemd/system/endlessh.service.d/
sudo tee /etc/systemd/system/endlessh.service.d/override.conf << 'EOF'
[Service]
PrivateUsers=false
EOF

endlessh starten

sudo systemctl daemon-reload
sudo systemctl enable endlessh
sudo systemctl start endlessh

Controleer of het werkt:

sudo systemctl status endlessh
ss -tlnp | grep :22

ufw bijwerken voor de nieuwe SSH-poort

# De nieuwe SSH-poort toestaan
sudo ufw allow 2222/tcp
# De oude SSH-regel verwijderen (poort 22 is nu de tarpit)
sudo ufw delete allow 22/tcp

De tarpit testen

Probeer vanaf een andere machine verbinding te maken met poort 22:

ssh user@your-server-ip -p 22

Het zou gewoon moeten blijven hangen, met elke 10 seconden één teken. Na een tijdje zie je een supertrage, onleesbare banner. Druk op Ctrl+C om te ontsnappen.

Probeer nu de echte SSH:

ssh user@your-server-ip -p 2222

Directe verbinding met je SSH-sleutel.

De resultaten

Bots verspillen hun tijd op poort 22 terwijl je echte SSH ongestoord op 2222 draait. Je logs blijven schoon omdat mislukte pogingen de tarpit raken, niet je echte SSH-service. journalctl -f -u endlessh bekijken is verrassend vermakelijk — bots die verbinden en dan gewoon... wachten.

Hoe effectief is het echt?

Een onderzoeker draaide endlessh maandenlang en verzamelde data over gevangen bots. De resultaten zijn hilarisch:

  • Eén bot hield 416 gelijktijdige verbindingen open tegelijk — bleef maar nieuwe openen zonder de oude te sluiten
  • Eén IP-adres bleef 690.172 seconden verbonden — dat is 8 dagen aan één stuk — en downloadde 1,2 MB willekeurige rommel in de veronderstelling dat het een SSH-banner was
  • Sommige verbindingen duurden meer dan 12.000 seconden (3,3 uur) voordat de bot het opgaf
  • De mediaan traptijd was 17 seconden (de "slimme" bots met timeouts), maar het gemiddelde was 119 seconden — omhooggetrokken door de domme die eindeloos wachten

De kwaliteit van ondergrondse scansoftware varieert enorm. Sommige bots hebben een timeout van 15 seconden en gaan verder. Andere hebben helemaal geen timeout — ze zitten daar tot het einde der tijden te wachten op een loginprompt die nooit komt.

En het mooiste: endlessh gebruikt vrijwel geen resources. Het is één enkel proces dat duizenden verbindingen afhandelt met minimaal CPU- en geheugengebruik. De bots zijn degenen die resources verbranden, niet jij.

De tarpit monitoren

Bekijk in realtime hoe bots gevangen worden:

journalctl -f -u endlessh

Tel het huidige aantal gevangen verbindingen:

ss -tn | grep :22 | grep ESTAB | wc -l

Stap 6: SSH-poort wijzigen (Beknopt)

We hebben SSH al verplaatst naar 2222 voor de tarpit, maar hier is de algemene aanpak als je alleen de poort wilt wijzigen zonder endlessh:

# In /etc/ssh/sshd_config
Port 2222

Firewall bijwerken:

sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
sudo systemctl restart sshd

Security through obscurity is geen echte beveiliging, maar het vermindert wel de ruis van willekeurige scans. Gecombineerd met SSH-sleutels en fail2ban is het effectief.

Stap 7: Secretbeheer met pass

Sla API-sleutels en wachtwoorden niet op in leesbare configuratiebestanden. Gebruik pass — de standaard Unix-wachtwoordmanager.

Installeren:

sudo apt install pass gnupg

Instellen:

# Genereer een GPG-sleutel (als je er nog geen hebt)
gpg --gen-key
# Initialiseer pass met je GPG-sleutel
pass init "your-email@example.com"

Secrets opslaan:

pass insert api/anthropic
pass insert api/openai
pass insert gmail/app-password

Secrets ophalen in scripts:

export ANTHROPIC_API_KEY=$(pass show api/anthropic)

Waarom dit belangrijk is:

  • Secrets zijn GPG-versleuteld in rust
  • Zelfs als iemand toegang krijgt tot je bestandssysteem, kunnen ze de wachtwoorden niet lezen zonder je GPG-sleutel
  • Je kunt je wachtwoordopslag synchroniseren via git (veilig, want alles is versleuteld)
  • Werkt uitstekend met Clawdbot — sla je API-sleutels en kanaal-tokens veilig op

Je ~/.password-store/-map is versleuteld. Je ~/.clawdbot/clawdbot.json met leesbare tokens? Niet echt.

Stap 8: Clawdbot-beveiligingsaudit

Clawdbot heeft een ingebouwde beveiligingsscanner. Voer hem uit:

clawdbot security audit

Voor een diepere controle:

clawdbot security audit --deep

Om veelvoorkomende problemen automatisch te repareren:

clawdbot security audit --fix

Wat de audit controleert

  • Inkomende toegang — Kunnen onbekenden je bot berichten sturen?
  • Tool-impact — Kan prompt-injectie leiden tot shell-toegang?
  • Netwerkblootstelling — Is je Gateway zonder authenticatie bereikbaar?
  • Browserbediening — Is de browserbediening op afstand beveiligd?
  • Schijfrechten — Zijn credentials en logs beschermd?
  • Plugins — Zijn er onbetrouwbare extensies geladen?

Werkruimterechten repareren

De audit zal waarschijnlijk waarschuwen over rechten. Repareer ze:

chmod 700 ~/.clawdbot
chmod 600 ~/.clawdbot/clawdbot.json

Dit zorgt ervoor dat alleen jouw gebruiker de configuratie en credentials van Clawdbot kan lezen.

Locaties van credential-opslag

Weet waar je secrets staan:

  • Telegram-token: config of channels.telegram.tokenFile
  • WhatsApp-auth: ~/.clawdbot/credentials/whatsapp/*/creds.json
  • Koppelings-allowlists: ~/.clawdbot/credentials/*-allowFrom.json
  • Sessielogs: ~/.clawdbot/agents/*/sessions/*.jsonl

Al deze bestanden mogen alleen leesbaar zijn voor jouw gebruiker (niet voor groep/iedereen).

Stap 9: Kanaalbeveiliging

DM's vergrendelen

Standaard accepteert Clawdbot mogelijk berichten van iedereen. Maak het strakker:

Stel in je configuratie het DM-beleid in op allowlist:

{
"channels": {
"telegram": {
"dmPolicy": "allowlist",
"dmAllowFrom": ["your_telegram_id"]
}
}
}

Groepen vergrendelen

Hetzelfde voor groepen — gebruik allowlists in plaats van open:

{
"groupPolicy": "allowlist",
"groupAllowFrom": ["allowed_group_id"]
}

De beveiligingsaudit signaleert open beleid.

Stap 10: Aanvallers melden bij AbuseIPDB

Aanvallers lokaal blokkeren is goed. Ze wereldwijd op een zwarte lijst zetten is beter.

AbuseIPDB is een community-database van misbruikende IP-adressen. Wanneer je een aanvaller meldt, profiteert elke andere server die hun blokkeerlijst gebruikt. Het is collectieve verdediging.

Gratis API-sleutel ophalen

Registreer je op abuseipdb.com — de gratis tier staat 1000 meldingen/dag toe.

Sla hem veilig op:

pass insert abuseipdb/api-key

Een geblokkeerd IP melden

ABUSEIPDB_KEY=$(pass show abuseipdb/api-key)
curl -s https://api.abuseipdb.com/api/v2/report \
-H "Key: $ABUSEIPDB_KEY" \
-H "Accept: application/json" \
--data-urlencode "ip=2.57.122.209" \
-d "categories=18,22" \
--data-urlencode "comment=SSH brute-force (fail2ban auto-ban)"

Categorieën 18,22 = brute-force + SSH.

Automatisch melden met Clawdbot

Ik heb een Clawdbot-skill gebouwd die elke nieuwe ban automatisch meldt bij AbuseIPDB. Als je Clawdbot draait, installeer hem:

clawdhub install fail2ban-reporter

Of haal hem van GitHub:

git clone https://github.com/jestersimpps/clawdbot-fail2ban-reporter.git
sudo bash clawdbot-fail2ban-reporter/scripts/install.sh

Na het instellen wordt elke fail2ban-ban automatisch gemeld bij AbuseIPDB. Geen moeite, maximale community-impact.

Stap 11: Lopende aanvallen monitoren

Controleer wie er geblokkeerd is:

sudo fail2ban-client status sshd

Bekijk live blokkades:

sudo tail -f /var/log/fail2ban.log | grep Ban

Controleer recente SSH-pogingen:

journalctl -u ssh -n 50 | grep -E "Failed|Invalid"

Bekijk hoe endlessh bots in realtime vangt:

sudo journalctl -f -u endlessh

Je ziet verbindingen die gewoon blijven hangen. Elk daarvan is een bot die tijd verspilt in plaats van je echte SSH lastig te vallen.

Wat aanvallers daadwerkelijk proberen

Uit mijn serverlogs in slechts één uur:

  • oracle — Oracle DB-standaardgebruiker
  • postgres — PostgreSQL-standaard
  • git — GitLab/Gitea-servers
  • solana — Crypto-node-operators (populair doelwit)
  • HwHiAiUser — Huawei-apparaat standaard
  • admin, root — De klassiekers
  • ftpuser — Legacy FTP

Ze spuiten veelgebruikte gebruikersnamen in de hoop dat er iets blijft plakken. fail2ban stopt ze na 3 pogingen, maar nu komen ze eerst in de tarpit terecht.

De complete 5-minuten setup

Kopieer en plak dit hele blok om een verse Clawdbot-server te beveiligen:

# Beveiligingstools installeren
sudo apt update && sudo apt install -y fail2ban ufw endlessh gnupg pass
# SSH-sleutel genereren (voer uit op je LOKALE machine)
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id user@your-server-ip
# Wachtwoordauth uitschakelen (OP DE SERVER)
sudo sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
# SSH verplaatsen naar poort 2222 voor tarpit-setup
sudo mkdir -p /etc/systemd/system/ssh.socket.d/
sudo tee /etc/systemd/system/ssh.socket.d/override.conf << 'EOF'
[Socket]
ListenStream=
ListenStream=2222
EOF
# endlessh-tarpit configureren op poort 22
sudo mkdir -p /etc/endlessh
sudo tee /etc/endlessh/config << 'EOF'
Port 22
Delay 10000
MaxLineLength 32
MaxClients 4096
LogLevel 1
EOF
# endlessh systemd-service repareren
sudo mkdir -p /etc/systemd/system/endlessh.service.d/
sudo tee /etc/systemd/system/endlessh.service.d/override.conf << 'EOF'
[Service]
PrivateUsers=false
EOF
# fail2ban configureren
sudo tee /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 2592000
findtime = 600
EOF
# Firewall configureren
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp # Nieuwe SSH-poort
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw --force enable
# Alles starten
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket ssh
sudo systemctl enable --now fail2ban endlessh
# Clawdbot-rechten repareren
chmod 700 ~/.clawdbot
chmod 600 ~/.clawdbot/clawdbot.json 2>/dev/null
# Clawdbot-beveiligingsaudit uitvoeren
clawdbot security audit --fix
# Alles verifiëren
echo "=== SSH op poort 2222 ==="
ss -tlnp | grep :2222
echo "=== endlessh-tarpit op poort 22 ==="
ss -tlnp | grep :22
echo "=== fail2ban-status ==="
sudo fail2ban-client status sshd
echo "=== ufw-status ==="
sudo ufw status verbose
echo "=== Clawdbot-beveiliging ==="
clawdbot security audit

Belangrijk: Na het uitvoeren hiervan, verbind je via SSH op de nieuwe poort:

ssh user@your-server-ip -p 2222

De complete beveiligingsstack

Na het volgen van deze gids heeft je Clawdbot-server:

  • SSH-sleutelauthenticatie — Geen wachtwoorden om te brute-forcen
  • Wachtwoordauth uitgeschakeld — Zelfs als ze juist raden, werkt het niet
  • endlessh-tarpit — Bots verspillen tijd op poort 22 terwijl echte SSH zich verbergt op 2222
  • fail2ban — 3 pogingen → 30 dagen ban (extra beveiligingslaag)
  • ufw-firewall — Alleen noodzakelijke poorten open
  • pass — Secrets GPG-versleuteld in rust
  • Clawdbot-koppeling — Onbekenden kunnen je bot niet berichten
  • Juiste rechten — Configuratie en credentials vergrendeld
  • AbuseIPDB-melding — Aanvallers worden wereldwijd op de zwarte lijst gezet

Dat is verdediging in de diepte. Meerdere lagen, waarbij elke laag de volgende aanval moeilijker maakt. De tarpit is de kers op de taart — in plaats van aanvallers alleen te blokkeren, verspil je hun tijd en resources terwijl je echte diensten verborgen blijven.

Het is geen paranoia als elke server met een publiek IP-adres binnen uren wordt aangevallen. Vijf minuten setup. Beter slapen 's nachts.


Bekijk voor meer Clawdbot-beveiligingsdetails de officiële beveiligingsdocumentatie.

Stay Updated

Get notified about new posts on automation, productivity tips, indie hacking, and web3.

No spam, ever. Unsubscribe anytime.

Comments

Related Posts