Инструкция по установке EAI почтового сервера под ОС CentOS 7: различия между версиями
Admin (обсуждение | вклад) Нет описания правки Метка: отменено |
Admin (обсуждение | вклад) Нет описания правки Метка: ручная отмена |
||
Строка 1: | Строка 1: | ||
'''Инструкция по установке EAI почтового сервера под ОС CentOS 7''' | |||
= Почтовый сервер с поддержкой EAI = | |||
С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО. | С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО. | ||
== Необходимое ПО == | |||
# Centos 7.4 | |||
# Postfix 3.2.3 | |||
# Dovecot 2.2.10 | |||
# MariaDB 10.3.11 | |||
# Squirrelmail 5.5.56 | |||
'''Примечания:''' | |||
* в данной инструкции не разъясняется, как установить Centos 7.4 | |||
* версия Postfix 3.x.x и выше поддерживает EAI | |||
* в реальных условиях необходимо также настроить сервер DNS | |||
* putty и winscp используются для подключения к серверу | |||
== Установка EAI почтового сервера == | |||
== Задайте имя хоста == | |||
# Обновите пакеты почтового сервера до последней версии | |||
> | <blockquote>'''# yum -y update''' | ||
</blockquote> | |||
# Задайте имя хоста (например, mail.test.ru) с помощью команды | |||
<blockquote>'''# hostnamectl set-hostname [https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1 ''''mail.test.ru'''']''' | |||
</blockquote> | |||
# Добавьте имя хоста в файл hosts | |||
> | <blockquote>'''# vi /etc/hosts''' | ||
</blockquote> | |||
''Пример файла hosts'' | |||
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 [https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1 '''''''mail.test.ru'''''''] | |||
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1 '''''''mail.test.ru'''''''] | |||
''*В зависимости от среды установки CentOS вам может понадобиться установить дополнительные сервисы (например, может быть недоступна команда «vi»)'' | |||
# Установите wget для скачивания дополнительного ПО | |||
<blockquote>'''# yum -y install wget''' | |||
</blockquote> | |||
# Установите ''telnet'' для тестирования работы почтового сервера | |||
/ | <blockquote>'''# yum -y install telnet''' | ||
</blockquote> | |||
== Настройте файрвол == | |||
# Проверьте, что у почтового сервиса имеется статус «firewalld service» | |||
> | <blockquote>Статус должен быть активным (работающим) | ||
</blockquote> | |||
'''# systemctl status firewalld''' | |||
''Пример'' | |||
'''Active: active (running) since Mon 2019-11-18 14:12:03 +07; 1h 13min ago''' | |||
# Проверьте открытые зону файрвола и сетевой интерфейс | |||
<blockquote>'''# firewall-cmd --get-active-zones''' | |||
</blockquote> | |||
''Пример'' | |||
'''public''' | |||
'''interfaces: ens32''' | |||
# Проверьте сервисы файрвола в публичной зоне | |||
<blockquote>'''# firewall-cmd --zone=public --list-services''' | |||
</blockquote> | |||
''Пример'' | |||
'''cockpit dhcpv6-client ssh ''' | |||
# Откройте необходимые сервисы на файрволе в публичной зоне почтового сервера | |||
<blockquote>'''# firewall-cmd --permanent --zone=public --add-service=http''' | |||
'''# firewall-cmd --permanent --zone=public --add-service=https''' | |||
'''# firewall-cmd --permanent --zone=public --add-service=mysql''' | |||
'''# firewall-cmd --permanent --zone=public --add-service=smtp''' | |||
'''# firewall-cmd --permanent --zone=public --add-service=smtps''' | |||
'''# firewall-cmd --permanent --zone=public --add-service=imap''' | |||
'''# firewall-cmd --permanent --zone=public --add-service=imaps''' | |||
'''# firewall-cmd --reload''' | |||
</blockquote> | |||
# Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы ''*Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера ([https://spalinux.com/2015/06/centos-7-basic-configure-firewall-by-firewall-cmd ''https://spalinux.com/2015/06/centos-7-basic-configure-firewallby-firewall-cmd'')]'' | |||
> | <blockquote>'''# firewall-cmd --zone=public --list-services''' | ||
</blockquote> | |||
''Пример'' | |||
> | |||
'''cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh''' | |||
# В этом примере мы открыли SELinux для удобства настройки | |||
// | <blockquote>'''# vi /etc/selinux/config''' | ||
</blockquote> | |||
''Пример'' | |||
'''This file controls the state of SELinux on the system.''' | |||
'''# SELINUX= can take one of these three values:''' | |||
'''# enforcing - SELinux security policy is enforced.''' | |||
'''# permissive - SELinux prints warnings instead of enforcing.''' | |||
'''# disabled - No SELinux policy is loaded.''' | |||
'''SELINUX=disabled''' | |||
'''# SELINUXTYPE= can take one of these two values:''' | |||
'''# targeted - Targeted processes are protected,''' | |||
'''# mls - Multi Level Security protection.''' | |||
'''SELINUXTYPE=targeted''' | |||
# Перезапустите сервер | |||
'''# reboot''' | |||
'''# sestatus''' | |||
''Пример'' | |||
'''disabled ''' | |||
== Создайте SSL-сертификат == | |||
Пошаговая инструкция для создания SSL-ключа, чтоб использовать с postfix и dovecot | Пошаговая инструкция для создания SSL-ключа, чтоб использовать с postfix и dovecot | ||
# Создайте индивидуальный ключ | |||
> | <blockquote>'''# cd /etc/pki/tls/certs''' | ||
// | '''# make''' [https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1 ''eai.key''] | ||
</blockquote> | |||
''Пример'' | |||
'''umask 77 ; \''' | |||
'''/usr/bin/openssl genrsa -aes128 2048 > eai.key''' | |||
'''Generating RSA private key, 2048 bit long modulus''' | |||
'''...''' | |||
'''...''' | |||
'''e is 65537 (0x10001)''' | |||
'''Enter pass phrase:''' [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#set_passphrase ''#set passphrase''] | |||
'''Verifying - Enter pass phrase:''' [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#confirm ''#confirm''] | |||
# Удалите ''Passphase'' из созданного ключа | |||
> | <blockquote>'''# openssl rsa -in''' [https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1 ''eai.key''] '''-out''' [https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1 ''eai.key''] | ||
</blockquote> | |||
''Пример'' | |||
// | '''Enter pass phrase for eai.key:''' [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#input_passphrase ''#input passphrase''] | ||
'''writing RSA key''' | |||
# Создайте csr | |||
# '''# make eai.csr''' | |||
''Пример'' | |||
'''umask 77 ; \''' | |||
'''/usr/bin/openssl req -utf8 -new -key eai.key -out eai.csr''' | |||
'''You are about to be asked to enter information that will be incorporated''' | |||
'''into your certificate request.''' | |||
'''What you are about to enter is what is called a Distinguished Name or a DN.''' | |||
'''There are quite a few fields but you can leave some blank''' | |||
'''For some fields there will be a default value,''' | |||
'''If you enter '.', the field will be left blank.''' | |||
'''-----''' | |||
'''Country Name (2 letter code) [XX]:'''RU [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#country ''#country''] | |||
'''State or Province Name (full name) []:'''[https://wiki.thnic.or.th/index.php?title=Bangkok&action=edit&redlink=1 ''Moscow''] [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#state ''#state''] | |||
'''Locality Name (eg, city) [Default City]:'''[https://wiki.thnic.or.th/index.php?title=Dusit&action=edit&redlink=1 ''Moscow''] [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#city ''#city''] | |||
'''Organization Name (eg, company) [Default Company Ltd]:'''[https://wiki.thnic.or.th/index.php?title=EAI&action=edit&redlink=1 ''EAI''] [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#company ''#company''] | |||
'''Organizational Unit Name (eg, section) []:'''[https://wiki.thnic.or.th/index.php?title=IT&action=edit&redlink=1 ''IT''] [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#department ''#department''] | |||
'''Common Name (eg, your name or your server's hostname) []:'''[https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1 ''mail.test.ru''] [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#server.27s_FQDN ''#server's FQDN''] | |||
'''Email Address []:'''[mailto:xxx@test.ru ''xxx@test.ru''] [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#email_address ''#email address''] | |||
'''Please enter the following 'extra' attributes''' | |||
'''to be sent with your certificate request''' | |||
'''A challenge password []:''' [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#Enter ''#Enter''] | |||
'''An optional company name []:''' [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#Enter ''#Enter''] | |||
4. Сгенерируйте ключ | 4. Сгенерируйте ключ | ||
'''# openssl x509 -in''' [https://wiki.thnic.or.th/index.php?title=Eai.csr&action=edit&redlink=1 ''eai.csr''] '''-out''' [https://wiki.thnic.or.th/index.php?title=Eai.crt&action=edit&redlink=1 ''eai.crt''] '''-req -signkey''' [https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1 ''eai.key''] '''-days 3650''' | |||
''Пример'' | |||
'''Signature ok''' | |||
'''subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@test.ru''' | |||
'''Getting Private key''' | |||
== Установка mariadb, Postfix и Dovecot == | |||
# Установите mariadb , Postfix , Dovecot и необходимые пакеты | |||
> | <blockquote>'''# yum --enablerepo=centosplus install postfix''' | ||
'''# yum install dovecot mariadb-server dovecot-mysql''' | |||
</blockquote> | |||
# Обновите postfix с версии 2.x.x до версии 3.x.x | |||
На CentOS 7 версия postfix 2.x.x стоит по умолчанию. Необходимо ее удалить и обновить до версии 3.х.х. или выше. | На CentOS 7 версия postfix 2.x.x стоит по умолчанию. Необходимо ее удалить и обновить до версии 3.х.х. или выше. | ||
'''# yum -y remove postfix''' | |||
'''# yum -y remove ssmtp''' | |||
'''# yum -y remove sendmail''' | |||
Создайте файл репозитория gf.repo для установки postfix версии 3.х.х или выше | Создайте файл репозитория gf.repo для установки postfix версии 3.х.х или выше | ||
'''# vi /etc/yum.repos.d/gf.repo''' | |||
''Пример'' | |||
'''[gf]''' | |||
'''name=Ghettoforge packages that won't overwrite core distro packages.''' | |||
'''mirrorlist=[http://mirrorlist.ghettoforge.org/el/7/gf/$basearch/mirrorlist ''http://mirrorlist.ghettoforge.org/el/7/gf/$basearch/mirrorlist'']''' | |||
'''enabled=1''' | |||
'''gpgcheck=1''' | |||
'''gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7''' | |||
'''failovermethod=priority''' | |||
'''[gf-plus]''' | |||
'''name=Ghettoforge packages that will overwrite core distro packages.''' | |||
'''mirrorlist=[http://mirrorlist.ghettoforge.org/el/7/plus/$basearch/mirrorlist ''http://mirrorlist.ghettoforge.org/el/7/plus/$basearch/mirrorlist'']''' | |||
'''# Please read [http://ghettoforge.org/index.php/Usage ''http://ghettoforge.org/index.php/Usage''] *before* enabling this repository!''' | |||
'''enabled=1''' | |||
'''gpgcheck=1''' | |||
'''gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7''' | |||
'''failovermethod=priority''' | |||
Загрузите ключ для использования с репозиторием, вставьте в строку: /etc/pki/rpm-gpg/ | Загрузите ключ для использования с репозиторием, вставьте в строку: /etc/pki/rpm-gpg/ | ||
'''# cd /etc/pki/rpm-gpg/''' | |||
'''# wget [http://mirror.ghettoforge.org/distributions/gf/RPM-GPG-KEY-gf.el7 ''http://mirror.ghettoforge.org/distributions/gf/RPM-GPG-KEY-gf.el7'']''' | |||
Установите postfix версию 3.х.х | Установите postfix версию 3.х.х | ||
'''# yum -y install postfix3 postfix-mysql''' | |||
Проверьте postfix версию 3.х.х | Проверьте postfix версию 3.х.х | ||
'''# postconf -d | grep mail_version''' | |||
'''mail_version = 3.5.7''' | |||
# Настройте mariadb, postfix, dovecot для автоматического запуска | |||
> | <blockquote>'''# systemctl start mariadb''' | ||
'''# systemctl enable mariadb''' | |||
'''# systemctl start postfix''' | |||
'''# systemctl enable postfix''' | |||
'''# systemctl start dovecot''' | |||
> | '''# systemctl enable dovecot''' | ||
</blockquote> | |||
# Проверьте статус mariadb, postfix, dovecot | |||
<blockquote>'''# systemctl status mariadb''' | |||
'''# systemctl status postfix''' | |||
'''# systemctl status dovecot''' | |||
</blockquote> | |||
== Настройка MariaDB == | |||
# Установите UTF8 в mysql для работы с Unicode, добавив следующую команду к | |||
<blockquote>/etc/my.cnf.d/maridb-server.cnf для [mysqld] | |||
</blockquote> | |||
'''# vi /etc/my.cnf''' | |||
''Пример'' | |||
'''[mysqld]''' | |||
'''character-set-server = utf8''' | |||
'''collation-server = utf8_general_ci''' | |||
'''skip-character-set-client-handshake''' | |||
'''bind-address=127.0.0.1''' | |||
'''datadir=/var/lib/mysql''' | |||
'''socket=/var/lib/mysql/mysql.sock''' | |||
'''# Disabling symbolic-links is recommended to prevent assorted security risks''' | |||
'''symbolic-links=0''' | |||
'''# Settings user and group are ignored when systemd is used.''' | |||
'''# If you need to run mysqld under a different user or group,''' | |||
'''# customize your systemd unit file for mariadb according to the''' | |||
'''# instructions in [http://fedoraproject.org/wiki/Systemd ''http://fedoraproject.org/wiki/Systemd'']''' | |||
'''[mysqld_safe]''' | |||
'''log-error=/var/log/mariadb/mariadb.log''' | |||
'''pid-file=/var/run/mariadb/mariadb.pid''' | |||
'''#''' | |||
'''# include all files from the config directory''' | |||
'''#''' | |||
'''!includedir /etc/my.cnf.d''' | |||
# Перезапустите MariaDB | |||
> | <blockquote>'''# systemctl restart mariadb''' | ||
</blockquote> | |||
# Настройте безопасный доступ к mysql, установив пароль для пользователя с правами root (* задайте только новый пароль, остальное пропустите, нажав клавишу ''enter'') | |||
<blockquote>'''# mysql_secure_installation''' | |||
</blockquote> | |||
# Зайдите в аккаунт mysql с новым паролем | |||
> | <blockquote>'''# mysql -u root -p''' | ||
> | </blockquote> | ||
# Создайте новую базу данных (eaimail) для хранения записей об использовании почтового сервера | |||
<blockquote>'''# CREATE DATABASE [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''''eaimail''''];''' | |||
'''# USE [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''''eaimail''''];''' | |||
</blockquote> | |||
# Создайте пользователя с правами доступа к базе eaimail | |||
> | |||
<blockquote>'''# GRANT SELECT, INSERT, UPDATE, DELETE ON''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail'']'''.* TO ''''''yourdbuser''''''@'localhost' IDENTIFIED BY ''''''yourdbpassword'''''';''' | |||
'''# GRANT SELECT, INSERT, UPDATE, DELETE ON''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail'']'''.* TO ''''''yourdbuser''''''@'localhost.localdomain' IDENTIFIED BY ''''''yourdbpassword'''''';''' | |||
'''# FLUSH PRIVILEGES;''' | |||
</blockquote> | |||
# Проверьте созданного пользователя | |||
> | <blockquote>'''# SHOW GRANTS FOR ''''''yourdbuser''''''@'localhost';''' | ||
</blockquote> | |||
# Создайте таблицы для ''domains'', ''forwardings'' (для пересылки почты с интернационализированных адресов на адреса в кодировке ASCII) и ''users'' для создания почтовых ящиков | |||
<blockquote>'''# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );''' | |||
</blockquote> | |||
'''# CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );''' | |||
'''# CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );''' | |||
'''# quit''' | |||
# Перезапустите MariaDB | |||
> | <blockquote>'''# systemctl restart mariadb''' | ||
</blockquote> | |||
# Настройте ''domain'' и ''users'' в базе данных интернационализированных адресов | |||
<blockquote>Зайдите в mariadb и выберите базу данных ''eaimail'', введите домен ASCII и IDN домен, введите ASCII почту и почту EAI с паролем | |||
</blockquote> | |||
'''# mysql -u root -p''' | |||
'''# USE''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail'']''';''' | |||
'''# INSERT INTO domains (domain) VALUES (''''test.ru'''');''' | |||
'''# INSERT INTO domains (domain) VALUES (''''тест.рф'''');''' | |||
'''# INSERT INTO users (email, password) VALUES (''''[mailto:test@test.ru ''test@test.ru'']'''', ENCRYPT(''''''userpassword''''''));''' | |||
'''# INSERT INTO users (email, password) VALUES (''''[[mailto:тест@тест.рф|''тест@тест.рф'']]'''', ENCRYPT(''''''userpassword''''''));''' | |||
Настройте правило пересылки для всех писем с интернационализированного адреса на адрес ASCII | Настройте правило пересылки для всех писем с интернационализированного адреса на адрес ASCII | ||
'''# INSERT INTO forwardings (source,destination) VALUES (''''[[mailto:тест@тест.рф|''тест@тест.рф'']]'''',''''test@test.ru'''');''' | |||
'''# quit''' | |||
'''Настройка Postfix''' | |||
== Создайте связь между Postfix и MariaDB == | |||
# Создайте файл-скрипт, чтобы получить значение ''domain'' из базы данных | |||
<blockquote>'''# vi /etc/postfix/mysql-virtual_domains.cf''' | |||
</blockquote> | |||
''Пример'' | |||
'''user =''' [https://wiki.thnic.or.th/index.php?title=Yourdbuser&action=edit&redlink=1 ''yourdbuser''] | |||
'''password =''' [https://wiki.thnic.or.th/index.php?title=Yourdbpassword&action=edit&redlink=1 ''yourdbpassword''] | |||
'''dbname =''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail''] | |||
'''query = SELECT domain AS virtual FROM domains WHERE domain='%s' ''' | |||
'''hosts = 127.0.0.1''' | |||
# Создайте файл mysql-virtual_forwardings.cf для получения пересланной почты из базы данных | |||
<blockquote>'''# vi /etc/postfix/mysql-virtual_forwardings.cf''' | |||
</blockquote> | |||
''Пример'' | |||
'''user =''' [https://wiki.thnic.or.th/index.php?title=Yourdbuser&action=edit&redlink=1 ''yourdbuser''] | |||
'''password =''' [https://wiki.thnic.or.th/index.php?title=Yourdbpassword&action=edit&redlink=1 ''yourdbpassword''] | |||
'''dbname =''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail''] | |||
'''query = SELECT destination FROM forwardings WHERE source='%s' ''' | |||
'''hosts = 127.0.0.1''' | |||
# Создайте файл-скрипт для создания почтового ящика и использования его для логина | |||
<blockquote>'''# vi /etc/postfix/mysql-virtual_mailboxes.cf''' | |||
</blockquote> | |||
''Пример'' | |||
'''user =''' [https://wiki.thnic.or.th/index.php?title=Yourdbuser&action=edit&redlink=1 ''yourdbuser''] | |||
'''password =''' [https://wiki.thnic.or.th/index.php?title=Yourdbpassword&action=edit&redlink=1 ''yourdbpassword''] | |||
'''dbname =''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail''] | |||
'''query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' ''' | |||
'''hosts = 127.0.0.1''' | |||
# Создайте файл-скрипт для пересылки всей почты на другой сервер SMTP | |||
<blockquote>'''# vi /etc/postfix/mysql-virtual_email2email.cf''' | |||
</blockquote> | |||
''Пример'' | |||
'''user = yourdbuser''' | |||
'''password = yourdbpassword''' | |||
'''dbname = eaimail''' | |||
'''query = SELECT email FROM users WHERE email='%s' ''' | |||
'''hosts = 127.0.0.1''' | |||
# Установите необходимые права созданным скриптам | |||
<blockquote>'''# chmod o= /etc/postfix/mysql-virtual_*.cf''' | |||
'''# chgrp postfix /etc/postfix/mysql-virtual_*.cf''' | |||
> | </blockquote> | ||
# Создайте пользователя и группу для почтового ящика | |||
<blockquote>'''# groupadd -g 5000 vmail ''' | |||
> | '''# useradd -g vmail -u 5000 vmail -d /home/vmail -m''' | ||
</blockquote> | |||
# Измените /etc/postfix/main.cf | |||
// | <blockquote>'''# vi /etc/postfix/main.cf''' | ||
</blockquote> | |||
''Пример'' | |||
'''inet_interfaces = all''' | |||
'''inet_protocols = ipv4''' | |||
'''mydestination = localhost, localhost.localdomain''' | |||
'''alias_database = hash:/etc/aliases''' | |||
'''sendmail_path = /usr/sbin/sendmail.postfix''' | |||
'''newaliases_path = /usr/bin/newaliases.postfix''' | |||
'''mailq_path = /usr/bin/mailq.postfix''' | |||
'''meta_directory = /etc/postfix''' | |||
'''shlib_directory = no''' | |||
'''myhostname =''' [https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1 ''mail.test.ru''] | |||
'''mydomain =''' [https://wiki.thnic.or.th/index.php?title=Eai.in.th&action=edit&redlink=1 ''test.ru''] | |||
'''myorigin = $mydomain''' | |||
'''readme_directory = no''' | |||
'''mynetworks = 127.0.0.1''' | |||
'''message_size_limit = 30720000''' | |||
'''smtpd_sasl_auth_enable = yes''' | |||
'''smtpd_sasl_type = dovecot''' | |||
'''smtpd_sasl_path = private/auth''' | |||
'''smtpd_sasl_authenticated_header = yes''' | |||
'''broken_sasl_auth_clients = yes''' | |||
'''smtpd_use_tls = yes''' | |||
'''smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination''' | |||
'''smtpd_tls_cert_file = /etc/pki/tls/certs/'''[https://wiki.thnic.or.th/index.php?title=Eai.crt&action=edit&redlink=1 ''eai.crt''] | |||
'''smtpd_tls_key_file = /etc/pki/tls/certs/'''''eai.key'' | |||
'''smtpd_tls_security_level = may''' | |||
'''smtpd_tls_auth_only = yes''' | |||
'''smtpd_tls_loglevel = 1''' | |||
'''alias_maps = hash:/etc/aliases ''' | |||
'''virtual_mailbox_base = /home/vmail''' | |||
'''virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf''' | |||
'''virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf''' | |||
'''virtual_uid_maps = static:5000''' | |||
'''virtual_gid_maps = static:5000''' | |||
'''virtual_alias_domains =''' [https://wiki.thnic.or.th/index.php?title=%E0%B8%AD%E0%B8%B5%E0%B9%80%E0%B8%AD%E0%B9%84%E0%B8%AD.%E0%B9%84%E0%B8%97%E0%B8%A2&action=edit&redlink=1 ''тест.рф''] | |||
'''virtual_transport = dovecot''' | |||
'''virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf''' | |||
'''smtputf8_enable = yes''' | |||
'''proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks''' | |||
# Измените /etc/postfix/master.cf , добавив команду в конце файла | |||
> | <blockquote>'''# vi /etc/postfix/master.cf''' | ||
</blockquote> | |||
''Пример'' | |||
'''dovecot unix - n n - - pipe''' | |||
'''flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}''' | |||
# Измените /etc/postfix/master.cf , чтобы разрешить выполнение команд ниже (у остальных в начале должен стоять #) | |||
''Пример'' | |||
'''smtps inet n - - - - smtpd''' | |||
-o syslog_name=postfix/smtps | -o syslog_name=postfix/smtps | ||
Строка 637: | Строка 637: | ||
-o milter_macro_daemon_name=ORIGINATING | -o milter_macro_daemon_name=ORIGINATING | ||
# Перезапустите postfix | |||
''Пример'' | |||
'''# systemctl restart postfix''' | |||
# Назначьте алиасы почтовым адресам, изменив файл aliases | |||
<blockquote>Добавьте 2 строки | |||
</blockquote> | |||
'''# vi /etc/aliases''' | |||
'''postmaster: root''' | |||
'''root: postmaster@test.ru''' | |||
# Обновите алиасы и перезапустите postfix | |||
<blockquote>'''# newaliases''' | |||
'''# systemctl restart postfix''' | |||
</blockquote> | |||
== Настройка Dovecot == | |||
# Сделайте резервную копию существующей конфигурации | |||
<blockquote>'''# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup''' | |||
</blockquote> | |||
# Настройте конфигурацию dovecot | |||
> | <blockquote>'''# vi /etc/dovecot/dovecot.conf''' | ||
</blockquote> | |||
''Пример'' | |||
'''protocols = imap pop3 lmtp''' | |||
'''log_timestamp = "%Y-%m-%d %H:%M:%S "''' | |||
'''mail_location = maildir:/home/vmail/%d/%n/Maildir''' | |||
'''ssl_cert = </etc/pki/tls/certs/'''[https://wiki.thnic.or.th/index.php?title=Eai.crt&action=edit&redlink=1 ''eai.crt''] | |||
'''ssl_key = </etc/pki/tls/certs/'''''eai.key'' | |||
'''ssl_dh_parameters_length = 2048 ''' | |||
'''ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL''' | |||
'''namespace {''' | |||
'''type = private''' | |||
'''separator = .''' | |||
'''prefix = INBOX.''' | |||
'''inbox = yes''' | |||
'''}''' | |||
'''service auth {''' | |||
'''unix_listener auth-master {''' | |||
'''mode = 0600''' | |||
'''user =''' [https://wiki.thnic.or.th/index.php?title=Vmail&action=edit&redlink=1 ''vmail''] | |||
'''}''' | |||
'''unix_listener /var/spool/postfix/private/auth {''' | |||
'''mode = 0666''' | |||
'''user =''' [https://wiki.thnic.or.th/index.php?title=Postfix&action=edit&redlink=1 ''postfix''] | |||
'''group =''' [https://wiki.thnic.or.th/index.php?title=Postfix&action=edit&redlink=1 ''postfix''] | |||
'''}''' | |||
'''user = root''' | |||
'''}''' | |||
'''auth_mechanisms = plain login''' | |||
'''service auth-worker {''' | |||
'''user = root''' | |||
'''}''' | |||
'''protocol lda {''' | |||
'''log_path = /home/vmail/dovecot-deliver.log''' | |||
'''auth_socket_path = /var/run/dovecot/auth-master''' | |||
'''postmaster_address = postmaster@test.ru''' | |||
'''}''' | |||
'''protocol pop3 {''' | |||
'''pop3_uidl_format = %08Xu%08Xv''' | |||
'''pop3_client_workarounds = outlook-no-nuls oe-ns-eoh''' | |||
'''}''' | |||
'''passdb {''' | |||
'''driver = sql''' | |||
'''args = /etc/dovecot/dovecot-sql.conf.ext''' | |||
'''}''' | |||
'''userdb {''' | |||
'''driver = static''' | |||
'''args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes''' | |||
'''}''' | |||
# Создайте скрипт, чтобы dovecot мог работать с SQL | |||
<blockquote>'''# vi /etc/dovecot/dovecot-sql.conf.ext''' | |||
</blockquote> | |||
''Пример '' | |||
'''driver = mysql''' | |||
'''connect = host=127.0.0.1 dbname='''''eaimail'' '''user='''''yourdbuser'' '''password='''''yourdbpassword'' | |||
'''default_pass_scheme = CRYPT''' | |||
'''password_query = SELECT email as user, password FROM users WHERE email='%u';''' | |||
# Установите необходимые права группе dovecot | |||
<blockquote>'''# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext''' | |||
'''# chmod o= /etc/dovecot/dovecot-sql.conf.ext''' | |||
</blockquote> | |||
# Перезапустите dovecot | |||
> | <blockquote>'''# systemctl restart dovecot''' | ||
> | </blockquote> | ||
# Проверьте журнал почтового сервера /var/log/maillog | |||
<blockquote>'''# tail /var/log/maillog''' | |||
</blockquote> | |||
''Пример'' | |||
'''Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system''' | |||
'''Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix''' | |||
'''Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)''' | |||
== Протестируйте почтовый сервер EAI == | |||
# Протестируйте pop3 | |||
<blockquote>'''# telnet localhost pop3''' | |||
</blockquote> | |||
''Пример'' | |||
'''Trying 127.0.0.1...''' | |||
'''Connected to localhost.localdomain.''' | |||
'''Escape character is '^]'.''' | |||
'''+OK Dovecot ready.''' | |||
# Протестируйте SMTP | |||
<blockquote>'''# telnet localhost 25''' | |||
'''# ehlo localhost''' | |||
</blockquote> | |||
''Пример'' | |||
'''250-mail.test.ru''' | |||
'''250-PIPELINING''' | |||
'''250-SIZE 30720000''' | |||
'''250-VRFY''' | |||
'''250-ETRN''' | |||
'''250-STARTTLS''' | |||
'''250-AUTH PLAIN''' | |||
'''250-AUTH=PLAIN''' | |||
'''250-ENHANCEDSTATUSCODES''' | |||
'''250-8BITMIME''' | |||
'''250-DSN''' | |||
'''250 SMTPUTF8''' | |||
# Протестируйте отправку и получение почты при помощи mailx | |||
Проверьте журнал /var/log/maillog Примерный результат: | Проверьте журнал /var/log/maillog Примерный результат: | ||
'''# yum -y install mailx''' | |||
'''# mailx thai@test.ru (input subject then press ''enter'' follow by content and use Ctrl+D for sending out)''' | |||
'''# tail /var/log/maillog''' | |||
''Пример'' | |||
'''Nov 13 15:19:07 mail postfix/pickup[31954]: E9AB020199E5: uid=0 from=<root>''' | |||
'''Nov 13 15:19:07 mail postfix/cleanup[1938]: E9AB020199E5: message-id=<20171113081907.E9AB020199E5@mail.test.ru>''' | |||
'''Nov 13 15:19:07 mail postfix/qmgr[21141]: E9AB020199E5: from=<root@test.ru>, size=434, nrcpt=1 (queue active)''' | |||
'''Nov 13 15:19:08 mail postfix/pipe[1946]: E9AB020199E5: to=<tanagan@test.ru>, relay=dovecot, delay=0.09, delays=0.04/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service)''' | |||
'''Nov 13 15:19:08 mail postfix/qmgr[21141]: E9AB020199E5: removed''' | |||
Если вы нашли ошибку в журнале: «unsupported dictionary type: MySQL», причина заключается в использовании postfix 3.2.4. В этой версии еще есть баги. Проверьте /etc/postfix/dynamicmaps.cf.d/ | Если вы нашли ошибку в журнале: «unsupported dictionary type: MySQL», причина заключается в использовании postfix 3.2.4. В этой версии еще есть баги. Проверьте /etc/postfix/dynamicmaps.cf.d/ | ||
'''# cd /etc/postfix/dynamicmaps.cf.d/''' | |||
'''# vi mysql.cf''' | |||
'''mysql /usr/lib/postfix/postfix-mysql.so dict_mysql_open''' | |||
# Проверьте журнал, чтобы увидеть результат отправки в Dovecot /home/vmail/dovecot-deliver.log, Примерный результат: | |||
'''# tail /home/vmail/dovecot-deliver.log''' | |||
'''2017-11-13 15:19:08 lda(tanagan@test.ru): Info: msgid=<20171113081907.E9AB020199E5@mail.test.ru>: saved mail to INBOX''' | |||
# Проверьте почтовый ящик. При отправке и получении писем вы увидите следующий результат: | |||
'''# cd /home/vmail/test.ru/thai/Maildir''' | |||
'''# find''' | |||
''Пример'' | |||
'''.''' | |||
'''./dovecot-uidlist''' | |||
'''./cur''' | |||
'''./new''' | |||
'''./new/1285609582.P6115Q0M368794.li172-137''' | |||
'''./dovecot.index''' | |||
'''./dovecot.index.log''' | |||
'''./tmp''' | |||
# Проверьте почтовый ящик с помощью почтового клиента mutt, чтобы увидеть письма в почтовом ящике | |||
> | <blockquote>'''# yum -y install mutt''' | ||
'''# mutt -f .''' | |||
</blockquote> | |||
# Проверьте отправку писем с интернационализированного адресов | |||
* В конце отправляемого сообщения поставьте «.» | |||
* Нажмите Ctrl+] , чтобы выйти | |||
'''# telnet localhost 25''' | |||
'''# EHLO localhost''' | |||
'''# MAIL FROM: тест@тест.рф SMTPUTF8 ''' | |||
'''# RCPT TO: тест1@тест1.рф''' | |||
'''# data''' | |||
'''# Subject: eai test''' | |||
'''# ''' | |||
'''# .''' | |||
== Установите SquirrelMail == | |||
# Установите squirrelmail | |||
> | <blockquote>'''# yum -y install epel-release''' | ||
'''# yum install squirrelmail''' | |||
</blockquote> | |||
# Если у вас не установлен Apache, установите Apache | |||
> | <blockquote>'''# yum -y install httpd''' | ||
'''# systemctl enable httpd''' | |||
'''# systemctl start httpd''' | |||
'''# systemctl status httpd''' | |||
</blockquote> | |||
# Скопируйте/перенесите squirrelmail в /var/www/html/ | |||
<blockquote>'''# cd /var/www/html/''' | |||
</blockquote> | |||
(скопируйте squirrelmail в /var/www/html/ например используя для копирования winscp) | (скопируйте squirrelmail в /var/www/html/ например используя для копирования winscp) | ||
# Создайте каталог данных для squirrelmail | |||
<blockquote>'''# cd /var/lib/squirrelmail/''' | |||
'''# mkdir data''' | |||
'''# chmod ugo+rwx data/''' | |||
</blockquote> | |||
# Протестируйте логин для доступа через веб-браузеры. Введите IP сервера, затем /squirrelmail | |||
> | <blockquote>'''# Test sending and receiving mail''' | ||
</blockquote> |
Версия от 14:49, 24 июня 2022
Инструкция по установке EAI почтового сервера под ОС CentOS 7
Почтовый сервер с поддержкой EAI
С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО.
Необходимое ПО
- Centos 7.4
- Postfix 3.2.3
- Dovecot 2.2.10
- MariaDB 10.3.11
- Squirrelmail 5.5.56
Примечания:
- в данной инструкции не разъясняется, как установить Centos 7.4
- версия Postfix 3.x.x и выше поддерживает EAI
- в реальных условиях необходимо также настроить сервер DNS
- putty и winscp используются для подключения к серверу
Установка EAI почтового сервера
Задайте имя хоста
- Обновите пакеты почтового сервера до последней версии
# yum -y update
- Задайте имя хоста (например, mail.test.ru) с помощью команды
# hostnamectl set-hostname 'mail.test.ru'
- Добавьте имя хоста в файл hosts
# vi /etc/hosts
Пример файла hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ''mail.test.ru''
- 1 localhost localhost.localdomain localhost6 localhost6.localdomain6 ''mail.test.ru''
*В зависимости от среды установки CentOS вам может понадобиться установить дополнительные сервисы (например, может быть недоступна команда «vi»)
- Установите wget для скачивания дополнительного ПО
# yum -y install wget
- Установите telnet для тестирования работы почтового сервера
# yum -y install telnet
Настройте файрвол
- Проверьте, что у почтового сервиса имеется статус «firewalld service»
Статус должен быть активным (работающим)
# systemctl status firewalld
Пример
Active: active (running) since Mon 2019-11-18 14:12:03 +07; 1h 13min ago
- Проверьте открытые зону файрвола и сетевой интерфейс
# firewall-cmd --get-active-zones
Пример
public
interfaces: ens32
- Проверьте сервисы файрвола в публичной зоне
# firewall-cmd --zone=public --list-services
Пример
cockpit dhcpv6-client ssh
- Откройте необходимые сервисы на файрволе в публичной зоне почтового сервера
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --permanent --zone=public --add-service=mysql
# firewall-cmd --permanent --zone=public --add-service=smtp
# firewall-cmd --permanent --zone=public --add-service=smtps
# firewall-cmd --permanent --zone=public --add-service=imap
# firewall-cmd --permanent --zone=public --add-service=imaps
# firewall-cmd --reload
- Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы *Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера (https://spalinux.com/2015/06/centos-7-basic-configure-firewallby-firewall-cmd)
# firewall-cmd --zone=public --list-services
Пример
cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh
- В этом примере мы открыли SELinux для удобства настройки
# vi /etc/selinux/config
Пример
This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
- Перезапустите сервер
# reboot
# sestatus
Пример
disabled
Создайте SSL-сертификат
Пошаговая инструкция для создания SSL-ключа, чтоб использовать с postfix и dovecot
- Создайте индивидуальный ключ
# cd /etc/pki/tls/certs
# make eai.key
Пример
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > eai.key
Generating RSA private key, 2048 bit long modulus
...
...
e is 65537 (0x10001)
Enter pass phrase: #set passphrase
Verifying - Enter pass phrase: #confirm
- Удалите Passphase из созданного ключа
Пример
Enter pass phrase for eai.key: #input passphrase
writing RSA key
- Создайте csr
- # make eai.csr
Пример
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key eai.key -out eai.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:RU #country
State or Province Name (full name) []:Moscow #state
Locality Name (eg, city) [Default City]:Moscow #city
Organization Name (eg, company) [Default Company Ltd]:EAI #company
Organizational Unit Name (eg, section) []:IT #department
Common Name (eg, your name or your server's hostname) []:mail.test.ru #server's FQDN
Email Address []:xxx@test.ru #email address
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: #Enter
An optional company name []: #Enter
4. Сгенерируйте ключ
# openssl x509 -in eai.csr -out eai.crt -req -signkey eai.key -days 3650
Пример
Signature ok
subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@test.ru
Getting Private key
Установка mariadb, Postfix и Dovecot
- Установите mariadb , Postfix , Dovecot и необходимые пакеты
# yum --enablerepo=centosplus install postfix
# yum install dovecot mariadb-server dovecot-mysql
- Обновите postfix с версии 2.x.x до версии 3.x.x
На CentOS 7 версия postfix 2.x.x стоит по умолчанию. Необходимо ее удалить и обновить до версии 3.х.х. или выше.
# yum -y remove postfix
# yum -y remove ssmtp
# yum -y remove sendmail
Создайте файл репозитория gf.repo для установки postfix версии 3.х.х или выше
# vi /etc/yum.repos.d/gf.repo
Пример
[gf]
name=Ghettoforge packages that won't overwrite core distro packages.
mirrorlist=http://mirrorlist.ghettoforge.org/el/7/gf/$basearch/mirrorlist
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7
failovermethod=priority
[gf-plus]
name=Ghettoforge packages that will overwrite core distro packages.
mirrorlist=http://mirrorlist.ghettoforge.org/el/7/plus/$basearch/mirrorlist
# Please read http://ghettoforge.org/index.php/Usage *before* enabling this repository!
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7
failovermethod=priority
Загрузите ключ для использования с репозиторием, вставьте в строку: /etc/pki/rpm-gpg/
# cd /etc/pki/rpm-gpg/
# wget http://mirror.ghettoforge.org/distributions/gf/RPM-GPG-KEY-gf.el7
Установите postfix версию 3.х.х
# yum -y install postfix3 postfix-mysql
Проверьте postfix версию 3.х.х
# postconf -d | grep mail_version
mail_version = 3.5.7
- Настройте mariadb, postfix, dovecot для автоматического запуска
# systemctl start mariadb
# systemctl enable mariadb
# systemctl start postfix
# systemctl enable postfix
# systemctl start dovecot
# systemctl enable dovecot
- Проверьте статус mariadb, postfix, dovecot
# systemctl status mariadb
# systemctl status postfix
# systemctl status dovecot
Настройка MariaDB
- Установите UTF8 в mysql для работы с Unicode, добавив следующую команду к
/etc/my.cnf.d/maridb-server.cnf для [mysqld]
# vi /etc/my.cnf
Пример
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
skip-character-set-client-handshake
bind-address=127.0.0.1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
- Перезапустите MariaDB
# systemctl restart mariadb
- Настройте безопасный доступ к mysql, установив пароль для пользователя с правами root (* задайте только новый пароль, остальное пропустите, нажав клавишу enter)
# mysql_secure_installation
- Зайдите в аккаунт mysql с новым паролем
# mysql -u root -p
- Создайте новую базу данных (eaimail) для хранения записей об использовании почтового сервера
- Создайте пользователя с правами доступа к базе eaimail
# GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'yourdbuser'@'localhost' IDENTIFIED BY 'yourdbpassword';
# GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'yourdbuser'@'localhost.localdomain' IDENTIFIED BY 'yourdbpassword';
# FLUSH PRIVILEGES;
- Проверьте созданного пользователя
# SHOW GRANTS FOR 'yourdbuser'@'localhost';
- Создайте таблицы для domains, forwardings (для пересылки почты с интернационализированных адресов на адреса в кодировке ASCII) и users для создания почтовых ящиков
# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
# CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
# CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
# quit
- Перезапустите MariaDB
# systemctl restart mariadb
- Настройте domain и users в базе данных интернационализированных адресов
Зайдите в mariadb и выберите базу данных eaimail, введите домен ASCII и IDN домен, введите ASCII почту и почту EAI с паролем
# mysql -u root -p
# USE eaimail;
# INSERT INTO domains (domain) VALUES ('test.ru');
# INSERT INTO domains (domain) VALUES ('тест.рф');
# INSERT INTO users (email, password) VALUES ('test@test.ru', ENCRYPT('userpassword'));
# INSERT INTO users (email, password) VALUES ('[тест@тест.рф]', ENCRYPT('userpassword'));
Настройте правило пересылки для всех писем с интернационализированного адреса на адрес ASCII
# INSERT INTO forwardings (source,destination) VALUES ('[тест@тест.рф]','test@test.ru');
# quit
Настройка Postfix
Создайте связь между Postfix и MariaDB
- Создайте файл-скрипт, чтобы получить значение domain из базы данных
# vi /etc/postfix/mysql-virtual_domains.cf
Пример
user = yourdbuser
password = yourdbpassword
dbname = eaimail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
- Создайте файл mysql-virtual_forwardings.cf для получения пересланной почты из базы данных
# vi /etc/postfix/mysql-virtual_forwardings.cf
Пример
user = yourdbuser
password = yourdbpassword
dbname = eaimail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
- Создайте файл-скрипт для создания почтового ящика и использования его для логина
# vi /etc/postfix/mysql-virtual_mailboxes.cf
Пример
user = yourdbuser
password = yourdbpassword
dbname = eaimail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1
- Создайте файл-скрипт для пересылки всей почты на другой сервер SMTP
# vi /etc/postfix/mysql-virtual_email2email.cf
Пример
user = yourdbuser
password = yourdbpassword
dbname = eaimail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1
- Установите необходимые права созданным скриптам
# chmod o= /etc/postfix/mysql-virtual_*.cf
# chgrp postfix /etc/postfix/mysql-virtual_*.cf
- Создайте пользователя и группу для почтового ящика
# groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /home/vmail -m
- Измените /etc/postfix/main.cf
# vi /etc/postfix/main.cf
Пример
inet_interfaces = all
inet_protocols = ipv4
mydestination = localhost, localhost.localdomain
alias_database = hash:/etc/aliases
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
meta_directory = /etc/postfix
shlib_directory = no
myhostname = mail.test.ru
mydomain = test.ru
myorigin = $mydomain
readme_directory = no
mynetworks = 127.0.0.1
message_size_limit = 30720000
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_use_tls = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_tls_cert_file = /etc/pki/tls/certs/eai.crt
smtpd_tls_key_file = /etc/pki/tls/certs/eai.key
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
alias_maps = hash:/etc/aliases
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_domains = тест.рф
virtual_transport = dovecot
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
smtputf8_enable = yes
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
- Измените /etc/postfix/master.cf , добавив команду в конце файла
# vi /etc/postfix/master.cf
Пример
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
- Измените /etc/postfix/master.cf , чтобы разрешить выполнение команд ниже (у остальных в начале должен стоять #)
Пример
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
- Перезапустите postfix
Пример
# systemctl restart postfix
- Назначьте алиасы почтовым адресам, изменив файл aliases
Добавьте 2 строки
# vi /etc/aliases
postmaster: root
root: postmaster@test.ru
- Обновите алиасы и перезапустите postfix
# newaliases
# systemctl restart postfix
Настройка Dovecot
- Сделайте резервную копию существующей конфигурации
# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup
- Настройте конфигурацию dovecot
# vi /etc/dovecot/dovecot.conf
Пример
protocols = imap pop3 lmtp
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir
ssl_cert = </etc/pki/tls/certs/eai.crt
ssl_key = </etc/pki/tls/certs/eai.key
ssl_dh_parameters_length = 2048
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL
namespace {
type = private
separator = .
prefix = INBOX.
inbox = yes
}
service auth {
unix_listener auth-master {
mode = 0600
user = vmail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
user = root
}
auth_mechanisms = plain login
service auth-worker {
user = root
}
protocol lda {
log_path = /home/vmail/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = postmaster@test.ru
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}
- Создайте скрипт, чтобы dovecot мог работать с SQL
# vi /etc/dovecot/dovecot-sql.conf.ext
Пример
driver = mysql
connect = host=127.0.0.1 dbname=eaimail user=yourdbuser password=yourdbpassword
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';
- Установите необходимые права группе dovecot
# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
# chmod o= /etc/dovecot/dovecot-sql.conf.ext
- Перезапустите dovecot
# systemctl restart dovecot
- Проверьте журнал почтового сервера /var/log/maillog
# tail /var/log/maillog
Пример
Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system
Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix
Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)
Протестируйте почтовый сервер EAI
- Протестируйте pop3
# telnet localhost pop3
Пример
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Dovecot ready.
- Протестируйте SMTP
# telnet localhost 25
# ehlo localhost
Пример
250-mail.test.ru
250-PIPELINING
250-SIZE 30720000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
- Протестируйте отправку и получение почты при помощи mailx
Проверьте журнал /var/log/maillog Примерный результат:
# yum -y install mailx
# mailx thai@test.ru (input subject then press enter follow by content and use Ctrl+D for sending out)
# tail /var/log/maillog
Пример
Nov 13 15:19:07 mail postfix/pickup[31954]: E9AB020199E5: uid=0 from=<root>
Nov 13 15:19:07 mail postfix/cleanup[1938]: E9AB020199E5: message-id=<20171113081907.E9AB020199E5@mail.test.ru>
Nov 13 15:19:07 mail postfix/qmgr[21141]: E9AB020199E5: from=<root@test.ru>, size=434, nrcpt=1 (queue active)
Nov 13 15:19:08 mail postfix/pipe[1946]: E9AB020199E5: to=<tanagan@test.ru>, relay=dovecot, delay=0.09, delays=0.04/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service)
Nov 13 15:19:08 mail postfix/qmgr[21141]: E9AB020199E5: removed
Если вы нашли ошибку в журнале: «unsupported dictionary type: MySQL», причина заключается в использовании postfix 3.2.4. В этой версии еще есть баги. Проверьте /etc/postfix/dynamicmaps.cf.d/
# cd /etc/postfix/dynamicmaps.cf.d/
# vi mysql.cf
mysql /usr/lib/postfix/postfix-mysql.so dict_mysql_open
- Проверьте журнал, чтобы увидеть результат отправки в Dovecot /home/vmail/dovecot-deliver.log, Примерный результат:
# tail /home/vmail/dovecot-deliver.log
2017-11-13 15:19:08 lda(tanagan@test.ru): Info: msgid=<20171113081907.E9AB020199E5@mail.test.ru>: saved mail to INBOX
- Проверьте почтовый ящик. При отправке и получении писем вы увидите следующий результат:
# cd /home/vmail/test.ru/thai/Maildir
# find
Пример
.
./dovecot-uidlist
./cur
./new
./new/1285609582.P6115Q0M368794.li172-137
./dovecot.index
./dovecot.index.log
./tmp
- Проверьте почтовый ящик с помощью почтового клиента mutt, чтобы увидеть письма в почтовом ящике
# yum -y install mutt
# mutt -f .
- Проверьте отправку писем с интернационализированного адресов
- В конце отправляемого сообщения поставьте «.»
- Нажмите Ctrl+] , чтобы выйти
# telnet localhost 25
# EHLO localhost
# MAIL FROM: тест@тест.рф SMTPUTF8
# RCPT TO: тест1@тест1.рф
# data
# Subject: eai test
#
# .
Установите SquirrelMail
- Установите squirrelmail
# yum -y install epel-release
# yum install squirrelmail
- Если у вас не установлен Apache, установите Apache
# yum -y install httpd
# systemctl enable httpd
# systemctl start httpd
# systemctl status httpd
- Скопируйте/перенесите squirrelmail в /var/www/html/
# cd /var/www/html/
(скопируйте squirrelmail в /var/www/html/ например используя для копирования winscp)
- Создайте каталог данных для squirrelmail
# cd /var/lib/squirrelmail/
# mkdir data
# chmod ugo+rwx data/
- Протестируйте логин для доступа через веб-браузеры. Введите IP сервера, затем /squirrelmail
# Test sending and receiving mail