class: center, middle  # Mailserver gehacktWas tun? ### Hauke Goos-Habermann #### https://goos-habermann.de --- ### Über mich - Entwickler des
Softwareverteilungssystems m23
- Organisator der
Kieler Open Source und Linux Tage
-
Dienstleister zu m23, Linux und Freier Software
- Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Wöchentlicher Livestream *"Jean und Hauke Show"* auf https://www.youtube.com/c/LinuxGuides - *"Nicht der Weisheit letzter Schluß"* mit **beruflichen** oder **privaten Projekten** auf
tube.tchncs.de/c/ndwls
und
youtube.com/@nichtderweisheit
- Mag langsam keine Mailserver mehr ;-) --- ### Keine Panik!  Wenn etwas **schiefgehen** sollte (z.B. wenn der eigene Mailserver zum Versenden von **Spam-Mails** mißbraucht wird), den **Mailserver** bzw. den sendenden SMTP-Teil – üblicherweise
Postfix
– stoppen. ```bash # Mailversand stoppen /etc/init.d/postfix stop systemctl stop postfix ``` Damit haben wir Zeit gewonnen, um die Situation zu analysieren. --- ### Wurden wir gehackt?  Mit ***postqueue*** können wir uns den **Postfix-Zustellungspuffer**, der Mails speichert, die noch versendet werden sollen, ansehen: ```bash postqueue -p ``` Das funktioniert auch, wenn Postfix deaktiviert wurde. Sollten wir hier **viele Mails** vorfinden, die an unbekannte Adressen geschickt werden sollen, so haben wir wahrscheinlich ein **Problem** :-( Mit der Nachrichten-ID können wir uns einzelne **Mails anschauen**: ```bash postcat -vq [ID] ``` --- ### Loginarten  Im nächsten Schritt schauen wir uns an, wie der **Angreifer** (wahrscheinlich) **Zugriff** bekommen hat. Es gibt prinzipiell zwei Arten von Mailbenutzern * **Lokale Konten**, die ohne Authentifizierung senden können. Hierbei wird das Senden z.B. durch ein Skript oder einen per SSH angemeldeten Benutzer angestoßen. (Darum geht es heute nicht) * **Konten**, die sich per
SMTP-Auth
z.B. über ein **eMail-Programm** anmelden --- ### Mailkonto identifizieren  Die Datei ***mail.log*** enthält viel Informationen rund um den Mailserver (u.a. wer sich angemeldet hat). **Massenhafte Anmeldungen** können wir so schnell herausfinden: ```bash grep -iE 'sasl_username=|ESMTPA|ESMTPSA'\ /var/log/mail.log ``` ```log [Zeit] [Server] postfix/submission/smtpd [PID]: [Sitzungsnummer]: client=unknown[IP], sasl_method=LOGIN, sasl_username=[Name] ``` * Zeit: Wann dier Login stattfand * Server: Name unseres Servers * PID: Prozeßnummer * Sitzungsnummer: Login und weitere Aktionen einer Sitzung werden mit einer Nummer gekennzeichnet * IP: Entfernte IP * Name: Anmeldename des Mail-Kontos --- ### Mailkonto sperren  Das **Mailkonto** sollte nun **gesperrt** oder zumindest mit einem **neuen Paßwort** ausgestattet werden, um weiteren Mißbrauch auszuschließen. Wenn Ihr die
Dodger-Tools
installiert und mein Mailserver-Setup verwendet, könnt Ihr für ein **Systemkonto**, das zugleich für die Authentifizierung des dazugehörigen **Mailkontos** verwendet wird, auf ein **Zufallspaßwort** setzen: ```bash dt_sys_setRandomUserPassword [Name] ``` --- ### Zugriffe zählen Wenn das **schuldige Konto gefunden** ist, können wir die zugreifenden IP-Adressen aus der Logdatei heraufiltern und zählen, **wie oft** von der jeweiligen **IP-Adresse zugegriffen** wurde: ```bash grep "sasl_username=[Name]" /var/log/mail.log |\ sed -n 's/.*client=.*\[\([0-9.]*\)\].*/\1/p' |\ awk '{ count[$1]++ } END { for (ip in count) { print count[ip],"*",ip } }' |\ sort -n ``` Zeilen 1. Nur Zeilen mit Login von bestimmtem Benutzer 2. IP-Adresse herausziehen 3. Zählen, wie oft eine IP-Adresse vorkommt 4. IP-Adressen nach aufsteigender Zugriffsanzahl sortieren --- ### Wo kommt es her?  Mit den IP-Adressen können wir nachschauen, aus welchem **Land** bzw. von welchem **Provider** die Zugriffe stammen und dies z.B. überprüfen mit: * https://www.whois.com * https://who.is * https://check.spamhaus.org Je nach Land und Provider mag es auch sinnvoll sein, die IP über die ***abuse*-Adresse** zu **melden**. --- ### Beweise sichern  Für eine spätere Auswertung sichern wir noch als root (in einem neuen Verzeichnis): ```bash # Logdateien und Konfiguration postconf -n > "postconf-n.txt" postqueue -p > "queue-list.txt" postqueue -j > "queue.json" 2>"queue-json-errors.txt" || true journalctl --since "48 hours ago" -u postfix\ > "postfix-journal.txt" tar --xattrs --acls --numeric-owner -czf mail-logs.tar.gz\ /var/log/mail.log* /var/log/mail.info* /var/log/mail.err* # Nachrichtenwarteschlange Q=$(postconf -h queue_directory) tar --xattrs --acls --numeric-owner \ -czf "postfix-queue-original.tar.gz" \ -C "$Q" active deferred hold incoming maildrop bounce\ defer trace flush corrupt ``` --- ### Beweise sichern 2  Nachrichten und Header sichern: ```bash apt install -y jq mkdir -p "messages" postqueue -j | jq -r '.queue_id' | while read -r id; do [ -n "$id" ] || continue postcat -q "$id" > "messages/$id.postcat.txt" postcat -qeh "$id" > "messages/$id.envelope-headers.txt" postcat -qbh "$id" > "messages/$id.message.eml" done tar cfvz messages.tar.gz messages ``` --- ### Aufräumen und Neustart  Einzelne Nachrichten könnt Ihr anhand der Nachrichten-ID löschen oder wenn Ihr Euch sicher seid, daß im Zustellungspuffer **nichts erhaltenswertes** mehr ist, könnt Ihr **alle Mails löschen**: ```bash postsuper -d [Nachrichten-ID] postsuper -d ALL ``` Mailversand wieder starten ```bash /etc/init.d/postfix start # oder systemctl start postfix ``` --- ### Weitere Absicherung  Mit **
Fail2Ban
** könnt Ihr das **Durchprobieren** von **Mailbenutzern** und **Paßworten** automatisch – nach einer bestimmten Anzahl von Fehlversuchen – **blockieren** lassen. Dies muß allerdings extra konfiguriert werden: ```bash echo '[postfix] enabled = true mode = auth logpath = /var/log/mail.log maxretry = 3 bantime = 3600 findtime = 600 banaction = iptables-allports' >\ /etc/fail2ban/jail.d/postfix-sasl.conf /etc/init.d/fail2ban restart ``` Mehr dazu:
claudiokuenzler.com
--- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de