Инструкция по установке EAI почтового сервера под ОС CentOS 7: различия между версиями

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску
Нет описания правки
Метка: отменено
 
(не показаны 32 промежуточные версии этого же участника)
Строка 1: Строка 1:
**Инструкция по установке EAI почтового сервера под ОС CentOS 7**
</pre>Инструкция по установке EAI почтового сервера под ОС CentOS 7</pre>


====== Почтовый сервер с поддержкой EAI ======
= Почтовый сервер с поддержкой EAI =


С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО.
С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО.


===== Необходимое ПО =====
== Необходимое ПО ==


  - Centos 7.4
# Centos 7.4
  - Postfix 3.2.3
# Postfix 3.2.3
  - Dovecot 2.2.10
# Dovecot 2.2.10
  - MariaDB 10.3.11
# MariaDB 10.3.11
  - Squirrelmail 5.5.56
# Squirrelmail 5.5.56


**Примечания:**
Примечания:


  * в данной инструкции не разъясняется, как установить Centos 7.4
* в данной инструкции не разъясняется, как установить Centos 7.4
  * версия Postfix 3.x.x и выше поддерживает EAI
* версия Postfix 3.x.x и выше поддерживает EAI
  * в реальных условиях необходимо также настроить сервер DNS
* в реальных условиях необходимо также настроить сервер DNS
  * putty и winscp используются для подключения к серверу
* putty и winscp используются для подключения к серверу


===== Установка EAI почтового сервера =====
== Установка EAI почтового сервера ==


===== Задайте имя хоста =====
Задайте имя хоста


  - Обновите пакеты почтового сервера до последней версии
1. Обновите пакеты почтового сервера до последней версии


> **# yum -y update**
<pre># yum -y update</pre>


  - Задайте имя хоста (например, mail.test.ru) с помощью команды
2. Задайте имя хоста (например, mail.test.ru) с помощью команды
<pre>
# hostnamectl set-hostname mail.test.ru
</pre>


> **# hostnamectl set-hostname [[https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1|////mail.test.ru////]]**
3. Добавьте имя хоста в файл hosts
<pre># vi /etc/hosts</pre>


   - Добавьте имя хоста в файл hosts
''Пример файла hosts''
<pre>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 mail.test.ru
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6 mail.test.ru
</pre>
''*В зависимости от среды установки CentOS вам может понадобиться установить дополнительные сервисы (например, может быть недоступна команда «vi»)''


> **# vi /etc/hosts**
4. Установите wget для скачивания дополнительного ПО
<pre># yum -y install wget</pre>


//Пример файла hosts//
5. Установите ''telnet'' для тестирования работы почтового сервера
<pre># yum -y install telnet</pre>


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//**//]]
1. Проверьте, что у почтового сервиса имеется статус «firewalld service»


//*В зависимости от среды установки CentOS вам может понадобиться установить дополнительные сервисы (например, может быть недоступна команда «vi»)//
Статус должен быть активным (работающим)


  - Установите wget для скачивания дополнительного ПО
<pre># systemctl status firewalld</pre>


> **# yum -y install wget**
''Пример''


  - Установите //telnet// для тестирования работы почтового сервера
<pre>Active: active (running) since Mon 2019-11-18 14:12:03 +07; 1h 13min ago</pre>


> **# yum -y install telnet**
2. Проверьте открытые зону файрвола и сетевой интерфейс


===== Настройте файрвол =====
<pre># firewall-cmd --get-active-zones</pre>


  - Проверьте, что у почтового сервиса имеется статус «firewalld service»
''Пример''


> Статус должен быть активным (работающим)
<pre>public


**# systemctl status firewalld**
interfaces: ens32</pre>


//Пример//
3. Проверьте сервисы файрвола в публичной зоне


**Active: active (running) since Mon 2019-11-18 14:12:03 +07; 1h 13min ago**
<pre># firewall-cmd --zone=public --list-services</pre>


  - Проверьте открытые зону файрвола и сетевой интерфейс
''Пример''


> **# firewall-cmd --get-active-zones**
<pre>cockpit dhcpv6-client ssh </pre>


//Пример//
4. Откройте необходимые сервисы на файрволе в публичной зоне почтового сервера


**public**
<pre>
# firewall-cmd --permanent --zone=public --add-service=http


**interfaces: ens32**
# firewall-cmd --permanent --zone=public --add-service=https


  - Проверьте сервисы файрвола в публичной зоне
# firewall-cmd --permanent --zone=public --add-service=mysql


> **# firewall-cmd --zone=public --list-services**
# firewall-cmd --permanent --zone=public --add-service=smtp


//Пример//
# firewall-cmd --permanent --zone=public --add-service=smtps


**cockpit dhcpv6-client ssh**
# firewall-cmd --permanent --zone=public --add-service=imap


  - Откройте необходимые сервисы на файрволе в публичной зоне почтового сервера
# firewall-cmd --permanent --zone=public --add-service=imaps


> **# firewall-cmd --permanent --zone=public --add-service=http**
# firewall-cmd --reload</pre>
>
> **# 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-firewall-by-firewall-cmd|//https:%%//%%spalinux.com/2015/06/centos-7-basic-configure-firewallby-firewall-cmd//)]]//
5. Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы ''*Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера:


> **# firewall-cmd --zone=public --list-services**
<pre># firewall-cmd --zone=public --list-services</pre>


//Пример//
''Пример''


**cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh**
<pre>cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh</pre>


  - В этом примере мы открыли SELinux для удобства настройки
6. В этом примере мы открыли SELinux для удобства настройки


> **# vi /etc/selinux/config**
<pre># vi /etc/selinux/config</pre>


//Пример//
''Пример''


**This file controls the state of SELinux on the system.**
<pre>This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:


**# SELINUX= can take one of these three values:**
# enforcing - SELinux security policy is enforced.


**# enforcing - SELinux security policy is enforced.**
# permissive - SELinux prints warnings instead of enforcing.


**# permissive - SELinux prints warnings instead of enforcing.**
# disabled - No SELinux policy is loaded.


**# disabled - No SELinux policy is loaded.**
SELINUX=disabled


**SELINUX=disabled**
# SELINUXTYPE= can take one of these two values:


**# SELINUXTYPE= can take one of these two values:**
# targeted - Targeted processes are protected,


**# targeted - Targeted processes are protected,**
# mls - Multi Level Security protection.


**# mls - Multi Level Security protection.**
SELINUXTYPE=targeted</pre>


**SELINUXTYPE=targeted**
7. Перезапустите сервер


  - Перезапустите сервер
<pre>
# reboot
# sestatus</pre>


**# reboot**
''Пример''


**# sestatus**
<pre>disabled </pre>


//Пример//
== Создайте SSL-сертификат ==
 
**disabled**
 
===== Создайте SSL-сертификат =====


Пошаговая инструкция для создания SSL-ключа, чтоб использовать с postfix и dovecot
Пошаговая инструкция для создания SSL-ключа, чтоб использовать с postfix и dovecot


  - Создайте индивидуальный ключ
1. Создайте индивидуальный ключ
 
> **# cd /etc/pki/tls/certs**
>
> **# make** [[https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1|//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:** [[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// из созданного ключа
 
> **# 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//]]
 
//Пример//
 
**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**
<pre>
# cd /etc/pki/tls/certs
# make eai.key
</pre>


**For some fields there will be a default value,**
''Пример''


**If you enter '.', the field will be left blank.**
<pre>
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
</pre>


**-----**
2. Удалите ''Passphase'' из созданного ключа


**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//]]
<pre>
# openssl rsa -in eai.key -out eai.key


**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//]]
<pre>
Enter pass phrase for eai.key: #input passphrase
writing RSA key
</pre>


**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//]]
3. Создайте csr
<pre> # make eai.csr</pre>


**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//]]
<pre>
 
umask 77 ; \
**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//]]
/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
**Please enter the following 'extra' attributes**
into your certificate request.
 
What you are about to enter is what is called a Distinguished Name or a DN.
**to be sent with your certificate request**
There are quite a few fields but you can leave some blank
 
For some fields there will be a default value,
**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//]]
If you enter '.', the field will be left blank.
 
-----
**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//]]
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  
</pre>


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**
<pre>
 
# openssl x509 -in eai.csr -out eai.crt -req -signkey eai.key -days 3650
//Пример//
</pre>
 
**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**
<pre>
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
</pre>


===== Установка mariadb, Postfix и Dovecot =====
== Установка mariadb, Postfix и Dovecot ==


  - Установите mariadb , Postfix , Dovecot и необходимые пакеты
1. Установите mariadb , Postfix , Dovecot и необходимые пакеты


> **# yum --enablerepo=centosplus install postfix**
<pre>
>
# yum --enablerepo=centosplus install postfix
> **# yum install dovecot mariadb-server dovecot-mysql**
# yum install dovecot mariadb-server dovecot-mysql
</pre>


  - Обновите postfix с версии 2.x.x до версии 3.x.x
2. Обновите 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**
<pre>
 
# yum -y remove postfix
**# yum -y remove ssmtp**
# yum -y remove ssmtp
 
# yum -y remove sendmail
**# yum -y remove sendmail**
</pre>


Создайте файл репозитория gf.repo для установки postfix версии 3.х.х или выше
Создайте файл репозитория gf.repo для установки postfix версии 3.х.х или выше


**# vi /etc/yum.repos.d/gf.repo**
<pre># vi /etc/yum.repos.d/gf.repo</pre>
 
//Пример//
 
**[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**
<pre>
 
[gf]
**failovermethod=priority**
name=Ghettoforge packages that won't overwrite core distro packages.
 
mirrorlist=http://mirrorlist.ghettoforge.org/el/7/gf/$basearch/mirrorlist
**[gf-plus]**
enabled=1
 
gpgcheck=1
**name=Ghettoforge packages that will overwrite core distro packages.**
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7
 
failovermethod=priority
**mirrorlist=[[http://mirrorlist.ghettoforge.org/el/7/plus/$basearch/mirrorlist|//http:%%//%%mirrorlist.ghettoforge.org/el/7/plus/$basearch/mirrorlist//]]**
 
[gf-plus]
**# Please read [[http://ghettoforge.org/index.php/Usage|//http:%%//%%ghettoforge.org/index.php/Usage//]] *before* enabling this repository!**
name=Ghettoforge packages that will overwrite core distro packages.
 
mirrorlist=http://mirrorlist.ghettoforge.org/el/7/plus/$basearch/mirrorlist
**enabled=1**
# Please read http://ghettoforge.org/index.php/Usage *before* enabling this repository!
 
enabled=1
**gpgcheck=1**
gpgcheck=1
 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7
**gpgkey=file:%%//%%/etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7**
failovermethod=priority
 
</pre>
**failovermethod=priority**


Загрузите ключ для использования с репозиторием, вставьте в строку: /etc/pki/rpm-gpg/
Загрузите ключ для использования с репозиторием, вставьте в строку: /etc/pki/rpm-gpg/


**# cd /etc/pki/rpm-gpg/**
<pre>
 
# 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//]]**
# wget http://mirror.ghettoforge.org/distributions/gf/RPM-GPG-KEY-gf.el7
</pre>


Установите postfix версию 3.х.х
Установите postfix версию 3.х.х


**# yum -y install postfix3 postfix-mysql**
<pre># yum -y install postfix3 postfix-mysql</pre>


Проверьте postfix версию 3.х.х
Проверьте postfix версию 3.х.х


**# postconf -d | grep mail_version**
<pre>
 
# 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|//http:%%//%%fedoraproject.org/wiki/Systemd//]]**
 
**[mysqld_safe]**


**log-error=/var/log/mariadb/mariadb.log**
mail_version = 3.5.7
</pre>


**pid-file=/var/run/mariadb/mariadb.pid**


**#**
3. Настройте mariadb, postfix, dovecot для автоматического запуска


**# include all files from the config directory**
<pre>
# systemctl start mariadb
# systemctl enable mariadb
# systemctl start postfix
# systemctl enable postfix
# systemctl start dovecot
# systemctl enable dovecot
</pre>


**#**
4. Проверьте статус mariadb, postfix, dovecot


**!includedir /etc/my.cnf.d**
<pre>
# systemctl status mariadb
# systemctl status postfix
# systemctl status dovecot
</pre>


  - Перезапустите MariaDB
== Настройка MariaDB ==


> **# systemctl restart mariadb**
1. Установите UTF8 в mysql для работы с Unicode, добавив следующую команду к /etc/my.cnf.d/maridb-server.cnf для [mysqld]


  - Настройте безопасный доступ к mysql, установив пароль для пользователя с правами root (* задайте только новый пароль, остальное пропустите, нажав клавишу //enter//)
<pre># vi /etc/my.cnf</pre>


> **# mysql_secure_installation**
''Пример''


  - Зайдите в аккаунт mysql с новым паролем
<pre>
[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


> **# mysql -u root -p**
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid


  - Создайте новую базу данных (eaimail) для хранения записей об использовании почтового сервера
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
</pre>


> **# CREATE DATABASE [[https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1|////eaimail////]];**
2. Перезапустите MariaDB
>
> **# USE [[https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1|////eaimail////]];**


  - Создайте пользователя с правами доступа к базе eaimail
<pre># systemctl restart mariadb</pre>


> **# 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//'**;**
3. Настройте безопасный доступ к mysql, установив пароль для пользователя с правами root (* задайте только новый пароль, остальное пропустите, нажав клавишу ''enter'')
>
> **# 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;**


  - Проверьте созданного пользователя
<pre># mysql_secure_installation</pre>


> **# SHOW GRANTS FOR '**//yourdbuser//'**@'localhost';**
4. Зайдите в аккаунт mysql с новым паролем


  - Создайте таблицы для //domains//, //forwardings// (для пересылки почты с интернационализированных адресов на адреса в кодировке ASCII) и //users// для создания почтовых ящиков
<pre># mysql -u root -p</pre>


> **# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );**
5. Создайте новую базу данных (eaimail) для хранения записей об использовании почтового сервера


**# CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );**
<pre>
# CREATE DATABASE eaimail;
# USE eaimail;
</pre>


**# CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );**
6. Создайте пользователя с правами доступа к базе eaimail


**# quit**
<pre>
# 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;
</pre>


  - Перезапустите MariaDB
7. Проверьте созданного пользователя


> **# systemctl restart mariadb**
<pre># SHOW GRANTS FOR yourdbuser@'localhost';</pre>


  - Настройте //domain// и //users// в базе данных интернационализированных адресов
8. Создайте таблицы для ''domains'', ''forwardings'' (для пересылки почты с интернационализированных адресов на адреса в кодировке ASCII) и ''users'' для создания почтовых ящиков


> Зайдите в mariadb и выберите базу данных //eaimail//, введите домен ASCII и IDN домен, введите ASCII почту и почту EAI с паролем
<pre>
# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
</pre>
<pre>
# CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
</pre>
<pre>
# CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
# quit
</pre>


**# mysql -u root -p**
9. Перезапустите MariaDB


**# USE** [[https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1|//eaimail//]]**;**
<pre>
# systemctl restart mariadb
</pre>


**# INSERT INTO domains (domain) VALUES ('**test.ru'**);**
10 Настройте ''domain'' и ''users'' в базе данных интернационализированных адресов


**# INSERT INTO domains (domain) VALUES ('**тест.рф'**);**
Зайдите в mariadb и выберите базу данных ''eaimail'', введите домен ASCII и IDN домен, введите ASCII почту и почту EAI с паролем


**# INSERT INTO users (email, password) VALUES ('**[[mailto:test@test.ru|//test@test.ru//]]'**, ENCRYPT('**//userpassword//'**));**
<pre># mysql -u root -p</pre>


**# INSERT INTO users (email, password) VALUES ('**[[mailto:тест@тест.рф|//тест@тест.рф//]]'**, ENCRYPT('**//userpassword//'**));**
<pre>
# 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'));
</pre>


Настройте правило пересылки для всех писем с интернационализированного адреса на адрес ASCII
Настройте правило пересылки для всех писем с интернационализированного адреса на адрес ASCII


**# INSERT INTO forwardings (source,destination) VALUES ('**[[mailto:тест@тест.рф|//тест@тест.рф//]]'**,'**test@test.ru'**);**
<pre>
 
# INSERT INTO forwardings (source,destination) VALUES ('тест@тест.рф','test@test.ru');
**# quit**
# quit
 
</pre>
**Настройка Postfix**
 
===== Создайте связь между Postfix и MariaDB =====
 
  - Создайте файл-скрипт, чтобы получить значение //domain// из базы данных
 
> **# vi /etc/postfix/mysql-virtual_domains.cf**
 
//Пример//
 
**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 для получения пересланной почты из базы данных
 
> **# vi /etc/postfix/mysql-virtual_forwardings.cf**
 
//Пример//
 
**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**
 
  - Создайте файл-скрипт для создания почтового ящика и использования его для логина
 
> **# vi /etc/postfix/mysql-virtual_mailboxes.cf**
 
//Пример//
 
**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
 
> **# 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 =** [[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 , добавив команду в конце файла
 
> **# 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/**[[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 {**
== Настройка Postfix ==
Создайте связь между Postfix и MariaDB


**type = private**
1. Создайте файл-скрипт, чтобы получить значение ''domain'' из базы данных


**separator = .**
<pre># vi /etc/postfix/mysql-virtual_domains.cf</pre>


**prefix = INBOX.**
''Пример''


**inbox = yes**
<pre>
user = yourdbuser
password = yourdbpassword
dbname = eaimail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
</pre>


**}**
2. Создайте файл mysql-virtual_forwardings.cf для получения пересланной почты из базы данных


**service auth {**
<pre># vi /etc/postfix/mysql-virtual_forwardings.cf</pre>


**unix_listener auth-master {**
''Пример''


**mode = 0600**
<pre>
user = yourdbuser
password = yourdbpassword
dbname = eaimail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
</pre>


**user =** [[https://wiki.thnic.or.th/index.php?title=Vmail&action=edit&redlink=1|//vmail//]]
3. Создайте файл-скрипт для создания почтового ящика и использования его для логина


**}**
<pre># vi /etc/postfix/mysql-virtual_mailboxes.cf</pre>


**unix_listener /var/spool/postfix/private/auth {**
''Пример''


**mode = 0666**
<pre>
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
</pre>


**user =** [[https://wiki.thnic.or.th/index.php?title=Postfix&action=edit&redlink=1|//postfix//]]
4. Создайте файл-скрипт для пересылки всей почты на другой сервер SMTP


**group =** [[https://wiki.thnic.or.th/index.php?title=Postfix&action=edit&redlink=1|//postfix//]]
<pre># vi /etc/postfix/mysql-virtual_email2email.cf</pre>


**}**
''Пример''


**user = root**
<pre>
user = yourdbuser
password = yourdbpassword
dbname = eaimail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1
</pre>


**}**
5. Установите необходимые права созданным скриптам


**auth_mechanisms = plain login**
<pre>
# chmod o= /etc/postfix/mysql-virtual_*.cf
# chgrp postfix /etc/postfix/mysql-virtual_*.cf
</pre>


**service auth-worker {**
6. Создайте пользователя и группу для почтового ящика


**user = root**
<pre>
# groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /home/vmail -m
</pre>


**}**
7. Измените /etc/postfix/main.cf


**protocol lda {**
<pre>
# vi /etc/postfix/main.cf
</pre>


**log_path = /home/vmail/dovecot-deliver.log**
''Пример''


**auth_socket_path = /var/run/dovecot/auth-master**
<pre>
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
</pre>


**postmaster_address = postmaster@test.ru**
8. Измените /etc/postfix/master.cf , добавив команду в конце файла


**}**
<pre># vi /etc/postfix/master.cf</pre>


**protocol pop3 {**
''Пример''


**pop3_uidl_format = %08Xu%08Xv**
<pre>
dovecot  unix  -      n      n      -      -      pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
</pre>


**pop3_client_workarounds = outlook-no-nuls oe-ns-eoh**
9. Измените /etc/postfix/master.cf , чтобы разрешить выполнение команд ниже (у остальных в начале должен стоять #)


**}**
''Пример''


**passdb {**
<pre>
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
</pre>


**driver = sql**
10. Перезапустите postfix


**args = /etc/dovecot/dovecot-sql.conf.ext**
''Пример''


**}**
<pre># systemctl restart postfix</pre>


**userdb {**
11. Назначьте алиасы почтовым адресам, изменив файл aliases 


**driver = static**
Добавьте 2 строки


**args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes**
<pre># vi /etc/aliases</pre>


**}**
<pre>postmaster: root
root: postmaster@test.ru</pre>


  - Создайте скрипт, чтобы dovecot мог работать с SQL
12. Обновите алиасы и перезапустите postfix


> **# vi /etc/dovecot/dovecot-sql.conf.ext**
<pre>
# newaliases
# systemctl restart postfix
</pre>


//Пример//
== Настройка Dovecot ==


**driver = mysql**
1. Сделайте резервную копию существующей конфигурации


**connect = host=127.0.0.1 dbname=**//eaimail// **user=**//yourdbuser// **password=**//yourdbpassword//
<pre># mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup</pre>


**default_pass_scheme = CRYPT**
2. Настройте конфигурацию dovecot


**password_query = SELECT email as user, password FROM users WHERE email='%u';**
<pre># vi /etc/dovecot/dovecot.conf</pre>


  - Установите необходимые права группе dovecot
''Пример''


> **# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext**
<pre>
>
protocols = imap pop3 lmtp
> **# chmod o= /etc/dovecot/dovecot-sql.conf.ext**
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir


  - Перезапустите dovecot
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
}
</pre>


> **# systemctl restart dovecot**
3. Создайте скрипт, чтобы dovecot мог работать с SQL


  - Проверьте журнал почтового сервера /var/log/maillog
<pre># vi /etc/dovecot/dovecot-sql.conf.ext</pre>


> **# tail /var/log/maillog**
''Пример ''


//Пример//
<pre>
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';
</pre>


**Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system**
4. Установите необходимые права группе dovecot


**Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix**
<pre>
# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
# chmod o= /etc/dovecot/dovecot-sql.conf.ext
</pre>


**Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)**
5. Перезапустите dovecot


===== Протестируйте почтовый сервер EAI =====
<pre># systemctl restart dovecot</pre>


  - Протестируйте pop3
6. Проверьте журнал почтового сервера /var/log/maillog


> **# telnet localhost pop3**
<pre># tail /var/log/maillog</pre>


//Пример//
''Пример''


**Trying 127.0.0.1...**
<pre>
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)
</pre>


**Connected to localhost.localdomain.**
== Протестируйте почтовый сервер EAI  ==


**Escape character is '^]'.**
1. Протестируйте pop3
<pre># telnet localhost pop3</pre>


**+OK Dovecot ready.**
''Пример''


  - Протестируйте SMTP
<pre>
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Dovecot ready.
</pre>


> **# telnet localhost 25**
2. Протестируйте SMTP
>
> **# ehlo localhost**


//Пример//
<pre>
# telnet localhost 25
# ehlo localhost
</pre>


**250-mail.test.ru**
''Пример''


**250-PIPELINING**
<pre>
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
</pre>


**250-SIZE 30720000**
3. Протестируйте отправку и получение почты при помощи mailx
 
**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**
<pre>
 
# yum -y install mailx
**# mailx thai@test.ru (input subject then press //enter// follow by content and use Ctrl+D for sending out)**
# 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>**
# tail /var/log/maillog
</pre>


**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)**
<pre>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:08 mail postfix/qmgr[21141]: E9AB020199E5: removed**
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
</pre>


Если вы нашли ошибку в журнале: «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/**
<pre>
 
# cd /etc/postfix/dynamicmaps.cf.d/
**# vi mysql.cf**
# vi mysql.cf
 
</pre>
**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**
<pre>mysql /usr/lib/postfix/postfix-mysql.so dict_mysql_open</pre>


  - Проверьте почтовый ящик с помощью почтового клиента mutt, чтобы увидеть письма в почтовом ящике
4. Проверьте журнал, чтобы увидеть результат отправки в Dovecot /home/vmail/dovecot-deliver.log, Примерный результат:


> **# yum -y install mutt**
<pre># tail /home/vmail/dovecot-deliver.log
>
> **# mutt -f .**


  - Проверьте отправку писем с интернационализированного адресов
2017-11-13 15:19:08 lda(tanagan@test.ru): Info: msgid=&lt;20171113081907.E9AB020199E5@mail.test.ru: saved mail to INBOX</pre>


  * В конце отправляемого сообщения поставьте «.»
5. Проверьте почтовый ящик. При отправке и получении писем вы увидите следующий результат:
  * Нажмите Ctrl+] , чтобы выйти


**# telnet localhost 25**
<pre># cd /home/vmail/test.ru/thai/Maildir
# find
</pre>


**# EHLO localhost**
''Пример''


**# MAIL FROM: тест@тест.рф SMTPUTF8**
<pre>.
./dovecot-uidlist
./cur
./new
./new/1285609582.P6115Q0M368794.li172-137
./dovecot.index
./dovecot.index.log
./tmp
</pre>


**# RCPT TO: тест1@тест1.рф**
6. Проверьте почтовый ящик с помощью почтового клиента mutt, чтобы увидеть письма в почтовом ящике


**# data**
<pre># yum -y install mutt
# mutt -f .
</pre>


**# Subject: eai test**
7. Проверьте отправку писем с интернационализированного адресов


**#**
* В конце отправляемого сообщения поставьте «.»
* Нажмите Ctrl+] , чтобы выйти


**# .**
<pre># telnet localhost 25
# EHLO localhost
# MAIL FROM: тест@тест.рф SMTPUTF8
# RCPT TO: тест1@тест1.рф
# data
# Subject: eai test
#
# .
</pre>


===== Установите SquirrelMail =====
== Установите SquirrelMail ==


  - Установите squirrelmail
1. Установите squirrelmail


> **# yum -y install epel-release**
<pre>
>
# yum -y install epel-release
> **# yum install squirrelmail**
# yum install squirrelmail
</pre>


  - Если у вас не установлен Apache, установите Apache
2. Если у вас не установлен Apache, установите Apache


> **# yum -y install httpd**
<pre>
>
# yum -y install httpd
> **# systemctl enable httpd**
# systemctl enable httpd
>
# systemctl start httpd
> **# systemctl start httpd**
# systemctl status httpd
>
</pre>
> **# systemctl status httpd**


  - Скопируйте/перенесите squirrelmail в /var/www/html/
3. Скопируйте/перенесите squirrelmail в /var/www/html/


> **# cd /var/www/html/**
<pre># cd /var/www/html/</pre>


(скопируйте squirrelmail в /var/www/html/ например используя для копирования winscp)
(скопируйте squirrelmail в /var/www/html/ например используя для копирования winscp)


  - Создайте каталог данных для squirrelmail
4. Создайте каталог данных для squirrelmail


> **# cd /var/lib/squirrelmail/**
<pre>
>
# cd /var/lib/squirrelmail/
> **# mkdir data**
# mkdir data
>
# chmod ugo+rwx data/
> **# chmod ugo+rwx data/**
</pre>


  - Протестируйте логин для доступа через веб-браузеры. Введите IP сервера, затем /squirrelmail
5. Протестируйте логин для доступа через веб-браузеры. Введите IP сервера, затем /squirrelmail


> **# Test sending and receiving mail**
<pre># Test sending and receiving mail</pre>

Текущая версия от 06:15, 27 июня 2022

Инструкция по установке EAI почтового сервера под ОС CentOS 7

Почтовый сервер с поддержкой EAI

С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО.

Необходимое ПО

  1. Centos 7.4
  2. Postfix 3.2.3
  3. Dovecot 2.2.10
  4. MariaDB 10.3.11
  5. Squirrelmail 5.5.56

Примечания:

  • в данной инструкции не разъясняется, как установить Centos 7.4
  • версия Postfix 3.x.x и выше поддерживает EAI
  • в реальных условиях необходимо также настроить сервер DNS
  • putty и winscp используются для подключения к серверу

Установка EAI почтового сервера

Задайте имя хоста

1. Обновите пакеты почтового сервера до последней версии

# yum -y update

2. Задайте имя хоста (например, mail.test.ru) с помощью команды

# hostnamectl set-hostname mail.test.ru

3. Добавьте имя хоста в файл 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»)

4. Установите wget для скачивания дополнительного ПО

# yum -y install wget

5. Установите telnet для тестирования работы почтового сервера

# yum -y install telnet

Настройте файрвол

1. Проверьте, что у почтового сервиса имеется статус «firewalld service»

Статус должен быть активным (работающим)

# systemctl status firewalld

Пример

Active: active (running) since Mon 2019-11-18 14:12:03 +07; 1h 13min ago

2. Проверьте открытые зону файрвола и сетевой интерфейс

# firewall-cmd --get-active-zones

Пример

public

interfaces: ens32

3. Проверьте сервисы файрвола в публичной зоне

# firewall-cmd --zone=public --list-services

Пример

cockpit dhcpv6-client ssh 

4. Откройте необходимые сервисы на файрволе в публичной зоне почтового сервера

# 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

5. Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы *Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера:

# firewall-cmd --zone=public --list-services

Пример

cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh

6. В этом примере мы открыли 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

7. Перезапустите сервер

# reboot
# sestatus

Пример

disabled 

Создайте SSL-сертификат

Пошаговая инструкция для создания SSL-ключа, чтоб использовать с postfix и dovecot

1. Создайте индивидуальный ключ

# 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 

2. Удалите Passphase из созданного ключа

# openssl rsa -in eai.key -out eai.key

''Пример''

<pre>
Enter pass phrase for eai.key:  #input passphrase
writing RSA key

3. Создайте 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

1. Установите mariadb , Postfix , Dovecot и необходимые пакеты

# yum --enablerepo=centosplus install postfix
# yum install dovecot mariadb-server dovecot-mysql

2. Обновите 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


3. Настройте mariadb, postfix, dovecot для автоматического запуска

# systemctl start mariadb
# systemctl enable mariadb
# systemctl start postfix
# systemctl enable postfix
# systemctl start dovecot
# systemctl enable dovecot

4. Проверьте статус mariadb, postfix, dovecot

# systemctl status mariadb
# systemctl status postfix
# systemctl status dovecot

Настройка MariaDB

1. Установите 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

2. Перезапустите MariaDB

# systemctl restart mariadb

3. Настройте безопасный доступ к mysql, установив пароль для пользователя с правами root (* задайте только новый пароль, остальное пропустите, нажав клавишу enter)

# mysql_secure_installation

4. Зайдите в аккаунт mysql с новым паролем

# mysql -u root -p

5. Создайте новую базу данных (eaimail) для хранения записей об использовании почтового сервера

# CREATE DATABASE eaimail;
# USE eaimail;

6. Создайте пользователя с правами доступа к базе 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;

7. Проверьте созданного пользователя

# SHOW GRANTS FOR yourdbuser@'localhost';

8. Создайте таблицы для domainsforwardings (для пересылки почты с интернационализированных адресов на адреса в кодировке 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

9. Перезапустите MariaDB

# systemctl restart mariadb

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

1. Создайте файл-скрипт, чтобы получить значение 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 

2. Создайте файл 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

3. Создайте файл-скрипт для создания почтового ящика и использования его для логина

# 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

4. Создайте файл-скрипт для пересылки всей почты на другой сервер 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

5. Установите необходимые права созданным скриптам

# chmod o= /etc/postfix/mysql-virtual_*.cf
# chgrp postfix /etc/postfix/mysql-virtual_*.cf

6. Создайте пользователя и группу для почтового ящика

# groupadd -g 5000 vmail 
# useradd -g vmail -u 5000 vmail -d /home/vmail -m

7. Измените /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

8. Измените /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}

9. Измените /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

10. Перезапустите postfix

Пример

# systemctl restart postfix

11. Назначьте алиасы почтовым адресам, изменив файл aliases 

Добавьте 2 строки

# vi /etc/aliases
postmaster: root
root: postmaster@test.ru

12. Обновите алиасы и перезапустите postfix

# newaliases
# systemctl restart postfix

Настройка Dovecot

1. Сделайте резервную копию существующей конфигурации

# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup

2. Настройте конфигурацию 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
}

3. Создайте скрипт, чтобы 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';

4. Установите необходимые права группе dovecot

# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
# chmod o= /etc/dovecot/dovecot-sql.conf.ext

5. Перезапустите dovecot

# systemctl restart dovecot

6. Проверьте журнал почтового сервера /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

1. Протестируйте pop3

# telnet localhost pop3

Пример

Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Dovecot ready.

2. Протестируйте 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

3. Протестируйте отправку и получение почты при помощи 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

4. Проверьте журнал, чтобы увидеть результат отправки в 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

5. Проверьте почтовый ящик. При отправке и получении писем вы увидите следующий результат:

# cd /home/vmail/test.ru/thai/Maildir
# find

Пример

.
./dovecot-uidlist
./cur
./new
./new/1285609582.P6115Q0M368794.li172-137
./dovecot.index
./dovecot.index.log
./tmp

6. Проверьте почтовый ящик с помощью почтового клиента mutt, чтобы увидеть письма в почтовом ящике

# yum -y install mutt
# mutt -f .

7. Проверьте отправку писем с интернационализированного адресов

  • В конце отправляемого сообщения поставьте «.»
  • Нажмите Ctrl+] , чтобы выйти
# telnet localhost 25
# EHLO localhost
# MAIL FROM: тест@тест.рф SMTPUTF8			
# RCPT TO: тест1@тест1.рф
# data
# Subject: eai test
# 
# .

Установите SquirrelMail

1. Установите squirrelmail

# yum -y install epel-release
# yum install squirrelmail

2. Если у вас не установлен Apache, установите Apache

# yum -y install httpd
# systemctl enable httpd
# systemctl start httpd
# systemctl status httpd

3. Скопируйте/перенесите squirrelmail в /var/www/html/

# cd /var/www/html/

(скопируйте squirrelmail в /var/www/html/ например используя для копирования winscp)

4. Создайте каталог данных для squirrelmail

# cd /var/lib/squirrelmail/
# mkdir data
# chmod ugo+rwx data/

5. Протестируйте логин для доступа через веб-браузеры. Введите IP сервера, затем /squirrelmail

# Test sending and receiving mail