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

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску
(Новая страница: «'''Инструкция по установке EAI почтового сервера под ОС CentOS 7''' = Почтовый сервер с поддержкой EAI = С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на ба...»)
 
Нет описания правки
Метка: отменено
Строка 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 почтового сервера =====


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


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


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


<blockquote>'''# hostnamectl set-hostname [https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1 ''''mail.test.ru'''']'''
  - Задайте имя хоста (например, mail.test.ru) с помощью команды
</blockquote>
# Добавьте имя хоста в файл hosts


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


127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 [https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1 '''''''mail.test.ru''''''']
  - Добавьте имя хоста в файл 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''''''']
> **# vi /etc/hosts**


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


'''# firewall-cmd --reload'''
  - Откройте необходимые сервисы на файрволе в публичной зоне почтового сервера
</blockquote>
# Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы ''*Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера ([https://spalinux.com/2015/06/centos-7-basic-configure-firewall-by-firewall-cmd ''https://spalinux.com/2015/06/centos-7-basic-configure-firewallby-firewall-cmd'')]''


<blockquote>'''# firewall-cmd --zone=public --list-services'''
> **# firewall-cmd --permanent --zone=public --add-service=http**
</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**


'''cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh'''
  - Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы //*Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера ([[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//)]]//


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


<blockquote>'''# cd /etc/pki/tls/certs'''
> **# 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 &gt; eai.key'''
**/usr/bin/openssl genrsa -aes128 2048 > 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// из созданного ключа


<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'']
> **# openssl rsa -in** [[https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1|//eai.key//]] **-out** [[https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1|//eai.key//]]
</blockquote>
''Пример''


'''Enter pass phrase for eai.key:''' [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#input_passphrase ''#input passphrase'']
//Пример//


'''writing RSA key'''
**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//]]


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


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


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


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


'''You are about to be asked to enter information that will be incorporated'''
**/usr/bin/openssl req -utf8 -new -key eai.key -out eai.csr**


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


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


'''There are quite a few fields but you can leave some blank'''
**What you are about to enter is what is called a Distinguished Name or a DN.**


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


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


'''-----'''
**If you enter '.', the field will be left blank.**


'''Country Name (2 letter code) [XX]:'''RU [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#country ''#country'']
**-----**


'''State or Province Name (full name) []:'''[https://wiki.thnic.or.th/index.php?title=Bangkok&action=edit&redlink=1 ''Moscow''] [https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#state ''#state'']
**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//]]


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


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


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


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


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


'''Please enter the following 'extra' attributes'''
**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//]]


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


'''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'']
**to be sent with your certificate request**


'''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'']
**A challenge password []:** [[https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#Enter|//#Enter//]]
 
**An optional company name []:** [[https://wiki.thnic.or.th/th/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2_EAI_Mail_Server_%E0%B8%9A%E0%B8%99_CentOS_7/en#Enter|//#Enter//]]


4. Сгенерируйте ключ
4. Сгенерируйте ключ


'''# openssl x509 -in''' [https://wiki.thnic.or.th/index.php?title=Eai.csr&action=edit&redlink=1 ''eai.csr''] '''-out''' [https://wiki.thnic.or.th/index.php?title=Eai.crt&action=edit&redlink=1 ''eai.crt''] '''-req -signkey''' [https://wiki.thnic.or.th/index.php?title=Eai.key&action=edit&redlink=1 ''eai.key''] '''-days 3650'''
**# 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 и необходимые пакеты


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


'''# yum install dovecot mariadb-server dovecot-mysql'''
  - Обновите postfix с версии 2.x.x до версии 3.x.x
</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 для автоматического запуска


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


<blockquote>'''# GRANT SELECT, INSERT, UPDATE, DELETE ON''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail'']'''.* TO ''''''yourdbuser''''''@'localhost' IDENTIFIED BY ''''''yourdbpassword'''''';'''
  - Проверьте созданного пользователя


'''# GRANT SELECT, INSERT, UPDATE, DELETE ON''' [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 ''eaimail'']'''.* TO ''''''yourdbuser''''''@'localhost.localdomain' IDENTIFIED BY ''''''yourdbpassword'''''';'''
> **# SHOW GRANTS FOR '**//yourdbuser//'**@'localhost';**


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


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


<blockquote>'''# 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) );**
</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


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


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


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


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


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


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


'''# INSERT INTO users (email, password) VALUES (''''[[mailto:тест@тест.рф|''тест@тест.рф'']]'''', ENCRYPT(''''''userpassword''''''));'''
**# INSERT INTO domains (domain) VALUES ('**тест.рф'**);**
 
**# INSERT INTO users (email, password) VALUES ('**[[mailto:test@test.ru|//test@test.ru//]]'**, ENCRYPT('**//userpassword//'**));**
 
**# INSERT INTO users (email, password) VALUES ('**[[mailto:тест@тест.рф|//тест@тест.рф//]]'**, ENCRYPT('**//userpassword//'**));**


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


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


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


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


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


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


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


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


'''query = SELECT domain AS virtual FROM domains WHERE domain='%s' '''
//Пример//


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


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


'''user =''' [https://wiki.thnic.or.th/index.php?title=Yourdbuser&action=edit&redlink=1 ''yourdbuser'']
**query = SELECT destination FROM forwardings WHERE source='%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'']
  - Создайте файл-скрипт для создания почтового ящика и использования его для логина


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


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


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


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


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


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


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


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


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


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


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


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


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


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


'''query = SELECT email FROM users WHERE email='%s' '''
**hosts = 127.0.0.1**


'''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'''
  - Создайте пользователя и группу для почтового ящика


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


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


'''# useradd -g vmail -u 5000 vmail -d /home/vmail -m'''
> **# vi /etc/postfix/main.cf**
</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 , добавив команду в конце файла


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


'''group =''' [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//]]


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


# Протестируйте отправку и получение почты при помощи mailx
**250-AUTH=PLAIN**
 
**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=&lt;root&gt;'''
**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=&lt;20171113081907.E9AB020199E5@mail.test.ru&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/qmgr[21141]: E9AB020199E5: from=&lt;root@test.ru&gt;, size=434, nrcpt=1 (queue active)'''
**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=&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/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'''
**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=&lt;20171113081907.E9AB020199E5@mail.test.ru&gt;: saved mail to INBOX'''
**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'''
**# 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, чтобы увидеть письма в почтовом ящике


<blockquote>'''# yum -y install mutt'''
> **# 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


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


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


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


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


'''# systemctl start httpd'''
> **# cd /var/www/html/**


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


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


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


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

Версия от 14:46, 24 июня 2022

    • Инструкция по установке EAI почтового сервера под ОС CentOS 7**
Почтовый сервер с поддержкой EAI

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

Необходимое ПО
 - Centos 7.4
 - Postfix 3.2.3
 - Dovecot 2.2.10
 - MariaDB 10.3.11
 - Squirrelmail 5.5.56
    • Примечания:**
 * в данной инструкции не разъясняется, как установить Centos 7.4
 * версия Postfix 3.x.x и выше поддерживает EAI
 * в реальных условиях необходимо также настроить сервер DNS
 * putty и winscp используются для подключения к серверу
Установка EAI почтового сервера
Задайте имя хоста
 - Обновите пакеты почтового сервера до последней версии

> **# yum -y update**

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

> **# hostnamectl set-hostname [[1]]**

 - Добавьте имя хоста в файл hosts

> **# vi /etc/hosts**

//Пример файла hosts//

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 [[2]]

1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [[3]]

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

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

> **# yum -y install wget**

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

> **# yum -y install telnet**

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

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

      1. systemctl status firewalld**

//Пример//

    • Active: active (running) since Mon 2019-11-18 14:12:03 +07; 1h 13min ago**
 - Проверьте открытые зону файрвола и сетевой интерфейс

> **# firewall-cmd --get-active-zones**

//Пример//

    • public**
    • interfaces: ens32**
 - Проверьте сервисы файрвола в публичной зоне

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

//Пример//

    • cockpit dhcpv6-client ssh**
 - Откройте необходимые сервисы на файрволе в публичной зоне почтового сервера

> **# firewall-cmd --permanent --zone=public --add-service=http** > > **# firewall-cmd --permanent --zone=public --add-service=https** > > **# firewall-cmd --permanent --zone=public --add-service=mysql** > > **# firewall-cmd --permanent --zone=public --add-service=smtp** > > **# firewall-cmd --permanent --zone=public --add-service=smtps** > > **# firewall-cmd --permanent --zone=public --add-service=imap** > > **# firewall-cmd --permanent --zone=public --add-service=imaps** > > **# firewall-cmd --reload**

 - Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы //*Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера ([[4]]//

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

//Пример//

    • cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh**
 - В этом примере мы открыли SELinux для удобства настройки

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

//Пример//

    • This file controls the state of SELinux on the system.**
      1. SELINUX= can take one of these three values:**
      1. enforcing - SELinux security policy is enforced.**
      1. permissive - SELinux prints warnings instead of enforcing.**
      1. disabled - No SELinux policy is loaded.**
    • SELINUX=disabled**
      1. SELINUXTYPE= can take one of these two values:**
      1. targeted - Targeted processes are protected,**
      1. mls - Multi Level Security protection.**
    • SELINUXTYPE=targeted**
 - Перезапустите сервер
      1. reboot**
      1. sestatus**

//Пример//

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

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

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

> **# cd /etc/pki/tls/certs** > > **# make** [[5]]

//Пример//

    • umask 77 ; \**
    • /usr/bin/openssl genrsa -aes128 2048 > eai.key**
    • Generating RSA private key, 2048 bit long modulus**
    • ...**
    • ...**
    • e is 65537 (0x10001)**
    • Verifying - Enter pass phrase:** [[6]]
 - Удалите //Passphase// из созданного ключа

> **# openssl rsa -in** [[7]] **-out** [[8]]

//Пример//

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

//Пример//

    • umask 77 ; \**
    • /usr/bin/openssl req -utf8 -new -key eai.key -out eai.csr**
    • You are about to be asked to enter information that will be incorporated**
    • into your certificate request.**
    • What you are about to enter is what is called a Distinguished Name or a DN.**
    • There are quite a few fields but you can leave some blank**
    • For some fields there will be a default value,**
    • If you enter '.', the field will be left blank.**
    • -----**
    • Country Name (2 letter code) [XX]:**RU [[9]]
    • State or Province Name (full name) []:**[[10]] [[11]]
    • Locality Name (eg, city) [Default City]:**[[12]] [[13]]
    • Organization Name (eg, company) [Default Company Ltd]:**[[14]] [[15]]
    • Organizational Unit Name (eg, section) []:**[[16]] [[17]]
    • Common Name (eg, your name or your server's hostname) []:**[[18]] [FQDN//]
    • Please enter the following 'extra' attributes**
    • to be sent with your certificate request**
    • A challenge password []:** [[20]]
    • An optional company name []:** [[21]]

4. Сгенерируйте ключ

      1. openssl x509 -in** [[22]] **-out** [[23]] **-req -signkey** [[24]] **-days 3650**

//Пример//

    • Signature ok**
    • subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@test.ru**
    • Getting Private key**
Установка mariadb, Postfix и Dovecot
 - Установите mariadb , Postfix , Dovecot и необходимые пакеты

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

 - Обновите postfix с версии 2.x.x до версии 3.x.x

На CentOS 7 версия postfix 2.x.x стоит по умолчанию. Необходимо ее удалить и обновить до версии 3.х.х. или выше.

      1. yum -y remove postfix**
      1. yum -y remove ssmtp**
      1. yum -y remove sendmail**

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

      1. vi /etc/yum.repos.d/gf.repo**

//Пример//

    • [gf]**
    • name=Ghettoforge packages that won't overwrite core distro packages.**
    • 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.**
      1. Please read [[27]] *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/

      1. cd /etc/pki/rpm-gpg/**

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

      1. yum -y install postfix3 postfix-mysql**

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

      1. 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]

      1. 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**
      1. Disabling symbolic-links is recommended to prevent assorted security risks**
    • symbolic-links=0**
      1. Settings user and group are ignored when systemd is used.**
      1. If you need to run mysqld under a different user or group,**
      1. customize your systemd unit file for mariadb according to the**
      1. instructions in [[29]]**
    • [mysqld_safe]**
    • log-error=/var/log/mariadb/mariadb.log**
    • pid-file=/var/run/mariadb/mariadb.pid**
      1. include all files from the config directory**
    • !includedir /etc/my.cnf.d**
 - Перезапустите MariaDB

> **# systemctl restart mariadb**

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

> **# mysql_secure_installation**

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

> **# mysql -u root -p**

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

> **# CREATE DATABASE [[30]];** > > **# USE [[31]];**

 - Создайте пользователя с правами доступа к базе eaimail

> **# GRANT SELECT, INSERT, UPDATE, DELETE ON** [[32]]**.* TO '**//yourdbuser//'**@'localhost' IDENTIFIED BY '**//yourdbpassword//'**;** > > **# GRANT SELECT, INSERT, UPDATE, DELETE ON** [[33]]**.* TO '**//yourdbuser//'**@'localhost.localdomain' IDENTIFIED BY '**//yourdbpassword//'**;** > > **# FLUSH PRIVILEGES;**

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

> **# SHOW GRANTS FOR '**//yourdbuser//'**@'localhost';**

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

> **# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );**

      1. CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );**
      1. CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );**
      1. quit**
 - Перезапустите MariaDB

> **# systemctl restart mariadb**

 - Настройте //domain// и //users// в базе данных интернационализированных адресов

> Зайдите в mariadb и выберите базу данных //eaimail//, введите домен ASCII и IDN домен, введите ASCII почту и почту EAI с паролем

      1. mysql -u root -p**
      1. INSERT INTO domains (domain) VALUES ('**test.ru'**);**
      1. INSERT INTO domains (domain) VALUES ('**тест.рф'**);**
      1. INSERT INTO users (email, password) VALUES ('**[[35]]'**, ENCRYPT('**//userpassword//'**));**
      1. INSERT INTO users (email, password) VALUES ('**[[36]]'**, ENCRYPT('**//userpassword//'**));**

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

      1. INSERT INTO forwardings (source,destination) VALUES ('**[[37]]'**,'**test@test.ru'**);**
      1. quit**
    • Настройка Postfix**
Создайте связь между Postfix и MariaDB
 - Создайте файл-скрипт, чтобы получить значение //domain// из базы данных

> **# vi /etc/postfix/mysql-virtual_domains.cf**

//Пример//

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

//Пример//

    • query = SELECT destination FROM forwardings WHERE source='%s'**
    • hosts = 127.0.0.1**
 - Создайте файл-скрипт для создания почтового ящика и использования его для логина

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

//Пример//

    • 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 =** [[47]]
    • 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/**[[49]]
    • 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 =** [[50]]
    • 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

//Пример//

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

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

      1. 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/**[[51]]
    • 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**
    • }**
    • unix_listener /var/spool/postfix/private/auth {**
    • mode = 0666**
    • }**
    • user = root**
    • }**
    • auth_mechanisms = plain login**
    • service auth-worker {**
    • user = root**
    • }**
    • protocol lda {**
    • log_path = /home/vmail/dovecot-deliver.log**
    • auth_socket_path = /var/run/dovecot/auth-master**
    • postmaster_address = postmaster@test.ru**
    • }**
    • protocol pop3 {**
    • pop3_uidl_format = %08Xu%08Xv**
    • pop3_client_workarounds = outlook-no-nuls oe-ns-eoh**
    • }**
    • passdb {**
    • driver = sql**
    • args = /etc/dovecot/dovecot-sql.conf.ext**
    • }**
    • userdb {**
    • driver = static**
    • args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes**
    • }**
 - Создайте скрипт, чтобы dovecot мог работать с SQL

> **# vi /etc/dovecot/dovecot-sql.conf.ext**

//Пример//

    • driver = mysql**
    • connect = host=127.0.0.1 dbname=**//eaimail// **user=**//yourdbuser// **password=**//yourdbpassword//
    • default_pass_scheme = CRYPT**
    • password_query = SELECT email as user, password FROM users WHERE email='%u';**
 - Установите необходимые права группе dovecot

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

 - Перезапустите dovecot

> **# systemctl restart dovecot**

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

> **# tail /var/log/maillog**

//Пример//

    • Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system**
    • Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix**
    • Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)**
Протестируйте почтовый сервер EAI
 - Протестируйте pop3

> **# telnet localhost pop3**

//Пример//

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

> **# telnet localhost 25** > > **# ehlo localhost**

//Пример//

    • 250-mail.test.ru**
    • 250-PIPELINING**
    • 250-SIZE 30720000**
    • 250-VRFY**
    • 250-ETRN**
    • 250-STARTTLS**
    • 250-AUTH PLAIN**
    • 250-AUTH=PLAIN**
    • 250-ENHANCEDSTATUSCODES**
    • 250-8BITMIME**
    • 250-DSN**
    • 250 SMTPUTF8**
 - Протестируйте отправку и получение почты при помощи mailx

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

      1. yum -y install mailx**
      1. mailx thai@test.ru (input subject then press //enter// follow by content and use Ctrl+D for sending out)**
      1. 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/

      1. cd /etc/postfix/dynamicmaps.cf.d/**
      1. vi mysql.cf**
    • mysql /usr/lib/postfix/postfix-mysql.so dict_mysql_open**
 - Проверьте журнал, чтобы увидеть результат отправки в Dovecot /home/vmail/dovecot-deliver.log, Примерный результат:
      1. 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**
      1. find**

//Пример//

    • .**
    • ./dovecot-uidlist**
    • ./cur**
    • ./new**
    • ./new/1285609582.P6115Q0M368794.li172-137**
    • ./dovecot.index**
    • ./dovecot.index.log**
    • ./tmp**
 - Проверьте почтовый ящик с помощью почтового клиента mutt, чтобы увидеть письма в почтовом ящике

> **# yum -y install mutt** > > **# mutt -f .**

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

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

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

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

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

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

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

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

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

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

> **# Test sending and receiving mail**