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/

DKIM mit OpenDKIM und Postfix auf CentOS

DKIM für Domain Keys Identified Mail

DKIM fügt den Mails eine eindeutige Signatur hinzu, die sich der Domain zuordnet und für alle Nachrichten benutzt wird die versendet werden. Dies hilft dem Internet Service Provider (ISP) bei der Kontrolle der Authentizität der E-Mails und garantiert für die Integrität der Nachrichten.

Ursprünglich sollte das Verfahren DomainKeys Identified Mail nur die Spam-Flut eindämmen. Doch da es gefälschte Absenderadressen entdeckt, hilft es besser gegen Phishing.

OpenDKIM ist die Open-Source Technologie unter Linux für digitale E-Mail-Signatur und Verifikation, die bereits von namhaften E-Mail-Anbieter unterstützt wird.

In diesem Artikel wird beschrieben wie OpenDKIM auf CentOS 5/6/7 integriert und konfiguriert wird.

Das EPEL-Repository wird zur Installation benötigt, falls dieses nicht schon auf dem System integriert ist, wird folgendes vorgehen ausgeführt.

CentOS 5.x Extras Repository
wget -P /tmp https://dl.fedoraproject.org/pub/epel/epel-release-latest-5.noarch.rpm
sudo rpm -Uvh /tmp/epel-release-5*.rpm

CentOS 6.x Extras Repository
wget -P /tmp https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
sudo rpm -Uvh /tmp/epel-release-6*.rpm

CentOS 7.x Extra Repository
yum -y install epel-release

Nun kann OpenDKIM auf dem Server installiert werden.

yum -y install opendkim

Nach dem OpenDKIM installiert ist, wird die Hauptkonfiguration erstellt. Dabei wird die original Datei opendkim.conf vor dem editieren erst kopiert.

cp /etc/opendkim.conf /etc/opendkim.conf.orig
vi /etc/opendkim.conf

AutoRestart             Yes
AutoRestartRate         10/1h
LogWhy                  Yes
Syslog                  Yes
SyslogSuccess           Yes
Mode                    sv
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
SignatureAlgorithm      rsa-sha256
Socket                  inet:8899@localhost
PidFile                 /var/run/opendkim/opendkim.pid
UMask                   022
UserID                  opendkim:opendkim
TemporaryDirectory      /var/tmp

Nun werden die Verzeichnisse und ein DomainKey für die Beispiel Domain maildomain.ch durch die folgenden vier Eingaben generiert.

mkdir /etc/opendkim/keys/maildomain.ch
opendkim-genkey -D /etc/opendkim/keys/maildomain.ch/ -d maildomain.ch -s maildomain
chown -R opendkim: /etc/opendkim/keys/maildomain.ch
mv /etc/opendkim/keys/maildomain.ch/maildomain.private /etc/opendkim/keys/maildomain.ch/maildomain

Den DomainKey zur maildomain.ch hinzufügen.
vi /etc/opendkim/KeyTable

maildomain._domainkey.maildomain.ch maildomain.ch:maildomain:/etc/opendkim/keys/maildomain.ch/maildomain

DomainKey zur Unterzeichnung eintragen.
vi /etc/opendkim/SigningTable

*@maildomain.ch maildomain._domainkey.maildomain.ch

Welche Domains und Hosts sollen DKIM verwenden.
vi /etc/opendkim/TrustedHosts

127.0.0.1
maildomain.ch
host.maildomain.ch
# external host
1.2.3.4

Den DomainKey auf dem Nameserver als DNS TXT Record zur Zone maildomain.ch hinzufügen. Beispiel: maildomain.txt, zu beachten ist, das die Key Zeile auf einer Linie zu stehen kommt.

cat /etc/opendkim/keys/maildomain.ch/maildomain.txt

mmaildomain._domainkey  IN  TXT ( "v=DKIM1; k=rsa; "
"p=ECGfMA0GCSpGSIb3DQEBAQUBB436ADCBiQKBgQC8ixCqCQG4iMnHjWaZMt24l8dadmHzc9qIXLj5gUjP4kdWwpz569FGFjaPII9ec1G3AqvsBvWfLtGEvk20xBoOmAc2sOP0JdaBenYU-0JLuuBsS5JI+up0GQC5LacnQRegsBiYvLyRDqJoFiY6cWL8iuOzcTaIpYMKs2iSx8L9JwIZFJLE" ) ; ----- DKIM key maildomain for maildomain.ch

Und wenn wir schon dabei sind, kann auch gleich ein TXT Record für SPF, Sender Policy Framework hinzugefügt werden.

maildomain.ch.  14400  IN  TXT  "v=spf1 a mx ~all"

Mit dem domain information groper – dig lässt sich ein query des DomainKey mit folgender Eingabe ausgeben.

dig +short maildomain._domainkey.maildomain.ch TXT

Bei Postfix muss noch der milter integriert werden. Das Domain signing wird zum SMTP-Header hinzugefügt und über Port 8899 an Postfix zurückgegeben.

vi /etc/postfix/main.cf

smtpd_milters = inet:127.0.0.1:8899
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2

Dann die Services starten.

service opendkim start
chkconfig opendkim on
service postfix restart

Mit einem Test Mail an check-auth@verifier.port25.com wird die DKIM Signatur überprüft und das Resultat gleich als Antwort zurück gesendet. Das Ergebnis sollte dann in etwa wie folgt aussehen.

==========================================================
Summary of Results
==========================================================
SPF check: pass
DomainKeys check: neutral
DKIM check: pass
DKIM check: pass

Quellen Links:
DomainKeys Wiki

Die mobile Version verlassen