Files
h0tznpl0tzandClaude 248b2f9c1a Simplify exitrace.sh following KISS principle
- Eliminate 345 lines of duplicated HERE-document code
- Replace complex remote execution with local deployment approach
- Remove AWK array context errors from shell escaping
- Preserve all features: -FROM/-TO/-DOMAIN/-MSGID/-GREP, time filters, MX records, status classification
- Maintain backwards compatibility with -f/-t/-D/-m/-G parameters
- Use deploy.sh for installation on logger.in.nessus.at

Reduces complexity while maintaining full functionality.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 15:46:04 +02:00
..

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):

cd ~/.dev/esn-support-bash-snippets
./install.sh
# Dann: 3) Legacy Tools auswählen und exitrace installieren

Manuelle Installation:

git clone <repo-url>/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:

export LUSER="dein-username"
# Oder in ~/.bash_env für permanente Konfiguration
echo 'export LUSER="dein-username"' >> ~/.bash_env

Nutzung

Standardaufruf

exitrace

(durchsucht heutiges Log ohne Filter)

Beispiele

Häufige Use-Cases:

# 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:

# 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:

# 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 <rcpt>" 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 <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 <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:<blocked@t-online.de>: 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:

exitrace -FROM franziskus@adjuva.info -DOMAIN t-online.de -H 48

LUSER Environment Variable setzen (wichtig!):

# Temporär
export LUSER="dein-username"

# Permanent in ~/.bash_env (empfohlen)
echo 'export LUSER="dein-username"' >> ~/.bash_env
source ~/.bash_env

Verbindungstest:

# 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"

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