Postfix+ClamAV+Spamassassin

Автор | 02.05.2008

Источник:
http://www.geocities.com/adilinux/postfix-clamav-clamsmtpd.html

Вступление
Сегодня существует много способов построить почтовую систему. Как правило, существует много документации для почтовых систем больших офисов, с применением реляционных баз данных в качестве хранения писем и экаунтов. Тем не менее, очень мало внимания уделяеться почтовым системам для малых и средних предприятий. Для начала определимся что нам не нужно:

1 Хранение сообщений и паролей в SQL. Думаю, что для небольшого количества почтовых эккаунтов, (от 3 до 100 пользователей), нет никакой необходимости поднимать MySQL, или другую систему баз данных.
2 Коммерческий антивирус. До написания этой статьи, я использовал антивирус для linux-почтовых систем DrWEB. Нареканий на его работу в системе у меня небыло, но к сожалению у него есть ряд серьезных недостатков в его поддержке: Вопервых, он платный. Помимо расходов предприятия на его приобретение и продление, сисадмин должен в обязательном порядке следить за его развитием. То есть, при изменении версии самой программы (исполняемого файла), бывает так, что его антивирусные базы становяться бесполезными. То есть, требуеться переустановка антивируса. В результате в офис на рабочие станции под управлением Windows,лавиной обрушиваються вирусы. На прошедшем СофтТуле, я задал этот вопрос их представителю. Он сказал что они пытаються решить эту проблему, но пока она не преодалена.
Итак, в качестве альтернативы, будем использовать свободно-распространяемый ClamAv.
В качестве проверки его работоспособности, я использовал карантин от DrWeb. Проверка папки этого карантина выявила 95% вирусов. Я считаю что, результат проверки хороший, и ClamAv достоин чтобы его применяли в офисе.

Теперь о том, что мы хотим от нашей системы, с помощью каких програм мы это достигнем:

1 Проверка писем на наличие вирусов с последующем их удалением.
2 Ведение логов этой проверки. Во избежание увеличения трафика, отсылку уведомлений не делать, а заменить ее ведением логов проверки.
3 Выявление спама, и перемещение его в imap-папку “SPAM”.
4 Раскладка писем по соответствующим их тематике imap-папкам.

Нужны програмы:

1 mail-mta/postfix-2.2.5
2 app-antivirus/clamav-0.88
3 mail-filter/clamsmtp-1.6
4 mail-filter/spamassassin-3.1.0
5 mail-filter/procmail-3.22-r7
6 net-mail/courier-imap-4.0.1

Код:

emerge  postfix clamav clamsmtp spamassassin procmail courier-imap mutt

Правим конфиг:
nano /etc/clamd.conf
Код:

LogFile /var/log/clamav/clamd.log
LogTime
PidFile /var/run/clamav/clamd.pid
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket
User clamav

Теперь запустим демон, и добавим в загрузку:

/etc/init.d/clamd start
rc-update add clamd default

Код:

asus etc # /etc/init.d/clamd start
* Caching service dependencies ...                                                                                   [ ok ]
* Starting clamd ...                                                                                                 [ ok ]
* Starting freshclam ...                                                                                             [ ok ]
asus etc # rc-update add clamd default
* clamd added to runlevel default
* rc-update complete.

Проверяем:

ps aux | grep clam
Код:
clamav     334  0.0  0.9  11100  9392 ?        Ss   11:47   0:00 /usr/sbin/clamd
clamav     336  0.0  0.1   2668  1040 ?        Ss   11:47   0:00 /usr/bin/freshclam -d

Как видим, помимо демона антивируса, rc-script поднимает и систему обновления.

nano /etc/clamsmtpd.conf
Код:

OutAddress: 10026
Listen: 0.0.0.0:10025
ClamAddress: /var/run/clamav/clamd.sock
Header: BEREG-MAIL-SERVER: X-Virus-Scanned: ClamAV using ClamSMTP
TempDirectory: /tmp
# User to switch to
User: clamav

# Virus actions: There's an option to run a script every time a virus is found.
# !IMPORTANT! This can open a hole in your server's security big enough to drive
# farm vehicles through. Be sure you know what you're doing. !IMPORTANT!
VirusAction: /etc/postfix/script.sh

По умолчанию clamsmtpd не отсылает уведомлений. Их конечно можно включить в конфиге, но я предпочел воспользоваться скриптом по добавлению вирусов в карантин и ведения логов.

Вот пример лога

Sender admin@mydomain.ru
Recipients admin@mydomain.ru
Virus Eicar-Test-Signature
-------------------------------------------------------

nano /etc/postfix/script.sh
Код:

#!/bin/sh
file="/var/clamav/virus.log"
dir="/var/clamav/quarantine/"

exec 1>>$file
exec 2>>$file
# Add some fun log lines to the log file
echo Sender  $SENDER
echo Recipients  $RECIPIENTS
echo Virus  $VIRUS
echo "-------------------------------------------------------"
# Move the virus file to another directory
# This only works if Quarantine is enabled
if [ -n "$EMAIL" ]; then
mv "$EMAIL" "$dir"
fi

Создаем каталог для карантина и дадим права
Код:

mkdir -p /var/clamav/quarantine/
chown clamav:clamav /etc/postfix/script.sh
chmod 700 /etc/postfix/script.sh
chown clamav:clamav -R /var/clamav/

Запускаем:
Код:

asus etc # /etc/init.d/clamsmtpd start
* Starting ClamSMTPd ...                                                                                             [ ok ]
asus etc # rc-update add clamsmtpd default
* clamsmtpd added to runlevel default
* rc-update complete.

Проверяем:
Код:

asus etc # netstat -l --inet | grep 10025
tcp        0      0 *:10025                 *:*                     LISTEN 

Если ваш сервер находиться внутри локальной сети, то в файле /etc/postfix/header, впишите:
Код:

/192.168.1./ IGNORE

Полезно создать
nano /etc/postfix/body_checks
Код:

/^[     ]*name=.*.(exe|dll|eml|vbs|pif|com|bat|scr|lnk)"?$/           REJECT
/