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

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 1: Строка 1:
</pre>Инструкция по установке EAI почтового сервера под ОС CentOS 7</pre>
= Почтовый сервер с поддержкой EAI =
С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО.
== Необходимое ПО ==
# Centos 7.4
# Postfix 3.2.3
# Dovecot 2.2.10
# MariaDB 10.3.11
# Squirrelmail 5.5.56
</pre>Примечания:</pre>
* в данной инструкции не разъясняется, как установить Centos 7.4
* версия Postfix 3.x.x и выше поддерживает EAI
* в реальных условиях необходимо также настроить сервер DNS
* putty и winscp используются для подключения к серверу
== Установка EAI почтового сервера  ==
== Задайте имя хоста ==
# Обновите пакеты почтового сервера до последней версии
<pre># yum -y update</pre>
# Задайте имя хоста (например, mail.test.ru) с помощью команды
<pre># hostnamectl set-hostname [https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1 </pre>'mail.test.ru</pre>']</pre>
# Добавьте имя хоста в файл hosts
<pre># vi /etc/hosts</pre>
''Пример файла 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 </pre></pre>'mail.test.ru</pre></pre>']
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [https://wiki.thnic.or.th/index.php?title=Mail.eai.in.th&action=edit&redlink=1 </pre></pre>'mail.test.ru</pre></pre>']
''*В зависимости от среды установки CentOS вам может понадобиться установить дополнительные сервисы (например, может быть недоступна команда «vi»)''
# Установите wget для скачивания дополнительного ПО
<pre># yum -y install wget</pre>
# Установите ''telnet'' для тестирования работы почтового сервера
<pre># yum -y install telnet</pre>
</pre>Инструкция по установке EAI почтового сервера под ОС CentOS 7</pre>
</pre>Инструкция по установке EAI почтового сервера под ОС CentOS 7</pre>


Строка 697: Строка 645:


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


</pre># vi /etc/aliases</pre>
</pre># vi /etc/aliases</pre>

Версия от 15:38, 24 июня 2022

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

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

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

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

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

Примечания:

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

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

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

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

'mail.test.ru']

  1. Добавьте имя хоста в файл hosts
# vi /etc/hosts

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

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 'mail.test.ru'

1 localhost localhost.localdomain localhost6 localhost6.localdomain6 'mail.test.ru'

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

  1. Установите wget для скачивания дополнительного ПО
# yum -y install wget
  1. Установите telnet для тестирования работы почтового сервера
# yum -y install telnet

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

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

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

# systemctl status firewalld

Пример

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

  1. Проверьте открытые зону файрвола и сетевой интерфейс
# firewall-cmd --get-active-zones

Пример

public interfaces: ens32

  1. Проверьте сервисы файрвола в публичной зоне
# firewall-cmd --zone=public --list-services

Пример

cockpit dhcpv6-client ssh

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

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

  1. Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы *Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера (https://spalinux.com/2015/06/centos-7-basic-configure-firewallby-firewall-cmd)
# firewall-cmd --zone=public --list-services

Пример

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

  1. В этом примере мы открыли SELinux для удобства настройки
# vi /etc/selinux/config

Пример

This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted

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

# reboot # sestatus

Пример

disabled

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

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

  1. Создайте индивидуальный ключ
# cd /etc/pki/tls/certs

# make eai.key

Пример

umask 77 ; \ /usr/bin/openssl genrsa -aes128 2048 > eai.key Generating RSA private key, 2048 bit long modulus ... ... e is 65537 (0x10001) Enter pass phrase: #set passphrase Verifying - Enter pass phrase: #confirm

  1. Удалите Passphase из созданного ключа
# openssl rsa -in

eai.key -out eai.key

Пример

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

  1. Создайте csr
  2. # make eai.csr

Пример

umask 77 ; \ /usr/bin/openssl req -utf8 -new -key eai.key -out eai.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:RU #country State or Province Name (full name) []:Moscow #state Locality Name (eg, city) [Default City]:Moscow #city Organization Name (eg, company) [Default Company Ltd]:EAI #company Organizational Unit Name (eg, section) []:IT #department Common Name (eg, your name or your server's hostname) []:mail.test.ru #server's FQDN Email Address []:xxx@test.ru #email address Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: #Enter An optional company name []: #Enter

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

# openssl x509 -in eai.csr -out eai.crt -req -signkey eai.key -days 3650

Пример

Signature ok subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@test.ru Getting Private key

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

  1. Установите mariadb , Postfix , Dovecot и необходимые пакеты
# yum --enablerepo=centosplus install postfix

# yum install dovecot mariadb-server dovecot-mysql

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

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

# yum -y remove postfix # yum -y remove ssmtp # yum -y remove sendmail

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

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

Пример

[gf] name=Ghettoforge packages that won't overwrite core distro packages. mirrorlist=http://mirrorlist.ghettoforge.org/el/7/gf/$basearch/mirrorlist enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7 failovermethod=priority [gf-plus] name=Ghettoforge packages that will overwrite core distro packages. mirrorlist=http://mirrorlist.ghettoforge.org/el/7/plus/$basearch/mirrorlist # Please read http://ghettoforge.org/index.php/Usage *before* enabling this repository! enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7 failovermethod=priority

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

# cd /etc/pki/rpm-gpg/ # wget http://mirror.ghettoforge.org/distributions/gf/RPM-GPG-KEY-gf.el7

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

# yum -y install postfix3 postfix-mysql

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

# postconf -d | grep mail_version mail_version = 3.5.7

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

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

  1. Проверьте статус mariadb, postfix, dovecot
# systemctl status mariadb

# systemctl status postfix # systemctl status dovecot

Настройка MariaDB

  1. Установите UTF8 в mysql для работы с Unicode, добавив следующую команду к

/etc/my.cnf.d/maridb-server.cnf для [mysqld]

# vi /etc/my.cnf

Пример

[mysqld] character-set-server = utf8 collation-server = utf8_general_ci skip-character-set-client-handshake bind-address=127.0.0.1 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d

  1. Перезапустите MariaDB
# systemctl restart mariadb
  1. Настройте безопасный доступ к mysql, установив пароль для пользователя с правами root (* задайте только новый пароль, остальное пропустите, нажав клавишу enter)
# mysql_secure_installation
  1. Зайдите в аккаунт mysql с новым паролем
# mysql -u root -p
  1. Создайте новую базу данных (eaimail) для хранения записей об использовании почтового сервера
# CREATE DATABASE [https://wiki.thnic.or.th/index.php?title=Eaimail&action=edit&redlink=1 

'eaimail']; # USE 'eaimail';

  1. Создайте пользователя с правами доступа к базе eaimail
# GRANT SELECT, INSERT, UPDATE, DELETE ON

eaimail.* TO yourdbuser@'localhost' IDENTIFIED BY yourdbpassword; # GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO yourdbuser@'localhost.localdomain' IDENTIFIED BY yourdbpassword; # FLUSH PRIVILEGES;

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

yourdbuser@'localhost';

  1. Создайте таблицы для domainsforwardings (для пересылки почты с интернационализированных адресов на адреса в кодировке ASCII) и users для создания почтовых ящиков
# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );

# CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) ); # CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) ); # quit

  1. Перезапустите MariaDB
# systemctl restart mariadb
  1. Настройте domain и users в базе данных интернационализированных адресов

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

# mysql -u root -p # USE eaimail; # INSERT INTO domains (domain) VALUES ('test.ru'); # INSERT INTO domains (domain) VALUES ('тест.рф'); # INSERT INTO users (email, password) VALUES ('test@test.ru', ENCRYPT(userpassword)); # INSERT INTO users (email, password) VALUES ('[тест@тест.рф]', ENCRYPT(userpassword));

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

# INSERT INTO forwardings (source,destination) VALUES ('[тест@тест.рф]','test@test.ru'); # quit Настройка Postfix

Создайте связь между Postfix и MariaDB

  1. Создайте файл-скрипт, чтобы получить значение domain из базы данных
# vi /etc/postfix/mysql-virtual_domains.cf

Пример

user = yourdbuser password = yourdbpassword dbname = eaimail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1

  1. Создайте файл mysql-virtual_forwardings.cf для получения пересланной почты из базы данных
# vi /etc/postfix/mysql-virtual_forwardings.cf

Пример

user = yourdbuser password = yourdbpassword dbname = eaimail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1

  1. Создайте файл-скрипт для создания почтового ящика и использования его для логина
# vi /etc/postfix/mysql-virtual_mailboxes.cf

Пример

user = yourdbuser password = yourdbpassword dbname = eaimail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1

  1. Создайте файл-скрипт для пересылки всей почты на другой сервер SMTP
# vi /etc/postfix/mysql-virtual_email2email.cf

Пример

user = yourdbuser password = yourdbpassword dbname = eaimail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1

  1. Установите необходимые права созданным скриптам
# chmod o= /etc/postfix/mysql-virtual_*.cf

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

  1. Создайте пользователя и группу для почтового ящика
# groupadd -g 5000 vmail 

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

  1. Измените /etc/postfix/main.cf
# vi /etc/postfix/main.cf

Пример

inet_interfaces = all inet_protocols = ipv4 mydestination = localhost, localhost.localdomain alias_database = hash:/etc/aliases sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix meta_directory = /etc/postfix shlib_directory = no myhostname = mail.test.ru mydomain = test.ru myorigin = $mydomain readme_directory = no mynetworks = 127.0.0.1 message_size_limit = 30720000 smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes smtpd_use_tls = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_tls_cert_file = /etc/pki/tls/certs/eai.crt smtpd_tls_key_file = /etc/pki/tls/certs/eai.key smtpd_tls_security_level = may smtpd_tls_auth_only = yes smtpd_tls_loglevel = 1 alias_maps = hash:/etc/aliases virtual_mailbox_base = /home/vmail virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_alias_domains = тест.рф virtual_transport = dovecot virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf smtputf8_enable = yes proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks

  1. Измените /etc/postfix/master.cf , добавив команду в конце файла
# vi /etc/postfix/master.cf

Пример

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

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

Пример

smtps inet n - - - - smtpd

-o syslog_name=postfix/smtps

-o smtpd_tls_wrappermode=yes

-o smtpd_sasl_auth_enable=yes

-o smtpd_client_restrictions=permit_sasl_authenticated,reject

-o smtpd_relay_restrictions=permit_sasl_authenticated,reject

-o milter_macro_daemon_name=ORIGINATING

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

Пример

# systemctl restart postfix

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

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

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

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

# systemctl restart postfix

Настройка Dovecot

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

Пример

protocols = imap pop3 lmtp log_timestamp = "%Y-%m-%d %H:%M:%S " mail_location = maildir:/home/vmail/%d/%n/Maildir ssl_cert = </etc/pki/tls/certs/eai.crt ssl_key = </etc/pki/tls/certs/eai.key ssl_dh_parameters_length = 2048 ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL namespace { type = private separator = . prefix = INBOX. inbox = yes } service auth { unix_listener auth-master { mode = 0600 user = vmail } unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } user = root } auth_mechanisms = plain login service auth-worker { user = root } protocol lda { log_path = /home/vmail/dovecot-deliver.log auth_socket_path = /var/run/dovecot/auth-master postmaster_address = postmaster@test.ru } protocol pop3 { pop3_uidl_format = %08Xu%08Xv pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes }

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

Пример

driver = mysql connect = host=127.0.0.1 dbname=eaimail user=yourdbuser password=yourdbpassword default_pass_scheme = CRYPT password_query = SELECT email as user, password FROM users WHERE email='%u';

  1. Установите необходимые права группе dovecot
# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext

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

  1. Перезапустите dovecot
# systemctl restart dovecot
  1. Проверьте журнал почтового сервера /var/log/maillog
# tail /var/log/maillog

Пример

Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)

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

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

Пример

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

  1. Протестируйте SMTP
# telnet localhost 25

# ehlo localhost

Пример

250-mail.test.ru 250-PIPELINING 250-SIZE 30720000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN 250-AUTH=PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 SMTPUTF8

  1. Протестируйте отправку и получение почты при помощи mailx

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

# yum -y install mailx # mailx thai@test.ru (input subject then press enter follow by content and use Ctrl+D for sending out) # tail /var/log/maillog

Пример

Nov 13 15:19:07 mail postfix/pickup[31954]: E9AB020199E5: uid=0 from=<root> Nov 13 15:19:07 mail postfix/cleanup[1938]: E9AB020199E5: message-id=<20171113081907.E9AB020199E5@mail.test.ru> Nov 13 15:19:07 mail postfix/qmgr[21141]: E9AB020199E5: from=<root@test.ru>, size=434, nrcpt=1 (queue active) Nov 13 15:19:08 mail postfix/pipe[1946]: E9AB020199E5: to=<tanagan@test.ru>, relay=dovecot, delay=0.09, delays=0.04/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service) Nov 13 15:19:08 mail postfix/qmgr[21141]: E9AB020199E5: removed

Если вы нашли ошибку в журнале: «unsupported dictionary type: MySQL», причина заключается в использовании postfix 3.2.4. В этой версии еще есть баги. Проверьте /etc/postfix/dynamicmaps.cf.d/

# cd /etc/postfix/dynamicmaps.cf.d/ # vi mysql.cf mysql /usr/lib/postfix/postfix-mysql.so dict_mysql_open

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

# tail /home/vmail/dovecot-deliver.log 2017-11-13 15:19:08 lda(tanagan@test.ru): Info: msgid=<20171113081907.E9AB020199E5@mail.test.ru>: saved mail to INBOX

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

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

Пример

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

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

# mutt -f .

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

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

Установите SquirrelMail

  1. Установите squirrelmail
# yum -y install epel-release

# yum install squirrelmail

  1. Если у вас не установлен Apache, установите Apache
# yum -y install httpd

# systemctl enable httpd # systemctl start httpd # systemctl status httpd

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

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

  1. Создайте каталог данных для squirrelmail
# cd /var/lib/squirrelmail/

# mkdir data # chmod ugo+rwx data/

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