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

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску
Нет описания правки
Метка: отменено
Нет описания правки
Метка: ручная отмена
Строка 1: Строка 1:
**Инструкция по установке EAI почтового сервера под ОС CentOS 7**
'''Инструкция по установке EAI почтового сервера под ОС CentOS 7'''


====== Почтовый сервер с поддержкой 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 почтового сервера ==


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


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


> **# yum -y update**
<blockquote>'''# yum -y update'''
</blockquote>
# Задайте имя хоста (например, mail.test.ru) с помощью команды


  - Задайте имя хоста (например, 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


> **# hostnamectl set-hostname [[https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1|////mail.test.ru////]]**
<blockquote>'''# vi /etc/hosts'''
</blockquote>
''Пример файла hosts''


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


> **# vi /etc/hosts**
::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''''''']


//Пример файла hosts//
''*В зависимости от среды установки CentOS вам может понадобиться установить дополнительные сервисы (например, может быть недоступна команда «vi»)''


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//**//]]
# Установите wget для скачивания дополнительного ПО


::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//**//]]
<blockquote>'''# yum -y install wget'''
</blockquote>
# Установите ''telnet'' для тестирования работы почтового сервера


//*В зависимости от среды установки CentOS вам может понадобиться установить дополнительные сервисы (например, может быть недоступна команда «vi»)//
<blockquote>'''# yum -y install telnet'''
</blockquote>
== Настройте файрвол ==


  - Установите wget для скачивания дополнительного ПО
# Проверьте, что у почтового сервиса имеется статус «firewalld service»


> **# yum -y install wget**
<blockquote>Статус должен быть активным (работающим)
</blockquote>
'''# systemctl status firewalld'''


  - Установите //telnet// для тестирования работы почтового сервера
''Пример''


> **# yum -y install telnet**
'''Active: active (running) since Mon 2019-11-18 14:12:03 +07; 1h 13min ago'''


===== Настройте файрвол =====
# Проверьте открытые зону файрвола и сетевой интерфейс


  - Проверьте, что у почтового сервиса имеется статус «firewalld service»
<blockquote>'''# firewall-cmd --get-active-zones'''
</blockquote>
''Пример''


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


**# systemctl status firewalld**
'''interfaces: ens32'''


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


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


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


> **# firewall-cmd --get-active-zones**
# Откройте необходимые сервисы на файрволе в публичной зоне почтового сервера


//Пример//
<blockquote>'''# firewall-cmd --permanent --zone=public --add-service=http'''


**public**
'''# firewall-cmd --permanent --zone=public --add-service=https'''


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


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


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


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


**cockpit dhcpv6-client ssh**
'''# 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'')]''


> **# firewall-cmd --permanent --zone=public --add-service=http**
<blockquote>'''# firewall-cmd --zone=public --list-services'''
>
</blockquote>
> **# 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//)]]//
'''cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh'''


> **# firewall-cmd --zone=public --list-services**
# В этом примере мы открыли SELinux для удобства настройки


//Пример//
<blockquote>'''# vi /etc/selinux/config'''
</blockquote>
''Пример''


**cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh**
'''This file controls the state of SELinux on the system.'''


  - В этом примере мы открыли SELinux для удобства настройки
'''# SELINUX= can take one of these three values:'''


> **# vi /etc/selinux/config**
'''# enforcing - SELinux security policy is enforced.'''


//Пример//
'''# permissive - SELinux prints warnings instead of enforcing.'''


**This file controls the state of SELinux on the system.**
'''# disabled - No SELinux policy is loaded.'''


**# SELINUX= can take one of these three values:**
'''SELINUX=disabled'''


**# enforcing - SELinux security policy is enforced.**
'''# SELINUXTYPE= can take one of these two values:'''


**# permissive - SELinux prints warnings instead of enforcing.**
'''# targeted - Targeted processes are protected,'''


**# disabled - No SELinux policy is loaded.**
'''# mls - Multi Level Security protection.'''


**SELINUX=disabled**
'''SELINUXTYPE=targeted'''


**# SELINUXTYPE= can take one of these two values:**
# Перезапустите сервер


**# targeted - Targeted processes are protected,**
'''# reboot'''


**# mls - Multi Level Security protection.**
'''# sestatus'''


**SELINUXTYPE=targeted**
''Пример''


  - Перезапустите сервер
'''disabled '''


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


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


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


> **# cd /etc/pki/tls/certs**
<blockquote>'''# cd /etc/pki/tls/certs'''
>
> **# make** [[https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1|//eai.key//]]


//Пример//
'''# make''' [https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1 ''eai.key'']
</blockquote>
''Пример''


**umask 77 ; \**
'''umask 77 ; \'''


**/usr/bin/openssl genrsa -aes128 2048 > eai.key**
'''/usr/bin/openssl genrsa -aes128 2048 &gt; eai.key'''


**Generating RSA private key, 2048 bit long modulus**
'''Generating RSA private key, 2048 bit long modulus'''


**...**
'''...'''


**...**
'''...'''


**e is 65537 (0x10001)**
'''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//]]
'''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//]]
'''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// из созданного ключа
# Удалите ''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//]]
<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'']


**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'''


**writing RSA key**
# Создайте csr
# '''# make eai.csr'''


  - Создайте csr
''Пример''
  - **# make eai.csr**


//Пример//
'''umask 77 ; \'''


**umask 77 ; \**
'''/usr/bin/openssl req -utf8 -new -key eai.key -out eai.csr'''


**/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'''


**You are about to be asked to enter information that will be incorporated**
'''into your certificate request.'''


**into your certificate request.**
'''What you are about to enter is what is called a Distinguished Name or a DN.'''


**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'''


**There are quite a few fields but you can leave some blank**
'''For some fields there will be a default value,'''


**For some fields there will be a default value,**
'''If you enter '.', the field will be left blank.'''


**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'']


**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'']


**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'']


**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'']


**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'']


**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'']


**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'']


**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'''


**Please enter the following 'extra' attributes**
'''to be sent with your certificate request'''


**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'']


**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'']
 
**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**
'''# 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**
'''Signature ok'''


**subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@test.ru**
'''subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@test.ru'''


**Getting Private key**
'''Getting Private key'''


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


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


> **# yum --enablerepo=centosplus install postfix**
<blockquote>'''# yum --enablerepo=centosplus install postfix'''
>
> **# yum install dovecot mariadb-server dovecot-mysql**


  - Обновите postfix с версии 2.x.x до версии 3.x.x
'''# 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 postfix'''


**# yum -y remove ssmtp**
'''# yum -y remove ssmtp'''


**# yum -y remove sendmail**
'''# yum -y remove sendmail'''


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


**# vi /etc/yum.repos.d/gf.repo**
'''# vi /etc/yum.repos.d/gf.repo'''


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


**[gf]**
'''[gf]'''


**name=Ghettoforge packages that won't overwrite core distro packages.**
'''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//]]**
'''mirrorlist=[http://mirrorlist.ghettoforge.org/el/7/gf/$basearch/mirrorlist ''http://mirrorlist.ghettoforge.org/el/7/gf/$basearch/mirrorlist'']'''


**enabled=1**
'''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**
'''failovermethod=priority'''


**[gf-plus]**
'''[gf-plus]'''


**name=Ghettoforge packages that will overwrite core distro packages.**
'''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//]]**
'''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!**
'''# Please read [http://ghettoforge.org/index.php/Usage ''http://ghettoforge.org/index.php/Usage''] *before* enabling this repository!'''


**enabled=1**
'''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**
'''failovermethod=priority'''


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


**# cd /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//]]**
'''# 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**
'''# yum -y install postfix3 postfix-mysql'''


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


**# postconf -d | grep mail_version**
'''# postconf -d | grep mail_version'''


**mail_version = 3.5.7**
'''mail_version = 3.5.7'''


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


> **# systemctl start mariadb**
<blockquote>'''# systemctl start mariadb'''
>
> **# systemctl enable mariadb**
>
> **# systemctl start postfix**
>
> **# systemctl enable postfix**
>
> **# systemctl start dovecot**
>
> **# systemctl enable dovecot**


  - Проверьте статус mariadb, postfix, dovecot
'''# systemctl enable mariadb'''


> **# systemctl status mariadb**
'''# systemctl start postfix'''
>
> **# systemctl status postfix**
>
> **# systemctl status dovecot**


===== Настройка MariaDB =====
'''# systemctl enable postfix'''


  - Установите UTF8 в mysql для работы с Unicode, добавив следующую команду к
'''# systemctl start dovecot'''


> /etc/my.cnf.d/maridb-server.cnf для [mysqld]
'''# systemctl enable dovecot'''
</blockquote>
# Проверьте статус mariadb, postfix, dovecot


**# vi /etc/my.cnf**
<blockquote>'''# systemctl status mariadb'''


//Пример//
'''# systemctl status postfix'''


**[mysqld]**
'''# systemctl status dovecot'''
</blockquote>
== Настройка MariaDB ==


**character-set-server = utf8**
# Установите UTF8 в mysql для работы с Unicode, добавив следующую команду к


**collation-server = utf8_general_ci**
<blockquote>/etc/my.cnf.d/maridb-server.cnf для [mysqld]
</blockquote>
'''# vi /etc/my.cnf'''


**skip-character-set-client-handshake**
''Пример''


**bind-address=127.0.0.1**
'''[mysqld]'''


**datadir=/var/lib/mysql**
'''character-set-server = utf8'''


**socket=/var/lib/mysql/mysql.sock**
'''collation-server = utf8_general_ci'''


**# Disabling symbolic-links is recommended to prevent assorted security risks**
'''skip-character-set-client-handshake'''


**symbolic-links=0**
'''bind-address=127.0.0.1'''


**# Settings user and group are ignored when systemd is used.**
'''datadir=/var/lib/mysql'''


**# If you need to run mysqld under a different user or group,**
'''socket=/var/lib/mysql/mysql.sock'''


**# customize your systemd unit file for mariadb according to the**
'''# Disabling symbolic-links is recommended to prevent assorted security risks'''


**# instructions in [[http://fedoraproject.org/wiki/Systemd|//http:%%//%%fedoraproject.org/wiki/Systemd//]]**
'''symbolic-links=0'''


**[mysqld_safe]**
'''# Settings user and group are ignored when systemd is used.'''


**log-error=/var/log/mariadb/mariadb.log**
'''# If you need to run mysqld under a different user or group,'''


**pid-file=/var/run/mariadb/mariadb.pid**
'''# customize your systemd unit file for mariadb according to the'''


**#**
'''# instructions in [http://fedoraproject.org/wiki/Systemd ''http://fedoraproject.org/wiki/Systemd'']'''


**# include all files from the config directory**
'''[mysqld_safe]'''


**#**
'''log-error=/var/log/mariadb/mariadb.log'''


**!includedir /etc/my.cnf.d**
'''pid-file=/var/run/mariadb/mariadb.pid'''


  - Перезапустите MariaDB
'''#'''


> **# systemctl restart mariadb**
'''# include all files from the config directory'''


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


> **# mysql_secure_installation**
'''!includedir /etc/my.cnf.d'''


  - Зайдите в аккаунт mysql с новым паролем
# Перезапустите MariaDB


> **# mysql -u root -p**
<blockquote>'''# systemctl restart mariadb'''
</blockquote>
# Настройте безопасный доступ к mysql, установив пароль для пользователя с правами root (* задайте только новый пароль, остальное пропустите, нажав клавишу ''enter'')


  - Создайте новую базу данных (eaimail) для хранения записей об использовании почтового сервера
<blockquote>'''# mysql_secure_installation'''
</blockquote>
# Зайдите в аккаунт mysql с новым паролем


> **# CREATE DATABASE [[https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1|////eaimail////]];**
<blockquote>'''# mysql -u root -p'''
>  
</blockquote>
> **# USE [[https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1|////eaimail////]];**
# Создайте новую базу данных (eaimail) для хранения записей об использовании почтового сервера


  - Создайте пользователя с правами доступа к базе eaimail
<blockquote>'''# CREATE DATABASE [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''''eaimail''''];'''


> **# 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//'**;**
'''# USE [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''''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.localdomain' IDENTIFIED BY '**//yourdbpassword//'**;**
# Создайте пользователя с правами доступа к базе eaimail
>  
> **# FLUSH PRIVILEGES;**


  - Проверьте созданного пользователя
<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'''''';'''


> **# SHOW GRANTS FOR '**//yourdbuser//'**@'localhost';**
'''# 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'''''';'''


  - Создайте таблицы для //domains//, //forwardings// (для пересылки почты с интернационализированных адресов на адреса в кодировке ASCII) и //users// для создания почтовых ящиков
'''# FLUSH PRIVILEGES;'''
</blockquote>
# Проверьте созданного пользователя


> **# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );**
<blockquote>'''# SHOW GRANTS FOR ''''''yourdbuser''''''@'localhost';'''
</blockquote>
# Создайте таблицы для ''domains'', ''forwardings'' (для пересылки почты с интернационализированных адресов на адреса в кодировке ASCII) и ''users'' для создания почтовых ящиков


**# CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );**
<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) );**
'''# CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );'''


**# quit**
'''# quit'''


  - Перезапустите MariaDB
# Перезапустите MariaDB


> **# systemctl restart mariadb**
<blockquote>'''# systemctl restart mariadb'''
</blockquote>
# Настройте ''domain'' и ''users'' в базе данных интернационализированных адресов


  - Настройте //domain// и //users// в базе данных интернационализированных адресов
<blockquote>Зайдите в mariadb и выберите базу данных ''eaimail'', введите домен ASCII и IDN домен, введите ASCII почту и почту EAI с паролем
</blockquote>
'''# mysql -u root -p'''


> Зайдите в mariadb и выберите базу данных //eaimail//, введите домен ASCII и IDN домен, введите ASCII почту и почту EAI с паролем
'''# USE''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail'']''';'''


**# mysql -u root -p**
'''# INSERT INTO domains (domain) VALUES (''''test.ru'''');'''


**# USE** [[https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1|//eaimail//]]**;**
'''# INSERT INTO domains (domain) VALUES (''''тест.рф'''');'''


**# INSERT INTO domains (domain) VALUES ('**test.ru'**);**
'''# INSERT INTO users (email, password) VALUES (''''[mailto:test@test.ru ''test@test.ru'']'''', ENCRYPT(''''''userpassword''''''));'''


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


//Пример//
'''# quit'''


**user =** [[https://wiki.thnic.or.th/index.php?title=Yourdbuser&action=edit&redlink=1|//yourdbuser//]]
'''Настройка Postfix'''


**password =** [[https://wiki.thnic.or.th/index.php?title=Yourdbpassword&action=edit&redlink=1|//yourdbpassword//]]
== Создайте связь между Postfix и MariaDB ==


**dbname =** [[https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1|//eaimail//]]
# Создайте файл-скрипт, чтобы получить значение ''domain'' из базы данных


**query = SELECT domain AS virtual FROM domains WHERE domain='%s'**
<blockquote>'''# vi /etc/postfix/mysql-virtual_domains.cf'''
</blockquote>
''Пример''


**hosts = 127.0.0.1**
'''user =''' [https://wiki.thnic.or.th/index.php?title=Yourdbuser&action=edit&redlink=1 ''yourdbuser'']


  - Создайте файл mysql-virtual_forwardings.cf для получения пересланной почты из базы данных
'''password =''' [https://wiki.thnic.or.th/index.php?title=Yourdbpassword&action=edit&redlink=1 ''yourdbpassword'']


> **# vi /etc/postfix/mysql-virtual_forwardings.cf**
'''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' '''


**user =** [[https://wiki.thnic.or.th/index.php?title=Yourdbuser&action=edit&redlink=1|//yourdbuser//]]
'''hosts = 127.0.0.1'''


**password =** [[https://wiki.thnic.or.th/index.php?title=Yourdbpassword&action=edit&redlink=1|//yourdbpassword//]]
# Создайте файл mysql-virtual_forwardings.cf для получения пересланной почты из базы данных


**dbname =** [[https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1|//eaimail//]]
<blockquote>'''# vi /etc/postfix/mysql-virtual_forwardings.cf'''
</blockquote>
''Пример''


**query = SELECT destination FROM forwardings WHERE source='%s'**
'''user =''' [https://wiki.thnic.or.th/index.php?title=Yourdbuser&action=edit&redlink=1 ''yourdbuser'']


**hosts = 127.0.0.1**
'''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'']


> **# vi /etc/postfix/mysql-virtual_mailboxes.cf**
'''query = SELECT destination FROM forwardings WHERE source='%s' '''


//Пример//
'''hosts = 127.0.0.1'''


**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//]]
<blockquote>'''# vi /etc/postfix/mysql-virtual_mailboxes.cf'''
</blockquote>
''Пример''


**dbname =** [[https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1|//eaimail//]]
'''user =''' [https://wiki.thnic.or.th/index.php?title=Yourdbuser&action=edit&redlink=1 ''yourdbuser'']


**query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'**
'''password =''' [https://wiki.thnic.or.th/index.php?title=Yourdbpassword&action=edit&redlink=1 ''yourdbpassword'']


**hosts = 127.0.0.1**
'''dbname =''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail'']


  - Создайте файл-скрипт для пересылки всей почты на другой сервер SMTP
'''query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' '''


> **# vi /etc/postfix/mysql-virtual_email2email.cf**
'''hosts = 127.0.0.1'''


//Пример//
# Создайте файл-скрипт для пересылки всей почты на другой сервер SMTP


**user = yourdbuser**
<blockquote>'''# vi /etc/postfix/mysql-virtual_email2email.cf'''
</blockquote>
''Пример''


**password = yourdbpassword**
'''user = yourdbuser'''


**dbname = eaimail**
'''password = yourdbpassword'''


**query = SELECT email FROM users WHERE email='%s'**
'''dbname = eaimail'''


**hosts = 127.0.0.1**
'''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**


  - Создайте пользователя и группу для почтового ящика
<blockquote>'''# chmod o= /etc/postfix/mysql-virtual_*.cf'''


> **# groupadd -g 5000 vmail**
'''# chgrp postfix /etc/postfix/mysql-virtual_*.cf'''
>  
</blockquote>
> **# useradd -g vmail -u 5000 vmail -d /home/vmail -m**
# Создайте пользователя и группу для почтового ящика


  - Измените /etc/postfix/main.cf
<blockquote>'''# groupadd -g 5000 vmail '''


> **# vi /etc/postfix/main.cf**
'''# 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_interfaces = all'''


**inet_protocols = ipv4**
'''inet_protocols = ipv4'''


**mydestination = localhost, localhost.localdomain**
'''mydestination = localhost, localhost.localdomain'''


**alias_database = hash:/etc/aliases**
'''alias_database = hash:/etc/aliases'''


**sendmail_path = /usr/sbin/sendmail.postfix**
'''sendmail_path = /usr/sbin/sendmail.postfix'''


**newaliases_path = /usr/bin/newaliases.postfix**
'''newaliases_path = /usr/bin/newaliases.postfix'''


**mailq_path = /usr/bin/mailq.postfix**
'''mailq_path = /usr/bin/mailq.postfix'''


**meta_directory = /etc/postfix**
'''meta_directory = /etc/postfix'''


**shlib_directory = no**
'''shlib_directory = no'''


**myhostname =** [[https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1|//mail.test.ru//]]
'''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//]]
'''mydomain =''' [https://wiki.thnic.or.th/index.php?title=Eai.in.th&action=edit&redlink=1 ''test.ru'']


**myorigin = $mydomain**
'''myorigin = $mydomain'''


**readme_directory = no**
'''readme_directory = no'''


**mynetworks = 127.0.0.1**
'''mynetworks = 127.0.0.1'''


**message_size_limit = 30720000**
'''message_size_limit = 30720000'''


**smtpd_sasl_auth_enable = yes**
'''smtpd_sasl_auth_enable = yes'''


**smtpd_sasl_type = dovecot**
'''smtpd_sasl_type = dovecot'''


**smtpd_sasl_path = private/auth**
'''smtpd_sasl_path = private/auth'''


**smtpd_sasl_authenticated_header = yes**
'''smtpd_sasl_authenticated_header = yes'''


**broken_sasl_auth_clients = yes**
'''broken_sasl_auth_clients = yes'''


**smtpd_use_tls = yes**
'''smtpd_use_tls = yes'''


**smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination**
'''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_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_key_file = /etc/pki/tls/certs/'''''eai.key''


**smtpd_tls_security_level = may**
'''smtpd_tls_security_level = may'''


**smtpd_tls_auth_only = yes**
'''smtpd_tls_auth_only = yes'''


**smtpd_tls_loglevel = 1**
'''smtpd_tls_loglevel = 1'''


**alias_maps = hash:/etc/aliases**
'''alias_maps = hash:/etc/aliases '''


**virtual_mailbox_base = /home/vmail**
'''virtual_mailbox_base = /home/vmail'''


**virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf**
'''virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'''


**virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf**
'''virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'''


**virtual_uid_maps = static:5000**
'''virtual_uid_maps = static:5000'''


**virtual_gid_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_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_transport = dovecot'''


**virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf**
'''virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'''


**smtputf8_enable = yes**
'''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**
'''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 , добавив команду в конце файла
# Измените /etc/postfix/master.cf , добавив команду в конце файла


> **# vi /etc/postfix/master.cf**
<blockquote>'''# vi /etc/postfix/master.cf'''
</blockquote>
''Пример''


//Пример//
'''dovecot unix - n n - - pipe'''


**dovecot unix - n n - - pipe**
'''flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}'''


**flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}**
# Измените /etc/postfix/master.cf , чтобы разрешить выполнение команд ниже (у остальных в начале должен стоять #)


  - Измените /etc/postfix/master.cf , чтобы разрешить выполнение команд ниже (у остальных в начале должен стоять #)
''Пример''


//Пример//
'''smtps inet n - - - - smtpd'''
 
**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
# Перезапустите postfix
 
//Пример//
 
**# systemctl restart postfix**


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


> Добавьте 2 строки
'''# systemctl restart postfix'''


**# vi /etc/aliases**
# Назначьте алиасы почтовым адресам, изменив файл aliases 


**postmaster: root**
<blockquote>Добавьте 2 строки
</blockquote>
'''# vi /etc/aliases'''


**root: postmaster@test.ru**
'''postmaster: root'''


  - Обновите алиасы и перезапустите postfix
'''root: postmaster@test.ru'''


> **# newaliases**
# Обновите алиасы и перезапустите postfix
>
> **# systemctl restart postfix**


===== Настройка Dovecot =====
<blockquote>'''# newaliases'''


  - Сделайте резервную копию существующей конфигурации
'''# systemctl restart postfix'''
</blockquote>
== Настройка Dovecot ==


> **# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup**
# Сделайте резервную копию существующей конфигурации


  - Настройте конфигурацию dovecot
<blockquote>'''# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup'''
</blockquote>
# Настройте конфигурацию dovecot


> **# vi /etc/dovecot/dovecot.conf**
<blockquote>'''# vi /etc/dovecot/dovecot.conf'''
</blockquote>
''Пример''


//Пример//
'''protocols = imap pop3 lmtp'''


**protocols = imap pop3 lmtp**
'''log_timestamp = &quot;%Y-%m-%d %H:%M:%S &quot;'''


**log_timestamp = "%Y-%m-%d %H:%M:%S "**
'''mail_location = maildir:/home/vmail/%d/%n/Maildir'''


**mail_location = maildir:/home/vmail/%d/%n/Maildir**
'''ssl_cert = &lt;/etc/pki/tls/certs/'''[https://wiki.thnic.or.th/index.php?title=Eai.crt&action=edit&redlink=1 ''eai.crt'']


**ssl_cert = </etc/pki/tls/certs/**[[https://wiki.thnic.or.th/index.php?title=Eai.crt&action=edit&redlink=1|//eai.crt//]]
'''ssl_key = &lt;/etc/pki/tls/certs/'''''eai.key''


**ssl_key = </etc/pki/tls/certs/**//eai.key//
'''ssl_dh_parameters_length = 2048 '''


**ssl_dh_parameters_length = 2048**
'''ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL'''


**ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL**
'''namespace {'''


**namespace {**
'''type = private'''


**type = private**
'''separator = .'''


**separator = .**
'''prefix = INBOX.'''


**prefix = INBOX.**
'''inbox = yes'''


**inbox = yes**
'''}'''


**}**
'''service auth {'''


**service auth {**
'''unix_listener auth-master {'''


**unix_listener auth-master {**
'''mode = 0600'''


**mode = 0600**
'''user =''' [https://wiki.thnic.or.th/index.php?title=Vmail&action=edit&redlink=1 ''vmail'']


**user =** [[https://wiki.thnic.or.th/index.php?title=Vmail&action=edit&redlink=1|//vmail//]]
'''}'''


**}**
'''unix_listener /var/spool/postfix/private/auth {'''


**unix_listener /var/spool/postfix/private/auth {**
'''mode = 0666'''


**mode = 0666**
'''user =''' [https://wiki.thnic.or.th/index.php?title=Postfix&action=edit&redlink=1 ''postfix'']


**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'']


**group =** [[https://wiki.thnic.or.th/index.php?title=Postfix&action=edit&redlink=1|//postfix//]]
'''}'''


**}**
'''user = root'''


**user = root**
'''}'''


**}**
'''auth_mechanisms = plain login'''


**auth_mechanisms = plain login**
'''service auth-worker {'''


**service auth-worker {**
'''user = root'''


**user = root**
'''}'''


**}**
'''protocol lda {'''


**protocol lda {**
'''log_path = /home/vmail/dovecot-deliver.log'''


**log_path = /home/vmail/dovecot-deliver.log**
'''auth_socket_path = /var/run/dovecot/auth-master'''


**auth_socket_path = /var/run/dovecot/auth-master**
'''postmaster_address = postmaster@test.ru'''


**postmaster_address = postmaster@test.ru**
'''}'''


**}**
'''protocol pop3 {'''


**protocol pop3 {**
'''pop3_uidl_format = %08Xu%08Xv'''


**pop3_uidl_format = %08Xu%08Xv**
'''pop3_client_workarounds = outlook-no-nuls oe-ns-eoh'''


**pop3_client_workarounds = outlook-no-nuls oe-ns-eoh**
'''}'''


**}**
'''passdb {'''


**passdb {**
'''driver = sql'''


**driver = sql**
'''args = /etc/dovecot/dovecot-sql.conf.ext'''


**args = /etc/dovecot/dovecot-sql.conf.ext**
'''}'''


**}**
'''userdb {'''


**userdb {**
'''driver = static'''


**driver = static**
'''args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes'''


**args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes**
'''}'''


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


  - Создайте скрипт, чтобы dovecot мог работать с SQL
<blockquote>'''# vi /etc/dovecot/dovecot-sql.conf.ext'''
</blockquote>
''Пример ''


> **# vi /etc/dovecot/dovecot-sql.conf.ext**
'''driver = mysql'''


//Пример//
'''connect = host=127.0.0.1 dbname='''''eaimail'' '''user='''''yourdbuser'' '''password='''''yourdbpassword''


**driver = mysql**
'''default_pass_scheme = CRYPT'''


**connect = host=127.0.0.1 dbname=**//eaimail// **user=**//yourdbuser// **password=**//yourdbpassword//
'''password_query = SELECT email as user, password FROM users WHERE email='%u';'''


**default_pass_scheme = CRYPT**
# Установите необходимые права группе dovecot


**password_query = SELECT email as user, password FROM users WHERE email='%u';**
<blockquote>'''# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext'''


  - Установите необходимые права группе dovecot
'''# chmod o= /etc/dovecot/dovecot-sql.conf.ext'''
</blockquote>
# Перезапустите dovecot


> **# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext**
<blockquote>'''# systemctl restart dovecot'''
>  
</blockquote>
> **# chmod o= /etc/dovecot/dovecot-sql.conf.ext**
# Проверьте журнал почтового сервера /var/log/maillog


  - Перезапустите dovecot
<blockquote>'''# tail /var/log/maillog'''
</blockquote>
''Пример''


> **# systemctl restart dovecot**
'''Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system'''


  - Проверьте журнал почтового сервера /var/log/maillog
'''Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix'''


> **# tail /var/log/maillog**
'''Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)'''


//Пример//
== Протестируйте почтовый сервер EAI  ==


**Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system**
# Протестируйте pop3


**Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix**
<blockquote>'''# telnet localhost pop3'''
</blockquote>
''Пример''


**Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)**
'''Trying 127.0.0.1...'''


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


  - Протестируйте pop3
'''Escape character is '^]'.'''


> **# telnet localhost pop3**
'''+OK Dovecot ready.'''


//Пример//
# Протестируйте SMTP


**Trying 127.0.0.1...**
<blockquote>'''# telnet localhost 25'''


**Connected to localhost.localdomain.**
'''# ehlo localhost'''
</blockquote>
''Пример''


**Escape character is '^]'.**
'''250-mail.test.ru'''


**+OK Dovecot ready.**
'''250-PIPELINING'''


  - Протестируйте SMTP
'''250-SIZE 30720000'''


> **# telnet localhost 25**
'''250-VRFY'''
>
> **# ehlo localhost**


//Пример//
'''250-ETRN'''


**250-mail.test.ru**
'''250-STARTTLS'''


**250-PIPELINING**
'''250-AUTH PLAIN'''


**250-SIZE 30720000**
'''250-AUTH=PLAIN'''


**250-VRFY**
'''250-ENHANCEDSTATUSCODES'''


**250-ETRN**
'''250-8BITMIME'''


**250-STARTTLS**
'''250-DSN'''


**250-AUTH PLAIN**
'''250 SMTPUTF8'''


**250-AUTH=PLAIN**
# Протестируйте отправку и получение почты при помощи mailx
 
**250-ENHANCEDSTATUSCODES**
 
**250-8BITMIME**
 
**250-DSN**
 
**250 SMTPUTF8**
 
  - Протестируйте отправку и получение почты при помощи mailx


Проверьте журнал /var/log/maillog Примерный результат:
Проверьте журнал /var/log/maillog Примерный результат:


**# yum -y install mailx**
'''# 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**
'''# 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/pickup[31954]: E9AB020199E5: uid=0 from=&lt;root&gt;'''


**Nov 13 15:19:07 mail postfix/cleanup[1938]: E9AB020199E5: message-id=<20171113081907.E9AB020199E5@mail.test.ru>**
'''Nov 13 15:19:07 mail postfix/cleanup[1938]: E9AB020199E5: message-id=&lt;20171113081907.E9AB020199E5@mail.test.ru&gt;'''


**Nov 13 15:19:07 mail postfix/qmgr[21141]: E9AB020199E5: from=<root@test.ru>, size=434, nrcpt=1 (queue active)**
'''Nov 13 15:19:07 mail postfix/qmgr[21141]: E9AB020199E5: from=&lt;root@test.ru&gt;, 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/pipe[1946]: E9AB020199E5: to=&lt;tanagan@test.ru&gt;, 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**
'''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/**
'''# cd /etc/postfix/dynamicmaps.cf.d/'''


**# vi mysql.cf**
'''# vi mysql.cf'''


**mysql /usr/lib/postfix/postfix-mysql.so dict_mysql_open**
'''mysql /usr/lib/postfix/postfix-mysql.so dict_mysql_open'''


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


**# tail /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**
'''2017-11-13 15:19:08 lda(tanagan@test.ru): Info: msgid=&lt;20171113081907.E9AB020199E5@mail.test.ru&gt;: saved mail to INBOX'''


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


**# cd /home/vmail/test.ru/thai/Maildir**
'''# cd /home/vmail/test.ru/thai/Maildir'''


**# find**
'''# find'''


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


**.**
'''.'''


**./dovecot-uidlist**
'''./dovecot-uidlist'''


**./cur**
'''./cur'''


**./new**
'''./new'''


**./new/1285609582.P6115Q0M368794.li172-137**
'''./new/1285609582.P6115Q0M368794.li172-137'''


**./dovecot.index**
'''./dovecot.index'''


**./dovecot.index.log**
'''./dovecot.index.log'''


**./tmp**
'''./tmp'''


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


> **# yum -y install mutt**
<blockquote>'''# yum -y install mutt'''
>
> **# mutt -f .**


  - Проверьте отправку писем с интернационализированного адресов
'''# mutt -f .'''
</blockquote>
# Проверьте отправку писем с интернационализированного адресов


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


**# telnet localhost 25**
'''# telnet localhost 25'''


**# EHLO localhost**
'''# EHLO localhost'''


**# MAIL FROM: тест@тест.рф SMTPUTF8**
'''# MAIL FROM: тест@тест.рф SMTPUTF8 '''


**# RCPT TO: тест1@тест1.рф**
'''# RCPT TO: тест1@тест1.рф'''


**# data**
'''# data'''


**# Subject: eai test**
'''# Subject: eai test'''


**#**
'''# '''


**# .**
'''# .'''


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


  - Установите squirrelmail
# Установите squirrelmail


> **# yum -y install epel-release**
<blockquote>'''# yum -y install epel-release'''
>
> **# yum install squirrelmail**


  - Если у вас не установлен Apache, установите Apache
'''# yum install squirrelmail'''
</blockquote>
# Если у вас не установлен Apache, установите Apache


> **# yum -y install httpd**
<blockquote>'''# yum -y install httpd'''
>
> **# systemctl enable httpd**
>
> **# systemctl start httpd**
>
> **# systemctl status httpd**


  - Скопируйте/перенесите squirrelmail в /var/www/html/
'''# systemctl enable httpd'''


> **# cd /var/www/html/**
'''# 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
# Создайте каталог данных для squirrelmail
 
<blockquote>'''# cd /var/lib/squirrelmail/'''


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


  - Протестируйте логин для доступа через веб-браузеры. Введите IP сервера, затем /squirrelmail
'''# chmod ugo+rwx data/'''
</blockquote>
# Протестируйте логин для доступа через веб-браузеры. Введите IP сервера, затем /squirrelmail


> **# Test sending and receiving mail**
<blockquote>'''# Test sending and receiving mail'''
</blockquote>

Версия от 14:49, 24 июня 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

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

# hostnamectl set-hostname 'mail.test.ru'

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

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

# yum -y install wget

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

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

# firewall-cmd --get-active-zones

Пример

public

interfaces: ens32

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

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

Пример

cockpit dhcpv6-client ssh

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

# 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

  1. Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы *Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера (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

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

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

# 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

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

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

Пример

Enter pass phrase for eai.key: #input passphrase

writing RSA key

  1. Создайте csr
  2. # 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

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

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

# systemctl start mariadb

# systemctl enable mariadb

# systemctl start postfix

# systemctl enable postfix

# systemctl start dovecot

# systemctl enable dovecot

  1. Проверьте статус 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

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

# systemctl restart mariadb

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

# mysql_secure_installation

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

# mysql -u root -p

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

# CREATE DATABASE 'eaimail';

# USE 'eaimail';

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

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

# SHOW GRANTS FOR 'yourdbuser'@'localhost';

  1. Создайте таблицы для 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

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

# systemctl restart mariadb

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

  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

  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

  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

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

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

# chgrp postfix /etc/postfix/mysql-virtual_*.cf

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

# groupadd -g 5000 vmail

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

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

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

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

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

Пример

# systemctl restart postfix

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

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

# vi /etc/aliases

postmaster: root

root: postmaster@test.ru

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

# newaliases

# systemctl restart postfix

Настройка Dovecot

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

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

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

}

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

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

# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext

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

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

# systemctl restart dovecot

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

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

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

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

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

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

# find

Пример

.

./dovecot-uidlist

./cur

./new

./new/1285609582.P6115Q0M368794.li172-137

./dovecot.index

./dovecot.index.log

./tmp

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

# yum -y install mutt

# mutt -f .

  1. Проверьте отправку писем с интернационализированного адресов
  • В конце отправляемого сообщения поставьте «.»
  • Нажмите 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

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

# yum -y install httpd

# systemctl enable httpd

# systemctl start httpd

# systemctl status httpd

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

# cd /var/www/html/

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

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

# cd /var/lib/squirrelmail/

# mkdir data

# chmod ugo+rwx data/

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

# Test sending and receiving mail