# exitrace **Remote Exim-Log-Trace & Status für einzelne Mails/Adressen/Domain-Ziele** Führt Exim-Log-Analyse remote auf `logger.in.nessus.at` aus, wo sich die Exim-Logs befinden. Durchsucht Logs nach Message-IDs, gruppiert alle Ereignisse und klassifiziert den Delivery-Status. --- ## Features - **Remote-Ausführung**: Automatische SSH-Verbindung zu `logger.in.nessus.at` - **Zeitfenster**: Letzte N Stunden/Tage ODER konkretes Datum/Datumsbereich - **Filter**: Absender, Empfänger (Regex), Domain, Message-ID, zusätzliche Regex - **Gruppierung**: Alle Treffer pro Exim-Message-ID mit Status-Zusammenfassung - **Status-Klassifikation**: OK / PARTIAL / DELAY / FAIL / UNKNOWN - **MX-Records**: Optional DNS-Abfragen für Ziel-Domain (--mx) - **Failure-Detection**: Markiert häufige Fehler (z.B. "all hosts failing") - **Chronologische Ausgabe**: Sortiert nach Message-ID Erstkontakt - **Komprimierte Logs**: Automatischer Support für .gz-Archive - **Smart Connection**: Verwendet `go logger` oder `ssh ${LUSER}@logger.in.nessus.at` --- ## Installation Via Installer (empfohlen): ```bash cd ~/.dev/esn-support-bash-snippets ./install.sh # Dann: 3) Legacy Tools auswählen und exitrace installieren ``` Manuelle Installation: ```bash git clone /esn-support-bash-snippets.git ~/.dev/esn-support-bash-snippets cd ~/.dev/esn-support-bash-snippets/legacy/exitrace chmod +x exitrace.sh ln -sf ~/.dev/esn-support-bash-snippets/legacy/exitrace/exitrace.sh ~/bin/exitrace ``` ## Voraussetzungen - **LUSER Environment Variable** ODER installiertes `go` Tool - **SSH-Zugang** zu `logger.in.nessus.at` - Standard Unix-Tools (awk, grep, date, ssh/scp) - `dig` (optional, für --mx Feature) **Setup:** ```bash export LUSER="dein-username" # Oder in ~/.bash_env für permanente Konfiguration echo 'export LUSER="dein-username"' >> ~/.bash_env ``` --- ## Nutzung ### Standardaufruf ```bash exitrace ``` (durchsucht heutiges Log ohne Filter) ### Beispiele **Häufige Use-Cases:** ```bash # Mail-Trace für spezifischen Absender zu t-online.de (letzte 48h) exitrace -FROM franziskus@adjuva.info -DOMAIN t-online.de -H 48 # Alle Mails an bestimmte Domain in Zeitspanne exitrace -DOMAIN gmx.de -r 2025-09-10..2025-09-11 # Konkrete Message-ID verfolgen exitrace -MSGID 1uwRvz-000Fz2-CI # Regex-Filter auf Empfänger + MX-Records anzeigen exitrace -TO '.*@gmail\.com' -d 2025-09-11 --mx # Kombinierte Filter: Absender + Domain + Zeitfenster exitrace -FROM noreply@company.com -DOMAIN outlook.com -H 24 ``` **Debugging & Analyse:** ```bash # Dry-Run: zeigt nur welche Logfiles durchsucht würden exitrace -n -H 24 # Alle Mails von Domain in letzten 7 Tagen exitrace -FROM '.*@problematic-domain\.com' -DAYS 7 # Zusätzlicher Regex-Filter exitrace -DOMAIN example.com -GREP "550.*blocked" -H 12 ``` **Backwards Compatibility:** ```bash # Alte Parameter funktionieren weiterhin exitrace -f sender@domain.com -D example.de -H 48 exitrace -m 1uwRvz-000Fz2-CI exitrace -t '.*@gmail\.com' --mx ``` --- ## Optionen ``` Usage: exitrace [OPTS] Zeitfenster (eine Option wählen): -H, --hours N Letzte N Stunden durchsuchen -DAYS, --days N Letzte N Tage durchsuchen -d, --date YYYY-MM-DD Exaktes Datum -r, --range A..B Datumsbereich (inkl.): YYYY-MM-DD..YYYY-MM-DD Filter (beliebig kombinierbar): -FROM, --from ADDR Envelope-From / "from <...>" (alias: -f) -TO, --to REGEX Empfänger (Regex, matcht nach " for " oder in "** ...") (alias: -t) -DOMAIN, --domain NAME Ziel-Domain (z. B. example.de), prüft auf Zustellungen/Fehler dorthin (alias: -D) -MSGID, --msgid ID Exim-Message-ID (z. B. 1uwRvz-000Fz2-CI) (alias: -m) -GREP, --grep REGEX Zusätzlicher Regex auf Logzeilen (alias: -G) Sonstiges: --mx Zeigt MX-Einträge (und A/AAAA) für --domain -n, --dry-run Zeigt nur, welche Logfiles untersucht würden -h, --help Diese Hilfe Remote Execution: Wird automatisch remote auf logger.in.nessus.at ausgeführt. Verwendet 'go logger' oder 'ssh ${LUSER}@logger.in.nessus.at'. ``` --- ## Beispielausgabe ### Erfolgreiche Zustellung ``` [OK] ID=1v2K8X-0004Zm-BC | First=2025-09-11 08:32:15 | From=franziskus@adjuva.info | Rcpts=user@t-online.de | Delivered=1 Deferred=0 Failed=0 ------------------------------------------------------------------------ ID: 1v2K8X-0004Zm-BC First: 2025-09-11 08:32:15 Last: 2025-09-11 08:32:47 From: franziskus@adjuva.info Rcpts: user@t-online.de Status: OK (Delivered=1, Deferred=0, Failed=0) Log: 2025-09-11 08:32:15 | <= franziskus@adjuva.info H=mail.adjuva.info [10.0.0.1] P=esmtp S=2156 2025-09-11 08:32:47 | => user@t-online.de R=dnslookup T=remote_smtp H=mx01.t-online.de [217.5.206.120] ------------------------------------------------------------------------ ``` ### Fehlgeschlagene Zustellung ``` [FAIL] ID=1v2L9Y-0005Ap-DE | First=2025-09-11 09:15:32 | From=franziskus@adjuva.info | Rcpts=blocked@t-online.de | Delivered=0 Deferred=0 Failed=1 ------------------------------------------------------------------------ ID: 1v2L9Y-0005Ap-DE First: 2025-09-11 09:15:32 Last: 2025-09-11 09:15:55 From: franziskus@adjuva.info Rcpts: blocked@t-online.de Status: FAIL (Delivered=0, Deferred=0, Failed=1) Log: 2025-09-11 09:15:32 | <= franziskus@adjuva.info H=mail.adjuva.info [10.0.0.1] P=esmtp S=1847 2025-09-11 09:15:55 | ** blocked@t-online.de R=dnslookup T=remote_smtp H=mx01.t-online.de [217.5.206.120]: SMTP error from remote mail server after RCPT TO:: 550 requested action not taken: mailbox unavailable ------------------------------------------------------------------------ ``` **Status-Klassifikation:** - `OK`: Alle Mails erfolgreich zugestellt - `PARTIAL`: Teilweise zugestellt, aber auch Fehler/Delays - `DELAY`: Noch in Warteschlange (Deferred) - `FAIL`: Permanent fehlgeschlagen - `UNKNOWN`: Status unklar Bei MX-Abfrage (--mx) wird zusätzlich angezeigt: ``` == MX für example.de == 10 mx1.example.de. 20 mx2.example.de. -- A/AAAA der MX: mx1.example.de. | 192.0.2.1,192.0.2.2 mx2.example.de. | 192.0.2.3 ======================================================================== ``` Bei Delivery-Stalls: ``` Note: DELIVERY STALL erkannt: 'all hosts for domain failing (retry/backoff)' ``` --- ## Setup-Hinweise Nach Installation über `./install.sh` ist das Script direkt verfügbar: ```bash exitrace -FROM franziskus@adjuva.info -DOMAIN t-online.de -H 48 ``` **LUSER Environment Variable setzen (wichtig!):** ```bash # Temporär export LUSER="dein-username" # Permanent in ~/.bash_env (empfohlen) echo 'export LUSER="dein-username"' >> ~/.bash_env source ~/.bash_env ``` **Verbindungstest:** ```bash # Test ob go-Tool verfügbar go logger # Test ob SSH funktioniert ssh ${LUSER}@logger.in.nessus.at "hostname" ``` --- ## Troubleshooting ### Häufige Probleme **"LUSER Variable nicht gesetzt"** ```bash export LUSER="dein-username" ``` **"Permission denied" oder SSH-Fehler** - Kerberos-Login: `kinit ${LUSER}@NESSUS.AT` - SSH-Keys prüfen oder `go` Tool installieren **"Keine Logfiles gefunden"** - Zeitfenster zu eng: `-H 48` oder `-DAYS 3` probieren - Dry-run verwenden: `exitrace -n -H 24` **AWK-Errors** - Regex-Syntax prüfen bei `-t` und `-G` Optionen - Sonderzeichen escapen: `.*@example\.com` ### Performance-Tipps - **Kleine Zeitfenster**: `-H 24` statt `-DAYS 7` - **Spezifische Filter**: `-f` oder `-m` sind schneller als `-t` - **Dry-Run nutzen**: `-n` zeigt Suchbereich ohne Ausführung --- ## Technical Notes - **Remote-Ausführung**: Komplettes Script wird via SSH Heredoc übertragen - **Log-Format**: `/var/log/easyname/YYYY/MM/YYYY-MM-DD.log(.gz)` auf logger - **Status-Logik**: Basiert auf SMTP-Response-Codes und Exim-Nachrichten - **Komprimierte Archive**: Automatische .gz-Verarbeitung via `zcat` - **Chronologische Sortierung**: Nach Message-ID Erstkontakt - **Exit-Codes**: 0 = OK (auch bei 0 Treffern), 1 = Parameter-/Verbindungsfehler Built with the help of Claude Code