*codekeks — Quick Security How‑to (Mac mini / MAMP Pro / WordPress)
Wichtig — Warnung:
Diese Anleitung beschreibt Maßnahmen zur Untersuchung, Härtung und Wiederherstellung einer lokalen Entwicklungs- bzw. Homesever‑Installation (Mac mini mit MAMP Pro, lokale WordPress‑Instanz). Wenn Inhalte öffentlich erreichbar sind (Port‑Forwarding, DynDNS, No‑IP usw.), besteht hohe Gefahr, dass Angreifer die Seite kompromittieren und Dateien, Datenbanken oder private Schlüssel auslesen. Arbeite immer offline / hinter VPN, sichere vollständige Backups (Dateien + DB) bevor du Änderungen vornimmst und scanne/korrigiere nur Systeme, die du OWNEST oder für die du schriftliche Erlaubnis hast.
⸻
Zielgruppe
Dies ist für Entwicklerinnen und Hobbyschrauber, die Spaß am Programmieren haben, aber die Risiken von öffentlich erreichbaren Dev‑Servern unterschätzen. Schritt‑für‑Schritt, copy/paste‑freundlich (für MarsEdit oder jeden Markdown‑Editor).
⸻
Übersicht (Was tun?)
1. Sofortmaßnahmen (wenn öffentlich erreichbar)
2. Sichern (Backups als Beweis + Wiederherstellungspunkt)
3. Erstdiagnose (Wer/was/zapft den Server an?)
4. WordPress‑Cleanup (Plugins, Shells, Backdoors)
5. System‑Härtung (SSH, Firewall, Logs)
6. MAMP Pro / TLS / Zertifikate prüfen
7. Recovery / Neuaufbau‑Plan
8. Prävention für die Zukunft
⸻
1) Sofortmaßnahmen
• Wenn angreifbar aus dem Internet: Port‑Forwarding am Router ausschalten oder Maschine komplett vom Internet trennen.
• SSH‑Zugang temporär deaktivieren (am Router oder sudo ufw deny für den Port) wenn du unsicher bist.
• Erstelle schnelle Offline‑Backups (Dateien + SQL‑Dump) auf externem Medium:
Datei‑Backup (Webroot)
cd /Users/andy/Programmierung
tar -czf /tmp/codekeks-files-backup-$(date +%F).tar.gz codekeks.test
Datenbank‑Dump (Beispiel für MySQL/MariaDB lokal)
/Applications/MAMP/Library/bin/mysql -u root -p -e „CREATE DATABASE codekeksbackup;“
/Applications/MAMP/Library/bin/mysqldump -u root -p yourwpdb > /tmp/codekeks-db-$(date +%F).sql
Hinweis: yourwpdb ersetzt du durch den Namen deiner DB. Bewahre die Backups offline (USB) und nicht auf derselben Maschine.
⸻
2) Erstdiagnose — Prozesse, Ports, Logs
Kopiere & paste diese Befehle in Terminal (auf dem Mac mini). Sie liefern den aktuellen Befund.
Welche Dienste lauschen (Mac):
sudo lsof -i -nP | grep LISTEN
Alternativ (netstat/ss):
netstat -an | egrep ‚LISTEN|ESTABLISHED‘
Apache / MAMP Prozesse:
ps aux | egrep ‚httpd|apache|MAMP‘ | egrep -v grep
MAMP‑Pro Logs (passen Pfade an):
ls -l „/Applications/MAMP/logs/“
tail -n 200 „/Applications/MAMP/logs/apacheerror.log“
System logs (auth/cron) — macOS Pfade prüfen:
sudo tail -n 200 /var/log/system.log
sudo log show –predicate ’sender CONTAINS „sshd“‚ –last 1d
Cronjobs und user crontab:
crontab -l || true
sudo crontab -l -u root || true
Lies die Output‑Zeilen aufmerksam: viele Verbindungsversuche von einer IP, neue Prozesse, cronjobs, oder seltsame Dienste können Indikatoren sein.
⸻
3) SSH keys / Accounts prüfen & rotieren
Wenn du vermutest, dass SSH‑Keys kompromittiert sind:
1) Inspect authorizedkeys
cat ~/.ssh/authorizedkeys
2) Backup und neu schreiben (löschen alle Einträge, füge nur vertrauenswürdige Keys wieder ein)
cp ~/.ssh/authorizedkeys ~/.ssh/authorizedkeys.bak
Lösche die Datei, füge den neuen öffentlichen Schlüssel manuell wieder hinzu
: > ~/.ssh/authorizedkeys
chmod 600 ~/.ssh/authorizedkeys
3) Sudoer & users prüfen
sudo dscl . -read /Users/$(whoami)
cut -d: -f1 /etc/passwd
4) Erstelle frische Schlüssel auf deinem sicheren Gerät (z. B. MacBook Air) und kopiere nur die neuen pubkeys
ssh-keygen -t ed25519 -C „andy@MacBookAir“ -f ~/.ssh/ided25519codekeks
ssh-copy-id -i ~/.ssh/ided25519codekeks.pub youruser@macmini
5) Falls suspicion of root compromise: change root password and rotate all admin passwords
sudo passwd root
change WP admin and database passwords next (see WP section)
⸻
4) WordPress‑Spezifisch — Plugins, Suspicious Files, Reinstall
Wichtiger Punkt: File‑Manager‑Plugins (z. B. file-manager-advanced, filester) erlauben Edit/Upload von PHP/Backdoors. Entfernen wenn möglich.
Checkliste (copy/paste):
cd /Users/andy/Programmierung/codekeks.test
1) Liste der Plugins (Verzeichnis) — deaktiviere problematische Plugins
ls -la wp-content/plugins
2) Suche nach typischen Webshell / eval / base64 / pregreplace/e patterns
grep -RIn –exclude-dir=wp-content/uploads -e „eval(“ -e „base64decode(“ -e „pregreplace(.\\/e“ -e „shellexec(“ . || true
3) Prüfe wp-config.php auf gestohlene DB‑Zugangsdaten
sed -n ‚1,200p‘ wp-config.php
4) Verifiziere WordPress‑Core (wenn WP‑CLI verfügbar):
wp core verify-checksums
5) Deaktiviere alle Plugins temporär (via filesystem)
mv wp-content/plugins wp-content/plugins.DISABLED
mkdir wp-content/plugins
Falls du Admin‑Zugang brauchst, danach Plugins einzeln wiederherstellen aus vertrauenswürdigen downloads
6) Suche nach unerwarteten Admin‑Benutzern in DB (Beispiel mit sqlite/mysql client)
mit mysql client:
/Applications/MAMP/Library/bin/mysql -u root -p -D yourwpdb -e „SELECT ID,userlogin,useremail,userregistered FROM wpusers;“
7) Ändere WordPress Salts & Admin Passwords
in wp-config.php: set new SALT values (https://api.wordpress.org/secret-key/1.1/salt/)
oder mit WP‑CLI: wp user update admin –userpass=“NewStr0ngP@ss“
Wenn du unsicher bist: ziehe WordPress komplett neu auf einer sauberen Maschine auf und importiere Inhalte nur aus Clean‑Backups.
⸻
5) Dateirechte & Ownership hart setzen (Webroot)
Beachte: passe den Webserver‑User an (bei MAMP oft andy oder www-data abhängig von Konfiguration).
cd /Users/andy/Programmierung/codekeks.test
Beispiel: setze owner auf current user und group staff (macOS)
sudo chown -R $(whoami):staff .
Dateien 644, Verzeichnisse 755
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
wp-config.php darf restriktiver sein
chmod 640 wp-config.php
⸻
6) Firewall (ufw) / macOS PF / MAMP Port‑Forwarding
Auf deinem Server (wenn Linux) ist ufw nützlich; auf macOS verwendest du pf oder kontrollierst via Router/No‑IP. Defensive Regeln (Linux Beispiel):
Beispiel: nur SSH von Home‑IP (ersetze 1.2.3.4)
sudo ufw default deny incoming
sudo ufw allow from 1.2.3.4 to any port 2222 proto tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Auf macOS: kontrolliere Port‑Weiterleitungen im Router; stelle sicher, dass MAMP Pro keine ungewollte öffentliche Bindung hat (Listen nur 127.0.0.1 wenn möglich).
⸻
7) Fail2ban / logwatch (empfohlen)
Installiere Fail2ban (auf Linux) und richte Filter für sshd und Web‑BruteForce ein. Beispiel für sshd in /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
Für WordPress kannst du rules schreiben, die viele POSTs auf /wp-login.php oder viele 404s bannen.
⸻
8) MAMP Pro — Zertifikate & Konfiguration prüfen
• MAMP Pro generiert eigene certs. Prüfe Pfade in MAMP Pro UI → Hosts → SSL. Falls du Certs manuell legst, achte auf: SSLCertificateFile und SSLCertificateKeyFile Pfade in der generierten httpd-ssl.conf.
Beispiel: Kontrolle der Zertifikate
openssl x509 -in „/Applications/MAMP/Library/OpenSSL/certs/codekeks.test.crt“ -noout -subject -issuer -dates
Apache VirtualHosts dump (MAMP intern kann die vhosts temporär nicht anzeigen)
/Applications/MAMP/Library/bin/httpd -t -D DUMPVHOSTS
Apache log tail (MAMP)
tail -n 200 „/Applications/MAMP/logs/apacheerror.log“
Wenn MAMP UI „Change“ Buttons nicht reagieren: starte MAMP Pro neu, oder reinstalliere MAMP helper plist (als letzte Option).
⸻
9) Lokaler Sicherheits‑Scanner (nur für deine Maschine)
Eine kleine, lokale Port‑Scan‑Demo (nur localhost) — nutze NICHT gegen fremde IPs.
localportscan.py — scan localhost 1..1024
(siehe Anleitung oben).
Führe es nur lokal aus, um zu sehen, welche Services dich erreichbar machen.
⸻
10) Recovery / Neuaufbau‑Plan (sicherer Weg)
1. Backup (Dateien + DB) offline sichern.
2. Isoliere kompromittiertes System (netzwerk, router).
3. Prüfe SSH, autorizedkeys, neue crons, LaunchAgents/Daemons, neue users.
4. Wenn nur WP betroffen: lade frischen WP‑Core + Themes + Plugins aus offiziellen Quellen auf sauberen Host. Importiere Inhalte (Posts/Media) aus clean backup.
5. Wechsel alle Passwörter (DB, WP admin, FTP, Hosting, No‑IP, Router).
6. Erstelle neue SSH Keys, revoke alte. 7. Aktiviere Firewall & Fail2ban. 8. If public exposure needed, put server behind VPN or reverse proxy with authentication.
⸻
11) Prävention (Kurz & knapp)
• Keine Entwicklungsserver öffentlich zugänglich machen (verwende VPN oder SSH‑tunnel).
• Keine File‑Manager Plugins auf öffentlich zugänglichen Seiten.
• Automatisierte Backups & regelmäßige Updates.
• Principle of Least Privilege: Webserver User minimalrechte.
• Monitoring + Alerts (Log‑Aggregation, Fail2ban).
⸻
12) Nützliche Befehle / Copy‑Paste Cheatsheet (alles auf einen Blick)
Backup
cd /Users/andy/Programmierung
tar -czf /tmp/codekeks-files-backup-$(date +%F).tar.gz codekeks.test
/Applications/MAMP/Library/bin/mysqldump -u root -p yourwpdb > /tmp/codekeks-db.sql
Prozesse & Ports
sudo lsof -i -nP | grep LISTEN
sudo ss -tulpen
ps aux | egrep ‚httpd|apache|MAMP‘ | egrep -v grep
Logs (MAMP)
tail -n 200 „/Applications/MAMP/logs/apacheerror.log“
Find suspicious PHP patterns
cd /Users/andy/Programmierung/codekeks.test
grep -RIn –exclude-dir=wp-content/uploads -e „eval(“ -e „base64decode(“ -e „pregreplace(.\\/e“ -e „shellexec(“ . || true
File permissions
sudo chown -R $(whoami):staff /Users/andy/Programmierung/codekeks.test
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
chmod 640 wp-config.php
Rotate SSH keys
cp ~/.ssh/authorizedkeys ~/.ssh/authorizedkeys.bak
: > ~/.ssh/authorizedkeys
chmod 600 ~/.ssh/authorizedkeys
Basic ufw rules (Linux example)
sudo ufw default deny incoming
sudo ufw allow from to any port 2222 proto tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
⸻
13) Wenn du Beweise sammeln willst (Forensic basics)
• Kopiere Logs & Backups an sicheren Ort.
• Notiere Zeitpunkte (UTC), verdächtige IPs, und alle Befehle, die du ausführst (ops audit trail).
• Wenn es strafrechtlich relevant ist, kontaktiere professionelle Incident Response.
⸻
14) Weiteres / Ressourcen
• WordPress Hardening Guide (official)
• Fail2ban docs
• Keep SSH key management strict (use hardware keys if möglich)
⸻
Ende — Kurzwort des Autors
Wenn du möchtest, erstelle ich dir jetzt ein Playbook mit genau den Terminal‑Befehlen, die du auf deinem Mac mini schrittweise ausführen kannst (inkl. Interpretation der Outputs). Sollen wir das machen?
— Andreas (für codekeks)