Before-queue-Integration mithilfe einer dynamisch geladenen Bibliothek
21. August 2023
ID 43915
Zur Verwendung der Integrationsmethode "vor dem Verschieben der Nachricht in die Warteschleife" (before-queue-Integration) muss bei der Kompilierung der aus den Ausgangscodes dynamisch geladenen Bibliothek angegeben werden, dass die Unterstützung von dlfunc erforderlich ist. In einigen Distributionen von Linux sind im Speicher kompilierte Exim-Versionen enthalten, in anderen ist eine manuelle Kompilierung erforderlich.
Bei der manuellen Kompilierung müssen der Makefile folgende Zeilen hinzugefügt werden:
EXPAND_DLFUNC=yes
EXTRALIBS= -export-dynamic
Bei der before-queue-Integration unter Verwendung einer dynamisch geladenen Bibliothek muss der Filter die Nachrichten zur Untersuchung an Scan Logic über den Socket ServiceSocket
übergeben. Dieser Socket muss in der Programmkonfiguration angegeben werden.
Je nach Lieferumfang des Betriebssystems müssen Sie eine oder mehrere Konfigurationsdateien von Exim ändern. Zum Beispiel, kann der Mailserver in Debian und Ubuntu wie mithilfe mehrerer Dateien im Verzeichnis /etc/exim/conf.d, so auch mithilfe einer Datei konfiguriert werden.
Gehen Sie folgendermaßen vor, um eine before-queue-Integration von Kaspersky Security 8 für Linux Mail Server mit Exim unter Verwendung einer dynamisch geladenen Bibliothek auszuführen:
- Stellen Sie sicher, dass der Mailserver Exim die Funktion der Inhaltsfilterung dlfunc unterstützt. Für diesen Zweck führen Sie den Befehl
exim -bV
aus.Als positive Antwort gilt das Ergebnis:
Expand_dlfunc
. - Erstellen Sie eine Sicherungskopie der Konfigurationsdateien von Exim.
- Tragen Sie Änderungen in die Liste für die Zugriffskontrolle von
acl_smtp_data
ein. Suchen Sie dafür in der Konfigurationsdatei (-dateien) von Exim nach der Zeile des Typsacl_smtp_data = acl_check_data
(stattacl_check_data
kann eine andere Liste für die Zugriffskontrolle angegeben werden)und nach der Zeile des Typs
acl_check_data:
(oder der Zeile, die eine andere Liste für die Zugriffskontrolle enthält)folgende Zeilen hinzu:
#klms-filter-begin
warn set acl_m_klms_headers =
set acl_m_klms_result =
set acl_m_klms_answer = ${dlfunc{
LIBDIR/libklms-exim.so}{scan}{${spool_directory}/input}}
defer condition = ${if eq {$acl_m_klms_answer}{}{yes}{no}}
log_message = LMS check failed (empty answer)
message = Temporary local problem - please try later
defer condition = ${if match {$acl_m_klms_answer}{\N^451\N}{yes}{no}}
log_message = LMS check defer: ${if match {$acl_m_klms_answer} \
{\N^451 Mail processing aborted(.+\n?.*\n)*$\N}{$1}{}}\\
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}\
, temporary file $acl_m_klms_tempfile
message = Temporary local problem - please try later
defer condition = ${if match {$acl_m_klms_answer}{\N^452\N}{yes}{no}}
log_message = LMS check defer: ${if match {$acl_m_klms_answer} \
{\N^451 Mail processing timed out(.+\n?.*\n)*$\N}{$1}{}}\
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}\
, temporary file $acl_m_klms_tempfile
message = Temporary local problem - please try later
deny condition = ${if match {$acl_m_klms_answer}{\N^550\N}{yes}{no}}
log_message = LMS check defer: ${if match {$acl_m_klms_answer} \
{\N^550 Rejected by malware filter(.+\n?.*\n)*$\N}{$1}{}}\
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}\
, temporary file $acl_m_klms_tempfile
deny condition = ${if match {$acl_m_klms_answer}{\N^554\N}{yes}{no}}
log_message = LMS check defer: ${if match {$acl_m_klms_answer} \
{\N^554 Mail processing failed(.+\n?.*\n)*$\N}{$1}{}}\
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}\
, temporary file $acl_m_klms_tempfile
message = ${if match {$acl_m_klms_answer} \
{\N^554 Mail processing failed(.+\n?.*\n)*$\N} \
{Mail processing failed:$1}{}}
warn condition = ${if match {$acl_m_klms_answer}{\N^250\N}{yes}{no}}
logwrite = LMS check accept: ${if match {$acl_m_klms_answer} \
{\N^250 (.+)$\N}{$1}{}} \
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}
set acl_m_klms_answer =
warn condition = ${if eq {$acl_m_klms_answer}{}{no}{yes}}
logwrite = LMS check: $acl_m_klms_answer
#klms-filter-end
wo LIBDIR – Pfad zur Bibliothek libklms-exim.so:
- für FreeBSD (32-Bit) - /usr/local/lib/kaspersky/klms/libklms-exim.so,
- für FreeBSD (64-Bit) - /usr/local/lib/kaspersky/klms/compat64/libklms-exim.so,
- für Linux (32-Bit) - /opt/kaspersky/klms/lib/libklms-exim.so,
- für Linux (64-Bit) - /opt/kaspersky/klms/lib64/libklms-exim.so.
- Kompilieren Sie das Modul
.so
entsprechend den Einstellungen Ihres Betriebssystems (optional). - Fügen Sie den Benutzer
kluser
zur Gruppe hinzu, welcher der Vorgangexim
zugeordnet ist. - Legen Sie in der Filterkonfigurationsdatei klms_filter.conf, im Abschnitt
[global]
den Wertfalse
für die Einstellungheader-guard
fest. - Öffnen Sie die Datei /var/opt/kaspersky/klms/installer.dat (für Linux) oder /var/db/kaspersky/klms/installer.dat (für FreeBSD).
- Fügen Sie der Datei folgende Zeile hinzu:
EXIM_INTEGRATION_TYPE=dlfunc
- Starten Sie den Dienst klms neu.
- Starten Sie den Mailserver Exim neu.
Im Lieferumfang von Kaspersky Security 8 für Linux Mail Server ist eine kompilierte dynamisch geladene Bibliothek dlfunc für alle Betriebssysteme enthalten, die vom Programm unterstützt werden. Erforderliche Ausgangsdateien für die dlfunc-Bibliothek befinden sich im Verzeichnis /opt/kaspersky/klms/share/src/dlfunc (für Linux) oder im Verzeichnis /usr/local/share/klms/src/dlfunc (für FreeBSD).
In einigen Fällen ist jedoch eine manuelle Kompilierung erforderlich.
Gehen Sie folgendermaßen vor, um eine manuelle Kompilation der dynamisch geladenen Bibliothek auszuführen:
- Installieren Sie die Ausgangsbibliotheken von Exim.
- Installieren Sie die Bibliothek libevent der Version 2.0.10 oder höher.
- Installieren Sie die Bibliothek boost der Version 1.47.0 oder höher.
- Wechseln Sie zum Verzeichnis /opt/kaspersky/klms/share/src/dlfunc (für Linux) oder zum Verzeichnis /usr/local/share/klms/src/dlfunc (für FreeBSD).
- Führen Sie den Befehl
./configure --with-exim=<path to exim headers> --with-boost=<path to boost> --with-libevent=<path to libevent>
aus. - Führen Sie den folgenden Befehl aus:
# make
.
Im aktuellen Verzeichnis wird die Datei libklms-exim.so angezeigt.