моё портфолио

Привет!

Преамбула (нет, вы ошиблись, это не 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, откомпилировать который можно командой наподобие этой:

# gcc clamd-postfix.c -o clamd-postfix

Простейшие инструкции по использованию можно получить, запустив полученный запускаемый файл с ключом -h:

 

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:

# gcc clamd-postfix.c -o clamd-postfix

To get simple usage instructions, run it with option -h:


# ./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)

					

Для работы программы необходимо:

  • запущенный clamd
  • включенная опция ScanMail в clamav.conf
  • clamd должен принимать подключения через Unix-сокет (если кому-то нужна поддержка TCP, пришлите патч ;)
  • правильно созданные и доступные на чтение/запись каталоги для хранения временных файлов и карантина

При обнаружении письма с вирусом письмо откладывается в карантин, а постмастеру отправляется уведомление (уведомлять отправителя/получателя считаю неправильным, потому как адреса обычно подделаны). При возникновении каких-либо ошибок сообщения отправляются в syslog с facility=LOG_MAIL и priority=LOG_WARNING, а письмо пропускается без изменений. Если доставить письмо не удается (это возможно только при ошибках записи в каталог для хранения временных файлов, поэтому настоятельно рекомендую внимательно отнестись к опции --work_dir), почтовому серверу возвращается код ошибки EX_TEMPFAIL (сообщение временно не удается доставить, попробуйте позже).

Словом, если кому-то интересна маленькая и быстрая программулина для связки Postfix+ClamAV, пробуйте. Это свободно распространяемое ПО без каких-либо гарантий. Писалось и тестировалось это все на платформе Mandrake Linux 9 + Postfix 2.0.16, но я думаю программа должна компилироваться на любой Linux-системе, а в идеале на любом *nix. Все предложения и замечания на <real-ghost at yandex.ru>.

Рекомендуемые ссылки:

    

Requirements to program work:

  • running clamd
  • ScanMail option enabled in clamav.conf
  • clamd must listen on Unix-socket (if you want to use TCP, send me a patch ;)
  • correctly created directories for storing temporary files and quarantine with read/write permissions

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 --work_dir), error code EX_TEMPFAIL is returned to mail system (temporary delivery failure).

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: g++ clamd-postfix.c -o clamd-postfix -I/usr/local/include -L/usr/local/lib -lgnugetopt

Hosted by uCoz