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.135Jan 27 02:47:25 sshd: Invalid user main from 217.154.38.135Jan 27 02:47:56 sshd: Invalid user HwHiAiUser from 217.154.38.135Jan 27 02:48:26 sshd: Invalid user guest from 217.154.38.135Jan 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 machinecat ~/.ssh/id_ed25519.pub# Kopieer de output, dan op je server:echo "your-public-key-here" >> ~/.ssh/authorized_keyschmod 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 noPubkeyAuthentication yesChallengeResponseAuthentication 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 updatesudo apt install -y fail2ban
Maak een lokale configuratie aan:
sudo tee /etc/fail2ban/jail.local << 'EOF'[sshd]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 3bantime = 2592000findtime = 600EOF
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 fail2bansudo systemctl restart fail2ban
Controleer of het werkt:
sudo fail2ban-client status sshd
Stap 4: ufw-firewall configureren
# Standaard: alles inkomend blokkerensudo ufw default deny incomingsudo ufw default allow outgoing# Sta alleen toe wat Clawdbot nodig heeftsudo 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# Inschakelensudo 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=2222EOF
Herladen en herstarten:
sudo systemctl daemon-reloadsudo systemctl restart ssh.socketsudo systemctl restart ssh
Controleer of SSH nu op 2222 draait:
ss -tlnp | grep :2222
endlessh configureren voor poort 22
sudo mkdir -p /etc/endlesshsudo tee /etc/endlessh/config << 'EOF'Port 22Delay 10000MaxLineLength 32MaxClients 4096LogLevel 1EOF
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=falseEOF
endlessh starten
sudo systemctl daemon-reloadsudo systemctl enable endlesshsudo systemctl start endlessh
Controleer of het werkt:
sudo systemctl status endlesshss -tlnp | grep :22
ufw bijwerken voor de nieuwe SSH-poort
# De nieuwe SSH-poort toestaansudo 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_configPort 2222
Firewall bijwerken:
sudo ufw allow 2222/tcpsudo ufw delete allow 22/tcpsudo 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-sleutelpass init "your-email@example.com"
Secrets opslaan:
pass insert api/anthropicpass insert api/openaipass 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 ~/.clawdbotchmod 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.gitsudo 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 installerensudo 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_configsudo sed -i 's/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config# SSH verplaatsen naar poort 2222 voor tarpit-setupsudo mkdir -p /etc/systemd/system/ssh.socket.d/sudo tee /etc/systemd/system/ssh.socket.d/override.conf << 'EOF'[Socket]ListenStream=ListenStream=2222EOF# endlessh-tarpit configureren op poort 22sudo mkdir -p /etc/endlesshsudo tee /etc/endlessh/config << 'EOF'Port 22Delay 10000MaxLineLength 32MaxClients 4096LogLevel 1EOF# endlessh systemd-service reparerensudo mkdir -p /etc/systemd/system/endlessh.service.d/sudo tee /etc/systemd/system/endlessh.service.d/override.conf << 'EOF'[Service]PrivateUsers=falseEOF# fail2ban configurerensudo tee /etc/fail2ban/jail.local << 'EOF'[sshd]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 3bantime = 2592000findtime = 600EOF# Firewall configurerensudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 2222/tcp # Nieuwe SSH-poortsudo ufw allow 80/tcp # HTTPsudo ufw allow 443/tcp # HTTPSsudo ufw --force enable# Alles startensudo systemctl daemon-reloadsudo systemctl restart ssh.socket sshsudo systemctl enable --now fail2ban endlessh# Clawdbot-rechten reparerenchmod 700 ~/.clawdbotchmod 600 ~/.clawdbot/clawdbot.json 2>/dev/null# Clawdbot-beveiligingsaudit uitvoerenclawdbot security audit --fix# Alles verifiërenecho "=== SSH op poort 2222 ==="ss -tlnp | grep :2222echo "=== endlessh-tarpit op poort 22 ==="ss -tlnp | grep :22echo "=== fail2ban-status ==="sudo fail2ban-client status sshdecho "=== ufw-status ==="sudo ufw status verboseecho "=== 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.


