Exim cheatsheet: Difference between revisions

From Lolly's Wiki
Jump to navigationJump to search
m (Text replacement - "<source" to "<syntaxhighlight")
Line 81: Line 81:
==Ratelimit für einen User zurücksetzen==
==Ratelimit für einen User zurücksetzen==
Einträge finden:
Einträge finden:
<source lang=bash>
<syntaxhighlight lang=bash>
# exim_dumpdb /var/spool/exim ratelimit | grep user
# exim_dumpdb /var/spool/exim ratelimit | grep user
24-Mar-2016 09:51:28.152687 rate:    218.512 key: 1d/per_rcpt/mail_recipients:user@server.de
24-Mar-2016 09:51:28.152687 rate:    218.512 key: 1d/per_rcpt/mail_recipients:user@server.de
Line 90: Line 90:


Dafür nimmt man das etwas struppige Tool <i>exim_fixdb</i>. Man gibt den Key ein, den man aus den Ausgaben vom letzten Befehl hat und wählt damit den entsprechenden Eintrag in der DB aus. Als nächstes kommd dann d, wie Delete, gefolgt von einem Enter. Weg ist der entsprechende Eintrag.
Dafür nimmt man das etwas struppige Tool <i>exim_fixdb</i>. Man gibt den Key ein, den man aus den Ausgaben vom letzten Befehl hat und wählt damit den entsprechenden Eintrag in der DB aus. Als nächstes kommd dann d, wie Delete, gefolgt von einem Enter. Weg ist der entsprechende Eintrag.
<source lang=bash>
<syntaxhighlight lang=bash>
# exim_fixdb /var/spool/exim ratelimit
# exim_fixdb /var/spool/exim ratelimit
Modifying Exim hints database /var/spool/exim/db/ratelimit
Modifying Exim hints database /var/spool/exim/db/ratelimit
Line 111: Line 111:


==Spam==
==Spam==
<source lang=bash>
<syntaxhighlight lang=bash>
for file in $(ls -1 /var/log/spamassassin/spamd-exim-acl.log* | sort -t'.' -k3n,3n)
for file in $(ls -1 /var/log/spamassassin/spamd-exim-acl.log* | sort -t'.' -k3n,3n)
do
do
Line 131: Line 131:


I love my logfiles datestamped:
I love my logfiles datestamped:
<source lang=bash>
<syntaxhighlight lang=bash>
# exim -bP log_file_path
# exim -bP log_file_path
log_file_path = /var/log/exim/%slog-%D
log_file_path = /var/log/exim/%slog-%D
Line 157: Line 157:
This one is needed to trigger the rotation even if it is a dummy.
This one is needed to trigger the rotation even if it is a dummy.


<source lang=bash>
<syntaxhighlight lang=bash>
# touch /var/log/exim/rotate_this_-_do_not_delete
# touch /var/log/exim/rotate_this_-_do_not_delete
</source>
</source>


</pre>
</pre>

Revision as of 16:25, 25 November 2021

Kategorie:Exim

Fragen und Antworten

Header einer MailID ansehen

# exim -mvh <msgid>

Statistiken der aktuellen Queue ansehen

# exim -bpu | exiqsum <parameter>

Routing von Mails testen

Kurz und bündig

# exim -bv -v <Mailadresse>

Mit viel Debugging

# exim -bv -d+all <Mailadresse>


Wie stosse ich den Versand aller Mails für eine bestimmte Domain an?

# exim -Rff <Domain>

Wie stosse ich den Versand EINER bestimmten Mail erneut an?

# exim -M <message-id>

Wie ermittle ich, wieviele Mails in der Queue liegen?

# exim -bpc

Wie finde ich eine bestimmte Mail in der Queue?

Dazu kann entweder in den Logfiles gesucht werden

# exigrep <pattern> /var/log/exim/mainlog-jjjjmmdd

oder es kann in der Queue gesucht werden

# exiqgrep -r <pattern>

Besser, als exigrep ist exipick!

Ausgabe aller frozen Mails in der Queue:

# exipick -z

Ausgabe aller Mails an <reciepient> in der Queue:

# exipick -r <reciepient>

Ausgabe aller Mails von <sender> in der Queue:

# exipick -f <sender>

Ausggeben aller Mails, die Lokal abgesandt wurden in der Queue:

# exipick --or '$sender_host_address eq 127.0.0.1' '$received_protocol eq local'

Sogar der Body einer Mail kann durchsucht werden:

# /opt/exim/bin/exipick  '$message_body =~ /.*Vjagra.*/'

Oder Ausgabe der sender_host_address für alle Mails die mehr als 40 und weniger als 50 Minuten alt sind und nicht im Status frozen sind:

# exipick --show-vars sender_host_address '$message_age > 40m' '$message_age < 50m' '!$deliver_freeze'

Was tun die Exim-Prozesse?

# exiwhat

Ausgeben von Exim-Parametern

# exim -bP <Parameter>

z.B.:

# exim -bP message_size_limit

Immer gut: queue files ansehen

# find $(exim -bP spool_directory | nawk '{print $NF;}')/input


Ratelimit für einen User zurücksetzen

Einträge finden: <syntaxhighlight lang=bash>

  1. exim_dumpdb /var/spool/exim ratelimit | grep user

24-Mar-2016 09:51:28.152687 rate: 218.512 key: 1d/per_rcpt/mail_recipients:user@server.de 24-Mar-2016 09:51:28.098825 rate: 25.618 key: 1d/per_rcpt/failed_recipients:user@server.de </source>

Einträge löschen:

Dafür nimmt man das etwas struppige Tool exim_fixdb. Man gibt den Key ein, den man aus den Ausgaben vom letzten Befehl hat und wählt damit den entsprechenden Eintrag in der DB aus. Als nächstes kommd dann d, wie Delete, gefolgt von einem Enter. Weg ist der entsprechende Eintrag. <syntaxhighlight lang=bash>

  1. exim_fixdb /var/spool/exim ratelimit

Modifying Exim hints database /var/spool/exim/db/ratelimit > 1d/per_rcpt/mail_recipients:user@server.de 24-Mar-2016 09:51:28 0 time stamp: 24-Mar-2016 09:51:28 1 fract. time: .152687 2 sender rate: 218.512 > d deleted > 1d/per_rcpt/failed_recipients:user@server.de 24-Mar-2016 09:51:28 0 time stamp: 24-Mar-2016 09:51:28 1 fract. time: .098825 2 sender rate: 25.618 > d deleted > ^D </source>

Spam

<syntaxhighlight lang=bash> for file in $(ls -1 /var/log/spamassassin/spamd-exim-acl.log* | sort -t'.' -k3n,3n) do

 if [ "$(basename $file .gz)" == "$(basename $file)" ]
 then
   command="cat"
 else
   command="gzip -cd"
 fi
 printf "%16s - %16s : %7s\t%s\n" \
   "$(${command} ${file} | nawk 'NR==1{print $1,$2,$3}')" \
   "$(${command} ${file} | tail -1 | nawk '{print $1,$2,$3}')" \
   "$(${command} ${file} | grep -c 'result: Y')" \
   "$(basename ${file})"

done </source>

Logrotation with datestamped logfiles

I love my logfiles datestamped: <syntaxhighlight lang=bash>

  1. exim -bP log_file_path

log_file_path = /var/log/exim/%slog-%D </source>

But the logrotate with this files is a little bit tricky. I found this as a good way to rotate the logfiles:

/etc/logrotate.d/exim

/var/log/exim/rotate_this_-_do_not_delete {
        daily
        rotate 0
        ifempty
        create
        lastaction
                # gzip all files matching the regex that are not from today
                /usr/bin/find /var/log/exim -regextype posix-awk -regex '^/.*/((main|reject)log-[0-9]{8}|paniclog)'    ! -mtime +0  -exec /usr/bin/gzip -9q {} \;
                # delete gzipped files matching the regex that are older than 90 days
                /usr/bin/find /var/log/exim -regextype posix-awk -regex '^/.*/((main|reject)log-[0-9]{8}|paniclog)\.gz'  -mtime +90 -delete
        endscript
}

== touch the dummy rotate file ==
This one is needed to trigger the rotation even if it is a dummy.

<syntaxhighlight lang=bash>
# touch /var/log/exim/rotate_this_-_do_not_delete
</source>