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