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 сервера (DebFFian 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 готов к работе, сборка также включает настройку служб и параметров, перечисленных ниже:
- Установка и настройка Антиспам фильтра SpamAssasin и группировка писем в папку Спам для службы Postfix Debian
- Установка и настройка квот почтовых ящиков на почтовом сервере Dovecot
- Установка календаря для веб почты Roundcube
- Защита почтового сервера от подбора паролей с помощью Fail2Ban
- Настройка фильтра писем ManageSieve для веб почты Roundcube
- Удаление папок почтовых ящиков через PostfixAdmin
- Настройка сборщика почты в postfixAdmin
- Перенос и синхронизация почты через imapsync
- Настройка проверки SPF в Postix
- Настройка цифровой подписи DKIM в Postfix
- Защита от спама средствами Postfix
- Самообучение Spamassassin по папке Спам
- Мониторинг почтового сервера Postfix с PDF отчетом
$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'
);