Настройка почтового сервера — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Настройка Dovecot)
(Настройка Apache)
Строка 73: Строка 73:
 
  Alias "/postfixadmin" "/var/www/html/postfixadmin/public"
 
  Alias "/postfixadmin" "/var/www/html/postfixadmin/public"
  
  cp postfixadmin/config.inc.php postfixadmin/config.local.php
+
  cp ./config.inc.php ./config.local.php
  
 
[[Файл:Mx5.png]]
 
[[Файл:Mx5.png]]

Версия 15:48, 4 июля 2022

Настройка 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

Mx1.png

Настройка 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

Mx2.png

Mx3.png

Инсталляция 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

Mx4.png

Настройка 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

Mx5.png

Настройка 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';

Mx5.png Mx6.png Mx7.png Mx8.png Mx9.png Mx10.png Mx11.png

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.

Mx12.png Mx13.png

Настройка 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

Mx14.png

Генерация 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

Далее создаем 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....." ДВА пробела!!

Проверяем, должны получится вот такие конфигурационные файлы:

Файл:Postfix-main.cf

Файл:Postfix-master.cf

Настройка 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

Mx16.png

Проверяем конфиг файл, должен быть такого вида: Файл: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

Ну и пароли свои... Запоминаем...

Mx17.png Mx18.png

В браузере http://localhost/postfixadmin/

Логин: admin@rosa3.loc / пароль который запомнили

Mx19.png

Добавляем домен: "Список доменов" -> "Новый домен"

Домен: rosa3.loc

Жмем "Добавить"

Mx21.png

Добавляем ящики1: "Обзор" -> "Создать ящик"

Название: user1

Имя: USERONE

Квота: 100

Жмем "Создать ящик"

Mx22.png

Добавляем ящики2: "Обзор" -> "Создать ящик"

Название: user2

Имя: USERTWO

Квота: 100

Жмем "Создать ящик"

Mx23.png

Настройка клиентских станций

На компе Клиента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

Запусуаем почтовую программу.

Mx24.png Mx25.png Mx26.png Mx27.png Mx28.png

И можно наживамть "Получить" почту.

Но первый раз не сработает. Надо перезапустить программу.

Mx29.png

После перезапуска возможно такая же ошибка, просто жмем ОК и еще раз "Получить" почту.

У нас высветится запрос на получение серфтификатов, нажимаем в левом нижнем углу кнопку "Подтверждаем ...."

Mx30.png

Далее высветится запрос на пароль user1

Mx31.png

Видим письмо с "Добро пожаловать!", значит все настроили правильно с IMAP сервером.

Mx32.png

Теперь создадим и отошлем письмо user2@rosa3.loc

Создадим письмо для user2@rosa3.loc

Наждмем "Отправить", у нас как обычно высветится принятие сертификата (теперь уже от SMTP) сервера.

Mx33.png

Принимаем его, НО ничего не отошлется. Нажимаем на "Отмена", и снова создаем новое письмо и потом уже жмем "Отправить".

Mx34.png

Будет теперь уже запрос на пароль. Вводим его. И письмо должно отправиться.

Mx35.png Mx36.png

Далее настраиваем АНАЛОГИЧНО учентую запись (УЗ) для user2@rosa3.loc

После ее создания и настройки, ЗАКРЫВАЕМ почтовую программу, и снова открываем ее.

Тогда у нас начнет арботать user2@rosa3.loc

Проверяем получение письма тестового от user1@rosa3.loc

Mx37.png

Если всё настроили правильно, увилим тестое письмо.