Установка и настройка Exim с web-интерфейсом Xams во FreeBSD

Post Reply
User avatar
Raven
Бородатый сис
Бородатый сис
Posts: 2794
Joined: 03 Mar 2010, 15:12
ОС: RHEL 8
Location: Из серверной

Установка и настройка Exim с web-интерфейсом Xams во FreeBSD

Post by Raven » 08 Dec 2010, 10:55

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

Демо версию можно посмотреть здесь http://xamsdemo.netmaster.com.ua
Пароль и логин: demo

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

Хотя проект Xams развивается медленно, но уже на данный момент он имеет внушительный набор функций:
  • Конфигурирование настроек почтового сервера через web-интерфейс.
  • Управление любым количеством почтовых доменов, почтовых ящиков и рассылок.
  • Распределение прав для реселлеров по управлению необходимыми доменами.
  • Возможность задать квоту на размер почты всего домена и отдельного почтового ящика.
  • Управление Spam-фильтром и Антивирусом.
  • Каждый пользователь может самостоятельно изменить настройки своего почтового ящика: сменить пароль, выключить/включить спам-фильтр, выключить/включить антивирус , задать автоответ.
  • Есть плагины для Horde и SquirrelMail.
  • Управление DNS-зонами Bind9 через web-интерфейс.
Я не буду углубляться в тонкости установки и настройки сопутствующего софта, информацию об этом можно легко найти в интернете, я остановлюсь только на ключевых моментах.

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

Приступим к установке софта, конечно же у кого он уже установлен могут пропустить этот раздел.

Устанавливаем MySQL (5.1.32)

Code: Select all

        # 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

Code: Select all

        # mysqladmin -u root password  'new_password'
Устанавливаем Apache (2.2.11_3)

При установке не забываем включить модуль SSL

Code: Select all

        # cd /usr/ports/www/apache22
        # make clean && make install
        # echo apache22_enable="YES" >> /etc/rc.conf
Устанавливаем Php5 (5.2.9)


Включаем модуль APACHE

Code: Select all

        # cd /usr/ports/lang/php5
        # make config
        # make clean && make install

Создаем файл /usr/local/etc/apache22/Includes/php.conf и добавляем туда строчки

Code: Select all

       AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
        DirectoryIndex index.php
Устанавливаем Php5-extensions (1.3)

Code: Select all

        # cd /usr/ports/lang/php5-extensions 
        # make config
Включаем модули BZ2, GD, MCRYPT, MYSQL, OPENSSL, XSL, ZIP, ZLIB

Code: Select all

        # make clean && make install
Устанавливаем Perl5.8 (5.8.9_2)

Code: Select all

        # cd /usr/ports/lang/perl5.8
        # make clean && make install
Устанавливаем необходимые нам модули (команда install или force install)

Code: Select all

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

Code: Select all

        # cd /usr/ports/mail/exim-sa-exim
        # make clean && make WITH_MYSQL=YES && make install
Выключаем sendmail

Code: Select all

        # /etc/rc.d/sendmail stop

И создаем ссылку на exim

Code: Select all

        # mv /usr/sbin/sendmail /usr/sbin/sendmail.old
        # ln -s /usr/local/sbin/exim /usr/sbin/sendmail
Изменяем /etc/rc.conf

Code: Select all

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

Code: Select all

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

Code: Select all

        # 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

Code: Select all

        # wget http://netmaster.com.ua/files/xams-0.0.19.tar.gz

Распаковываем файл

Code: Select all

        # tar zxvf xams-0.0.19.tar.gz

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

Code: Select all

        # cd xams-0.0.19 
        # cp autogen.conf.orig autogen.conf
У меня этот файл выглядит так:

Code: Select all

        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 строчку, заменить с

Code: Select all

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

Code: Select all

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

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

Code: Select all

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

Выполняем скрипты SQL

Code: Select all

        # 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

Code: Select all

        # mysql -p xamsdb
        mysql>  INSERT INTO pm_admins (Name, Password, Added) VALUES ("admin", MD5("password"), NOW());

Создаем все необходимые папки

Code: Select all

        # 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/
Копируем файлы в нужные папки

Code: Select all

        # 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
[apache] Alias /xams/ "/usr/local/www/xams/"
<Directory /usr/local/www/xams>
Options -Indexes MultiViews
AllowOverride Options
SSLRequireSSL
Order allow,deny
Allow from all
</Directory>[/apache]

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

Создаем файл /usr/local/www/xams/.htaccess для задания необходимых переменных для Xams

Code: Select all

        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

Code: Select all

        # cd /usr/local/etc/courier-imap

В файле imapd обязательно задаем нужное значение для параметра

Code: Select all

        IMAP_MAILBOX_SANITY_CHECK=0

Генерим сертификаты для защищенного соединения

Code: Select all

        # cd /usr/local/share/courier-imap 
        # dd if=/dev/urandom of=imapd.rand count=1
Сертификат генерится на 10 лет

Code: Select all

        # 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

Code: Select all

        # 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

Что бы Courier-Imap мог авторизироваться в базе xams нужно заменить
стандартный демон courier-authdaemond на демон который идет вместе с Xams

Для этого нужно создать скрипт для запуска /usr/local/etc/rc.d/xams-authdaemond.sh

Code: Select all

#!/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/authdaemond/
pidfile="${rundir}/authdaemon-xams.pid"
procname="/usr/local/xams/sbin/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"


Делаем файл исполняемым

Code: Select all

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

Code: Select all

        # chown mailnull:mail /var/run/authdaemond
        # chown mailnull:mail /var/run/exim/
Пробуем запускать эти сервисы

Code: Select all

        # /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 и запускаем его

Code: Select all

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

Code: Select all

        # /usr/local/etc/rc.d/clamav-freshclam start
Настраиваем SpamAssassin

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

Code: Select all

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

Для начала обновим динамические правила

Code: Select all

        # /usr/local/bin/sa-update --nogpg

И добавим выполнение этой команды по расписанию, добавим в crontab примерно вот такую запись

Code: Select all

        # Update dynamic rules for SpamAssassin
        * 8 * * *  root /usr/local/bin/sa-update --nogpg && /usr/local/etc/rc.d/sa-spamd restart > /dev/null


Далее продолжаем настройку

Code: Select all

        # cp local.cf.sample local.cf

В файле local.cf я бы рекомендовал изменить некоторые настройки
Раскомментируем параметр

Code: Select all

        use_bayes 1
        bayes_auto_learn 1

Добавляем

Code: Select all

        bayes_auto_learn_threshold_nonspam -1
        bayes_auto_learn_threshold_spam 12.0
        use_auto_whitelist  1
Запускаем sa-spamd

Code: Select all

        # /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 соответственно.

В том же файле что бы не сохранять отброшенные письма и письма с ошибками выключаем несколько параметров

Code: Select all

        SAtimeoutSavCond: 0
        SAerrorSavCond: 0
        SAdevnullSavCond: 0
        SApermrejectSavCond: 0
        SAtemprejectSavCond: 0
        SAspamacceptSavCond: 0
        SAnotspamSavCond: 0
Настраиваем Exim

Code: Select all

        # 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 меняем настройки
Раскомментируем параметры

Code: Select all

        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
Изменяем параметр

Code: Select all

av_scanner = clamd:/var/run/clamav/clamd.ctl
На

Code: Select all

av_scanner = clamd:/var/run/clamav/clamd.sock
Комментируем строку

Code: Select all

        local_scan_path = /usr/lib/exim4/local_scan/sa-exim.so
Для работы TLS необходимо сгенерить сертификат для Exim

Code: Select all

        # cd /usr/local/etc/xams/
        # openssl genrsa 1024 > server.key
        # openssl req -new -key server.key -x509 -days 3650 -out server.crt
Далее в файле exim.conf изменяем два параметра на правильные пути

Code: Select all

        tls_certificate = /usr/local/etc/xams/server.crt
        tls_privatekey = /usr/local/etc/xams/server.key
Перед первым запуском Exim нужно обязательно выполнить команду

Code: Select all

        # /usr/local/xams/xmu --cdbdomlist --homedirs --autoreply 

Запускаем Exim

Code: Select all

        # /usr/local/etc/rc.d/exim start
Настраиваем Apache

Code: Select all

        # cd /usr/local/etc/apache22

Для включения SSL в Апаче в конце файла httpd.conf разкоментируем строку

Code: Select all

        Include etc/apache22/extra/httpd-ssl.conf

Далее если сертификаты не созданы создаем их вручную

Code: Select all

        # openssl genrsa 1024 > httpd.key
        # openssl req -new -key httpd.key -x509 -days 3650 -out httpd.crt

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

Запускаем Apache

Code: Select all

        # /usr/local/etc/rc.d/apache22 start
Проверяем Xams

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

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

Добавляем запись в crontab

Code: Select all

        # 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 заменяем троку

Code: Select all

        <h1><?php echo $tl->get('')m-Filter Configuration ?></h1>
на

Code: Select all

        <h1><?php echo $tl->get('Exim-Filter Configuration') ?></h1>
Мы закончили основной этап установки и первичной конфигурации Xams.

Дополнительная настройка

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

В файле exim-custom.conf параметром RBL_LIST мы задаем список публичных черных списков которые помогут вам отбивать спам. Зачастую некоторые из серверов перестают отвечать, из-за этого обработка писем затормаживается.

У меня этот список выглядит так

Code: Select all

        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

Code: Select all

        message_size_limit = 15M
        return_size_limit = 30K
        bounce_return_size_limit = 30K

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

Code: Select all

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

Code: Select all

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

Code: Select all

        # touch /usr/local/etc/exim/denysenders
        # touch /usr/local/etc/exim/denyhosts
В этих файлах мы соответственно задаем отправителей, которые точно будут блокироваться Во всех этих файлах каждое новое значение задается с новой строчки.

Далее в файле exim.conf примерно на строчке 55 мы добавляем

Code: Select all

        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 мы добавляем

Code: Select all

          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. Получается вот такое выражение

Code: Select all

          .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 строчки

Code: Select all

        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 и в самом начале добавляем

Code: Select all

        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

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

Code: Select all

        #   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

Code: Select all

        SApermrejectSavCond: 1
        SApermrejectsave: /var/mail/DomainName/rejected_spam
        SAtemprejectSavCond: 1
        SAtemprejectsave: /var/mail/DomainName/rejected_spam

Теперь для удаления писем старше 30 дней в crontab добавляем запись

Code: Select all

        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)

Для некоторых компонентов нам понадобится это дополнение

Code: Select all

        # cd /usr/ports/databases/pear-DB
        # make clean && make install
Распаковываем архив в папку /usr/local/www/webmail
Создаем конфигурационный файл /usr/local/etc/apache22/Includes/webmail.conf для Apache

Code: Select all

        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

И запускаем его

Code: Select all

        # /usr/local/etc/rc.d/courier-imap-imapd start


Теперь настраиваем web-почту. Запускаем скрипт конфигурирования

Code: Select all

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

Code: Select all

        # 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', ''); прописываем правельный путь

Code: Select all

        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@example.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

Code: Select all

        # cp xams-0.0.19/config/bind/*  /usr/local/etc/xams
Создаем папку

Code: Select all

        # mkdir /etc/namedb/xams-zones/

Подправляем файл /usr/local/etc/xams/named_master_template, указываем правильные пути

Code: Select all

        zone "<<name>>" {
            type master;
            file "/etc/namedb/xams-zones/<<name>>";
        };
В файле xams.conf указываем нужные параметры для DNS

Code: Select all

        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, дописываем строчку

Code: Select all

        include "/etc/namedb/xams-zones.conf";

После того как мы в Xams будем менять настройки DNS нужно перегружать Bind, что бы не делать это вручную пишем не большой скрипт и прописываем его в crontab

Создаем скрипт

Code: Select all

        # 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

Code: Select all

        */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); )

Ссылки по статьe:

Оригинал статьи: http://netmaster.com.ua/docs/xams.html
Официальный сайт 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
Я не злопамятный, я просто часто ковыряю логи
Post Reply

Return to “Сетевые технологии”