Schlagwort-Archive: Postfix Mail Transfer Agent

Postfix ist ein Mail Transfer Agent für Unix und Unix-Derivate. Die Software sollte zum Entwicklungszeitpunkt eine kompatible Alternative zu Sendmail sein.

E-Mails mit fetchmail abrufen

E-Mails mit fetchmail von Server abrufen und weiterleiten

fetchmail ist ein Dienstprogramm zum Abrufen und Weiterleiten von E-Mails; das Unix Urgestein holt E-Mails von Mailservern und leitet diese an das Zustellsystem weiter. Es können die Mails dann unter Verwendung normaler E-Mail-Benutzeragenten wie etwa mutt, elm oder Mail abgerufenen werden.

Was ist fetchmail ?

Das fetchmail-Dienstprogramm kann im Daemon-Modus laufen, um ein oder mehrere Systeme in einem bestimmten Intervall wiederholt abzufragen, es werden E-Mails von Servern gesammelt die alle gängigen E-Mail-Abrufdienste unterstützen, wie POP3 und IMAP, auch unterstützt werden die ESMTP-ETRN-Erweiterung und die ODMR Protokolle.

In diesem Beitrag wird beschrieben wie fetchmail auf einem Linux Smarthost mit Postfix eingesetzt werden kann. Die E-Mails von externen Mail-Dienstanbieter werden abgerufen und den Empfänger zum Postfach Server weitergeleitet dieser vom Smarthost E-Mails empfängt. Dabei sind bei den Mailkonten keine Weiterleitungen erforderlich, und die E-Mails werden durch den Smarthost ebenfalls auf Viren und SPAM untersucht, bevor diese dem Benutzer Postfach zugestellt werden.

fetchmail Installation

Für die Installation auf CentOS 7 wird das Extras repository benötigt, falls nicht schon vorhanden.

$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -Uvh epel-release-latest-7*.rpm

Das fetchmail-Dienstprogramm kann aus dem CentOS Extras repository installiert werden.

$ yum -y install fetchmail

Wir erstellen die Konfigurationsdatei fetchmail für den daemon unter /etc/sysconfig.

# This file will be used to declare some vars for fetchmail
#
# Uncomment the following if you dont want localized log messages
# export LC_ALL=C

# Declare here if we want to start fetchmail. 'yes' or 'no'
START_DAEMON=yes

 Copy Paste /etc/sysconfig/fetchmail

Es wird der Daemon Init-Script erstellt, hier für ein CentOS Host auf diesem der Postfix MTA bereits läuft. Als root mit vi /etc/rc.d/init.d/fetchmaild

#!/bin/sh
# chkconfig: 35 99 00
# description: Start and stop fetchmail

. /etc/init.d/functions

start() {
  echo "Starting fetchmaild..."
  su fetchmail -s /bin/sh -c "fetchmail -vv -d 900 -a -f /etc/fetchmailrc -L /var/log/fetchmail"
  }

stop() {
  echo "Shutting down fetchmaild..."
  su fetchmail -s /bin/sh -c "fetchmail --quit"
  }

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    ;;
esac

exit 0

 Copy Paste /etc/rc.d/init.d/fetchmaild
Den Init-Script ausführbar machen.

$ chmod 0755 /etc/rc.d/init.d/fetchmaild

Die globale fetchmailrc Recource Konfiguration für den Betrieb als Daemon erstellen in /etc/fetchmailrc.

set daemon 900
set no syslog
set logfile /var/log/fetchmail
set postmaster "postmaster"
set no bouncemail
set no spambounce
set properties ""

poll mail.foo.org with proto POP3
user 'joe@foo.org' there with password 'secret' is joe.office@foo.com here options fetchall nokeep ssl smtphost localhost

 Copy Paste /etc/fetchmailrc

Für jeden Mailserver von diesem E-Mails abgerufen werden, wird eine poll Zeile erstellt. Es soll das externe Postfach von joe@foo.org beim POP3 Server mail.foo.org abgerufen werden und mit smtphost über den localhost über Postfix zum Postfach Server dem Benutzer joe.office@foo.com zugestellt werden. Damit die Protokollierung nicht in maillog statt findet, werden anstelle diese in fetchmail geloggt.

Möglichkeiten mit fetchmail

fetchmail bietet eine Reihe von syntaktischen Feinheiten, um fetchmailrc das Lesen von Dateien zu erleichtern. Zum Beispiel werden die Worte andwithhaswants, und options von fetchmail ignoriert, wie auch Satzzeichen. Während es möglich ist, Anmeldeinformationen für einen Server in einer Zeile anzugeben, werden häufige Konfigurationen über eine Reihe von verschiedenen Zeilen angegeben. fetchmail ist unempfindlich gegenüber Whitespace, außer wenn das Argument in Anführungs- und Schlusszeichen erfolgt.

fetchmail optionen

Für die Poll-Anweisung gibt es mehrere Optionen (z.B. nofetchall (default), fetchall, keep, nokeep ). Die Bedeutungen ist wie folgt:

nofetchall: Nur neue Nachrichten abrufen (Standard). Wenn nichts anderes angegeben ist (z.B. fetchallkeep ), bedeutet dies nofetchall.
fetchall: Holt alle Nachrichten, ob gesehen oder nicht.
keep: Löscht keine Nachrichten auf dem Server.
nokeep: Löscht die gelesenen Nachrichten vom Server.

Die fetchmail Benutzer und Gruppe erstellen und die rechte setzen.

$ groupadd -r fetchmail
$ useradd -r -m -g fetchmail -s /sbin/nologin fetchmail
$ chown fetchmail /etc/fetchmailrc
$ chmod 0600 /etc/fetchmailrc
$ touch /var/log/fetchmail
$ chown fetchmail:fetchmail /var/log/fetchmail
$ chmod 0600 /var/log/fetchmail

Den fetchmail daemon wird nun gestartet.

$ /etc/rc.d/init.d/fetchmaild start

Nach jeder Änderung der fetchmailrc-Konfiguration wird der systemd daemon neugestartet.

$ systemctl daemon-reload

fetchmail Testen

Überprüfen lässt sich die fetchmail Konversation zum Server mit folgendem Befehl:

$ fetchmail -vv -N --ssl -p pop3 -P 995 -ujoe@foo.org mail.foo.org

Die Konfigurationsdatei fetchmailrc testen.

$ fetchmail -v -a -k -f /etc/fetchmailrc

Den fetchmail Prozess überprüfen.

$ ps -ef | grep -v grep | grep fetchmail

Die Ausgabe kann in etwa wie folgt aussehen:

fetchma+  4126     1  0 19:19 ?        00:00:00 fetchmail -vv -d 900 -a -f /etc/fetchmailrc -L /var/log/fetchmail
root      6488  3985  0 16:25 pts/0    00:00:00 su fetchmail

Die fetchmail Protokollierung findet nun in der Datei fetchmail statt.

$ tail -f /var/log/fetchmail

Die fetchmail man page gibt zahlreiche Informationen aus.

$ man fetchmail

ClamAV Postfix Integration auf CentOS

ClamAV ist ein Open-Source (GPL) Anti-Virus Toolkit für UNIX/Linux

Speziell für E-Mail-Scanning auf Mail-Gateways. Es bietet eine Reihe von Dienstprogrammen, einschließlich eines flexiblen und skalierbaren Multi-Threaded Daemon, sowie ein Kommandozeilen-Scanner als Fortgeschrittenes Werkzeug für die automatische Datenbankaktualisierungen. Der Kern des Pakets stellt eine Anti-Virus-Engine in Form einer gemeinsam genutzten Bibliothek zur Verfügung.

Dieser Artikel beschreibt die Integration von ClamAV auf einem CentOS 6 Mail Gateway (MTA) mit Postfix.

Als erstes wird der ClamAV Daemon aus dem EPL-Repo auf dem MTA installiert.

yum --enablerepo=epel -y install clamd clamsmtp

Nach der Installation wird der ClamAV-SMTP Daemon konfiguriert, bei den aufgeführten Zeilen das Kommentarzeichen-# entfernen (uncomment).

vi /etc/clamsmtpd.conf

Listen: 0.0.0.0:10025
Header: X-Virus-Scanned: ClamAV using ClamSMTP
Action: drop

Nun können die Dienste gestartet werden.

service clamsmtpd start

Mit freshclam die Antivirus-DB herunterladen.

freshclam

Den ClamAV Daemon starten

service clamsmtp-clamd start

Automatischer Systemstart aktivieren.

chkconfig clamsmtpd on
chkconfig clamsmtp-clamd on

Die Postfix content-filter Integration erfolgt in main.cf,  über Port 10025 zu ClamAV, aus master.cf über Port 10026 der Rücktransport zu Postfix.

vi /etc/postfix/main.cf

content_filter = scan:127.0.0.1:10025

vi /etc/postfix/master.ch

scan unix  -       -       n       -       16       smtp
   -o smtp_data_done_timeout=1200
   -o smtp_send_xforward_command=yes
   -o disable_dns_lookups=yes
127.0.0.1:10026 inet n       -       n       -       16       smtpd
   -o content_filter=
   -o local_recipient_maps=
   -o relay_recipient_maps=
   -o smtpd_restriction_classes=
   -o smtpd_client_restrictions=
   -o smtpd_helo_restrictions=
   -o smtpd_sender_restrictions=
   -o smtpd_recipient_restrictions=permit_mynetworks,reject
   -o mynetworks_style=host
   -o smtpd_authorized_xforward_hosts=127.0.0.0/8

Postfix muss nun neu gestartet werden.

service postfix restart

Mit netstat kann die  Daemon Bereitschaft überprüft werden.

[root@mail ~]# netstat -talpn | grep clam
tcp      0      0 0.0.0.0:10025       0.0.0.0:*       LISTEN     21645/clamsmtpd

ClamAV kann mit telnet überprüft werden, wenn alles funktioniert sollte folgendes Resultat ausgegeben werden.

[root@mail ~]# telnet localhost 10025
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 smtp.passthru
ehlo localhost
250-smtp.passthru
250-SIZE 22000000
250-VRFY
250-ETRN
250-XFORWARD NAME ADDR PROTO HELO SOURCE PORT
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.

[root@mail ~]# telnet localhost 10026
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.odyssee.net ESMTP Postfix
ehlo localhost
250-mail.odyssee.net
250-PIPELINING
250-SIZE 22000000
250-VRFY
250-ETRN
250-XFORWARD NAME ADDR PROTO HELO SOURCE PORT
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.

Auch sollte das Mail Protokoll konsultiert werden.

tail -f /var/log/maillog

Bei den E-Mail Internetkopfzeilen (SMTP-Envelope) erscheint die X-Header Signatur.

SMTP-Internetkopfzeilen

Troubleshooting

Werden keine Mails mehr empfangen, ist wahrscheinlich folgender Fehler in maillog zu finden:

clamsmtpd: 100006: CLAMAV: couldn’t connect to: /var/run/clamd.clamsmtp/clamd.sock: No such file or directory
clamsmtpd: 100004: SERVER: couldn’t connect to: 127.0.0.1:10026: Transport endpoint is not connected

Der clamd deamon ist nicht mehr aktive. Um die clamav Services neu zu starten, können diese in der Console beendet, und anschlissend wieder gestartet werden:

service clamd stop
service clamsmtp-clamd stop
service clamsmtpd stop
service clamd start
service clamsmtp-clamd start
service clamsmtpd start

Nach dem clamd und clamsmtpd gestartet ist, können die aktiven Ports wie folgt überprüft werden:

ls -al /var/run/clamd.clamsmtp/clamd.pid
-rw-rw-r-- 1 clamsmtp mail 6 Oct 28 16:24 /var/run/clamd.clamsmtp/clamd.pid

netstat -tulpn
tcp     0     0 127.0.0.1:10025        0.0.0.0:*        LISTEN      21134/clamsmtpd
tcp     0     0 127.0.0.1:10026        0.0.0.0:*        LISTEN      21272/master

Weiter könnten noch Mails in der Queue liegen, diese mit dem Befehl mailq abgerfagt werden und postqueue abgearbeitet werden.

mailq
postqueue -f

Quelle: https://www.clamav.net/