Ключевые слова:virus, mail, filter, php, procmail, (найти похожие документы)
From: Шестаков Николай <advnik@plotinka.ru.plotinka.ru
Newsgroups: email
Date: Mon, 18 Nov 2004 14:31:37 +0000 (UTC)
Subject: Использование версии DrWeb для рабочих станции на почтовом сервере.
Для небольших компаний может оказаться целесообразно защитить свой
почтовый сервер продуктами DrWeb, но не покупая серверной версии
(требуется купить версию для рабочих станции).
Это можно сделать с помощью приведенного ниже скрипта на php (кому не
лень могут переписать его на любой другой язык) и procmail
В procmailrc прописываем:
:0Wf
| /usr/bin/drwebfilter.php
:0H
* ^X-DrWeb-Virus-Status: Infected
$HOME/Maildir/.Infected/
И сам скрипт (кладем в /usr/bin/drwebfilter.php):
#!/usr/bin/php
<?php
$stdin = fopen("php://stdin", "r");
$stdout= fopen("php://stdout", "w");
$tmp_n = tempnam("/tmp", "ForDrWeb");
$tmp = fopen($tmp_n, "wx");
while(!feof($stdin)) {
$s = fgets($stdin);
fwrite($tmp, $s);
}
fclose($tmp);
exec("/opt/drweb/drweb -path=$tmp_n | grep infected", $out);
$tmp = fopen($tmp_n, "r");
$q = 0;
while(!feof($tmp)) {
$s = fgets($tmp);
if ($q==0&&($s=="\\r\\n"||$s=="\\n"||$s=="")) {
foreach($out as $vir) {
$vir = substr($vir, strlen($tmp_n) + 1);
if ($q==0) {
$head = "X-DrWeb-Virus-Status: Infected\\r\\n";
fwrite($stdout, $head);
}
$head = "X-DrWeb-Virus: $vir\\r\\n";
fwrite($stdout, $head);
$q++;
}
if ($q==0) {
$head = "X-DrWeb-Virus-Status: Clean\\r\\n";
fwrite($stdout, $head);
$q++;
}
}
fwrite($stdout, $s);
}
fclose($tmp);
unlink($tmp_n);
?>
Двоиные обратные слэши надо заменить одинарными :)
Скорость проверки падает существенно по сравнению с drwebd, но для небольших компании где сообщении несколько тысяч в день на более менее современном оборудовании потянет.
Обычно такое пишут на perl.