Installation SendmailAnalyzer
Nach einem Newsletter Versand kommt es leider immer wieder mal vor, dass die Mails von diversen Providern geblockt werden. Merkt man dies zu spät – also erst am nächsten Tag oder so, macht es dann meist keinen Sinn mehr, die Mails erneut zu versenden, da die geplante Aktion bereits zu Ende ist.
Hier müsste man rascher handeln. Da man wohl kaum tail -f /var/log/maillog konstant irgendwo im Hintergrund ausführt, schon gar nicht an einem Wochenende, ist es hilfreich, einen Loganalyzer zu nutzen.
Für Sendmail / Postfix gibt es hierfür den SendmailAnalyzer, welcher das Maillog ausliest und in übersichtlichen HTML Statistik-Seiten darstellt.
Download & Installation
Die aktuelleste Version gibts hier: https://sourceforge.net/projects/sa-report/
mkdir /usr/local/software
cd /usr/local/software
wget https://deac-fra.dl.sourceforge.net/project/sa-report/sa-report/9.4/sendmailanalyzer-9.4.tar.gz
tar xzf sendmailanalyzer-9.4.tar.gz
rm sendmailanalyzer-9.4.tar.gz
cd sendmailanalyzer-9.4/
perl Makefile.PL
make && make install
cd ..
rm -rf sendmailanalyzer-9.4/
Am Ende der Installation kommt die folgende Info
1. Start SendmailAnalyzer daemon with:
/usr/local/sendmailanalyzer/sendmailanalyzer -f
or use one of the starters script provided in the start_scripts/ directory.
2. Modify your Apache2 configuration to allow access to CGI scripts like follow:
Alias /sareport /usr/local/sendmailanalyzer/www
<Directory /usr/local/sendmailanalyzer/www>
Options ExecCGI
AddHandler cgi-script .cgi
DirectoryIndex sa_report.cgi
#-- Apache 2.2
#Order deny,allow
#Deny from all
#Allow from 192.168.1.0/24
#-- Apache 2.4
Require all denied
Require ip 192.168.1.0/24
</Directory>
If necessary, give additional host access to SendmailAnalyzer.
Restart and ensure that httpd is running.
3. Browse to http://mta.host.dom/sareport/ to ensure that things are working
properly.
4. Setup a cronjob to run sa_cache and restart SendmailAnalyzer daemon after
maillog logrotate as follow:
# SendmailAnalyzer log reporting daily cache
0 1 * * * /usr/local/sendmailanalyzer/sa_cache > /dev/null 2>&1
# On huge MTA you may want to have five minutes caching
#*/5 * * * * /usr/local/sendmailanalyzer/sa_cache -a > /dev/null 2>&1
5. Add an entry in /etc/logrotate.d/syslog to restart SendmailAnalyzer when
maillog is rotated or create a cron job.
For more information, see /usr/local/sendmailanalyzer/doc/README file.
Konfiguration
Die Software wurde ins Verzeichnis
/usr/local/sendmailanalyzer
installiert.
Das Config File kann man jetzt noch nach den eigenen Wünschen konfigurieren. Ich mache hier nur minimale Änderungen:
Da ich alle Statistikfiles global speichere, passe ich noch das OUT_DIR an – sowie die Speicherung vom www Bereich.
Vorbereitung:
mkdir /global/monitoring/sendmailanalyzer
pro Host jetzt noch das entsprechende DATEN Verzeichnis machen und verlinken. Ich möchte die Hosts Patsy und Corky erfassen
mkdir /global/monitoring/sendmailanalyzer/patsy
mkdir /global/monitoring/sendmailanalyzer/corky
Dann schiebe ich das www Verzeichnis noch in den globalen Folder. Ich werde pro Host ein separates CGI Script machen.
mv /usr/local/sendmailanalyzer/www /global/monitoring/sendmailanalyzer/
Ich monitore die Logfiles diverser Hosts zentral. Daher kopiere ich das Config File auf eine Globale Partition und benenne es nach host:
cp /usr/local/sendmailanalyzer/sendmailanalyzer.conf /global/monitoring/sendmailanalyzer/patsy.conf
Jetzt noch das Config File anpassen
vi patsy.conf
# Output directory for data storage.
# Can be overwritten with --output or -o
OUT_DIR /global/monitoring/sendmailanalyzer/patsy
# Space separated list of ip addresses of the MTA gateway (where external mail
# comes from if this host is a hub or a delivery system)
MAIL_GW <IP_VON_MEINEN_ANDEREN_SERVERN_DIE_DIESEN_ALS_GATEWAY_NUTZEN>
# When enabled it allow email subjects to be shown in detailed view. Of course
# The log file must contain this information.
SHOW_SUBJECT 1
Jetzt noch im CGI Script den Path zum Config File ändern:
mv www/sa_report.cgi www/patsy_sa_report.cgi
vi www/patsy_sa_report.cgi
my $CONFIG_FILE = "../patsy.conf";
NGINX Konfiguration
Im bereits bestehenden Monitoring Verzeichnis einen Symlink zum Analyzer machen
cd /www/<monitoringserver.com>/monitor
ln -s /global/monitoring/sendmailanalyzer/ .
vi /www/server/config/<monitoringserver.com>
NGINX für CGI Konfigurieren
Um CGI Scripts laufenlassen zu können, benötigt man einen CGI Wrapper. Falls dieser noch nicht installiert ist, müsste man dies vorab machen:
pkg install www/fcgiwrap
Dann noch im rc.conf aktivieren:
vi /etc/rc.conf
fcgiwrap_enable="YES"
fcgiwrap_user="www"
fcgiwrap_group="www"
fcgiwrap_socket_mode="0660"
fcgiwrap_socket_owner="www"
fcgiwrap_socket_group="www"
NGINX Server Config für CGI Scripts -> jetzt kann man es einfach an das fcgiwrap Socket weiterleiten:
location ~ .cgi$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param REMOTE_USER $remote_user;
}
Webserver neu starten
nxctl restart
Analyzer starten
init.d Startup Script (Ubuntu)
vi /etc/init.d/sendmailanalyzer
#!/bin/sh
# Start/stop/restart SendmailAnalyzer.
# chkconfig: 35 40 40
# description: Sendmail Log File Analyzer
# processname: sendmailanalyzer
# config: /etc/sendmailanalyzer.conf
# pidfile: /var/run/sendmailanalyzer.pid
SALYZER=/usr/local/sendmailanalyzer/sendmailanalyzer
PIDFILE=/var/run/sendmailanalyzer.pid
LOCKFILE=/var/lock/subsys/sendmailanalyzer
CONFIGFILE=/global/monitoring/sendmailanalyzer/patsy.conf
[ -x $SALYZER ] || exit 0
# Start SendmailAnalyzer:
sa_start() {
if [ ! -x $SALYZER ]; then
echo"ERROR: can't execute $SALYZER"
exit 1
fi
echo -n "Starting SendmailAnalyzer Daemon: "
$SALYZER -c $CONFIGFILE -f
RETVAL1=$?
if [ $RETVAL1 -eq 0 ]; then
touch $LOCKFILE
fi
echo
}
# Stop SendmailAnalyzer:
sa_stop() {
echo -n "Stopping SendmailAnalyzer Daemon: "
kill -s kill `cat $PIDFILE`
rm -f $LOCKFILE
echo
}
# Restart SendmailAnalyzer:
sa_restart() {
sa_stop
sleep 2
sa_start
}
case "$1" in
'start')
sa_start
;;
'stop')
sa_stop
;;
'restart')
sa_restart
;;
'condrestart')
if [ -e $LOCKFILE ]; then
sa_restart
fi
;;
*)
echo "usage $0 start|stop|restart"
esac
ausführbar machen:
chmod 755 /etc/init.d/sendmailanalyzer
Starten:
sendmailanalyzer start
Cache rebuilden
Jetzt noch einen Cronjob einrichten, um den Cache zu rebuilden gemäss den eigenen Anforderungen.
# SendmailAnalyzer log reporting daily cache 0 1 * * * /usr/local/sendmailanalyzer/sa_cache -c /global/monitoring/sendmailanalyzer/patsy.conf > /dev/null 2>&1 # On huge MTA you may want to have five minutes caching #*/5 * * * * /usr/local/sendmailanalyzer/sa_cache -c /global/monitoring/sendmailanalyzer/patsy.conf -a > /dev/null 2>&1
Logrotate Config
Logrotate Config anpassen, damit der SendmailAnalyzer restarted wird, wenn das mailllog rotated wurde.
vi /etc/logrotate.d/rsyslog
Gelb hinterlegte Zeile hinzufügen
[...]
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
/etc/init.d/sendmailanalyzer restart >/dev/null 2>&1
endscript
}
Analyzer Seite aufrufen
Wenn jetzt alles glatt läuft, kann man den CGI Script nun aufrufen:
https://monitor.<meinmonitoringserver>.com/sendmailanalyzer/www/patsy_sa_report.cgi
Das CGI Script generiert die Anzeige jeweils aus den Daten, welche sich im Daten Verzeichnis befinden. Es werden keine statischen HTML Seiten erstellt.
Alte Logfiles einlesen:
-l Pfad zum Logfile
-i Interaktiver Modus
-b exit, wenn das Script beendet ist
-F beginnt am anfang des Files und ignoriert LAST_PARSED (--force oder -F)
./sendmailanalyzer -c /global/monitoring/sendmailanalyzer/patsy.conf -l /var/log/mail.log.1 -i -b -F