Настройка почтового сервера на базе Exim+Dovecot+SpamAssassin+Clamav c веб-мордами Vexim+RoundCube

Опубликовано:

Ставим nginx

pc# cd /usr/ports/www/nginx
pc# make install clean

в /etc/rc.conf добавляем:

nginx_enable="YES"

Ставим MySQL

pc# cd /usr/ports/databases/mysql51-server
pc# make install clean

в /etc/rc.conf добавляем:

mysql_enable="YES"

Запускаем MySQL

pc# /usr/local/etc/rc.d/mysql-server start

Задаем пароль для root в MySQL ( в скобках сам пароль )

pc# mysqladmin -u root password 'password'

Ставим PHP ( отмечаем [*] FPM Build FPM version )

pc# cd /usr/ports/lang/php5
pc# make install clean

в /etc/rc.conf добавляем:

php_fpm_enable="YES"

Приводим файл /usr/local/etc/php-fpm.conf к такмоу виду:

[global]
pid = run/php-fpm.pid
error_log = /var/log/php-fpm.log
events.mechanism = kqueue
include=/usr/local/etc/php-fpm.d/*.conf

Создаем каталог,в котором будут лежать описания пулов для PHP-FPM ( кому то может пригодиться, если юзеров для сайтов больше чем один ):

pc# mkdir -p /usr/local/etc/php-fpm.d/

и описываем пул

pc# ee /usr/local/etc/php-fpm.d/www.conf
[www]
user = www
group = www
listen = /tmp/php-fpm.sock
listen.backlog = -1
pm = dynamic
pm.max_children = 2
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
pm.max_requests = 500
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_value[memory_limit] = 128M

Запускаем PHP-FPM:

pc# /usr/local/etc/php-fpm start

Ставим Vexim (отмечаем MySQL):

pc# cd /usr/ports/mail/vexim/
pc# make install clean

Ставим модуль p5-DBD-mysql51

pc# cd /usr/ports/databases/p5-DBD-mysql51/
pc# make
pc# make install clean

Запускаем скрипт:

perl /usr/local/share/vexim/create_db.pl --act=newdb --dbtype=mysql -uid=110 --gid=110 --mailstore=/usr/local/mail
pc#
Please enter the username of the mysql superuser: root
Please enter the password of the mysql superuser:
Please enter the name of your NEW database: vexim
--------------------------------------------------
Database: vexim will be created
--------------------------------------------------
Is this correct? (Y = continue / anykey = exit ): Y
Please enter a password for the 'vexim' database user:
Confirm password:
Please enter a password for the 'siteadmin' user:
Confirm password:
The user 'siteadmin' has been added with the password
Database created successfully!

Создаем каталог с виртуальными хостами для nginx

pc# mkdir -p /usr/local/etc/nginx/vhosts

Приводим /usr/local/etc/nginx/nginx.conf к такому виду:

worker_processes 2;

events {
use kqueue;
worker_connections 2048;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
client_body_buffer_size 16K;
client_header_buffer_size 1k;
client_max_body_size 32M;
large_client_header_buffers 2 1k;
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
reset_timedout_connection on;
server_tokens off;
gzip on;

# Закрываем обращения по IP адресу
server {
listen 80 default_server;
server_name _;
return 444;
}

# PHP-FPM
upstream php-fpm {
server unix:/tmp/php-fpm.sock;
}

# Инклюдим файлы с виртуальными хостами
include /usr/local/etc/nginx/vhosts/*;
}

Делаем виртуальный хост в nginx для Vexim

pc# ee /usr/local/etc/nginx/vhosts/exim.deathstar.name

server
{
listen 80;
server_name exim.deathstar.name;
access_log /var/log/nginx/exim-access.log;
error_log /var/log/nginx/exim-error.log;
root /usr/local/www/vexim;
index index.php;
charset utf-8;

location ~ .php$
{
fastcgi_pass php-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /usr/local/etc/nginx/fastcgi_params;
}
location ~ /.ht
{
deny all;
}
}

Редактируем конфиг Vexim

pc# ee /usr/local/www/vexim/config/variables.php";

и вводим данные для подключения к базе данных введенные ранее.
Создаем группу и пользователя exim:

pc# pw groupadd vexim -g 90
pc# pw useradd vexim -u 90 -g vexim -d /usr/local/mail -m -s /nonexistant

Устанавливаем Exim ( отмечаем опцию SA-EXIM для работы SpamAssasin) :

pc# cd /usr/ports/mail/exim && make install clean

Добавляем в /etc/rc.conf:

 exim_enable="YES" 

Копируем и правим конфиги

pc# cd /usr/local/etc/exim/
pc# cp /usr/local/share/doc/vexim/docs/*.conf ./
pc# cp /usr/local/share/doc/vexim/docs/configure ./
pc# ee /usr/local/etc/exim/configure

Находим строку:

MY_IP = CHANGE

описываем свой ip

MY_IP = 146.38.53.5/pre>
Находим:
 trusted_users = avleen:www

и удаляем avleen .Остается:

 trusted_users = www
exim_user = mailnull
exim_group = mail
never_users = root

Находим закоментированную строку, отвечающую за подключение к MySQL серверу,раскоментируем ее и поставим там свой пароль:

hide mysql_servers = localhost::(/tmp/mysql.sock)/vexim/vexim/vexim

Раскоментируем:

AINS = SELECT DISTINCT domain FROM domains WHERE type = 'relay' AND domain = '${quote_mysql:$domain}'
ALIAS_DOMAINS = SELECT DISTINCT alias FROM domainalias WHERE alias = '${quote_mysql:$domain}'timeout_frozen_after = 2d
log_selector = +subject

Изменяем путь к антивируму ClamAV:
Находим:

av_scanner = clamd:/var/run/clamav/clamd

и меняем на

av_scanner = clamd:/var/run/clamav/clamd.sock

Добавляем в /etc/rc.conf

spamd_enable="YES" 

и запускаем

exim# /usr/local/etc/rc.d/sa-spamd start

Ставим ClamAV:

pc# cd /usr/ports/security/clamav && make install clean

Добавляем в /etc/rc.conf:

clamav_freshclam_enable="YES"
clamav_clamd_enable="YES"

и запускаем

pc# /usr/local/etc/rc.d/clamav-clamd start

Запускаем обновление баз ClamAV

pc# /usr/local/etc/rc.d/clamav-freshclam start

Добавялем в /etc/rc.conf

exim_enable="YES"

Устанавливаем Dovecot:

pc# cd /usr/ports/mail/dovecot && make install clean

Настройки хранятся в файле /usr/local/etc/dovecot.conf
Приводим конфиг к такому виду

base_dir = /var/run/dovecot/
    protocols = imap pop3 imaps pop3s
    protocol imap {
        listen=*:143
    }
    protocol pop3 {
        listen=*:110
    }
    disable_plaintext_auth = no
    log_path =/var/log/dovecot
    log_timestamp = "%b %d %H:%M:%S "
    syslog_facility = mail
    ssl = no
    ssl_parameters_regenerate = 0
    mail_location = maildir:~/Maildir
    mail_privileged_group = mail
    mail_debug = yes
    mail_log_prefix = "%Us(%u): "
    dotlock_use_excl = yes
    verbose_proctitle = yes
    first_valid_uid = 90
    first_valid_gid = 90
    maildir_copy_with_hardlinks = yes
    protocol imap {
    mail_executable = /usr/local/libexec/dovecot/imap
    imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
    }
    protocol pop3 {
      mail_executable = /usr/local/libexec/dovecot/pop3
      pop3_uidl_format = %08Xu%08Xv
      pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
    }
    protocol lda {
      postmaster_address = postmaster@example.com
      sendmail_path = /usr/sbin/sendmail
    }
    auth_username_format = %Lu
    auth_verbose = yes
    auth_debug = yes
    auth default {
    ssl_require_client_cert=no
    ssl_username_from_cert=no
    mechanisms = plain login
    passdb pam {
    args = session=yes dovecot
    }
    passdb sql {
        args = /usr/local/etc/dovecot-sql.conf
    }
    userdb passwd {
        args = blocking=yes
    }
    userdb sql {
        args = /usr/local/etc/dovecot-sql.conf
    }
    user = root
    socket listen {
        master {
        path = /var/run/dovecot/auth-master
        mode = 0600
    }
    client {
        path = /var/run/dovecot/auth-client
        mode = 0660
    }
    }
}
dict {
    }
plugin {
}

Настраиваем подключение к MySQL в файле dovecot-sql.conf

 pc# ee /usr/local/etc/dovecot-sql.conf
driver = mysql
connect = host=/tmp/mysql.sock user=vexim password=PASSWORD dbname=vexim
default_pass_scheme = MD5-CRYPT
password_query = SELECT crypt as `password` FROM users,domains WHERE users.username = '%u' AND users.enabled = '1' AND users.type = 'local' and domains.enabled = '1' and domains.domain_id = users.domain_id
user_query = SELECT pop as home, uid, gid FROM users WHERE username = '%u'

Добавляем запись в /etc/rc.conf:

dovecot_enable="YES"

Запускаем Dovecot:

pc# /usr/local/etc/rc.d/dovecot start

Ставим RoundCube (выбираем MySQL):

#deathstar cd /usr/ports/mail/roundcube/
pc# make install clean

И далее команды по порядку:

pc#cd /usr/local/www/roundcube
pc# chmod 777 logs/
pc# chmod 777 temp/

Создаем базу

pc# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
mysql> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

pc# cd /usr/local/www/roundcube/
pc# mysql -p roundcubemail < SQL/mysql.initial.sql
pc# cp config/db.inc.php.dist config/db.inc.php
pc# ee config/db.inc.php

Правим конфигурационный файл /usr/local/www/roundcube/config/db.inc.php,
отвечающий за соединение с базой данных:

$rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';

Правим файл main.inc.php, содержащий основные настройки:

pc# ee config/main.inc.php
$rcmail_config['default_host'] = 'localhost'; #хост, на котором находится почта
$rcmail_config['username_domain'] = ' mydomain.ru'; #домен, который будет автоматически добавляться к имени пользователя
$rcmail_config['mail_domain'] = 'mydomain.ru'; #почтовый домен
$rcmail_config['default_port'] = 143; #порт imap
$rcmail_config['imap_auth_type'] = null; #тип авторизации imap
$rcmail_config['smtp_server'] = 'localhost'; #сервер smtp
$rcmail_config['smtp_user'] = '%u';
$rcmail_config['smtp_pass'] = '%p';
$rcmail_config['smtp_auth_type'] = 'CRAM-MD5'; #тип авторизации smtp
$rcmail_config['create_default_folders'] = TRUE; #при первом логине юзера создаются дефолтные почтовые папки (Входящие, Исходящие, Корзина и тд.)
$rcmail_config['language'] = ru_RU; #локализация

И добавляем виртуальный хост в nginx для Roundcube

pc# ee /usr/local/etc/nginx/vhosts/mail.deathstar.name

server
{
listen 80;
server_name mail.deathstar.name;
access_log /var/log/nginx/mail-access.log;
error_log /var/log/nginx/mail-error.log;
root /usr/local/www/roundcube;
index index.php;
charset utf-8;

location ~ .php$
{
fastcgi_pass php-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /usr/local/etc/nginx/fastcgi_params;
}
location ~ /.ht
{
deny all;
}
}

Перезапускаем PHP-FPM и NGINX

pc# /usr/local/etc/rc.d/nginx restart && usr/local/etc/rc.d/php-fpm restart

Теперь Roundcube доступен по адресу http://mail.deathstar.name а Vexim по http://exim.deathstar.name

Заходим по адресу http://exim.deathstar.name
Логинимся под siteadmin и пароль, что выставляли ранее
Жмем

Add local domain

Прописываем домен, имя администратора ( по умолчанию postmaster, можно сменить на любое , так же создастся ящик вида postmaster@domain, а создадим например admin )
прописываем пароль ( например pass )
повторяем пароль
отмечаем антиспам и антивирус ( по желанию ) и жмем Submit

У нас появился почтовый аккаунт admin@domain с паролем pass

Чтоб для созданного домена создать еще ящик, логинимся под логином админа домена, в нашем случае – admin

Жмем

Add, delete and manage POP/IMAP accounts

Потом

Add User

Прописываем имя ( любое, оно просто для отображения в списке юзеров )
логин ( например user )
два раза пароль ( например userpass )
Has domain admin privileges? – отмечаем, есди хотим сделать юзера тоже админом домена
И жмем Submit.
У нас появился почтовый аккаунт user@domain с паролем userpass

Теперь можно зайти в roundcube по ссылке http://mail.deathstar.name под логином user@domain и паролем userpass

Понравилась статья, расскажи о ней друзьям, нажми кнопку!