Настройка почтового сервера

Материал из Rosalab Wiki
Версия от 15:08, 4 июля 2022; PastorDi (обсуждение | вклад) (Настройка Postfix)

Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

Настройка 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 postfixadmin/config.inc.php postfixadmin/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....." ДВА пробела!!

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