Netmaster.com.ua

Установка и настройка Exim с веб-интерфейсом Xams для управления почтовым сервером.

Mail + Exim + Xams + MySQL + Courier-Imap + Clam-AV + SpamAssassin + WebMail

Ссылка на статью на OpenNet


В этой статье, я расскажу о решении для почтовых систем на базе Exim с удобным web-интерфейсом XAMS
(ver. 0.0.19) http://www.xams.org

Причиной написания этой статьи послужил тот факт, что информации в сети о Xams практически нет, а сама программа очень удобная и решает очень много насущных вопросов.


Хотя проект Xams развивается медленно, но уже на данный момент он имеет внушительный набор функций:

Я не буду углубляться в тонкости установки и настройки сопутствующего софта, информацию об этом можно легко найти в интернете, я остановлюсь только на ключевых моментах.
Xams мы будем устанавливать на FreeBSD 7.1-RELEASE, с этим у меня тоже возникли проблемы так как по умолчанию Xams поддерживает только Linux. Пришлось подправить несколько параметров, создать скрипты запуска и все заработало на FreeBSD. Для линуксоидов эта статья также послужит хорошим руководством по установке Xams, хотя некоторые значения и могут меняться.
Приступим к установке софта, конечно же у кого он уже установлен могут пропустить этот раздел.


Оглавление:
Устанавливаем MySQL (5.1.32) ----------------
# cd /usr/ports/databases/mysql51-server/
# make clean && make install
# echo mysql_enable="YES" >> /etc/rc.conf
# /usr/local/etc/rc.d/mysql-server start

Задаем пароль для root
# mysqladmin -u root password 'new_password'

Устанавливаем Apache (2.2.11_3) ----------------
При установке не забываем включить модуль SSL
# cd /usr/ports/www/apache22
# make clean && make install
# echo apache22_enable="YES" >> /etc/rc.conf


Устанавливаем Php5 (5.2.9) ----------------
Включаем модуль APACHE
# cd /usr/ports/lang/php5
# make config
# make clean && make install

Создаем файл /usr/local/etc/apache22/Includes/php.conf и добавляем туда строчки
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php

Устанавливаем Php5-extensions (1.3) ----------------
# cd /usr/ports/lang/php5-extensions
# make config

Включаем модули BZ2, GD, MCRYPT, MYSQL, OPENSSL, XSL, ZIP, ZLIB
# make clean && make install

Устанавливаем Perl5.8 (5.8.9_2) ----------------
# cd /usr/ports/lang/perl5.8
# make clean && make install

Устанавливаем необходимые нам модули (команда install или force install)
# cpan
cpan > install DBI
cpan > force install DBD::mysql
cpan > install Unix::Syslog
cpan > install CDB_File
cpan > install Config::IniFiles
cpan > install File::chdir


Устанавливаем Exim4 (4.69) с поддержкой MySQL и вместе с SpamAssassin3.2 (3.2.5_2) ----------------
# cd /usr/ports/mail/exim-sa-exim
# make clean && make WITH_MYSQL=YES && make install

Выключаем sendmail
# /etc/rc.d/sendmail stop

И создаем ссылку на exim
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# ln -s /usr/local/sbin/exim /usr/sbin/sendmail

Изменяем /etc/rc.conf
# echo sendmail_enable="NO" >> /etc/rc.conf
# echo sendmail_submit_enable="NO" >> /etc/rc.conf
# echo sendmail_outbound_enable="NO" >> /etc/rc.conf
# echo sendmail_msp_queue_enable="NO" >> /etc/rc.conf
# echo spamd_enable="YES" >> /etc/rc.conf
# echo exim_enable="YES" >> /etc/rc.conf


Устанавливаем Courier-Imap (4.4.1,2) ----------------
# cd /usr/ports/mail/courier-imap/
# make clean && make install
# echo courier_imap_pop3d_ssl_enable="YES" >> /etc/rc.conf
# echo courier_imap_imapd_ssl_enable="YES" >> /etc/rc.conf


Устанавливаем ClamAV (0.94.2) ----------------
# cd /usr/ports/security/clamav
# make clean && make install
# echo clamav_freshclam_enable="YES" >> /etc/rc.conf
# echo clamav_clamd_enable="YES" >> /etc/rc.conf


Устанавливаем Xams (0.0.19) ----------------
Загружаем Xams с официального сайта http://www.xams.org/pages/download/download.php
Или с альтернативной ссылки http://netmaster.com.ua/files/xams-0.0.19.tar.gz
# wget http://netmaster.com.ua/files/xams-0.0.19.tar.gz

Распаковываем файл
# tar zxvf xams-0.0.19.tar.gz

Далее копируем файл autogen.conf.orig в autogen.conf и изменяем в нем нужные нам параметры
# cd xams-0.0.19
# cp autogen.conf.orig autogen.conf

У меня этот файл выглядит так:
VERSION             = 0.0.19
XAMS_USER           = mailnull
XAMS_PID_DIR        = /var/run/exim
XAMS_BINDIR         = /usr/local/xams/
XAMS_CONFIG_DIR     = /usr/local/etc/xams
XAMS_CONFIG         = xams.conf
EXIM_CONFIG_DIR     = /usr/local/etc/exim
EXIM_BINDIR         = /usr/local/sbin/
EXIM_PID_DIR        = /var/run/exim
EXIM_SPOOL_DIR      = /var/spool/exim
EXIM_USER           = mailnull
EXIM_GROUP          = mail
MAIL_GROUP	 	 = mail
XAMS_SQL_HOST            = localhost
XAMS_SQL_DATABASE        = xamsdb
XAMS_SQL_USER            = xamsusr
XAMS_SQL_PASSWORD        = db_password
MYSQL_SETNAMES           = UTF8
EXIM_SQL_HOST            = localhost
EXIM_SQL_DATABASE        = xamsdb
EXIM_SQL_USER            = xamsusr
EXIM_SQL_PASSWORD        = db_password
MAILSCANNER_INCOMING     = /var/spool/exim-incoming
MAILSCANNER_OUTGOING     = /var/spool/exim-outgoing
MAILSCANNER_OUTGOING_LOG = /var/log/exim-outgoing
COURIER_SOCKET_DIR  	 = /var/run/authdaemond
MAILDIR             	 = /var/mail
XAMS_GUI_DIR        	 = /usr/local/www/xams
WEBMAIL_DIR              = /usr/local/www/webmail
XMU_BACKUP_DIR           = /usr/local/etc/xams/archives
PHP_PATH	         = /usr/local/bin/php
PERL_PATH	 	 = /usr/bin/perl


Далее что бы во FreeBSD правильно сработал скрипт autogen.sh нужно подправить 43 строчку, заменить с
test -x /usr/bin/stat && chmod $(stat -c %a $f) $f2

На
test -x /usr/bin/stat && chmod $( stat -f %Lp $f) $f2

Теперь можем запускать скрипт autogen.sh
# ./autogen.sh

Он сгенерит конфигурационные файлы с нужными параметрами и скрипты SQL для создания структуры базы данных для Xams

Выполняем скрипты SQL
# cd xams-0.0.19/database/mysql
# mysql -p < xams-create.sql
# mysql -p xamsdb < xams-struct.sql
# mysql -p xamsdb < xams-data.sql

Теперь добавляем администратора для управления Xams
# mysql -p xamsdb
mysql> INSERT INTO pm_admins (Name, Password, Added) VALUES ("admin", MD5("password"), NOW());


Создаем все необходимые папки
# mkdir /var/run/exim
# mkdir /usr/local/xams/
# mkdir /usr/local/etc/xams
# mkdir /usr/local/www/xams
# mkdir /usr/local/www/xams/cache
# chown -R www:www /usr/local/www/xams/
# mkdir /usr/local/etc/xams/archives
# mkdir /usr/local/etc/xams/autoreply
# chown www:wheel /usr/local/etc/xams/autoreply/
# chmod g+wx /usr/local/etc/xams/autoreply/
# chown mailnull:wheel /usr/local/etc/xams/
# chown mailnull:wheel /usr/local/etc/xams/archives/


Копируем файлы в нужные папки
# cp -R xams-0.0.19/gui/* /usr/local/www/xams/
# cp xams-0.0.19/config/exim4/*.conf /usr/local/etc/xams/
# cp xams-0.0.19/config/exim4/mysql/*.conf /usr/local/etc/xams/
# cp xams-0.0.19/config/xams/xams.conf /usr/local/etc/xams/
# cp xams-0.0.19/docs/man/* /usr/share/man/man8/
# cp xams-0.0.19/scripts/*.pm /usr/local/lib/perl5/5.8.9/
# cp xams-0.0.19/scripts/authdaemon /usr/local/xams/
# cp xams-0.0.19/scripts/export_dns.pl /usr/local/xams/
# cp xams-0.0.19/scripts/get_maildirsize /usr/local/xams/
# cp xams-0.0.19/scripts/xmu /usr/local/xams/


создаем файл для Apache /usr/local/etc/apache22/Includes/xams.conf
Alias /xams/ "/usr/local/www/xams/"
<Directory /usr/local/www/xams>
    Options -Indexes MultiViews
    AllowOverride Options
    SSLRequireSSL
    Order allow,deny
    Allow from all
</Directory>

Обратите внимание что мы включаем доступ по https

Создаем файл /usr/local/www/xams/.htaccess для задания необходимых переменных для Xams
php_flag register_globals Off
php_flag allow_call_time_pass_reference Off
php_flag display_errors On
php_flag magic_quotes_gpc Off
php_flag short_open_tag Off
php_value error_reporting 2047


Далее начинаем конфигурировать сервисы, начнем с Courier-Imap ----------------
# cd /usr/local/etc/courier-imap
В файле imapd обязательно задаем нужное значение для параметра
IMAP_MAILBOX_SANITY_CHECK=0
Генерим сертификаты для защищенного соединения
# cd /usr/local/share/courier-imap
# dd if=/dev/urandom of=imapd.rand count=1
Сертификат генерится на 10 лет
# openssl req -new -x509 -days 3650 -nodes -out imapd.pem -keyout imapd.pem
# openssl gendh -rand imapd.rand 512 >>imapd.pem
# openssl x509 -subject -dates -fingerprint -noout -in imapd.pem
# rm imapd.rand
Тоже самое делаем для сертификата под POP3
# dd if=/dev/urandom of=pop3d.rand count=1
# openssl req -new -x509 -days 3650 -nodes -out pop3d.pem -keyout pop3d.pem
# openssl gendh -rand pop3d.rand 512 >>pop3d.pem
# openssl x509 -subject -dates -fingerprint -noout -in pop3d.pem
# rm pop3d.rand

Задаем права доступа к файлам
# chown courier:wheel /usr/local/share/courier-imap/imapd.pem
# chown courier:wheel /usr/local/share/courier-imap/pop3d.pem
# chmod 440 /usr/local/share/courier-imap/imapd.pem
# chmod 440 /usr/local/share/courier-imap/pop3d.pem


Что бы Courier-Imap мог авторезироваться в базе xams нужно заменить стандартный демон courier-authdaemond на демон который идет вместе с Xams
Для этого нужно создать скрипт для запуска /usr/local/etc/rc.d/xams-authdaemond.sh

#!/bin/sh
#
# An rc.subr-style startup script for xams-authdaemond service.
# PROVIDE: xams_authdaemond
# REQUIRE: LOGIN
# KEYWORD: FreeBSD shutdown
# Define these xams_authdaemond_* variables in one of these files:
#       /etc/rc.conf
#       /etc/rc.conf.local
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
xams_authdaemond_enable=${xams_authdaemond_enable-"NO"}
. /etc/rc.subr
name="xams_authdaemond"
rcvar=`set_rcvar`
command="/usr/local/xams/authdaemon"
start_cmd="authdaemond_cmd start"
stop_cmd="authdaemond_cmd stop"
restart_cmd="authdaemond_cmd stop && authdaemond_cmd start"
rundir=/var/run/exim/
pidfile="${rundir}/authdaemon-xams.pid"
procname="/usr/local/xams/authdaemon"

load_rc_config $name

authdaemond_cmd () {
        case $1 in
        start)
            echo -n "Starting XAMS authdaemon: "
            ${command}
            echo "${command}."
        ;;
        stop)
            echo -n "Stopping XAMS authdaemon: "
            if [ -e $pidfile ] ; then
                kill `cat $pidfile`
                echo "${command}."
            else
                echo "no ${command} found running."
            fi
            ;;
        esac
}
run_rc_command "$1"

Делаем файл исполняемым
# chmod a+x /usr/local/etc/rc.d/xams-authdaemond.sh
И добавить строчку xams_authdaemond_enable="YES" в файл /etc/rc.conf
Даем папкам и файлам права на доступ
# chown mailnull:mail /var/run/authdaemond
# chown mailnull:mail /var/run/exim/

Пробуем запускать эти сервисы
# /usr/local/etc/rc.d/xams-authdaemond.sh start
# /usr/local/etc/rc.d/courier-imap-imapd-ssl start
# /usr/local/etc/rc.d/courier-imap-pop3d-ssl start

Смотрим в логи, если все нормально движемся дальше.

Настраиваем ClamAV ----------------
Настраиваем по своему усмотрению ClamAV и запускаем его
# /usr/local/etc/rc.d/clamav-clamd start

Для обновлений баз запускаем Freshclam
# /usr/local/etc/rc.d/clamav-freshclam start


Настраиваем SpamAssassin ----------------
В файле /usr/local/etc/xams/sa-exim.conf меняем параметр SAspamcpath на SAspamcpath: /usr/local/bin/spamc

# cd /usr/local/etc/mail/spamassassin

Для начала обновим динамический правила
# /usr/local/bin/sa-update --nogpg

И добавим выполнение этой команды по расписанию, добавим в crontab примерно вот такую запись
# Update dynamic rules for SpamAssassin
0       8       *       *       *       root    /usr/local/bin/sa-update --nogpg && /usr/local/etc/rc.d/sa-spamd reload > /dev/null

Далее продолжаем настройку
# cp local.cf.sample local.cf

В файле local.cf я бы рекомендовал изменить некоторые настройки
Разкоментируем параметр
use_bayes 1
bayes_auto_learn 1
Добавляем
bayes_auto_learn_threshold_nonspam -1
bayes_auto_learn_threshold_spam 12.0
use_auto_whitelist  1

Запускаем sa-spamd
# /usr/local/etc/rc.d/sa-spamd start


По умолчанию значение при котором письмо считается спамом задается в файле /usr/local/etc/mail/spamassassin/local.cf параметром required_score
Но при использовании sa-exim это значение задается в файле /usr/local/etc/xams/sa-exim.conf параметрами Sapermreject и Satempreject
Задаете значения по своему усмотрению, по умолчанию эти значения равны 6 и 7 соответственно.
В том же файле что бы не сохранять отброшенные письма и письма с ошибками выключаем несколько параметров
SAtimeoutSavCond: 0
SAerrorSavCond: 0
SAdevnullSavCond: 0
SApermrejectSavCond: 0
SAtemprejectSavCond: 0
SAspamacceptSavCond: 0
SAnotspamSavCond: 0


Настраиваем Exim ----------------
# mv /usr/local/etc/exim/configure /usr/local/etc/exim/configure.dist
# mv /usr/local/etc/exim/sa-exim.conf /usr/local/etc/exim/sa-exim.conf.dist
# ln -s /usr/local/etc/xams/exim.conf /usr/local/etc/exim/configure
# ln -s /usr/local/etc/xams/sa-exim.conf /usr/local/etc/exim/sa-exim.conf


# cd /usr/local/etc/xams/
В файле exim-custom.conf меняем настройки
Разкоментируем параметры
TLS_ENCRYPTION = On
VIRUS_MODULE = On
SPAMASSASSIN_MODULE = On
SENDER_VERIFY_CALLBACK_DNS = true
SENDER_VERIFY_CALLBACK_DYNAMIC = true
SENDER_VERIFY_CALLBACK_RBL = true
RBL_LIST = cbl.abuseat.org : dnsbl.sorbs.net : dnsbl.njabl.org : cbl.abuseat.org

Изменяем параметр av_scanner = clamd:/var/run/clamav/clamd.ctl
На av_scanner = clamd:/var/run/clamav/clamd.sock
Комментируем строку
local_scan_path = /usr/lib/exim4/local_scan/sa-exim.so
Для работы TLS необходимо сгенерить сертификат для Exim
# cd /usr/local/etc/xams/
# openssl genrsa 1024 > server.key
# openssl req -new -key server.key -x509 -days 3650 -out server.crt

Задаем права доступа к файлам
# chown mailnull:wheel /usr/local/etc/xams/server.*
# chmod 440 /usr/local/etc/xams/server.*

Далее в файле exim.conf изменяем два параметра на правильные пути
exim_path = /usr/local/sbin/exim
trusted_users = root : mailnull
tls_certificate = /usr/local/etc/xams/server.crt
tls_privatekey = /usr/local/etc/xams/server.key


Перед первым запуском Exim нужно обязательно выполнить команду
# /usr/local/xams/xmu --cdbdomlist --homedirs --autoreply

Запускаем Exim
# /usr/local/etc/rc.d/exim start


Настраиваем Apache ----------------
# cd /usr/local/etc/apache22

Для включения SSL в Апаче в конце файла httpd.conf разкоментируем строку
Include etc/apache22/extra/httpd-ssl.conf
Далее если сертификаты не созданы создаем их вручную
# openssl genrsa 1024 > httpd.key
# openssl req -new -key httpd.key -x509 -days 3650 -out httpd.crt

Задаем права доступа к файлам
# chown www:wheel /usr/local/etc/apache22/httpd.key
# chown www:wheel /usr/local/etc/apache22/httpd.crt
# chmod 440 /usr/local/etc/apache22/httpd.key
# chmod 440 /usr/local/etc/apache22/httpd.crt

В файле extra/httpd-ssl.conf в параметрах SSLCertificateFile и SSLCertificateKeyFile прописываем правильные пути к ним.

Запускаем Apache
# /usr/local/etc/rc.d/apache22 start


Проверяем Xams ----------------
Открываем страничку с адресом https://servername/xams/ И проверяем Xams
Для входа используем логин admin и пароль который во время установки Xams мы добавляли в базу MySQL.

Для начала нужно в разделе [XAMS Accounts] создать первого реcеллера, а уже потом создаём первый почтовый домен в разделе [Sites] и первого пользователя в разделе [Users]

Добавляем запись в crontab
# Update XAMS's domains & users
*/3 	*	*	*	*	root	/usr/local/xams/xmu --cdbdomlist --homedirs --autoreply > /dev/null

(Обратите внимание что после добавления пользователя в Xams его домашняя папка для писем будет создана только после того как сработает скрипт xmu прописанный в crontab, в нашем случае он срабатывает каждые 3 минуты.)

Осталось настроить какой нибудь почтовый клиент и проверить всю почтовую систему.
Какой бы вы не выбрали клиент, для всех в настройках учетной записи должны быть включены параметры для защищенного соединения и аутентификация при отправке и получении почты
Для POP3 - SSL (порт 995)
Для SMTP - TLS если доступен (порт 25)
Для IMAP - SSL (порт 993)
Имя пользователя при аутентификации обязательно должно указываться вместе с именем домена (пример: user@example.com)
Примеры настроек разных почтовых клиентов можно посмотреть здесь http://netmaster.com.ua/docs/screenshots.html

Далее смотрим логи /var/log/maillog и /var/log/exim/mainlog
Проверяем нет ли каких нибудь ошибок.
Работает ли антивирус можно проверить скачав пример вируса допустим с сайта http://vx.netlux.org/vl.php

В файле /usr/local/www/xams/eximfilter.php я обнаружил ошибку в функции работы с фильтрами. Для того что бы исправить ее открываем файл eximfilter.php и на строке 62 заменяем троку
<h1><?php echo $tl->get('')m-Filter Configuration ?>
на
<h1><?php echo $tl->get('Exim-Filter Configuration') ?>

Мы закончили основной этап установки и первичной конфигурации Xams.


----------------------------------------------------------------------------------------------------------------------------------


Дополнительная настройка ----------------
Далее я опишу несколько особых настроек, которые могут вам понадобиться

В файле exim-custom.conf параметром RBL_LIST мы задаем список публичных черных списков которые помогут вам отбивать спам. Зачастую некоторые из серверов перестают отвечать, из-за этого обработка писем затормаживается.
У меня этот список выглядит так
RBL_LIST = cbl.abuseat.org : dnsbl.sorbs.net : list.dsbl.org : multihop.dsbl.org : sbl-xbl.spamhaus.org : bl.spamcop.net

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

Почти всегда нам необходимо ограничить максимальный размер письма.
Это задается в файле exim-global.conf
message_size_limit = 15M
return_size_limit = 30K
bounce_return_size_limit = 30K


Так же в этой системе не реализована система черных и белых списков.
Эту функцию мы должны добавить сами.
Создаем соответствующие файлы где будут перечислятся доверенные и не доверенные отправители
# touch /usr/local/etc/exim/allowhosts

В этот файл мы будем добавлять ip адреса или адреса сетей отправка писем с которых не будет блокироваться спам фильтром или публичными черными списками.
(пример: 193.143.223.145 или 193.143.223.128/25)

# touch /usr/local/etc/exim/allowsenders

В этот файл мы добавляем e-mail адреса или домены отправка писем с которых не будут блокироваться спам фильтром или публичными черными списками
(пример: user@mail.com или *@mail.com)

# touch /usr/local/etc/exim/denysenders
# touch /usr/local/etc/exim/denyhosts

В этих файлах мы соответственно задаем отправителей, которые точно будут блокироваться
Во всех этих файлах каждое новое значение задается с новой строчки.

Далее в файле exim.conf примерно на строчке 55 мы добавляем
hostlist allowhosts = /usr/local/etc/exim/allowhosts
addresslist allowsenders = /usr/local/etc/exim/allowsenders
addresslist denysenders = /usr/local/etc/exim/denysenders
hostlist denyhosts = /usr/local/etc/exim/denyhosts


В этом же файле переходим в раздел acl_check_rcpt
Примерно на строчке 273 перед # Default tag мы добавляем
  warn    message       = X-SA-Do-Not-Run: Yes
          senders       = +allowsenders
          log_message   = No scanned, e-mail adress is in the trusted list (account $acl_m0 off)
          set acl_m6    = 1

  warn    message       = X-SA-Do-Not-Run: Yes
          hosts         = +allowhosts
          log_message   = No scanned, ip adress is in the trusted list (account $acl_m0 off)
          set acl_m6    = 1

Это позволит не запускать спам фильтр для доверенных писем
Далее находим строчку .ifdef SENDER_VERIFY_CALLBACK_RBL
И немного правим это правило, добавляем наши переменные allowsenders и allowhosts. Получается вот такое выражение
  .ifdef SENDER_VERIFY_CALLBACK_RBL
  # Sender callback verification for hosts/domains blacklisted by RBL
  deny    sender_domains  = ! +local_domains : ! +relay_to_domains : ! +sender_callback_domains
          senders         = ! +allowsenders
          hosts           = ! +relay_from_hosts : ! +allowhosts
        ! authenticated   = *
          log_message     = Listed in RBL $dnslist_domain${if !eq {$dnslist_text}{} { ($dnslist_text)}{}} - Callback check forced
          message         = Sender verification failed
          dnslists        = RBL_LIST
        ! verify          = sender/defer_ok/callout=10s,defer_ok
  .endif
  


Осталось добавить блокирующие списки.
Переходим в раздел acl_check_rcpt и в самом начале добавляем 2 строчки
deny senders = +denysenders
       message = Sender $sender_address is blocked. Sender is in the deny list

  deny hosts   = +denyhosts
       message = Sender $sender_address is blocked. Sender is in the deny hosts list

Это все что нам необходимо для функциональности белых и черных списков.

Продолжаем дальше.
Exim по умолчанию не добавляет Message-Id для писем в которых его нет. Этот параметр необходим для идентификации уникальности каждого письма. Почти всегда это значение задает почтовый клиент и проблем в таком случае не возникает. Но если почтовый клиент не добавляет это значений могут возникнуть необъяснимые ошибки, например, отправляется одно письмо, но каждому адресату приходит столько писем, сколько было адресов в поле СС
Мы можем заставить Exim добавлять это значений, если почтовый клиент его не добавил. Для этого переходим в раздел acl_check_content и в самом начале добавляем
warn  condition = ${if !def:h_Message-Id: {1}}
        message = Message-Id: <E$message_id@$primary_hostname>
        log_message = Added Message-Id <E$message_id@$primary_hostname>

Параметр Message-Id обязательно должен начинаться с прописной буквы, для этого к началу message_id добавляется символ E

В том же разделе сразу за добавленными нами строчками мы можем задать типы файлов, которые нельзя передавать или получать по почте.
Для моего почтового сервера я задаю вот такие значения
#   Some malicious people have used this file format to spread viruses. Consequently, the mail server has prevented your ma
  deny  message = Your message contained an ($found_extension) file.
        demime = scr:vbs:bat:lnk:pif:com:cmd:exe 


(Обратите внимание что эти функции, установка Message-Id и блокирование запрещенных файлов, будут работать только тогда когда в файле exim-custom.conf установлен параметр VIRUS_MODULE = On)

Иногда случается так что спам-фильтр отбрасывает необходимые и зачастую очень важные письма. Как решения я могу предложить вариант когда все письма отмеченные как спам складываются в отдельный почтовый ящик в которым письма старше допустим 30 дней автоматически удаляются. В любой момент администратор почтового сервера может зайти на этот ящик по web-почте и восстановить те письма которые не были доставлены адресату.
Реализуем эту функцию
C помощью Xams создаем пользователя rejected_spam
Для сохранения отброшенных писем задаем несколько параметров в файле /usr/local/etc/xams/sa-exim.conf
SApermrejectSavCond: 1
SApermrejectsave: /var/mail/DomainName/rejected_spam
SAtemprejectSavCond: 1
SAtemprejectsave: /var/mail/DomainName/rejected_spam

Теперь для удаления писем старше 30 дней в crontab добавляем запись
0	1	*	*	*	root	/usr/bin/find /var/mail/DomainName/rejected_spam -type f -mtime +30 -exec rm {} \;

Вместо DomainName указываем правильный путь к домашней папке вашего домена


Установка и настройка WebMail ----------------
Есть много web-интерфейсов для почты, например Horde-Imp (http://horde.org/imp/) или SquirrelMail (http://www.squirrelmail.org/)
Я предпочитаю использовать Nutsmail-BlueHive, это основанный на SquirrelMail почтовый web-клиент. Он довольно прост в использовании и в настройке с симпатичным дизайном.
Скриншеты вы можете посмотреть здесь (http://netmaster.com.ua/docs/bluehive-screenshots.html)
Скачиваем архив здесь (http://netmaster.com.ua/files/bluehive-webmail.tgz)

Устанавливаем pear-DB (1.7.13,1) ----------------
Для некоторых компонентов нам понадобится это дополнение
# cd /usr/ports/databases/pear-DB
# make clean && make install


Распаковываем архив в папку /usr/local/www/webmail
Создаем конфигурационный файл /usr/local/etc/apache22/Includes/webmail.conf для Apache
Alias /webmail/ "/usr/local/www/webmail/"
<Directory /usr/local/www/webmail>
    Options -Indexes MultiViews
    AllowOverride Options
    SSLRequireSSL
    Order allow,deny
    Allow from all
</Directory>


Наша web-почта работает по протоколу Imap но без шифрования. Только для web-почты мы запустим демон Imap без SSL на локальном адресе 127.0.0.1
В /etc/rc.conf добавим строку courier_imap_imapd_enable=YES
В его настройках в файле /usr/local/etc/courier-imap/imapd в параметре ADDRESS задаем значение 127.0.0.1
И запускаем его
# /usr/local/etc/rc.d/courier-imap-imapd start

Теперь настраиваем web-почту. Запускаем скрипт конфигурирования
# /usr/local/www/webmail/config/conf.pl

Все настройки задаем по собственному усмотрению, в разделе Server Settings обязательно задаем настройки Imap сервера - localhost:143, SMTP сервера localhost:25 и в параметре Domain задаем домен

В поставке Xams под Horde и SquirrelMail идут несколько плагинов для смены пароля и автоответа.
Нас интересуют плагины для SquirrelMail.
Переходим в папку xams-0.0.19/contrib/squirrelmail
(В начале установки Xams когда вы запускали скрипт генерации настроек (autogen.sh) он должен был в этих плагинах прописать нужные настройки для доступа к MySQL базе, если вы не запускали этот скрипт просто отредактируйте файл xams_global/config.php)
Копируем все 3 папки в папку плагинов нашей web-почты
/usr/local/www/webmail/plugins
Копируем файл xams-0.0.19/contrib/squirrelmail/xams-webmail.conf в папку с файлами конфигурации /usr/local/etc/xams
# cp xams-0.0.19/contrib/squirrelmail/xams-webmail.conf /usr/local/etc/xams

Теперь в плагинах нам нужно указать где лежит этот файл конфигурации
Открываем на редактирование файл /usr/local/www/webmail/plugins/xams_global/config.php
И в параметре
define('_CONFIG_FILE', '');
прописываем правельный путь
define('_CONFIG_FILE', '/usr/local/etc/xams/xams-webmail.conf');


Запускаем скрипт конфигурации /usr/local/www/webmail/config/conf.pl
И в разделе Plugins включаем 3 наших плагина
xams_global, xams_autoreply, xams_chpasswd
Теперь в нашей web-почте в разделе Options появились дополнительные пункты по смене пароля и автоответа (Password changing, Autoreply update).

Я сделал еще один плагин для Xams позволяющий каждому пользователю отключать для себя спам-фильтр и антивирус для входящих и исходящих сообщений.
Качаем архив с http://netmaster.com.ua/files/xams_spamantivir.tgz
Точно так же распаковываем архив в /usr/local/www/webmail/plugins
Запускаем скрипт конфигурации и включаем этот плагин.
Перезапускаем Apache и пробуем зайти на web-почту
https://servername/webmail/
Не забываем что логин нужно писать полный вместе с именем домена (user@exemple.com)

SPF-записи --------------------------------------------
Очень советую на вашем DNS добавить SPF-запись.
http://www.openspf.org/Introduction
http://ru.wikipedia.org/wiki/Sender_Policy_Framework

Не буду сильно углубляться, скажу только что благодаря этой записи вы можете точно указать какие ip-адреса могут отправлять почту от имени вашего домена. Это позволит получателям застраховаться от получения поддельных писем с вашего домена.
Пример:
example.com. IN TXT "v=spf1 +mx -all"

v= определяет используемую версию SPF.
+mx разрешает прием писем, если отправляющий узел указан в одной из MX-записей для example.com.
Строка завершается "-all" - указанием того, что сообщения, не прошедшие верификацию с использованием перечисленных механизмов, следует отвергать.

Настраиваем управление DNS с помощью Xams ----------------
Копируем файлы конфигурации в папку Xams
# cp xams-0.0.19/config/bind/* /usr/local/etc/xams

Создаем папку
# mkdir /etc/namedb/xams-zones/

Подправляем файл /usr/local/etc/xams/named_master_template, указываем правильные пути
zone "<<name>>" {
    type master;
    file "/etc/namedb/xams-zones/<<name>>";
};

В файле xams.conf указываем нужные параметры для DNS
zone_files = /etc/namedb/xams-zones/
zone_template = /usr/local/etc/xams/zone_template
named_file = /etc/namedb/xams-zones.conf
named_master_template = /usr/local/etc/xams/named_master_template
named_slave_template = /usr/local/etc/xams/named_slave_template


В конце конфигурационного файла Bind9 /etc/namedb/named.conf, что бы подключить файлы что будет генерить Xams, дописываем строчку
include "/etc/namedb/xams-zones.conf";

После того как мы в Xams будем менять настройки DNS нужно перегружать Bind, что бы не делать это вручную пишем не большой скрипт и прописываем его в crontab
Создаем скрипт
# touch /usr/local/xams/dns_reload.sh
# chmod a+x /usr/local/xams/dns_reload.sh


#!/bin/sh
DCOUNT=`/usr/local/xams/xmu --update-bind | grep "No zones to update" | wc -l`
if [ $DCOUNT = 0 ]; then
    /usr/sbin/rndc reload
fi

Добавляем запись в crontab
*/3     *       *       *       *       root    /usr/local/xams/dns_reload.sh > /dev/null


Для того что бы пункт по управленю DNS появился в меню нужно в файле /usr/local/www/xams/include/xml/menu.xml на строчке 21 разкомонтировать параметр

Открываем Xams https://servername/xams/, заходим в раздел DNS, нажимаем create a new Zone.
( Я обнаружил ошибку при автоматическом увеличении поля serial для зоны, последнее число изменялось в диапазоне от 1-9 а не как задумывалось 1-99, при этом если вы за день делали больше чем 10 изменения счетчик становился меньше чем в начале дня. Для исправления переходим в фале /usr/local/www/xams/include/dns.php на строчку 85 и заменяем число 9 на 8 что бы строчка выглядела так $date_stored2 = (int)substr($this->serial, 8, 2); )



Ссылки по статье:
Официальный сайт Xams: http://www.xams.org
Демо Xams: http://xamsdemo.netmaster.com.ua
Альтернативная ссылка для скачивания Xams: http://netmaster.com.ua/files/xams-0.0.19.tar.gz
Дополнительный плагин под Xams: http://netmaster.com.ua/files/xams_spamantivir.tgz
Примеры конфигурационных файлов Xams: http://netmaster.com.ua/files/xams_conf.zip
Настройки почтовых клиентов: http://netmaster.com.ua/docs/screenshots.html
Примеры вирусов для проверки антивируса: http://vx.netlux.org/vl.php
Web-почта: http://netmaster.com.ua/files/bluehive-webmail.tgz
Скриншеты web-почты: http://netmaster.com.ua/docs/bluehive-screenshots.html

Дополнительные ссылки:
Sa-Exim-Stats - Анализатор логов Sa-Exim с выводом статистики
http://nossie.addicts.nl/projects/sa-exim-stats
Exilog - Анализатор логов Exim с очень удобным web-интерфейсом
http://butch.blog.ru/8083427.html

Обсуждаем на OpenNet

Автор: