Привет! Преамбула (нет, вы ошиблись, это не anekdot.ru ;): В наше тяжелое время, когда валящиеся в почтовые ящики вирусы уже всех достали, а производители антивирусов хотят довольно больших денег за защиту почтовых серверов, многие сисадмины ищут бесплатную альтернативу. Альтернатива существует в виде связки <любой бесплатный почтовый сервер> + ClamAV. ClamAV - это замечательный совершенно бесплатный пакет антивирусных программ, причем с очень оперативным обновлением вирусных баз (по слухам, базы ClamAV частенько обновляются оперативнее, чем, скажем, базы платного DrWeb). В базовую поставку ClamAV входит почтовый фильтр для Sendmail, но на моем почтовом сервере работает Postfix. Почему это так - тема отдельной дискуссии, но переходить на sendmail я совершенно не собирался, поэтому принялся искать аналогичное решение для своего любимого почтового сервера. Решение нашлось по адресу http://www.securityanalyze.com/gsoares/clamav_postfix.html (осторожно, бразильский язык ;). По этой ссылке лежит HOWTO заставить работать связку ClamAV+Postfix, для чего предлагается в качестве фильтра использовать написанный на шелле скрипт, который вызывает clamdscan для проверки письма, и еще кучку внешних программ типа grep, date и т.п. В связи с тем, что мой почтовый сервер не отличается особой мощностью, я решил написать аналогичную программку на C, которая должна делать то же самое, но гораздо быстрее. |
Hello! For first sorry for my bad english ... Abstract: I have been looking for free antivirus software for my mail server, and i have been found ClamAV. ClamAV has mail filter for Sendmail in base complect, but my mail server is running Postfix. I start looking for filter program for my favorite mail system and i found it at http://www.securityanalyze.com/gsoares/clamav_postfix.html. This is HOWTO about ClamAV+Postfix, and as mail filter program it's uses shell script, which executes clamdscan for checking message, and some more external programs like a grep, date etc. Beacause computer running my mail server is not very fast i have decide to write light-weight and fast C-program to do same things as this shell script. |
|
Амбула:
В результате нескольких дней кодирования и нескольких недель тестирования (порядка 20 пользователей, ведущих активную переписку) получилось вот это: clamd-postfix.c.gz. Все исходные тексты - это один файл на C, откомпилировать который можно командой наподобие этой: |
Result:
As result of some days of coding and some weeks of testing (about 20 users actively e-mailing) i've got it: clamd-postfix.c.gz. All sources - it is one C-file, to compile it type something like: |
|
# ./clamd-postfix -h clamd-postfix is ClamAV filter for Postfix mailsystem, checking incoming messages through clamd. It behave like Postfix sendmail program, except than when message is infected then postmaster is notified and message stored in quarantine. Simple usage: - copy clamd-postfix to /usr/libexec/postfix; - add to master.cf lines: clamav unix - n n - - pipe flags=Rq user=clamav argv=/usr/libexec/postfix/clamd-postfix -f ${sender} -- ${recipient} - also change smtpd config in master.cf: smtp inet n - n - - smtpd -o content_filter=clamav:clamav Options: -d, --daemon=email ClamAV e-mail ("Clam-AntiVirus" by default) -h, --help show this help -f, --from=email sender of message (header "From:") -g, --group=name group to switch when drop privileges ("clamav" by default) -m, --mailer=path path to mail program executable ("/usr/sbin/sendmail" by default), mail program must accept options "-i" and "-f" in sendmail's manner -p, --postmaster=email postmaster's e-mail ("postmaster" by default) -q, --quarantine=path quarantine directory, must be writeable by user "clamav" ("/home/clamav" by default) -s, --socket=path path to clamd communication socket ("/tmp/clamd" by default) -u, --user=name user to switch when drop privileges ("clamav" by default) -v, --verbose send notify to syslog about each message checked -w, --work_dir=path directory for store temporary files, must be writeable by user "clamav" ("/home/clamav/tmp" by default) |
||
Для работы программы необходимо:
При обнаружении письма с вирусом письмо откладывается в карантин, а постмастеру отправляется уведомление (уведомлять отправителя/получателя считаю неправильным, потому как адреса обычно подделаны). При возникновении каких-либо ошибок сообщения отправляются в syslog с facility=LOG_MAIL и priority=LOG_WARNING, а письмо пропускается без изменений. Если доставить письмо не удается (это возможно только при ошибках записи в каталог для хранения временных файлов, поэтому настоятельно рекомендую внимательно отнестись к опции Словом, если кому-то интересна маленькая и быстрая программулина для связки Postfix+ClamAV, пробуйте. Это свободно распространяемое ПО без каких-либо гарантий. Писалось и тестировалось это все на платформе Mandrake Linux 9 + Postfix 2.0.16, но я думаю программа должна компилироваться на любой Linux-системе, а в идеале на любом *nix. Все предложения и замечания на <real-ghost at yandex.ru>. Рекомендуемые ссылки: |
Requirements to program work:
When message with virus is detected then message is moved to quarantine and postmaster is notified (i think that notify sender/receiver is not good idea beacause it's addresses often is wrong). When unexpected errors occurs messages about it are sended to syslog with facility=LOG_MAIL and priority=LOG_WARNING, message has delivered without changes. If filter cannot delivery message (it's possible only when program cannot write message to temporary file, so i strongly recommend check option So, if you have been interested on small and fast mail filter program for Postfix+ClamAV, try it. It's freeware without any guaranties. I'm use it on Mandrake Linux 9 + Postfix 2.0.16, but i hope it should work on any Linux platform, and may be on any *nix. All comments to <real-ghost at yandex.ru>. Recommended links: |
|
www.clamav.net www.postfix.org http://www.securityanalyze.com/gsoares/clamav_postfix.html |
Компиляция под FreeBSD: