Intégration before-queue à l'aide d'une bibliothèque au chargement dynamique
21 août 2023
ID 43915
Pour pouvoir utiliser la méthode d'intégration avant la mise du message en file d'attente (intégration before-queue) lors de la compilation d'une bibliothèque de codes sources au chargement dynamique, il faut indiquer que la prise en charge de dlfunc est indispensable. La sauvegarde de certaines distributions Linux contient des versions compilées Exim. D'autres distributions nécessitent une compilation manuelle.
En cas de compilation manuelle, il faut ajouter les lignes suivantes dans Makefile :
EXPAND_DLFUNC=yes
EXTRALIBS= -export-dynamic
Lors de l'intégration before-queue à l'aide d'une bibliothèque au chargement dynamique, le filtre doit soumettre les messages à l'analyse du module Scan Logic via le socket ServiceSocket
. Vous devez désigner ce socket dans la configuration de l'application.
En fonction de la distribution du système d'exploitation, vous devez apporter des modifications dans un ou plusieurs fichiers de configuration du serveur de messagerie Exim. Par exemple, dans Debian et Ubuntu le serveur de messagerie Exim peut être configuré à l'aide de plusieurs fichiers dans le répertoire /etc/exim/conf.d ou à l'aide d'un seul fichier.
Pour réaliser une intégration before-queue de Kaspersky Security 8 for Linux Mail Server à Exim à l'aide d'une bibliothèque au chargement dynamique, procédez comme suit :
- Assurez-vous que le serveur de messagerie Exim prend en charge la fonction du filtrage du contenu dlfunc. Pour ce faire, effectuez la commande
exim -bV
.La réponse positive est le résultat :
Expand_dlfunc
. - Faites une copie de sauvegarde des fichiers de configuration Exim.
- Apportez des modifications dans la liste du contrôle de l'accès pour
acl_smtp_data
. Pour ce faire, localisez dans le fichier (les fichiers) de configuration Exim la ligne du typeacl_smtp_data = acl_check_data
(une autre liste de contrôle peut être indiquée au lieu deacl_check_data
)et après la ligne du type
acl_check_data:
(ou après la ligne qui contient une autre liste du contrôle de l'accès)ajoutez les lignes suivantes :
#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 reject: ${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 reject: ${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 reject: ${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
où LIBDIR désigne le chemin d'accès à la bibliothèque libklms-exim.so :
- pour FreeBSD (32 bits) - /usr/local/lib/kaspersky/klms/libklms-exim.so,
- pour FreeBSD (64 bits) - /usr/local/lib/kaspersky/klms/compat64/libklms-exim.so,
- pour Linux (32 bits) - /opt/kaspersky/klms/lib/libklms-exim.so,
- pour Linux (64 bits) - /opt/kaspersky/klms/lib64/libklms-exim.so.
- Compilez le module
.so
conformément aux paramètres de votre système d'exploitation (facultatif). - Ajoutez l'utilisateur
kluser
au groupe auquel appartient le processusexim
. - Dans le fichier des paramètres des filtres klms_filter.conf, indiquez, dans la section
[global]
; la valeurfalse
au paramètreheader-guard
. - Ouvrez le fichier /var/opt/kaspersky/klms/installer.dat (pour Linux) ou /var/db/kaspersky/klms/installer.dat (pour FreeBSD).
- Ajouter la ligne suivante dans le fichier :
EXIM_INTEGRATION_TYPE=dlfunc
- Relancez le service klms.
- Relancez le serveur de messagerie Exim.
Le paquet d'installation de Kaspersky Security 8 for Linux Mail Server contient une bibliothèque compilée au chargement dynamique dlfunc pour tous les systèmes d'exploitation pris en charge par l'application. Les fichiers sources indispensables pour la bibliothèque dlfunc se trouvent dans le répertoire /opt/kaspersky/klms/share/src/dlfunc (pour Linux) ou dans le répertoire /usr/local/share/klms/src/dlfunc (pour FreeBSD).
Dans certains cas, une compilation manuelle est nécessaire.
Pour réaliser une compilation manuelle de la bibliothèque au chargement dynamique dlfunc, procédez comme suit :
- Installez les bibliothèques sources du serveur de messagerie Exim.
- Installez la bibliothèque libevent, version 2.0.10 ou supérieure.
- Installez la bibliothèque boost, version 1.47.0 ou supérieure.
- Passez au répertoire /opt/kaspersky/klms/share/src/dlfunc (pour Linux) ou au répertoire /usr/local/share/klms/src/dlfunc (pour FreeBSD).
- Exécutez la commande
./configure --with-exim=<path to exim headers> --with-boost=<path to boost> --with-libevent=<path to libevent>.
- Exécutez la commande suivante :
# make
.
Le fichier libklms-exim.so apparaît dans le répertoire en cours.