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.

Amavis-new Installation mit Postfix

Amavis-new Installation mit Postfix

Tutorial: Installation von amavis-new und Postfix

AMaViS steht für A MAil Virus Scanner und ist ein serverseitiger Virenscanner, der auf Unixoiden Mail-Servern zum Einsatz kommt. Mit der Weiterentwicklung wurde die Implementierung für Spamfilter wie SpamAssassin erweitert.

  AMaViS wurde in der Programmiersprache Unix-Shell geschrieben, im Jahr 2000 wurde es dann auf Perl umgestellt, ab dann amavis-new für die Standardschnittstelle zwischen den Mail Transfer Agents (MTA) und den Content filter, beispielsweise kompatibel mit Postfix, sendmail oder Exim. Antivirenprogramme die mit amavis-new interagieren sind beispielsweise AntiVir Unix oder ClamAV. Das aktuelle amavisd-new steht unter der GPLv2 und BSD-Lizenz und bietet auch die Möglichkeit, SpamAssassin und andere Filterprogramme (Milter) einzubinden.

INSTALLATION

In diesem Beitrag wird die Installation und Konfiguration von amavis-new beschrieben, mit der Integration für Postfix auf einem CentOS 7 basierten MTA. Es wird vorausgesetzt das Postfix bereits auf dem Host ist und Kenntnisse über Postfix vorhanden sind.

Es wird das EPEL Repository eingebunden, um anschließend die Komponenten zu installieren.

$ yum update
$ yum -y install epel-release

Die Dienstprogramme amavis-new und ClamAV installieren.

$ yum clean all
$ yum -y install amavisd-new clamav-scanner clamav-scanner-systemd

Folgende Anpassungen in der amavisd Konfigurationsdatei editieren mit nano oder vi /etc/amavisd/amavisd.conf

# Zeile 20 der eigene domain name
$mydomain = 'domain.org';
# Zeile 152 der eigene hostname
$myhostname = 'mail.domain.org';
# Zeile 50 lokale domain und netzwerke hinzufügen
@local_domains_maps = ( [".$mydomain", '.domain.org', 'xyz.domain.org'] );  # list of all local domains

@mynetworks = qw( 127.0.0.0/8 [::1] [FE80::]/10 [FEC0::]/10
                  10.0.0.0/8 10.127.99.0/24 );
# Zeile 58 erweitern der ports
$inet_socket_port = 10024,10026;
# Zeile 154 auskommentieren
$notify_method = 'smtp:[127.0.0.1]:10025';
$forward_method = 'smtp:[127.0.0.1]:10025';
# Zeile 157 ändern auf D_PASS
$final_virus_destiny    = D_PASS;
$final_spam_destiny     = D_PASS;

Bei aktivem SELinux wird eine Policy hinzugefügt.

$ setsebool -P antivirus_can_scan_system 1
$ setsebool -P clamd_use_jit 1

Der Clamd Virenscanner kann mithilfe des Stream Editors sed editiert werden, folgende Befehlszeilen im Terminal ausführen:

$ sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf
$ sed -i -e "s/^Example/#Example/" /etc/freshclam.conf

Die Clamd Konfigurationsdatei /etc/clamd.d/scan.conf wie folgt konfigurieren:

$ freshclam

Nachdem die amavis-new Konfiguration abgeschlossen ist, geht es an die Integration von Postfix, der Content-Filter kann in der Postfix Datei main.cf an beliebiger stelle hinzugefügt werden, durch das editieren mit vi /etc/postfix/main.cf

content_filter=smtp-amavis:[127.0.0.1]:10024

Dazu wird in der Datei /etc/postfix/master.cf die Schnittstelle für amavis-new am ende hinzugefügt.

smtp-amavis unix  -     -     n     -    2   smtp
 -o smtp_data_done_timeout=1200
 -o smtp_send_xforward_command=yes
 -o disable_dns_lookups=yes
 -o max_use=20

127.0.0.1:10025  inet  n  -    n    -     -   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=127.0.0.0/8
 -o strict_rfc821_envelopes=yes
 -o smtpd_error_sleep_time=0
 -o smtpd_soft_error_limit=1001
 -o smtpd_hard_error_limit=1000

Jetzt Postfix neu starten damit die Konfiguration wirksam wird.

$ systemctl restart postfix

amavis-new starten und zur Autostart Konfiguration hinzufügen.

$ systemctl start clamd@scan
$ systemctl start amavisd.service
$ systemctl enable clamd@scan
$ systemctl enable amavisd.service

Amavisd Funktionstest

$ cd /usr/share/doc/amavisd-new-*/test-messages
$ perl -pe 's/./chr(ord($&)^255)/sge'

Nun mit sendmail im Terminal die EICAR-Test-Signatur an sich versenden.

$ sendmail -i deine_email@domain.ch < sample-virus-simple.txt

In der Protokolldatei /var/log/maillog sollte dann folgender Eintrag registriert sein.

mail amavis[11855]: (11855-01) Passed INFECTED (Eicar-Test-Signature) {RelayedTaggedInbound,Quarantine d}, [127.0.0.1] <root@mail.domain.ch> -> <meine_email@domain.ch>, Message-ID: <20190305170628.630A7C5428@mail.domain.ch>, mail_id: SSDU53BXGSVK, Hits: 2.547, size: 789, queued_as: A808AC5425, 1207 ms

  Erscheint beim versuch mit sendmail die Testmail zu senden der Fehler:reject: header To: undisclosed-recipients, muss die Datei sample-virus-simple.txt editiert werden, und bei From: und To: eine gültige Email eingetragen werden.

Troubleshoting

Die Überprüfung der Funktionalität von amavis-new kann mit folgendem vorgehen erfolgen, Zuerst der Daemon Status der überprüfen, mit dem Parameter -l werden zusätzlich die letzten Zeilen aus dem Protokoll ausgegeben:

$ systemctl status postfix clamd@amavisd -l

Weiter sollte auch sichergestellt sein das die Ports 10024 und 10025 aktiv LISTEN sind:

~]# ss -tuln4
Netid  State      Recv-Q Send-Q      Local Address:Port      Peer Address:Port
tcp    LISTEN     0      128             127.0.0.1:10024                *:*
tcp    LISTEN     0      100             127.0.0.1:10025                *:*
tcp    LISTEN     0      100                     *:587                  *:*
tcp    LISTEN     0      100                     *:465                  *:*
tcp    LISTEN     0      128                     *:22                   *:*
tcp    LISTEN     0      100                     *:25                   *:*

  Mit telnet dieses erst installiert werden muss, lässt sich die Funktion des amavisd und Postfix daemon interaktiv überprüfen:

$ telnet localhost 10024
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 [::1] ESMTP amavisd-new service ready
quit
221 2.0.0 [::1] amavisd-new closing transmission channel
Connection closed by foreign host.
$ telnet localhost 10025
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.domain.ch ESMTP
quit
221 2.0.0 Bye
Connection closed by foreign host.

Postfix Helo command rejected: Host not found

Postfix prüft eingehende E-Mails auf den Reverse-Eintrag (PTR), es kann zu „helo command rejected“ kommen. Stimmt der Hostname mit der IP-Adresse des sendenden MTA nicht überein, wird die E-Mail mit der Fehlermeldung 450 4.7.1 abgelehnt.

Postfix Mail Transfer Agent, Helo command rejected: Host not found

Mail Server FQDN – NOQUEUE: reject: RCPT from mail.example.org: 450 4.7.1: Helo command rejected: Host not found.

quote Maillog NOQUEUE reject 450 4.7.1 durch Postfix protokolliert.

Jul 17 07:21:18 mxhost postfix/smtpd[23544]: connect from mail.example.org[203.0.113.2]
Jul 17 07:21:18 mxhost postfix/smtpd[23544]: NOQUEUE: reject: RCPT from mail.example.org[203.0.113.2]: 450 4.7.1 <mailsrv02.foo.local>: Helo command rejected: Host not found; from=<homer.simpson@foo.com> to=<lisa.simpson@springfield.com> proto=ESMTP helo=<mailsrv02.foo.local>

Bei diesem Beispiel durch Postfix mit „helo command rejected“ abgelehnt. Es muss beim Absender überprüft werden, ob die IP-Adresse des Mailservers in der DNS Zone mit dem entsprechenden PTR-Record übereinstimmt.

Postfix Ausnahme durch EHLO/HELO

Ist der sendende Mailserver bekannt und vertrauenswürdig, kann Postfix angewiesen werden eine Ausnahme durch die EHLO/HELO Überprüfung zu veranlassen, durch die Regel in der Datei main.cf.

smtpd_helo_required = yes
smtpd_helo_restrictions =
        check_helo_access hash:/etc/postfix/helo_access,

Dazu wird eine Datei helo_access angelegt, mit folgendem Inhalt.

$ mailsrv02.example.org    PERMIT

Danach postmap ausführen um die hash db zu erzeugen.

$ postmap /etc/postfix/helo_access

Postfix muss die Änderung zur Aktivierung noch übernehmen.

$ postfix reload

Im maillog kann nun überprüft werden ob die Emails angenommen werden.

$ mailq
$ postqueue -f
$ tail -f /var/log/maillog

Mit mailq wird festgestellt ob sich etwa noch nicht zugestellte Emails in der Queue befinden. Mit dem Befehl postqueue wird der versuch der Zustellung gleich ausgelöst. Das öffnen mit tail -f (maillog) gibt Aufschluss über den Status der Zustellung.

Exchange Server falsch konfiguriert

Exchange Helo command rejected: Host not found

Oft sind es falsch konfigurierte Exchange Server die sich mit falschem, internen hostname melden, den korrekten FQDN stellt man in der ECP Konsole ein, beim zuständigen FrontendTransport Connector.

Helo command rejected: Host not found

Besser noch man lässt den Exchange Server über ein Smarthost seine Mails versenden, dadurch bietet sich die Möglichkeit ausgehende Mails zusätzlich mit DKIM im Envelop zu versenden, was die Authentizität erhöht, und bei eingehenden Mails eine wirksame SPAM und Schadcode Filterung ermöglicht, etwa durch SpamAssassin oder mit Amavis-new.

Anmerkung

Postfix ist ein Mail Transfer Agent für Unix und Unix-Derivate. Die Software sollte zum Entwicklungszeitpunkt eine kompatible Alternative zu Sendmail sein. Dabei achteten die Programmierer insbesondere auf Sicherheitsaspekte. Der Quellcode von Postfix steht unter der IBM Public License zur Verfügung und ist damit freie Software.

Postfix ist ein schnelles und im Verhältnis zu Sendmail oder qmail einfach zu administrierendes System. Dennoch gilt: Wie jeder MTA setzt auch Postfix fundierte Kenntnisse im Bereich Mailserver, Protokolle sowie weitreichende Systemkenntnisse voraus, da die Konfigurationen je nach Anwendungsfall sehr komplex werden können.