Настройка почтового сервера
Настройка 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
- Все сервисы у нас отключены и не запущены
Редактируем 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
Инсталляция 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
Настройка 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 postfixadmin/config.inc.php postfixadmin/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 postfixadmin/config.local.php systemctl start httpd.service
В браузере: http://localhost/postfixadmin/setup.php
Вводим пароль, жмем ОК, нам предлагаютс исправить параметр setup_passwd и 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.rosa2.loc mydomain = rosa2.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.rosa2.loc.key smtpd_tls_cert_file = /etc/ssl/mail/mx.rosa2.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 <pre> Далее создаем vmail юзера виртуального <pre> 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' <pre> Ркудактируем: nano /etc/postfix/sql/valias.cf <pre> 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.rosa2.loc.crt ssl_key = </etc/ssl/mail/mx.rosa2.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'
Редактируем:
nano /etc/my.cnf
Добавим в секцию:
[client-server] socket=/run/mysqld/mysql.sock
Редактируем:
nano /etc/my.cnf.d/server.cnf
Подправим:
bind-address=127.0.0.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
Рестарт системы
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@rosa2.loc
Ну и пароли свои... Запоминаем...
В браузере http://localhost/postfixadmin/
Логин: admin@rosa2.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