Приветствую всех читателей. В данной публикации или инструкции хочу подробно пролить свет на установку (MTA/MDA) сервер.
* местами буду краток, местами подробным...
Наши ресурсы
Платформу для выполнения задачи взял из маленького одно платного компьютера Odroid C1+ на базе Ubuntu 20 версии, купленный домен на хостинге в нашем случае medianet.pp.ua, статический ip адрес от интернет провайдера.
Постановка задачи:
На базе операционной системы Linux Ubuntu не ниже 18.04 LTS или Debian подобной необходимо развернуть почтовый сервер Exim4 в качестве MDA, Dovecot в качестве MTA. Веб морда админа для добавления учетных записей пользователей, Postfixadmin. База данных Mysql для учета аккаунтов. Настройка Dkim+SPF для нормальной работы с сервисами типа Gmail. Apache и прочие плюшки.
Приступаем к настройке и установке всех компонентов
В первую очередь необходимо убедиться, что наш сервер имеет правильное имя хоста.
$ hostname -f
mx.example.com
В файле /etc/hostname необходимо убедиться, что имя хоста короткое т.е. Не FQDN.
В файле /etc/hosts необходимо в первой записи хоста указать имя FQDN.
127.0.0.1 mail.medianet.pp.ua localhost mail.localhost
Выполняем проверку командой hostname -f, результат mail.medianet.pp.ua полная FQDN запись, можно продолжать дальше. Иногда после изменения записи необходимо перезагрузить систему.
Установка вспомогательных компонентов:
sudo apt-get update
sudo apt-get install mc
sudo apt-get install tasksell
Установленные компоненты можно рассматривать как обязательные)))
Установка LAMP сервера:
sudo tasksel install lamp-server
sudo apt-get install php-mbstring
sudo apt-get install php7.4-fpm
sudo apt-get install php-curl
sudo apt-get install php7.4-sqlite3 php7.4-dom
sudo apt-get install composer
lamp это набор компонентов необходимы для нашего сервера: Apache - веб-сервер, MySQL — СУБД, PHP необходимы для работы Postfixadmin и Dovecot. Авторизация аккаунтов будет через запрос к базе данных Mysql.
Выполняем базовую настройку mysql в которой необходимо задать root пароль для входа и администрирования:
sudo mysql_secure_installation
Утилита спросит вас необходимо ли включить компонент для валидации (проверки) паролей. Данный плагин проверяет надежность вашего пароля. Если вы решите настроить данный плагин, то сценарий предложит выбрать уровень проверки пароля. Наивысший уровень можно включить, нажав 2. Если данный плагин включать не требуется, введите No и далее нажмите на enter для перехода к следующему шагу. Следующим шагом утилита попросит вас ввести пароль суперпользователя, так как он ещё не задан, введите пароль, нажмите enter и введите пароль еще раз.
sudo mysql -u root -p
Выполняем вход с правами администратора, необходимо убедиться что пароль подходит Cli работает. Для просмотра всех пользователей базы данных выполняем: SELECT user FROM mysql.user; на выходе получаем перечень с учетной записью root. Все работает.
Установка почтовых пакетов Dovecot, Exim4 на Debian/Ubuntu:
sudo apt-get install opendkim-tools
sudo apt-get install exim4 exim4-base exim4-config exim4-daemon-heavy
sudo apt-get install dovecot-common dovecot-imapd dovecot-pop3d dovecot-mysql
sudo apt-get install dovecot-sieve dovecot-managesieved
sudo apt-get install php-imap
После успешной установки необходимо создать нового пользователя в системе в будущем от лица которого Dovecot будет обращаться к почте т.е. Забирать письма в соответствующей директории будет Dovecot.
Данную директорию необходимо создавать с учетом использования дискового пространства, на мой взгляд 20Gb квота на пользователя сейчас нормальное явления так, что исходя из 15-20 аккаунтов выходит 200Gb выделенного диска.
Создание пользователя и папки для будущего хранения почты
useradd -r -u 1150 -g mail -d /var/vmail -s /sbin/nologin -c 'Virt Mail account' vmail
Создаем нового пользователя: vmail который входит в группу mail.
mkdir -p /var/vmail
chown vmail:mail /var/vmail
chmod 770 /var/vmail
Создаем каталог в нашем случае /var/vmail принадлежащий пользователю vmail и даем права на запись пользователям группы mail.
Создаем базу данный для postfixadmin в Mysql
mysql -u root -p
Enter password:
Выполнили вход при помощи CLI.
CREATE DATABASE postfix;
GRANT ALL PRIVILEGES ON postfix.* TO postfix@localhost IDENTIFIED BY 'MysqlPasswordForMailBase';
exit
Создаем базу с указанным уникальным паролем на базу postfix.
Устанавливаем postfixadmin систему управления ящиками через веб-интерфейс:
cd /srv/
wget -O postfixadmin.tgz https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.10.tar.gz
tar -zxvf postfixadmin.tgz
mv postfixadmin-postfixadmin-3.3 /var/www/postfixadmin
cd /var/www/postfixadmin
Загружаем и распаковываем postfixadmin в нужный каталог.
chdmo +x install.sh
./ install
ln -s /srv/postfixadmin/public /var/www/html/postfixadmin
Устанавливаем Postfixadmin по скрипту. После успешной установки можно посетить офф., мануал по настройке: https://github.com/postfixadmin/postfixadmin/blob/master/INSTALL.TXT Автор не исключает, что от вариации операционной системы и возможных версий компонентов могу возникать непредвиденные зависимости в установке данного пакета.
chown www-data:www-data /var/www/postfixadmin
chmod 770 /var/www/postfixadmin
cd /var/www/postfixadmin/
chown -R www-data:www-data .
chmod -R 770 *
Выполняем присвоение прав на каталог. Следуем дальше по настройке postfixadmin.
cp config.inc.php /var/www/postfixadmin/config.local.php
chown www-data:www-data config.local.php
cd /etc/apache2/conf-enabled
mcedit postfixadmin.conf
postfixadmin.conf
Alias /postfix /var/www/postfixadmin
<Directory "/var/www/postfixadmin">
Options FollowSymLinks
DirectoryIndex index.php
Require all granted
</Directory>
Выполняем настройку postfixadmin для WEB сервера в нашем случае Apache2.
После чего перезагружаем его. service apache2 restart
Следующим этапом необходимо настраивать /var/www/postfixadmin/config.local.php
$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
// Database Config
// mysql = MySQL 3.23 and 4.0, 4.1 or 5
// mysqli = MySQL 4.1+ or MariaDB
// pgsql = PostgreSQL
// sqlite = SQLite 3
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'MysqlPasswordForMailBase';
$CONF['database_name'] = 'postfix';
$CONF['encrypt'] = 'php_crypt:MD5'; // MD5
В этом файле необходимо отредактировать следующие строки в зависимости от вашей базы данных к которой будет подключаться postfixadmin и обязательно в параметре $CONF['encrypt'] необходимо указать MD5 метод шифрования. В случае если использовать другой метод шифрования клиент Thunderbird будет формировать противоречивый хеш и сходства паролей не будет, обязательно нужно учитывать, что dovecot работает с MD5. Сохраняем настройки.
Далее заходим youip/postfixadmin/setup.php
Генерируем пароль в строке "Genarate setup_password" и получаем следующую запись
$CONF['setup_password'] = '$2y$10$0ElPAbeR0JTTS71tgmLaRuoDJHUt/jaL8QL80Jn3W2LVg5XHrSgUq';
После добавления записи в файл настройки /var/www/postfixadmin/config.local.php заходим http://youip/postfixadmin/login.php
Далее необходимо создать алиас нашей доменной зоны *medianet.pp.ua и можно создать новый ящик для пользователя. С этой минуты наш postfixadmin создает новых пользователей в MYSQL и дальше почтовые программы Dovecot и Exim4 могут использовать их для аутентификации пользователей.
Настройка Dovecot
Необходимо настроить подключение к базе, логирование и основной конфигурационный файл. Напоминаю Dovecot - MDA сервер, отвечающий за работу IMAP (143 порт) и POP3 (110 порт). Как правило используют для внутренней почты предприятия, IMAP в отличие от POP3 оставляет письма на сервере при их прочтении, тогда как POP3 полностью выгружает все письма. В нашем примере SSL/TLS использовать не будем.
cd /etc/dovecot/
mcedit dovecot-sql.conf
Редактируем файлы с правами root.
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=MysqlPasswordForMailBase
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, 1150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 1150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'
В строке connect указываем параметры для подключения к базе, а так же следующие строки. И переходим к настройке логов.
cd /var/log
mkdir dovecot
chown mail:mail dovecot
cd dovecot
touch dovecot-sieve.log
touch dovecot.log
chown mail:mail *
chmod 660 *
Создали папку для логов dovecot с необходимыми файлами и присвоили нужные права. Следующий этап основной конфиг /etc/dovecot/dovecot.conf.
cp /etc/dovecot/dovecot.conf dovecot.conf.old
dovecot.conf
## Dovecot configuration file
auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = plain login cram-md5
disable_plaintext_auth = no
#Приветствие
login_greeting = dovecot MUA ready
### LOGS #########################
log_path = /var/log/dovecot/dovecot.log
info_log_path = /var/log/dovecot/info-dovecot.log
auth_debug = yes
auth_verbose = yes
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/var/vmail/%d/%u
mail_privileged_group = mail
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
maildir_copy_with_hardlinks = yes
base_dir = /var/run/dovecot/
login_trusted_networks = 192.168.0.0/16
# На каких интерфейсах прослушивать соединения
listen = *
protocols = imap pop3 sieve
ssl = no
# Способ аутентификации пользователей
userdb {
args = /etc/dovecot/dovecot-sql.conf
driver = sql
}
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf
}
# Путь к почтовой дириктории
mail_location = mbox:~/mail:INBOX=/var/mail/%u
ssl_cert = /etc/ssl/mail/exim.pem
ssl_key = /etc/ssl/mail/exim-private.pem
auth_mechanisms = plain login cram-md5
# Плагины
mail_plugins = quota
service auth {
unix_listener auth-client {
group = mail
mode = 0660
user = mail
}
unix_listener auth-master {
group = mail
mode = 0660
user = mail
}
user = root
}
service imap-login {
chroot = login
executable = /usr/lib/dovecot/imap-login
process_limit = 128
process_min_avail = 3
service_count = 1
user = dovecot
vsz_limit = 64 M
}
service imap {
executable = /usr/lib/dovecot/imap
}
service managesieve-login {
chroot = login
inet_listener sieve {
address = 127.0.0.1
port = 4190
}
process_limit = 128
process_min_avail = 3
service_count = 1
user = dovecot
vsz_limit = 64 M
}
service pop3-login {
chroot = login
executable = /usr/lib/dovecot/pop3-login
process_limit = 128
process_min_avail = 3
service_count = 1
user = dovecot
vsz_limit = 64 M
}
service pop3 {
executable = /usr/lib/dovecot/pop3
}
verbose_proctitle = yes
protocol imap {
imap_max_line_length = 64 k
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
log_path = /var/log/dovecot-sieve.log
mail_plugins = "autocreate sieve"
postmaster_address = postmaster@medianet.pp.ua
}
service stats {
unix_listener stats-reader {
user = mail
group = mail
mode = 0660
}
unix_listener stats-writer {
user = mail
group = mail
mode = 0660
}
}
protocol imap {
mail_max_userip_connections = 10
mail_plugins = $mail_plugins imap_quota
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
По завершению настройки убеждаемся, что сервис работает.
systemctl dovecot start
service dovecot restart
service dovecot status
Просматриваем статус после перезагрузки Active: active (running) и можно взглянуть на логи.
cat /var/log/dovecot/dovecot.log
получаем master: Warning: Killed with signal 15 (by pid=3670 uid=0 code=kill)
Отлично, работает!
Настройка EXIM4
Необходимо настроить подключение к базе и основной конфигурационный файл. Разработчик предлагает настраивать каждую секцию конфигурации в отдельном файле, на мой взгляд удобнее иметь весь набор параметров в одном файле. Напоминаю Exim4 - MTA сервер, отвечающий за работу SMTP (25 порт).
В нашем примере применим DKIM.
/etc/exim4/exim4.conf
######################################################################
# MAIN CONFIGURATION SETTINGS #
######################################################################
# Имя сервера в заголовке
smtp_banner = "$primary_hostname, (-=RSTP=-local Domain: $local_part) ESMTP EXIM $version_number"
primary_hostname = mail.medianet.pp.ua
daemon_smtp_ports = 25
tls_on_connect_ports=465
#######################################################################
### Настройка подключения к Mysql ###
#######################################################################
hide mysql_servers = localhost/postfix/postfix/MysqlPasswordForMailBase
exim_path = /usr/sbin/exim4
CONFDIR = /etc/exim4
# debconf-driven macro definitions get inserted after this line
UPEX4CmacrosUPEX4C = 1
domainlist local_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}
#domainlist relay_to_domains = medianet.lan : medianet.pp.ua
domainlist relay_to_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}
hostlist relay_from_hosts = localhost : 127.0.0.0/8 : 192.168.0.0/16 : 192.168.3.0/24
#acl_smtp_helo = acl_check_helo
#acl_smtp_mail = acl_check_from
acl_smtp_rcpt = acl_check_rcpt
#acl_smtp_mime = acl_check_mime
#acl_smtp_data = acl_check_data
log_selector = \
+all_parents \
+connection_reject \
+incoming_interface \
+lost_incoming_connection \
+received_sender \
+received_recipients \
+smtp_confirmation \
+smtp_syntax_error \
+smtp_protocol_error \
+queue_run \
+host_lookup_failed \
+smtp_mailauth \
+sender_verify_fail \
+all \
# av_scanner = clamd:/run/clamav/clamd.ctl
#MAIN_HOST_LOOKUP = *
#host_lookup = MAIN_HOST_LOOKUP
#dns_dnssec_ok = 1
#prdr_enable = true
# users in admin group can do many other things
# admin_groups = <unset>
#######################################################################
### Секция для настройки SSL ###
#######################################################################
#tls_advertise_hosts = *
#tls_certificate = /etc/exim4/dovecot.pem
#tls_privatekey = /etc/exim4/dovecot.key
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl
acl_check_rcpt:
accept hosts = +relay_from_hosts
# accept authenticated = *
# deny message = relay not permitted (FROM THIS IP address)
# принимать сообщения которые пришли с локалхоста,
# не по TCP/IP
# accept hosts = :
# Запрещаем письма содержащие в локальной части
# символы @; %; !; /; |. Учтите, если у вас было
# `percent_hack_domains` то % надо убрать.
# Проверяются локальные домены
# deny message = "incorrect symbol in address"
# domains = +local_domains
# local_parts = ^[.] : ^.*[@%!/|]
# Проверяем недопустимые символы для
# нелокальных получателей:
# deny message = "incorrect symbol in address"
# domains = !+local_domains
# local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
# Принимаем почту для постмастеров локальных доменов без
# проверки отправителя (я закомментировал, т.к. это -
# основной источник спама с мой ящик).
# accept local_parts = postmaster
# domains = +local_domains
# Запрещщаем, если невозможно проверить отправителя
# (отсутствует в списке локальных пользователей)
# У себя я это закоментил, по причине, что некоторые
# железяки (принтеры, & etc) и программы (Касперский, DrWEB)
# умеют слать почту, в случае проблем но не умеют ставить
# нужного отправителя. Такие письма эта проверка не пускает.
# require verify = sender
# Запрещщаем тех, кто не обменивается приветственными
# сообщениями (HELO/EHLO)
# deny message = "HELO/EHLO require by SMTP RFC"
# condition = ${if eq{$sender_helo_name}{}{yes}{no}}
# Принимаем сообщения от тех, кто аутентифицировался:
# Вообще, большинство конфигов в рунете - это один и тот же
# конфиг написанный Ginger, в котором этот пункт расположен
# внизу. Но при таком расположении рубятся клиенты с adsl,
# ppp, и прочие зарезанные на последующих проверках. Но это
# жа неправильно! Этом мои пользователи из дома! Потому
# я это правило расположил до проверок.
accept authenticated = *
# Рубаем нах, тех, кто подставляет свой IP в HELO
# deny message = "Your IP in HELO - access denied!"
# hosts = * : !+relay_from_hosts : !81-196.lissyara.su
# condition = ${if eq{$sender_helo_name}\
# {$sender_host_address}{true}{false}}
# Рубаем тех, кто в HELO пихает мой IP (2500 мудаков за месяц!)
deny condition = ${if eq{$sender_helo_name}\
{$interface_address}{yes}{no}}
hosts = !127.0.0.1 : !localhost : *
message = "main IP in your HELO! Access denied!"
# Рубаем тех, кто в HELO пихает только цифры
# (не бывает хостов ТОЛЬКО из цифр)
# deny condition = ${if match{$sender_helo_name}\
# {\N^\d+$\N}{yes}{no}}
# hosts = !127.0.0.1 : !localhost : *
# message = "can not be only number in HELO!"
# Рубаем хосты типа *adsl*; *dialup*; *pool*;....
# Нормальные люди с таких не пишут. Если будут
# проблемы - уберёте проблемный пункт (у меня клиенты
# имеют запись типа asdl-1233.zone.su - я ADSL убрал...)
# deny message = "your hostname is bad (adsl, poll, ppp & etc)."
# condition = ${if match{$sender_host_name} \
# {adsl|dialup|pool|peer|dhcp} \
# {yes}{no}}
# Задержка. (это такой метод борьбы со спамом,
# основанный на принципе его рассылки) На этом рубается
# почти весь спам. Единственно - метод неприменим на
# реально загруженных MTA - т.к. в результате ему
# приходится держать много открытых соединений.
# но на офисе в сотню-две человек - шикарный метод.
#
# более сложный вариант, смотрите в статье по exim и
# курьер имап. Т.к. там метод боле умный (просто правил
# больше :), то можно и на более загруженные сервера ставить)
# warn
# ставим дефолтовую задержку в 20 секунд
# set acl_m0 = 30s
# warn
# ставим задержку в 0 секунд своим хостам и
# дружественным сетям (соседняя контора :))
# hosts = +relay_from_hosts:213.234.195.224/28:80.253.9.18/32
# set acl_m0 = 0s
# warn
# пишем в логи задержку (если оно вам надо)
# logwrite = Delay $acl_m0 for $sender_host_name \
#[$sender_host_address] with HELO=$sender_helo_name. Mail \
#from $sender_address to $local_part@$domain.
# delay = $acl_m0
# Проверка получателя в локальных доменах.
# Если не проходит, то проверяется следующий ACL,
# и если непрошёл и там - deny
# accept domains = +local_domains
# endpass
# message = "In my mailserver not stored this user"
# verify = recipient
# Проверяем получателя в релейных доменах
# Опять-таки если не проходит -> следующий ACL,
# и если непрошёл и там - deny
# accept domains = +relay_to_domains
# endpass
# message = "main server not know how relay to this address"
# verify = recipient
# Рубаем тех, кто в блэк-листах. Серваки перебираются
# сверху вниз, если не хост не найден на первом, то
# запрашивается второй, и т.д. Если не найден ни в одном
# из списка - то почта пропускается.
# deny message = you in blacklist: $dnslist_domain \n $dnslist_text
# dnslists = opm.blitzed.org : \
# cbl.abuseat.org : \
# bl.csma.biz : \
# dynablock.njabl.org
# Разрешаем почту от доменов в списке relay_from_hosts
# accept hosts = +relay_from_hosts
# Если неподошло ни одно правило - чувак явно ищет
# открытый релей. Пшёл прочь. :)
# deny message = "Homo hominus lupus est"
# Тут идут ACL проверяющие содержимое (тело) письма.
# Без них будут пропускаться все сообщения.
#acl_check_data:
#
# Проверяем письмо на вирусы
# deny malware = *
# message = "In e-mail found VIRUS - $malware_name"
# Если есть необходимость - тут проверки на спам
# Пропускаем остальное
accept
control = suppress_local_fixups
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
begin routers
# Отправка на системные алиасы
#sys_alias:
# driver = redirect
# data = ${lookup{$local_part}lsearch{/etc/aliases}}
# file_transport = address_file
# pipe_transport = address_pipe
# allow_fail
# allow_defer
# Поиск маршрута к хосту в DNS. Не проверяются 0.0.0.0 и 127.0.0.0/8
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
# Почтовые алиасы (виртуальные адреса)
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE `address`='${quote_mysql:$local_part@$domain}' OR `address`='${quote_mysql:@$domain}'}}
# data = ${lookup{$local_part}lsearch{/etc/exim/alias}}
# Получение почты на локальный ящик с альтернативным доменным именем из Postfixadmin
alias_domain_mailbox:
driver = accept
condition = ${lookup mysql{SELECT mailbox.maildir \
FROM alias_domain \
JOIN mailbox ON mailbox.local_part = LCASE('${quote_mysql:$local_part}') \
AND mailbox.domain = alias_domain.target_domain \
AND mailbox.active = 1 \
WHERE alias_domain.alias_domain = LCASE('${quote_mysql:$domain}') \
AND alias_domain.active = 1}{yes}{no}}
transport = dovecot_virtual_delivery
cannot_route_message = Unknown user
dovecot_user:
driver = accept
condition = ${lookup mysql{SELECT `goto` FROM `alias` WHERE `address`='${quote_mysql:$local_part@$domain}' OR `address`='${quote_mysql:@$domain}'}{yes}{no}}
transport = dovecot_delivery
vrouter:
driver = accept
require_files = +/home/vmail/$local_part@$domain/
transport = dovecot_delivery
######################################################################
# TRANSPORTS CONFIGURATION #
begin transports
remote_smtp:
driver = smtp
dovecot_delivery:
driver = pipe
debug_print = "T: dovecot_delivery for $local_part@$domain"
command = /usr/lib/dovecot/dovecot-lda -d $local_part@$domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add = false
log_output
user = vmail
# Транспорт для локальных получателей из Dovecot
dovecot_virtual_delivery:
driver = pipe
command = /usr/libexec/dovecot/deliver -d $local_part@$domain -f $sender_address
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
log_output
user = vmail
temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
# Транспорт а-ля "труба"
address_pipe:
driver = pipe
return_output
# Автоответчик
address_reply:
driver = autoreply
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators
auth_plain:
driver = plaintext
public_name = LOGIN
server_advertise_condition = ${if eq{$2}{}{no}{yes}}
server_condition = ${lookup mysql{SELECT password FROM users WHERE username='${quote_mysql:$1}'}{yes}{no}}
server_set_id = $1
server_prompts = :
#######################################################################
Аналогично прошлому сервису проверяем работоспособность:
systemct exim4 start
service exim4 restart
service exim4 status
Просматриваем статус после перезагрузки Active: active (running).
Просматриваем общий вид прослушиваемых tcp портов
netstat -lntup
Подключаем DKIM к EXIM4
Установку пакета мы произвели ранее. Для чего он нужен писать не буду, но глобальные сервисы такие как GMAIL будут отсеивать письма без наличия dkim и spf.
Переходим к настройке:
mkdir /etc/exim4/dkim
chown -R Debian-exim:Debian-exim /etc/exim4/dkim
opendkim-genkey -D /etc/exim4/dkim/ -d medianet.pp.ua -s dkim_cert
chown -R Debian-exim:Debian-exim medianet.pp.ua.key
chmod 640 medianet.pp.ua.key
Получаем закрытый открытый ключ значения из которого необходимо внести в /etc/exim4/exim4.conf и DNS записи на хостинге.
/etc/exim4/dkim/dkim_cert.txt
Добавляем параметры в /etc/exim4/exim4.conf в секцию transport после remote_smtp:
/etc/exim4/exim4.conf
Полагаю, что все ясно. Вносим записи на хостинге в DNS.
hosting.COM
Вносим две TXT записи для DKIM и SPF глядя на dkim_cert.txt. Вторая запись разрешает пересылку со всех адресов.
Финальные настройки произведены успешно, обязательно нужно отметить Mail Server расположен за NAT в локальной сети, соответственно нужно пробросить на него 25 (SMTP). Следует отметить, что на самом деле это только начало тяжелой дальнейшей работы в которой нужно как часто говорят "вылезать сервер". В следующем разделе я поделюсь личным опытом в некоторых вещах.
Debug и Отладка
Заводим новых пользователей
Через web админку создаем нового пользователя
проверяем доступность пользователя
doveadm auth test -x service=imap -x rip=192.168.0.200 touch@medianet.pp.ua
вводим пароль
doveadm auth test -x service=imap -x rip=192.168.0.200 touch@medianet.pp.ua
Password:
passdb: touch@medianet.pp.ua auth succeeded
extra fields:
user=touch@medianet.pp.ua
По видимому результату хеш запись в БД верная с dovecot и пользователь touch@medianet.pp.ua готов к авторизации
Настройки Thundebird для нового пользователя
Каждый пользователь имеет возможность настроить редирект почты и поменять пароль через web морду postfixadmin.
http://youip/postfixadmin/users/login.php
Полезные команды для Exim & Dovecot и системные
--help
###___Dovecot___###########################################################
#Просмотр всех настроек Dovecot
dovecot -a
#Просмотр настроек отличных от дефолтных
dovecot -n
#Просмотр активных подключений
doveadm who
#Тестирование аутентификации для пользователя(где rip-remote ip)
doveadm auth test -x service=imap -x rip=10.10.1.4 username@example.com
doveadm auth test -x service=pop3 -x rip=10.10.1.4 username@example.com
#Просмотр квоты пользователя
doveadm quota get -u username@example.com
#Удаление таких сообщений(всех сообщений из каталога Trash)
doveadm expunge -u username@example.com mailbox Trash all
#Удаление писем из папки Спам старше 12 недель для всех ящиков:
doveadm expunge -A mailbox Junk BEFORE 12w
###########################################################################
###___Exim___##############################################################
#Отображение всех настроек Exim
exim -bP
#Отображение очереди
exim -bpc
exim -bp
#Удалить все сообщения, которые старше, чем Х секунд из очереди (например, 5 дней будет 432 000 секунд)
exiqgrep -o 432000 -i | xargs exim -Mrm
#Отображение всех сообщений в очереди (количество, объем, старых, новых, области, и итоги)
exim -bp|exiqsumm
#Просмотр заголовков сообщения в очереди
exim -Mvh
#Отправка тестового письма (Для внутренне проверки очень удобно)
echo «Testing our Exim1» | mail -s Test touch@medianet.pp.ua
#Команда проверки секции ROUTER в exim4 (очень полезная вещь)
exim -bt admin@i.XXX
#проверка настроек DKIM
exim -bP transports | grep dkim
# Отчистка Frozen сообщений
exiqgrep -z -i | xargs -n 1 exim -M
или
exim -bp|grep frozen|awk '{print $3}' |xargs exim -Mrm
############################################################################
####___SYSTEM_utils___######################################################
#Определение адреса хоста по имени (требует установки в системе dnsutils)
dig hostanem.domain
Завершая историю хочу отметить, настраивая и восстанавливая сервер или отдельную службу, стал замечать как забываю тонкости той или иной настройки особенно если события были давно. Буду рад, если публикация будет вам полезна...