Настройка почтового сервера
Настройка Postfix + Dovecot + MySQL + PostfixAdmin + SSL/TLS
Настройка для ОС Роса Никель
Устанавливаем пакеты dovecot-plugins-mysql и php-imap
dnf install php-imap dovecot-plugins-mysql
Условия работаты такие:
- Сервер - ip: 192.168.1.76
- Все клиенты в этой же подсети - 192.168.1.0/24
- Имя хоста сервера - mx.rosa3.loc
- Имя почтового домена - rosa3.loc
- Все сервисы у нас отключены и не запущены
Редактируем nano /etc/hosts
192.168.1.76 mx.rosa3.loc mx
Настройка MySQL
Mysql создание почтовой базы:
systemctl start mysqld.service mysql_secure_installation mysql -u root -p # pass=654321 mysql> CREATE DATABASE mail; mysql> GRANT ALL PRIVILEGES ON mail.* TO 'postfix'@'localhost' IDENTIFIED BY 'maildbpass'; mysql> FLUSH PRIVILEGES; mysql> quit
Редактируем:
nano /etc/my.cnf
Добавим в секцию:
[client-server] socket=/run/mysqld/mysql.sock
Редактируем:
nano /etc/my.cnf.d/server.cnf
Подправим:
bind-address=127.0.0.1
Инсталляция PostfixAdmin
postfixadmin инсталляция:
cd /var/www/html wget -O postfixadmin.tgz https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.2.4.tar.gz tar -zxvf postfixadmin.tgz mv postfixadmin-postfixadmin-3.2.4/ postfixadmin chown -R apache:apache /var/www/html/postfixadmin cd postfixadmin mkdir /var/www/html/postfixadmin/templates_c chown -R apache:apache /var/www/html/postfixadmin/templates_c
Либо скачать с wiki эту версию postfixadmin: Файл:Postfixadmin-postfixadmin-3.2.4.tar.gz
Настройка PHP 5.6.40
Редактируем:
nano /etc/php.ini
date.timezone = Europe/Moscow
Настройка Apache
Редактируем:
nano /etc/httpd/conf/httpd.conf
После DocumentRoot "/var/www/html" добавляем:
Alias "/postfixadmin" "/var/www/html/postfixadmin/public"
Копируем конфиги:
cp ./config.inc.php ./config.local.php
Настройка PostfixAdmin
Редактируем:
nano /var/www/html/postfixadmin/config.local.php
$CONF['configured'] = true; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'maildbpass'; $CONF['database_name'] = 'mail'; $CONF['encrypt'] = 'dovecot:CRAM-MD5'; $CONF['dovecotpw'] = "/usr/bin/doveadm pw"; $CONF['emailcheck_resolve_domain']='NO'; $CONF['fetchmail'] = 'NO';
chown apache:apache /var/www/html/postfixadmin/config.local.php systemctl start httpd.service
В браузере: http://localhost/postfixadmin/setup.php
Вводим пароль, жмем ОК, нам предлагаютс исправить параметр setup_password и hash.
Копируем hash и в /var/www/html/postfixadmin/config.local.php в параметре setup_passwd вместо changeme вписываем наш hash.
Настройка Postfix
Генерация сертификатов
mkdir /etc/ssl/mail
Генерация закрытого ключа CSR
openssl req -nodes -newkey rsa:2048 -keyout /etc/ssl/mail/mx.rosa3.loc.key -out /etc/ssl/mail/mx.rosa3.loc.csr
На вопрос про FQDN отвечаем: mx.rosa3.loc
Если запрос на FQDN не получите, то закончите генерацию, сотрите:
rm /etc/ssl/mail/mx.rosa3.*И повторите отперацию генерации.
Генерация самозаверяющего сертификата
openssl x509 -req -days 365 -in /etc/ssl/mail/mx.rosa3.loc.csr -signkey /etc/ssl/mail/mx.rosa3.loc.key -out /etc/ssl/mail/mx.rosa3.loc.crt
Генерация dh для dovecot
openssl dhparam -out /etc/ssl/mail/dh.pem 4096
Займет долго время, примерно минут 10-15.
chmod -R 666 /etc/ssl/mail
cp /etc/postfix/main.cf /etc/postfix/main.cf.original
Редактируем:
nano /etc/postfix/main.cf
Правим:
inet_interfaces = all inet_protocols = ipv4 mydestination = unknown_local_recipient_reject_code = 550 mynetworks_style = subnet newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix html_directory = no
Закомментировать:
#local_recipient_maps = unix:passwd.byname $alias_maps #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) (OpenMandriva) #smtp-filter_destination_concurrency_limit = 2 #lmtp-filter_destination_concurrency_limit = 2 #smtpd_use_tls = yes #smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem #smtpd_tls_key_file = /etc/pki/tls/private/postfix.pem #smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt #meta_directory = /etc/postfix #shlib_directory = /usr/lib64/postfix
Добавляем в конец файла:
myhostname = mx.rosa3.loc mydomain = rosa3.loc mynetworks = 127.0.0.0/8 192.168.1.0/24 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases debug_peer_level = 2 debug_peer_list = 127.0.0.1 192.168.1.59 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sample_directory = /usr/share/doc/postfix-2.10.1/samples virtual_mailbox_domains = mysql:$config_directory/sql/vdomains.cf virtual_mailbox_base = /var/vmail virtual_mailbox_maps = mysql:$config_directory/sql/vmailbox.cf virtual_alias_maps = mysql:$config_directory/sql/valias.cf virtual_minimum_uid = 1150 virtual_uid_maps = static:1150 virtual_gid_maps = static:12 virtual_transport = dovecot disable_dns_lookups = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_recipient, reject_invalid_hostname, reject_unknown_recipient_domain, reject_unknown_client, reject_unlisted_recipient, reject_unverified_recipient, reject_unauth_pipelining, reject_rbl_client cbl.abuseat.org, reject_rbl_client dialups.mail-abuse.org, reject_rbl_client bl.spamcop.net, reject_rbl_client zen.spamhaus.org, reject_rbl_client sbl-xbl.spamhaus.org, permit smtpd_discard_ehlo_keywords = etrn, silent-discard smtpd_forbidden_commands = CONNECT GET POST broken_sasl_auth_clients = yes smtpd_delay_reject = yes smtpd_helo_required = yes smtp_always_send_ehlo = yes disable_vrfy_command = yes smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname smtpd_data_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining, reject_multi_recipient_bounce smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache smtpd_tls_key_file = /etc/ssl/mail/mx.rosa3.loc.key smtpd_tls_cert_file = /etc/ssl/mail/mx.rosa3.loc.crt tls_random_source = dev:/dev/urandom soft_bounce = no maximal_queue_lifetime = 1d bounce_queue_lifetime = 1d smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_type = dovecot smtpd_sasl_path = private/dovecot-auth
Далее создаем vmail юзера виртуального
useradd -r -u 1150 -g mail -d /var/vmail -s /sbin/nologin -c Virtual vmail mkdir -p -v /var/vmail chmod 770 -R /var/vmail chown vmail:mail /var/vmail mkdir /etc/postfix/sql
Редактируем:
nano /etc/postfix/sql/vdomains.cf
user = postfix password = maildbpass hosts = 127.0.0.1 dbname = mail table = domain select_field = domain where_field = domain additional_conditions = and backupmx = '0' and active = '1'
Редактируем:
nano /etc/postfix/sql/vmailbox.cf
user = postfix password = maildbpass hosts = 127.0.0.1 dbname = mail table = mailbox select_field = CONCAT(domain,'/',maildir) where_field = username additional_conditions = and active = '1'
Редактируем:
nano /etc/postfix/sql/valias.cf
user = postfix password = maildbpass hosts = 127.0.0.1 dbname = mail table = alias select_field = goto where_field = address additional_conditions = and active = '1'
Редактируем:
nano /etc/postfix/master.cf
Закомментировать после этих строк:
pickup unix n - y 60 1 pickup
Нижение комментируем:
# -o content_filter= # -o receive_override_options=
Закомментировать после этих строк:
relay unix - - y - - smtp
Нижение комментируем:
# -o syslog_name=postfix/$service_name
Закомментируем:
#postlog unix-dgram n - y - 1 postlogd #cyrus-deliver unix - n n - - pipe # user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user} #cyrus-inet unix - - y - - lmtp # -o lmtp_sasl_auth_enable=yes # -o lmtp_sasl_password_maps=hash:/etc/postfix/cyrus_lmtp_sasl_pass # -o lmtp_sasl_security_options=noanonymous #127.0.0.1:10026 inet n - y - - smtpd # -o content_filter= # -o smtpd_restriction_classes= # -o smtpd_client_restrictions=permit_mynetworks,reject # -o smtpd_helo_restrictions= # -o smtpd_sender_restrictions= # -o smtpd_end_of_data_restrictions= # -o smtpd_etrn_restrictions= # -o smtpd_data_restrictions= # -o smtpd_delay_reject=no # -o smtpd_recipient_restrictions=permit_mynetworks,reject # -o mynetworks=127.0.0.0/8 # -o smtpd_authorized_xforward_hosts=127.0.0.0/8 # -o strict_rfc821_envelopes=yes # -o smtpd_error_sleep_time=0 # -o smtpd_soft_error_limit=1001 # -o smtpd_hard_error_limit=1000 # -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks #lmtp-filter unix - - y - - lmtp # -o lmtp_data_done_timeout=1200 # -o lmtp_send_xforward_command=yes # -o max_use=20 #smtp-filter unix - - y - - smtp # -o smtp_data_done_timeout=1200 # -o smtp_send_xforward_command=yes # -o max_use=20
Проверяем, чтобы перед словом flags=DRhu было ДВА пробела:
dovecot unix - n n - - pipe flags=DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d $(recipient)
Добавляем в конец файла:
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_wrappermode=no -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -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 - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -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
Перед "-o....." ДВА пробела!!
Проверяем, должны получится вот такие конфигурационные файлы:
Настройка Dovecot
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
Редактируем:
nano /etc/dovecot/dovecot.conf
Правим и раскомментируем:
protocols = imap pop3 lmtp
Закомментируем:
#!include conf.d/*.conf #!include_try local.conf
Добавим в конец файла:
auth_mechanisms = plain login disable_plaintext_auth = yes ssl = yes passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } protocols = imap pop3 service auth { unix_listener /var/spool/postfix/private/dovecot-auth { user = postfix group = postfix mode = 0660 } unix_listener auth-master { user = vmail group = mail mode = 0660 } unix_listener auth-userdb { user = vmail group = mail mode = 0660 } #user=root } service imap-login { executable = /usr/libexec/dovecot/imap-login inet_listener imap { address = * port = 143 } } service imap { executable = /usr/libexec/dovecot/imap } service pop3-login { executable = /usr/libexec/dovecot/pop3-login inet_listener pop3 { address = * port = 110 } } service pop3 { executable = /usr/libexec/dovecot/pop3 } userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } protocol lda { auth_socket_path = /var/run/dovecot/auth-master postmaster_address = admin@rosa3.loc } #ssl_min_protocol = TLSv1.2 TLSv1.3 ssl = required verbose_ssl = yes ssl_cert = </etc/ssl/mail/mx.rosa3.loc.crt ssl_key = </etc/ssl/mail/mx.rosa3.loc.key ssl_dh = </etc/ssl/mail/dh.pem ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GC ssl_prefer_server_ciphers = yes
Редактируем:
nano /etc/dovecot/dovecot-sql.conf
driver = mysql connect = host=localhost dbname=mail user=postfix password=maildbpass default_pass_scheme = CRAM-MD5 user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n'as mail, 1150 AS uid, 12 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1' 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, 12 asuserdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
Далее:
usermod -a -G mail apache usermod -a -G mail dovecot chown -R mail:mail /etc/dovecot chmod +x -R /etc/dovecot
Далее стартуем/рестартуем наши сервисы:
systemctl restart mysqld.service systemctl start postfix.service systemctl start dovecot.service systemctl restart httpd.service
Проверяем конфиг файл, должен быть такого вида: Файл:Dovecot.txt Это dovecot.conf
Рестарт системы
reboot
Стартуем все сервисы, сначала Mysql потом все остальные
systemctl start mysqld.service systemctl start postfix.service systemctl start dovecot.service systemctl start httpd.service
В браузере http://localhost/postfixadmin/setup.php
Появится форма добавления Админа postfixadmin.
Добавляем туда:
Админ: admin@rosa3.loc
Ну и пароли свои... Запоминаем...
В браузере http://localhost/postfixadmin/
Логин: admin@rosa3.loc / пароль который запомнили
Добавляем домен: "Список доменов" -> "Новый домен"
Домен: rosa3.loc
Жмем "Добавить"
Добавляем ящики1: "Обзор" -> "Создать ящик"
Название: user1
Имя: USERONE
Квота: 100
Жмем "Создать ящик"
Добавляем ящики2: "Обзор" -> "Создать ящик"
Название: user2
Имя: USERTWO
Квота: 100
Жмем "Создать ящик"
Настройка клиентских станций
На компе Клиента1
В /etc/hosts добавляем:
192.168.1.76 mx.rosa3.loc mx
В почтовой программе добавляем УЗ:
Логин везде user1@rosa3.loc
IMAP:
Порт- 993 Защита соединения- SSL/TLS Метод аутентификации- Обычный пароль
SMTP:
Порт- 465 Сервер- mx.rosa3.loc Зазита соединения- SSL/TLS Метод аутентификации- Обычный пароль Имя пользователя- user1@rosa3.loc
На компе Клиента2 аналогичным образом настраиваем почтовик. Только вместо user1 пишем везде user2
Запусуаем почтовую программу.
И можно наживамть "Получить" почту.
Но первый раз не сработает. Надо перезапустить программу.
После перезапуска возможно такая же ошибка, просто жмем ОК и еще раз "Получить" почту.
У нас высветится запрос на получение серфтификатов, нажимаем в левом нижнем углу кнопку "Подтверждаем ...."
Далее высветится запрос на пароль user1
Видим письмо с "Добро пожаловать!", значит все настроили правильно с IMAP сервером.
Теперь создадим и отошлем письмо user2@rosa3.loc
Создадим письмо для user2@rosa3.loc
Наждмем "Отправить", у нас как обычно высветится принятие сертификата (теперь уже от SMTP) сервера.
Принимаем его, НО ничего не отошлется. Нажимаем на "Отмена", и снова создаем новое письмо и потом уже жмем "Отправить".
Будет теперь уже запрос на пароль. Вводим его. И письмо должно отправиться.
Далее настраиваем АНАЛОГИЧНО учентую запись (УЗ) для user2@rosa3.loc
После ее создания и настройки, ЗАКРЫВАЕМ почтовую программу, и снова открываем ее.
Тогда у нас начнет арботать user2@rosa3.loc
Проверяем получение письма тестового от user1@rosa3.loc
Если всё настроили правильно, увилим тестое письмо.