Files
Ubuntu_docs/POSTFIX_DOVECOT_install.md
2025-04-07 07:46:21 +05:00

412 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Подключаемся к нужному серверу:
```sh
ssh root@bigfoottrade.kz -p 2222
```
Настройка почты на POSTFIX(агент передачи почты) И DOVECOT на основе https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/ и https://www.youtube.com/watch?v=_pbH7GsVTrw&t=649s и https://www.youtube.com/watch?v=VptKRBVeCMo
****************************************************************************************************
## Устанавливаю Postfixadmin
Для начала создаю базу в PostgreSQL с базой mail и пользователем mailreader и паролем major!reader1
```sh
cd /var/www/html &&
sudo wget https://yer.dl.sourceforge.net/project/postfixadmin/postfixadmin-3.3.8/PostfixAdmin%203.3.8.tar.gz &&
sudo tar xzvf "PostfixAdmin 3.3.8.tar.gz"
```
Создаю временный каталог в /var/www/html/PostfixAdmin/templates_c
правлю способ подключения к базе:
```sh
sudo mcedit /srv/http/PostfixAdmin/config.inc.php
```
На это:
```conf
$CONF['configured'] = true;
$CONF['database_type'] = 'pgsql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'mailreader';
$CONF['database_password'] = 'major!reader1';
$CONF['database_name'] = 'mail';
$CONF['emailcheck_resolve_domain'] = 'NO';
```
Также нужно поднастроить апачи добавив следующтй код в: sudo mcedit /etc/apache2/apache2.conf ниже того что указывает на <Directory /var/www/>
Alias /PostfixAdmin/ "/var/www/html/PostfixAdmin/public/"
<Directory "/var/www/html/PostfixAdmin/public/">
Options FollowSymLinks
AllowOverride None
Allow from all
Order allow,deny
</Directory>
Перезагружаю:
```sh
systemctl restart apache2.service
```
На последок:
```sh
sudo chown www-data:www-data -R /var/www/ &&
sudo chown www-data:www-data -R /opt/app_api_mobile_v2/mobile_v2
```
Теперь можно открывать сайт по IP:
```sh
start http://77.240.38.108/PostfixAdmin/setup.php
```
```sh
start https://77.240.38.108/PostfixAdmin/login.php
```
Просит задать пароль, задал такой: 11qazxsw22
Результат генерации: $CONF['setup_password'] = '$2y$10$ySo40K0pOn0Q5jLcBoK1yua5JaGXI.NIzTmUVBn1dreTaP2RkZ2My';
И добавляем эту стору в: sudo mcedit /srv/http/PostfixAdmin/config.inc.php
Потом обновляем страницу.
Добавляем администратора введя пароль 11qazxsw22 емайл в качестве логина irigm@mail.ru и пароль: 33edcvfr44
Можно взглянуть базу там должны создаться таблицы
Теперь осталось пойти на Postfixadmin, завести сначала почтовый домен, потом ящик и протестировать нашу почтовую систему, например, с помощью Thunderbird. Отправляем письма себе, другому пользователю в нашей системе. Потом пробуем послать себе письма с Gmail, Yandex, Mail.ru и наблюдаем за поведением системы, изучая логи. Основная настройка почты завершена. Теперь необходимо настроить DKIM, SPF, чтобы другие почтовые системы воспринимали нас как доверенных отправителей. Но об этом я расскажу в другом посте.
******************************************************************************************
## Устанавливаю Postfix популярный почтовый агент (MTA) с открытым исходным кодом, который можно использовать для маршрутизации и доставки почты в системе Linux.
```sh
sudo apt-get update &&
sudo apt install postfix postfix-pgsql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql mailutils postgresql
```
Ссохраняю оригинальный конфигурационный файл:
```sh
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
```
Конфигурирую:
```sh
sudo dpkg-reconfigure postfix
```
Настраиваю так:
```conf
General type of mail configuration?: Internet Site
System mail name: example.com (не mail.example.com)
Root and postmaster mail recipient: имя пользователя основной учетной записи Linux (в наших примерах sammy)
Other destinations to accept mail for: $myhostname, example.com, mail.example.com, localhost.example.com, localhost
Force synchronous updates on mail queue?: No
Local networks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
Mailbox size limit: 0
Local address extension character: +
Internet protocols to use: all
```
Можно взглянуть на настройки так: sudo mcedit /etc/postfix/main.cf
Через pgAdmin создаю нового пользователя mailreader с паролем major!reader1
CREATE DATABASE mail WITH OWNER mailreader;
Добавляю: sudo mc edit /etc/postgresql/12/main/pg_hba.conf:
local postfix postfix md5
Перезагружаю базу данных:
service postgresql reload
Создаём файл для обращения к базе с алиасами: sudo mcedit /etc/postfix/pgsql_virtual_alias_maps.cf https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/
```conf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
```
Создаём файл для получения информации по виртуальным доменам: sudo mcedit /etc/postfix/pgsql_virtual_domains_maps.cf
```conf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT domain FROM domain WHERE domain='%u'
```
Создаём файл для получения информации о почтовых ящиках: sudo mcedit /etc/postfix/pgsql_virtual_mailbox_maps.cf
```conf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
```
Прописываем ранее созданные файлы в: sudo mcedit /etc/postfix/main.cf добавив строчки:
```conf
virtual_mailbox_base = /home/mail
virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/pgsql_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
```
Настройки безопасного соединения (также просто вставил в конец файла):
```conf
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
smtpd_tls_cert_file = /etc/ssl/certs/bigfoottrade_kz.crt
smtpd_tls_key_file = /etc/ssl/private/bigfoottrade_kz.key
smtpd_tls_security_level = encrypt
```
Похоже опции что ниже устарели:
```conf
smtpd_use_tls = yes
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_enforce_tls=yes
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
tls_preempt_cipherlist = yes
smtpd_tls_mandatory_ciphers = high
tls_high_cipherlist = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ADH-AES256-GCM-SHA384:ADH-AES256-SHA256:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:AES256-GCM-SHA384:AES256-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ADH-AES128-GCM-SHA256:ADH-AES128-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA256:NULL-SHA256
smtpd_tls_auth_only = yes
smtpd_helo_required = yes
smtp_tls_security_level = may
smtp_tls_ciphers = export
smtp_tls_loglevel = 1
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
```
Снимаем комментарии со следующих строк, или дописываем их при необходимости: sudo mcedit /etc/postfix/master.cf (просто добавил в конец файла)
```conf
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-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
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
-o milter_macro_daemon_name=ORIGINATING
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_mynetworks,permit_sasl_authenticated,reject
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
```
Проверяю на наличие ошибок:
```sh
sudo postfix check
```
В конфигурационном файле прописывается список дорменов которых обслуживает данный агент доставки.
```sh
sudo mcedit /etc/postfix/main.cf
```
Примерно таокое:
mydestination = $myhostname, your_domain, localhost.com, , localhost
Перезапускаем:
```sh
sudo systemctl restart postfix
```
******************************************************************************************
## Настройка dovecot the Secure IMAP server
Теперь устанавливаю и настраиваю Dovecot:
sudo apt install -y dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd
Создаю пользователя и каталог
sudo adduser --system --no-create-home --uid 1024 --group --disabled-password --disabled-login --gecos 'dovecot virtual mail user' vmail
mkdir /home/mail
chown vmail:vmail /home/mail
chmod 700 /home/mail
Смотрим что мы создали:
groups vmail
Настраиваем способ хранения сообщений: sudo mcedit /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/mail/%d/%u/
Настраиваем слушателя аутентификации: sudo mcedit /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
Настраиваем аутентификацию в Dovecot: sudo mcedit /etc/dovecot/conf.d/10-auth.conf
Комментируем одну строку, снимаем комментарий с другой.
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Настраиваем шифрование Dovecot: sudo mcedit /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/haproxy/ssl/bigfoottrade_kz.pem
ssl_key = </etc/haproxy/ssl/bigfoottrade_kz.pem
Указываем Dovecot автоматически создавать каталоги при первом подключении клиента: sudo mcedit /etc/dovecot/conf.d/15-lda.conf
lda_mailbox_autocreate = yes
Теперь настройка подключения к базе данных. Открываем файл: sudo mcedit /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Создаём файл с настройками для работы с PostgreSQL: sudo mcedit /etc/dovecot/dovecot-sql.conf.ext
driver = pgsql
connect = host=localhost dbname=mail user=mailreader password=major!reader1
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/',LOWER(domain),'/',LOWER(maildir)),1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
Наконец, указываем интерфейсы, на которых будет слушать наш Dovecot: sudo mcedit /etc/dovecot/dovecot.conf
listen = *
Также добавить в этот файл следующую настройку:
service stats {
unix_listener stats-reader {
user = vmail
group = vmail
mode = 0660
}
unix_listener stats-writer {
user = vmail
group = vmail
mode = 0660
}
}
Настройка Dovecot завершена. Осталось сгенерировать сертификаты или получить их с помощью Let's Encrypt. Для тестовых целей сгенерируем самоподписанные сертификаты. Мы их положим в /etc/postfix:
openssl req -new -x509 -days 730 -nodes -out /etc/postfix/public.pem -keyout /etc/postfix/private.pem -subj "/C=RU/ST=Msk/L=Msk/O=Local/OU=Mail/CN=fedor.bigfoottrade.kz"
Добавляем пользователю "dovecot" группу "mail":
usermod -a -G dovecot mail
usermod -a -G vmail mail
sudo systemctl enable dovecot
sudo systemctl start dovecot
Теперь можно тестировать:
Сначала необходимо убедиться в том, что почта доходит до нового ящика. Сделать это можно с помощью тестового письма:
echo "Test mail" | mail -s "Test mail" admin@mqtt.kz
Сообщение должно появиться в папке /home/mail/mqtt.kz/admin/new/. Если письма нет, проверьте лог Postfix:
tail -f /var/log/mail.log
В настройках DNS настроил А запись на только что настроенный сервер:
mail.mqtt.kz
Также нужно настроить dkim чтобы почта не попадала в спам, записав открытый ключ шифрования в TXT запсь
****************************************************************************************************
## Настройка dkim для проверки что письмо действительно было отправлено с заявленного домена
Созданно по этой инструкции:
```sh
start https://fornex.com/ru/help/dkim-postfix/
```
```sh
sudo apt-get install opendkim opendkim-tools
```
mkdir -p /etc/postfix/dkim && cd /etc/postfix/dkim
opendkim-genkey -D /etc/postfix/dkim/ -d mqtt.kz -s mail
opendkim-genkey -D /etc/postfix/dkim/ -d geovizor.com -s mail
mv mail.private mail.mqtt.kz.private
mv mail.private mail.geovizor.com.private
mv mail.txt mail.mqtt.kz.txt
mv mail.txt mail.geovizor.com.txt
Создаём файл mcedit keytable и записываем в него ключи
#имя_ключа домен:селектор:/путь/до/ключа
mail._domainkey.mqtt.kz mqtt.kz:mail:/etc/postfix/dkim/mail.mqtt.kz.private
mail._domainkey.geovizor.com geovizor.com:mail:/etc/postfix/dkim/mail.geovizor.com.private
Создаём файл mcedit signingtable и записывает что чем подписывать
#домен имя ключа
*@mqtt.kz mail._domainkey.mqtt.kz
*@geovizor.com mail._domainkey.geovizor.com
Задаю права доступа:
chown root:opendkim *
chmod u=rw,g=r,o= *
chmod g+r /etc/postfix/dkim/
Смотрим содержимое TXT файла для записи в домен
cat /etc/postfix/dkim/mail.mqtt.kz.txt
cat /etc/postfix/dkim/mail.geovizor.com.txt
И добавляю в DNS на хостинг:
Name: mail._domainkey.mqtt.kz
Text: v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtrObJxHaUBVtR4XzNuFzoa449K3l1z6+Mi4e83rFbBYmBZRYjiJn5h2PeiK1i2IpSaEKn32AlPy5gB7Ej41Fhg6LXswwRhhfvz8vClhRbUKT4I8oPBj9WZr7+4aohG1Vcks1q9cgmwdcGN+6qhKq/DJ+AC1TirNrEpSvR6JAqd4G70aJazI9su0bY5cbIv0pZGezvt+2pwJw6xpb501KudTFE8FTHxB51aLkgYS257MkovSu+qlVzPjoOsZcOY7hQtF8WB/Czod0QN05Ob/N3Qc/k2E4tpvxgokLXdYl/8KBMLMX9cRfIVbv+atuo59VFKHYIGD8Kom6akORkFeIlQIDAQAB
Заменяем все настройки на то что ниже: sudo mcedit /etc/opendkim.conf
AutoRestart Yes
AutoRestartRate 10/1h
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@localhost
Umask 022
Canonicalization relaxed/relaxed
Selector default
MinimumKeyBits 1024
KeyFile /etc/postfix/dkim/${MAIL_DOMAIN}.private
KeyTable /etc/postfix/dkim/keytable
SigningTable refile:/etc/postfix/dkim/signingtable
Добавляем в конец: sudo mcedit /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
sudo systemctl start opendkim
sudo systemctl enable opendkim
service opendkim restart
service postfix restart
********** Настройка SPF **********
Например, SPF-запись «example.com. TXT «v=spf1 +a +mx -all»» говорит о том, что отправлять письма от имени домена «example.com» могут сервера, указанные в A и MX-записях этого домена, а письма, отправленные от других серверов должны быть удалены (Fail).
Содержимое TXT файла для записи в домен
Имя домена пустое:
Содержимое: v=spf1 +a +mx -all
********** Настройка DMARC https://www.unisender.com/ru/glossary/dmarc/**********
Содержимое TXT файла для записи в домен
Имя домена: _dmarc
Содержимое: v=DMARC1; p=none;
!!! Для тестирования сервера на прохождение спам фильтра пишем письмо на https://www.mail-tester.com/ или https://spamtest.smtp.bz !!!
********** web интерфейс для postfix — Roundcube **********
cd /var/www/html
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.5/roundcubemail-1.6.5-complete.tar.gz
tar xzvf roundcubemail-1.6.5-complete.tar.gz
chown -R www-data:www-data /var/www/html/Roundcube
sudo apt-get install aspell aspell-en dbconfig-common fonts-glyphicons-halflings javascript-common libaspell15 libjs-bootstrap libjs-bootstrap4 libjs-codemirror libjs-jquery libjs-jquery-minicolors libjs-jquery-ui libjs-jstimezonedetect libjs-popper.js libjs-sizzle node-jquery php-auth-sasl php-mail-mime php-masterminds-html5 php-net-sieve php-net-smtp php-net-socket php-pspell php7.4-pspell
https://bigfoottrade.kz/Roundcube/installer/
language — ru_RU
Предварительно создать базу:
```sh
start https://bigfoottrade.kz/Roundcube
```
```sh
start http://77.240.38.108/Roundcube
```