Приветствую всех читателей. В данной публикации или инструкции хочу подробно пролить свет на установку (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
Завершая историю хочу отметить, настраивая и восстанавливая сервер или отдельную службу, стал замечать как забываю тонкости той или иной настройки особенно если события были давно. Буду рад, если публикация будет вам полезна...