Quick Security How‑to

*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 your
wpdb > /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/apache
error.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/authorized
keys

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, autorized
keys, 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 „base64
decode(“ -e „pregreplace(.\\/e“ -e „shell
exec(“ . || 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/authorized
keys

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)