Image

(Последнее изменение: 22.04.2024)

Debian 12 Linux Mail Server (Nginx, MariaDB, PHP, Postfix (DNSBL, DKIM, SPF), Dovecot, PostfixAdmin, SpamAssassin (Base, Self-learning by Spam folder), Sieve, Quota, Fail2Ban, Roundcube (Calendar, Managesieve), Fetchmail, Imapsync)

В этом руководстве показано, как настроить полноценный почтовый сервер на VPS с Linux Debian 12. Задача получить готовый корпоративный сервер с возможностью управления доменами и почтовыми ящиками через веб интерфейс. Мы установим базовые почтовые службы, инструмент администрирования postfixadmin с помощью которого можно будет добавлять домены, почтовые адреса, а также веб интерфейс roundcube для удобной работы с почтой через браузер. В данном руководстве мы выполняем установку от пользователя root, если у Вас обычный, используйте команду sudo.


Внешний вид веб интерфейса почты и системы администрирования:

Наиболее часто задаваемые вопросы:

  • Я хочу купить Kaspersky Security для защиты от спама и вирусов, Вы мне его установите?

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

  • Есть ли у данного сервера инструмент миграции, для переноса всех писем и папок соблюдая всю иерархию структуры?

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

  • Я получу сразу готовый сервер и после создания почтовых ящиков в административном интерфейсе они будут работать?

    Да, сервер полностью настроен и готов к работе, нужно будет только прописать MX запись в DNS редакторе и указать ip адрес почтового сервера для Вашего домена.

  • Если возникнут вопросы по правильности настройки DNS записей, миграции почтовых ящиков и другие, Вы можете внести эти настройки?

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

  • Можно ли самому изменять настройки служб, а также устанавливать свои, к примеру разместить на почтовом сервере несколько сайтов?

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

  • Мы хотим, чтобы все данные находились у нас. Можете ли Вы произвести всю эту настройку на нашем оборудовании?

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

  • Готовая сборка как понимаем предлагается только на VPS сервере, а нам хотелось бы заказать у Вас VDS сервер по ряду причин.

    Мы можем произвести конфигурацию данного описания при оплате VDS сервера (Debian 12) сроком сразу на год. Настройка займет 2-3 дня с момента оплаты.

Конфигурация преднастроенного сервера доступна на форме заказа.

1. Обновите пакеты программного обеспечения

apt update
apt upgrade

2. Установим LEMP

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

3. Настроим фаервол для почтовых служб

iptables -I INPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995 -j ACCEPT

Сохраним правила 

apt install iptables-persistent
netfilter-persistent save

4. Установим и настроим PostfixAdmin

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

4.1 Установим сам пакет

apt install php-mysql php-mbstring php-imap
systemctl restart php8.2-fpm
wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz
mkdir /usr/share/nginx/html/postfixadmin
tar -C /usr/share/nginx/html/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1
mkdir /usr/share/nginx/html/postfixadmin/templates_c
chown -R www-data:www-data /usr/share/nginx/html/postfixadmin

4.2 Теперь создадим базу данных:

mysql -u root -p

> CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'postfix1HuRaf92';
> \q

4.3 Создадим файл конфигурации следующего содержания:

vi /usr/share/nginx/html/postfixadmin/config.local.php


$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_password'] = 'postfix1HuRaf92';
$CONF['emailcheck_resolve_domain']='NO';

?>

Откроем браузер и вводим адрес http://host-ip/postfixadmin/public/setup.php

Необходимо придумать пароль после чего нажать на кнопку Generate setup_password hash, чтобы сгенерировать хеш.

Скопируем полностью строку и добавим в файл:

 vi /usr/share/nginx/html/postfixadmin/config.local.php

После сохранения необходимо обновить страницу http://host-ip/postfixadmin/public/setup.php и войти с заданным паролем. Выполнится установка PostfixAdmin.

Далее нам необходимо добавить супер пользователя (пользователь с полными правами). В поле Админ необходимо указать пользователя в виде почты root@mail-domain.tld

Теперь переходим на страницу http://host-ip/postfixadmin/public/login.php и вводим данные созданного пользователя:

5. Установим и настроим службу Postfix

apt install postfix postfix-mysql

В процессе установки появиться окно Postfix Configuration — оставим пункт Internet Site

5.1 Создадим группу и пользователей для работы с папками потовых ящиков

groupadd -g 1024 vmail
useradd -d /home/mail -g 1024 -u 1024 vmail -m
chown vmail:vmail /home/mail

5.2 Внесем правки в конфигурационный файл

 vi /etc/postfix/main.cf

mydestination = localhost.$mydomain, localhost, localhost.localdomain

...

inet_protocols = ipv4

...

smtpd_tls_cert_file = /etc/ssl/mail/public.pem
smtpd_tls_key_file = /etc/ssl/mail/private.key

Далее в конец конфигурационного файла добавляем следующие строки:

 /etc/postfix/main.cf

virtual_mailbox_base = /home/mail
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1024
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes

Создадим файл с настройками алиасов для обращения к базе данных

vi /etc/postfix/mysql_virtual_alias_maps.cf

user = postfix
password = postfix1HuRaf92
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Создадим файл с настройками доменов для обращения к базе данных

vi /etc/postfix/mysql_virtual_domains_maps.cf

user = postfix
password = postfix1HuRaf92
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u'

Создадим файл с настройками почтовых ящиков для обращения к базе данных

vi /etc/postfix/mysql_virtual_mailbox_maps.cf

user = postfix
password = postfix1HuRaf92
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

Откроем основной файл конфигурации и добавим в самый конец строки:

vi /etc/postfix/master.cf

submission   inet  n  -  n  -  -  smtpd
  -o smtpd_tls_security_level=may
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=/var/spool/postfix/private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
smtps   inet  n  -  n  -  -  smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
dovecot   unix  -  n  n  -  -  pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

Создадим сертификаты безопасности с помощью команды: 

mkdir -p /etc/ssl/mail
openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=mail-domain.tld"

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

Финальная настройка службы:

systemctl enable postfix
systemctl restart postfix

6. Установим и настроим Dovecot

apt install dovecot-imapd dovecot-pop3d dovecot-mysql

6.1 Настройка хранения почты

vi /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/home/mail/%d/%u/

6.2 Настройка авторизации

vi /etc/dovecot/conf.d/10-master.conf

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
}

Изменим настройки авторизации на базу данных

vi /etc/dovecot/conf.d/10-auth.conf

#!include auth-system.conf.ext
!include auth-sql.conf.ext

Закомментируем строку по умолчанию и активируем строку со словом sql в тексте.

6.3 Настройка SSL сертификатов

vi /etc/dovecot/conf.d/10-ssl.conf

ssl = required
ssl_cert =
ssl_key =

Настроим автоматическое создание папок при первой авторизации пользователя в почте.

vi /etc/dovecot/conf.d/15-lda.conf

lda_mailbox_autocreate = yes

6.4 Настроим подключение к базе данных

vi /etc/dovecot/conf.d/auth-sql.conf.ext

passdb {
  …
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  …
  args = /etc/dovecot/dovecot-sql.conf.ext
}

6.5 Добавим настройки в файл конфигурации

vi /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix1HuRaf92
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'

6.6 Настроим интерфейс на котором будет работать служба

vi /etc/dovecot/dovecot.conf

listen = *

Финальная настройка службы

systemctl enable dovecot
systemctl restart dovecot

7. Настройка домена и почтовых ящиков

Перейдем в веб интерфейс и настроим домен для работы с почтой: http://host-ip/postfixadmin/public/.

Далее в меню сверху добавим домен:

После добавления домена создадим почтовый ящик.

8. Установим и настроим службу веб почты, Roundcube

Скачем последнюю LTS версию пакета и развернем на нашем сервере

wget https://github.com/roundcube/roundcubemail/releases/download/1.6.2/roundcubemail-1.6.2-complete.tar.gz
mkdir /usr/share/nginx/html/webmail
tar -C /usr/share/nginx/html/webmail -xvf roundcubemail-*.tar.gz --strip-components 1
cp /usr/share/nginx/html/webmail/config/config.inc.php.sample /usr/share/nginx/html/webmail/config/config.inc.php
chown -R www-data:www-data /usr/share/nginx/html/webmail

Откроем файл конфигурации и отредактируем

vi /usr/share/nginx/html/webmail/config/config.inc.php

$config['db_dsnw'] = 'mysql://roundcube:roundcube1Yusm24M@localhost/roundcubemail';
$config['enable_installer'] = true;

Найдем также параметр и сделаем его пустым: $config['smtp_pass'] = '';  

Добавим в этот файл конфигурации сроки:

vi /usr/share/nginx/html/webmail/config/config.inc.php

$config['drafts_mbox'] = 'Drafts';
$config['junk_mbox'] = 'Junk';
$config['sent_mbox'] = 'Sent';
$config['trash_mbox'] = 'Trash';
$config['create_default_folders'] = true;

Создадим в MariaDB базу для roundcubemail, указанную в файле конфигурации:

mysql -uroot -p

> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'roundcube1Yusm24M';
> quit

Импортируем базу данных:

mysql -uroot -p roundcubemail < /usr/share/nginx/html/webmail/SQL/mysql.initial.sql

Установим необходимые php пакеты:

apt install php-pear php-intl php-ldap php-net-smtp php-gd php-imagick php-zip php-curl php-dom php-xml php-mcrypt

В случае если при установке php-mcrypt возникла ошибка, установите его вручную

apt install php-dev libmcrypt-dev
pecl channel-update pecl.php.net
pecl install mcrypt-1.0.5

vi /etc/php/8.2/fpm/conf.d/99-mcrypt.ini

extension=mcrypt.so

Настроим php службу:

vi /etc/php/8.2/fpm/php.ini

date.timezone = "Europe/Moscow"
post_max_size = 50M
upload_max_filesize = 50M

Лимиты в 50 мегабайт показаны как пример, вы можете установить свои, они позволят прикреплять к письму вложения большего объема.

systemctl restart php8.2-fpm

Поправим лимиты в самом nginx

vi /etc/nginx/nginx.conf

http {

    ...
    client_max_body_size 50M;
    ...
systemctl restart nginx

Далее продолжим установку в браузере по ссылке http://host-ip/webmail/installer/

Следуя инструкциям устанавливаем rouncube, после чего на следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.

Удалим инсталятор и запретим установку в файле конфигурации

rm -rf /usr/share/nginx/html/webmail/installer
vi /usr/share/nginx/html/webmail/config/config.inc.php

$config['enable_installer'] = false;

Переходим по ссылке http://host-ip/webmail/ и заходим в веб почту используя в качестве логина полный email адрес и пароль.

9. Завершающий этап настройки

Наш VPS сервер настроен для работы с почтой, теперь нам необходимо в настройках доменного имени прописать или заменить MX запись на IP адрес нашего сервера:

В DNS редакторе строки будут выглядеть так:

После того как записи будут прописаны необходимо указать обратную зону для IP адреса (PTR)

Корпоративный почтовый сервер Linux Debain 12 готов к работе, сборка также включает настройку служб и параметров, перечисленных ниже:




SwapON
20.02.2024 03:34
Мне кажется что в фале /usr/share/nginx/html/postfixadmin/config.local.php необходимы минимум должен быть:

$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix1HuRaf92';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'почта админа';
$CONF['encrypt'] = 'md5crypt';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';
$CONF['transport_default'] = 'virtual';
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Return to http://ip-adress or domain_name/padmin/public/';
$CONF['footer_link'] = 'http://ip-address or domain_name/padmin/public/';
$CONF['default_aliases'] = array (
'abuse' => 'root',
'hostmaster' => 'root',
'postmaster' => 'root',
'webmaster' => 'root'
);