No name

Links

GitHub
[Update 3]Локальный почтовый сервис вместо зарубежных удаленных на основе Postfix&Dovecot

[Update 3]Локальный почтовый сервис вместо зарубежных удаленных на основе Postfix&Dovecot


visibility947 2022-08-12 09:27:29
 Задача: переехать с удаленного регистратора на свой почтовый сервис под управлением Postfix и Dovecot на операционной системе Debian 10(11)

Так как задачи отправлять письма отсутствует, а нужно лишь принимать была создана запись типа А и МХ

Для работы системы потребуются установить следующие пакеты:
$sudo apt install apache2 mariadb-server php-{xml,pear,imap,intl,common,json,curl,mbstring,mysql,gd,imagick,zip,opcache,sqlite3} libapache2-mod-php

Для работы почтового сервиса также подойдет и MySQL.

Для входящей почты нужен отдельный пользователь и его папка:
$ sudo useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual Mail User" vmail
$ sudo mkdir -p /var/vmail
$ sudo chmod -R 770 /var/vmail
$ sudo chown -R vmail:mail /var/vmail

Нужно создать базу данных для Postfix – это можно реализовать либо через консоль, либо через phpmyadmin:
$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE postfixadmin;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY '5tr0n6p455w0rd';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q

После подготовительных настроек нужно установить Postfix:
$ sudo apt install postfix-mysql
Нужно выбрать Internet site
Когда попросит ввести имя нужно вводить будущий домен, например, mail.example.com для того чтобы не было проблем с созданием сертификата.

Так как пользователи будут храниться в БД нужно создать соответствующие конфиги:
$ sudo mkdir -p /etc/postfix/sql

$ sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfixadmin
password = 5tr0n6p455w0rd
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

$ sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfixadmin
password = 5tr0n6p455w0rd
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'

$ sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfixadmin
password = 5tr0n6p455w0rd
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

$ sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfixadmin
password = 5tr0n6p455w0rd
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

$ sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfixadmin
password = 5tr0n6p455w0rd
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

$ sudo nano /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
user = postfixadmin
password = 5tr0n6p455w0rd
hosts = localhost
dbname = postfixadmin
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'

$ sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfixadmin
password = 5tr0n6p455w0rd
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'


Для конфигурировали postfix
$ sudo postconf -e "myhostname = $(hostname -f)"
UPD: нужно заменить $(hostname -f) на домен своей будущей почты, чтобы при настройке DKIM SFP и дальнейшей проверке не было проблем.
$ sudo postconf -e "mydestination = localhost"
$ sudo postconf -e "mynetworks = 127.0.0.0/8" 
ВАЖНО: вводить нужно свои подсети так как в противном случае сервер может стать ретранслятором спама, в следствии чего, домен окажется в спамбазах.
$ sudo postconf -e "inet_protocols = ipv4"
$ sudo postconf -e "inet_interfaces = all"
$ sudo postconf -e "smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem" 
$ sudo postconf -e "smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key"
Пути выше можно заменить на пути ваших сертификатов (купленных или созданных в Let's Encrypt)
$ sudo postconf -e "smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key"
$ sudo postconf -e "smtpd_tls_auth_only = yes"
$ sudo postconf -e "smtpd_sasl_type = dovecot"
$ sudo postconf -e "smtpd_sasl_path = private/auth"
$ sudo postconf -e "smtpd_sasl_auth_enable = yes"
$ sudo postconf -e "smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination"
$ sudo postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"
$ sudo postconf -e "virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
$ sudo postconf -e "virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
$ sudo postconf -e "virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"

В файле нужно поменять блок конфига
$ sudo nano /etc/postfix/master.cf
smtp inet n - y - - smtpd
#smtp inet n - y - 1 postscreen
#smtpd pass - - y - - smtpd
#dnsblog unix - - y - 0 dnsblog
#tlsproxy unix - - y - 0 tlsproxy
submission inet n - y - - smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps inet n - y - - smtpd
  -o syslog_name=postfix/smtps
# -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING

Так как сервер будет использовать только IMAP ставлю следующие пакеты
$ sudo apt install dovecot-mysql dovecot-imapd dovecot-lmtpd

Редактируем файл
$ sudo nano /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain  >  auth_mechanisms = plain login
Комментируем и снимаем комментирование
#!include auth-system.conf.ext 
!include auth-sql.conf.ext

$ sudo nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfixadmin user=postfixadmin password=5tr0n6p455w0rd
default_pass_scheme = MD5-CRYPT
password_query = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT '/var/vmail/%d/%u' as home, 'maildir:/var/vmail/%d/%u' as mail, 150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'

$ sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/vmail/%d/%n
mail_uid = vmail
mail_gid = mail
mail_privileged_group = mail
first_valid_uid = 150
last_valid_uid = 150

Нужно заменить блоки на представленные ниже
$ sudo nano /etc/dovecot/conf.d/10-master.conf
service lmtp {
     unix_listener /var/spool/postfix/private/dovecot-lmtp {
     mode = 0600
     user = postfix
     group = postfix
     }
}

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

unix_listener auth-userdb {
     mode = 0600
     user = vmail

}
user = dovecot
}

service auth-worker {
     user = vmail
}

Установка прав на файлы
$ sudo chown -R vmail:dovecot /etc/dovecot
$ sudo chmod -R o-rwx /etc/dovecot
$ sudo systemctl restart postfix dovecot

Нужно установить оболочку Postfixadmin это можно сделать разными способами для примера покажу
$ wget -q https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-${VERSION}/postfixadmin-${VERSION}.tar.gz
$ tar xzf postfixadmin-${VERSION}.tar.gz
$ sudo mv postfixadmin-${VERSION}/ /var/www/postfixadmin
$ rm -f postfixadmin-${VERSION}.tar.gz
$ mkdir /var/www/postfixadmin/templates_c
$ sudo chown -R www-data: /var/www/postfixadmin

Настройка конфига
$ sudo nano /var/www/postfixadmin/config.local.php
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = '5tr0n6p455w0rd';
$CONF['database_name'] = 'postfixadmin';
$CONF['configured'] = true;

?>

После перехода на сайт там попросят ввести мастер-ключ после его создание будет выдана часть конфига которая вносится в файл выше после чего на этом же сайте будет возможность создать БД и администратора.

На этом установка и настройка закончена, дополнительно можно поставить Web-оболочку Roundcube.

UPD: Для того чтобы отправлять письма из web-оболочки нужно в config.inc.php привести последние строки к следующиему виду:
$config['plugins'] = array();
$config['smtp_server'] = 'tls://localhost';

$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';

$config['smtp_conn_options'] = [
  'ssl' => [
    'peer_name' => 'mail.example.com',
//    'cafile' => '/etc/ssl/certs/ca-certificates.crt'
  ],

В конце нужно открыть порты 25 и 143

Источники:
1) УСТАНОВКА И НАСТРОЙКА ПОЧТОВОГО СЕРВЕР С POSTFIXADMIN

https://baks.dev/article/ubuntu/set-up-a-mail-server-with-postfixadmin

2) Почтовый сервер из Postfix, Dovecot и MySQL

https://ixnfo.com/postfix-dovecot-mysql.html

3) How to Set Up a Mail Server with PostfixAdmin on Debian 11

https://www.rosehosting.com/blog/how-to-set-up-a-mail-server-with-postfixadmin-on-debian-11/

4) Установка и настройка Postfix в качестве сервера SMTP только для отправки в Ubuntu 18.04

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only-smtp-server-on-ubuntu-18-04-ru

5) Пошаговая инструкция установки Postfix и Dovecot на Ubuntu

https://1cloud.ru/help/linux/postfix-dovecot-na-ubuntu

Back