Почтовый сервер со всем фаршем на 10.04 LTS Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:почтовый_сервер_со_всем_фаршем_на_10.04_lts [2011/07/20 11:40]
[Установка horde]
wiki:почтовый_сервер_со_всем_фаршем_на_10.04_lts [2012/09/10 13:27] (текущий)
[Настройка Postfix]
Строка 1: Строка 1:
-===== О документе ===== +===== Почтовый сервер со всем фаршем на 10.04 LTS ===== 
-Этот документ описывает процедуру установки почтового сервера на базе Ubuntu 10.04 LTS. В документе использовано следующее форматирование:​+Этот документ описывает процедуру установки почтового сервера на базе ​//Ubuntu 10.04 LTS//. В документе использовано следующее форматирование:​
  
-''​строки с таким выделением''​+<code bash>строки с таким выделением</​code>​
  
 это команды,​ которые мы задаем в терминале. это команды,​ которые мы задаем в терминале.
  
-**строки с таким выделением**+<note tip>**строки с таким выделением**</​note>​
  
 это ответы,​ которые мы получаем на введенные нами команды это ответы,​ которые мы получаем на введенные нами команды
 +
 <​file>​строки с таким выделением</​file>​ <​file>​строки с таким выделением</​file>​
 +
 это содержимое различного рода конфигурационных файлов. это содержимое различного рода конфигурационных файлов.
  
Строка 22: Строка 24:
 В процессе создания документа использована куча различного рода информации,​ доступной в Интернет. К сожалению,​ не представляется возможным перечислить все источники информации,​ однако хочется выразить признательность всем авторам,​ чья работа так или иначе была использована при написании этого документа. В процессе создания документа использована куча различного рода информации,​ доступной в Интернет. К сожалению,​ не представляется возможным перечислить все источники информации,​ однако хочется выразить признательность всем авторам,​ чья работа так или иначе была использована при написании этого документа.
 ===== Постановка задачи ===== ===== Постановка задачи =====
-Мы установим на чистую машину на //Ubuntu 10.04 LTS server// почтовый сервер на базе //​postfix//​. Для "​забора"​ почты по протоколам //​pop3/​imap//​ будем использовать //dovecot// с поддержкой квот для почтовых ящиков пользователей. На нашем сервере будет располагаться почта для двух разных доменов - //aaa.ru// (наш "​основной"​ домен) и //bbb.ru//. Для настройки почты будем использовать //mysql//. Для аутентификации пользователей будем использовать два механизма - //mysql// для домена //bbb.ru// и //​openldap//​ для пользователей нашего основного домена //aaa.ru//. Кроме этого, почтовый сервер будет проверять входящую почту с помощью //amavis// на вирусы (//​clamav//​) и спам (//​spamassassin//​). Сделаем также лист рассылки (//​mailman//​) и автоответчик для пользователей. Установим систему для доступа к почте через web — //​horde/​imp//​. Мы будем использовать //​horde/​imp//,​ т.к. это самый продвинутый веб-клиент,​ позволяющий полностью использовать все современные возможности почты, включая подписывание почты по протоколам //S/MIME// и прочие. Кроме этого, установим munin для рисования красивых графиков работы нашего почтового сервера.+Мы установим на чистую машину на //Ubuntu 10.04 LTS server// почтовый сервер на базе //​postfix//​. Для "​забора"​ почты по протоколам //​pop3/​imap//​ будем использовать //dovecot// с поддержкой квот для почтовых ящиков пользователей. На нашем сервере будет располагаться почта для двух разных доменов - //aaa.ru// (наш "​основной"​ домен) и //bbb.ru//. Для настройки почты будем использовать //mysql//. Для аутентификации пользователей будем использовать два механизма - //mysql// для домена //bbb.ru// и //​openldap//​ для пользователей нашего основного домена //aaa.ru//. Кроме этого, почтовый сервер будет проверять входящую почту с помощью //amavis// на вирусы (//​clamav//​) и спам (//​spamassassin//​). Сделаем также лист рассылки (//​mailman//​) и автоответчик для пользователей. Установим систему для доступа к почте через web — //​horde/​imp//​. Мы будем использовать //​horde/​imp//,​ т.к. это самый продвинутый веб-клиент,​ позволяющий полностью использовать все современные возможности почты, включая подписывание почты по протоколам //S/MIME// и прочие. Кроме этого, установим ​//munin// для рисования красивых графиков работы нашего почтового сервера.
  
 Итак, предположим,​ что у нас есть только что установленная 10.04 LTS. Предположим также, что компьютер зовут //"​oban"//,​ он имеет IP адреc //​10.0.0.6//,​ находится в DMZ за NAT. Для доступа извне на наш почтовый сервер мы пробросим нужные порты по протоколу TCP – 80, 443 (для доступа к веб-серверу),​ 25 (для доступа к SMTP-серверу),​ 110, 143, 993, 995 (для “забора” почты снаружи по протоколам POP3 и IMAP). Если нужно, откроем еще порт 22 для доступа по SSH (хотя этого делать не стоит – лучше иметь доступ к серверу только изнутри нашей сети). Итак, предположим,​ что у нас есть только что установленная 10.04 LTS. Предположим также, что компьютер зовут //"​oban"//,​ он имеет IP адреc //​10.0.0.6//,​ находится в DMZ за NAT. Для доступа извне на наш почтовый сервер мы пробросим нужные порты по протоколу TCP – 80, 443 (для доступа к веб-серверу),​ 25 (для доступа к SMTP-серверу),​ 110, 143, 993, 995 (для “забора” почты снаружи по протоколам POP3 и IMAP). Если нужно, откроем еще порт 22 для доступа по SSH (хотя этого делать не стоит – лучше иметь доступ к серверу только изнутри нашей сети).
Строка 28: Строка 30:
 Пользователь,​ за которым мы "​сидим"​ - это, конечно,​ не //root//, а //toor// (Вы же не сидите за рутом, правда?​). ​ Пользователь,​ за которым мы "​сидим"​ - это, конечно,​ не //root//, а //toor// (Вы же не сидите за рутом, правда?​). ​
 ===== Установка системы ===== ===== Установка системы =====
-Вначале установим "​чистую"​ систему Ubuntu 10.04 LTS server. В процессе установки ничего дополнительно устанавливать не будем, все нужное установим позже. ​+Вначале установим "​чистую"​ систему ​//Ubuntu 10.04 LTS server//. В процессе установки ничего дополнительно устанавливать не будем, все нужное установим позже. ​
  
-Первое что мы сделаем после перезагрузки,​ еще не отходя от терминала - установим ssh-сервер,​ чтобы все остальное делать удаленно:​+Первое что мы сделаем после перезагрузки,​ еще не отходя от терминала - установим ​//ssh-сервер//, чтобы все остальное делать удаленно:​
  
-''​sudo apt-get install openssh-server''​+<code bash>sudo apt-get install openssh-server</​code>​
  
 После этого со спокойной совестью выходим и идем к нашему собственному компьютеру. Чтобы не набирать каждый раз пароль при входе на наш сервер,​ сделаем вход по ключу: После этого со спокойной совестью выходим и идем к нашему собственному компьютеру. Чтобы не набирать каждый раз пароль при входе на наш сервер,​ сделаем вход по ключу:
  
-''​ssh-copy-id -i ~/​.ssh/​id_rsa.pub toor@10.0.0.6''​+<code bash>ssh-copy-id -i ~/​.ssh/​id_rsa.pub toor@10.0.0.6</​code>​
  
 Нас спросят,​ уверены ли мы, что хотим соединиться с этим сервером ​ Нас спросят,​ уверены ли мы, что хотим соединиться с этим сервером ​
  
-**Are you sure you want to continue connecting (yes/no)?**+<note tip>**Are you sure you want to continue connecting (yes/no)?**</​note>​ 
 + 
 +Ответим
  
-Ответим ''​yes''​+<code bash>yes</​code>​
  
-Нас спросят пароль пользователя toor на oban +Нас спросят пароль пользователя ​//toor// на //oban// 
  
-**toor@10.0.0.6'​s password:**+<note tip>**toor@10.0.0.6'​s password:**</​note>​
  
 Введем. Все, теперь для захода на наш сервер с нашего компьютера достаточно набрать ​ Введем. Все, теперь для захода на наш сервер с нашего компьютера достаточно набрать ​
  
-''​ssh toor@10.0.0.6''​+<code bash>ssh toor@10.0.0.6</​code>​
  
 и мы там. Заметьте,​ что это не то же самое, что попытка входа как ​ и мы там. Заметьте,​ что это не то же самое, что попытка входа как ​
  
-''​ssh toor@oban''​+<code bash>ssh toor@oban</​code>​
  
 так что если хотите - проделайте это еще раз уже для такого варианта. так что если хотите - проделайте это еще раз уже для такого варианта.
Строка 60: Строка 64:
 Итак, вначале установим все обновления (их наверняка набралось уже порядочно): ​ Итак, вначале установим все обновления (их наверняка набралось уже порядочно): ​
  
-''​sudo apt-get update  +<code bash>sudo apt-get update  
-sudo apt-get dist-upgrade''​+sudo apt-get dist-upgrade</​code>​
  
-Мы используем dist-upgrade а не просто upgrade чтобы получить обновления в том числе и для ядра. ​+Мы используем ​//dist-upgrade// а не просто ​//upgrade// чтобы получить обновления в том числе и для ядра. ​
  
 Естественно,​ соглашаемся с предложенным списком и (если были обновления ядра или подобные важные обновления) перезагружаемся ​ Естественно,​ соглашаемся с предложенным списком и (если были обновления ядра или подобные важные обновления) перезагружаемся ​
  
-''​sudo reboot ​''​+<code bash>sudo reboot</​code>​
  
 Начинаем установку. Начинаем установку.
Строка 73: Строка 77:
 Установим нужные пакеты Установим нужные пакеты
  
-''​sudo apt-get install postfix postfix-mysql postfix-ldap postfix-doc postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql dovecot-imapd dovecot-pop3d dovecot-common mysql-client mysql-server apache2 libapache2-mod-php5 php5 php5-mysql''​+<code bash>sudo apt-get install postfix postfix-mysql postfix-ldap postfix-doc postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql dovecot-imapd dovecot-pop3d dovecot-common mysql-client mysql-server apache2 libapache2-mod-php5 php5 php5-mysql</​code>​
  
 (здесь и далее соглашаемся с установкой дополнительных пакетов). (здесь и далее соглашаемся с установкой дополнительных пакетов).
Строка 79: Строка 83:
 Отвечаем на вопросы Отвечаем на вопросы
  
-**Новый пароль для MySQL пользователя "​root":​**+<note tip>**Новый пароль для MySQL пользователя "​root":​**</​note>​
  
-Обязательно устанавливаем пароль для пользователя root в mysql (это - не пароль пользователя root на компьютере,​ не путайте!). Здесь и далее это - +Обязательно устанавливаем пароль для пользователя ​//root// в //mysql// (это - не пароль пользователя ​//root// на компьютере,​ не путайте!). Здесь и далее это - 
  
-''​<​mysql_password>​''​+<code bash><​mysql_password>​</​code>​
  
-**Повторите ввод пароля для MySQL пользователя "​root":​**+<note tip>**Повторите ввод пароля для MySQL пользователя "​root":​**</​note>​
  
-''​<​mysql_password>​''​+<code bash><​mysql_password>​</​code>​
  
-**Выберите тип настройки почтового сервера,​ который оптимально удовлетворяет ваши требования.**+<note tip>**Выберите тип настройки почтового сервера,​ который оптимально удовлетворяет ваши требования.**</​note>​
  
 Здесь просто жмем ''<​OK>''​. Здесь просто жмем ''<​OK>''​.
  
-**Общий тип почтовой настройки:​**+<note tip>**Общий тип почтовой настройки:​**</​note>​
  
-Выбираем ​''​Internet - сайт''​+Выбираем ​
  
-**Системное почтовое имя:**+<code bash>​Internet - сайт</​code>​
  
-''​oban.aaa.ru''​+<note tip>​**Системное почтовое имя:​**</​note>​ 
 + 
 +<code bash>oban.aaa.ru</​code>​
  
 После окончания установки начнем конфигурацию. ​ После окончания установки начнем конфигурацию. ​
  
-Создадим базу данных mysql для хранения всей информации для почтового сервера ​+Создадим базу данных ​//mysql// для хранения всей информации для почтового сервера ​
  
-''​mysqladmin -u root -p create mail''​+<code bash>mysqladmin -u root -p create mail</​code>​
  
-Нас спросят пароль пользователя root mysql+Нас спросят пароль пользователя ​//root// //mysql//
  
-**Enter password:**+<note tip>**Enter password:**</​note>​
  
 Введем выбранный на этапе установки пароль Введем выбранный на этапе установки пароль
  
-''​<​mysql_password>​''​+<code bash><​mysql_password>​</​code>​
  
-Перейдем в оболочку mysql (опять вводя тот же пароль)+Перейдем в оболочку ​//mysql// (опять вводя тот же пароль)
  
-''​mysql -u root -p''​+<code bash>mysql -u root -p</​code>​
  
-Создадим специального пользователя mail_admin и паролем <​mail_admin_password>​ (замените!) для доступа к нашей базе данных mail с привилегиями SELECT, INSERT, UPDATE и DELETE. Доступ ему будет разрешен только с локального компьютера (т.е. с самого сервера):​+Создадим специального пользователя ​//mail_admin// и паролем ​//<​mail_admin_password>​// (замените!) для доступа к нашей базе данных ​//mail// с привилегиями ​//SELECT////INSERT////UPDATE// и //DELETE//. Доступ ему будет разрешен только с локального компьютера (т.е. с самого сервера):​
  
-''​GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO '​mail_admin'​@'​localhost'​ IDENTIFIED BY '<​mail_admin_password>'; ​\\  +<code mysql>GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO '​mail_admin'​@'​localhost'​ IDENTIFIED BY '<​mail_admin_password>';​  
-GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO '​mail_admin'​@'​localhost.localdomain'​ IDENTIFIED BY '<​mail_admin_password>'; ​\\ +GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO '​mail_admin'​@'​localhost.localdomain'​ IDENTIFIED BY '<​mail_admin_password>';​ 
-FLUSH PRIVILEGES;''​+FLUSH PRIVILEGES;</​code>​
  
-Теперь создадим нужные нам таблицы в базе данных mail+Теперь создадим нужные нам таблицы в базе данных ​//mail// 
 + 
 +<code mysql>​use mail; 
 +CREATE TABLE domains (  
 +domain varchar(50) NOT NULL,  
 +PRIMARY KEY (domain) )  
 +TYPE=MyISAM;​  
 + 
 +CREATE TABLE forwardings (  
 +source varchar(80) NOT NULL,  
 +destination TEXT NOT NULL,  
 +PRIMARY KEY (source) )  
 +TYPE=MyISAM;​  
 + 
 +CREATE TABLE transport (  
 +domain varchar(128) NOT NULL DEFAULT '',​  
 +transport varchar(128) NOT NULL DEFAULT '',​  
 +UNIQUE KEY domain (`domain`)  
 +) ENGINE=MyISAM;​  
 + 
 +CREATE TABLE users (  
 +email varchar(80) NOT NULL,  
 +password varchar(20) NOT NULL,  
 +quota varchar(20) DEFAULT '​0',​ 
 +PRIMARY KEY (email)  
 +) TYPE=MyISAM;​ </​code>​
  
-''​use mail;\\ 
-CREATE TABLE domains ( \\ 
-domain varchar(50) NOT NULL, \\ 
-PRIMARY KEY (domain) ) \\ 
-TYPE=MyISAM;​ \\ 
-\\ 
-CREATE TABLE forwardings ( \\ 
-source varchar(80) NOT NULL, \\ 
-destination TEXT NOT NULL, \\ 
-PRIMARY KEY (source) ) \\ 
-TYPE=MyISAM;​ \\ 
-\\ 
-CREATE TABLE transport ( \\ 
-domain varchar(128) NOT NULL DEFAULT ' ', \\ 
-transport varchar(128) NOT NULL DEFAULT ' ', \\ 
-UNIQUE KEY domain (`domain`) \\ 
-) ENGINE=MyISAM;​ \\ 
-\\ 
-CREATE TABLE users ( \\ 
-email varchar(80) NOT NULL, \\ 
-password varchar(20) NOT NULL, \\ 
-quota varchar(20) DEFAULT '​0',​\\ 
-PRIMARY KEY (email) \\ 
-) TYPE=MyISAM;​ ''​ 
-\\ 
 (здесь мы задаем квоту для пользователей по умолчанию без лимита - 0) (здесь мы задаем квоту для пользователей по умолчанию без лимита - 0)
  
-и выйдем из оболочки mysql+и выйдем из оболочки ​//mysql// 
 + 
 +<code bash>​quit;</​code>​
  
-''​quit;''​ 
 ===== Настройка Postfix ===== ===== Настройка Postfix =====
-Сейчас нам необходимо указать Postfix, где ему искать информацию в базе данных. Для этого создадим шесть текстовых файлов. Как вы можете заметить,​ я указываю Postfix соединяться с MySQL через IP адрес 127.0.0.1 вместо localhost. Это связано с тем, что Postfix запущенный в chroot окружении не сможет иметь доступа к MySQL сокету,​ если будет пытаться использовать localhost для подключения. ​+Сейчас нам необходимо указать ​//Postfix//, где ему искать информацию в базе данных. Для этого создадим шесть текстовых файлов. Как вы можете заметить,​ я указываю ​//Postfix// соединяться с //MySQL// через IP адрес ​//127.0.0.1// вместо ​//localhost//. Это связано с тем, что ​//Postfix// запущенный в chroot окружении не сможет иметь доступа к //MySQL// сокету,​ если будет пытаться использовать ​//localhost// для подключения. ​
  
 Проверим,​ что mysql "​слушает"​ локальный IP адрес Проверим,​ что mysql "​слушает"​ локальный IP адрес
  
-''​cat /​etc/​mysql/​my.cnf | grep bind''​+<code bash>cat /​etc/​mysql/​my.cnf | grep bind</​code>​
  
-**bind-address = 127.0.0.1**+<note tip>**bind-address = 127.0.0.1**</​note>​
  
-Если пришлось поменять /​etc/​mysql/​my.cnf,​ то перезапустим mysql+Если пришлось поменять /​etc/​mysql/​my.cnf,​ то перезапустим ​//mysql//
  
-''​sudo service mysql restart''​+<code bash>sudo service mysql restart</​code>​
  
 и проверяем,​ что он действительно слушает этот адрес: ​ и проверяем,​ что он действительно слушает этот адрес: ​
  
-''​sudo netstat -tap | grep mysql ''​+<code bash>sudo netstat -tap | grep mysql </​code>​
  
-**tcp             0 localhost:​mysql ​        ​*:*                     ​LISTEN ​     5908/​mysqld ​    ​**+<note tip>**tcp 0 0 localhost:​mysql *:* LISTEN 5908/mysqld **</​note>​
  
 (здесь 5908- это номер процесса,​ у Вас будет другой). (здесь 5908- это номер процесса,​ у Вас будет другой).
  
-Теперь создадим файлы для того, чтобы postfix знал, где что искать в нашей базе данных:​+Теперь создадим файлы для того, чтобы ​//postfix// знал, где что искать в нашей базе данных:​
  
-''​sudo nano /​etc/​postfix/​mysql-virtual_domains.cf''​+<code bash>sudo nano /​etc/​postfix/​mysql-virtual_domains.cf</​code>​
  
 <​file>​user = mail_admin ​ <​file>​user = mail_admin ​
Строка 188: Строка 195:
 hosts = 127.0.0.1</​file>​ hosts = 127.0.0.1</​file>​
  
-''​sudo nano /​etc/​postfix/​mysql-virtual_forwardings.cf''​+<code bash>sudo nano /​etc/​postfix/​mysql-virtual_forwardings.cf</​code>​
  
 <​file>​user = mail_admin ​ <​file>​user = mail_admin ​
Строка 196: Строка 203:
 hosts = 127.0.0.1</​file>​ hosts = 127.0.0.1</​file>​
  
-''​sudo nano /​etc/​postfix/​mysql-virtual_mailboxes.cf''​+<code bash>sudo nano /​etc/​postfix/​mysql-virtual_mailboxes.cf</​code>​
  
 <​file>​user = mail_admin ​ <​file>​user = mail_admin ​
Строка 204: Строка 211:
 hosts = 127.0.0.1</​file>​ hosts = 127.0.0.1</​file>​
  
-''​sudo nano /​etc/​postfix/​mysql-virtual_email2email.cf''​+<code bash>sudo nano /​etc/​postfix/​mysql-virtual_email2email.cf</​code>​
  
 <​file>​user = mail_admin ​ <​file>​user = mail_admin ​
Строка 212: Строка 219:
 hosts = 127.0.0.1</​file>​ hosts = 127.0.0.1</​file>​
  
-''​sudo nano touch /​etc/​postfix/​mysql-virtual_transports.cf''​+<code bash>sudo nano /​etc/​postfix/​mysql-virtual_transports.cf</​code>​
  
 <​file>​user = mail_admin ​ <​file>​user = mail_admin ​
Строка 220: Строка 227:
 hosts = 127.0.0.1</​file>​ hosts = 127.0.0.1</​file>​
  
-Т.к. в этих файлах у нас лежит пароль для доступа к базе данных,​ меняем права доступа к ним (разрешаем чтение только группе postfix, в которую входит наш почтовый сервер postfix):+Т.к. в этих файлах у нас лежит пароль для доступа к базе данных,​ меняем права доступа к ним (разрешаем чтение только группе ​//postfix//, в которую входит наш почтовый сервер ​//postfix//):
  
-''​sudo chmod o= /​etc/​postfix/​mysql-virtual_*.cf ​\\ +<code bash>sudo chmod o= /​etc/​postfix/​mysql-virtual_*.cf  
-sudo chgrp postfix /​etc/​postfix/​mysql-virtual_*.cf''​+sudo chgrp postfix /​etc/​postfix/​mysql-virtual_*.cf</​code>​
  
 Проверяем права доступа к этим файлам:​ Проверяем права доступа к этим файлам:​
  
-''​ls -al /​etc/​postfix/​mysql-virtual*.cf''​+<code bash>ls -al /​etc/​postfix/​mysql-virtual*.cf</​code>​
  
-**-rw-r----- 1 root postfix 134 2010-11-26 11:24 /​etc/​postfix/​mysql-virtual_domains.cf \\+<note tip>**-rw-r----- 1 root postfix 134 2010-11-26 11:24 /​etc/​postfix/​mysql-virtual_domains.cf \\
 -rw-r----- 1 root postfix 119 2010-11-26 11:25 /​etc/​postfix/​mysql-virtual_email2email.cf \\ -rw-r----- 1 root postfix 119 2010-11-26 11:25 /​etc/​postfix/​mysql-virtual_email2email.cf \\
 -rw-r----- 1 root postfix 132 2010-11-26 11:24 /​etc/​postfix/​mysql-virtual_forwardings.cf \\ -rw-r----- 1 root postfix 132 2010-11-26 11:24 /​etc/​postfix/​mysql-virtual_forwardings.cf \\
 -rw-r----- 1 root postfix 188 2010-11-26 11:25 /​etc/​postfix/​mysql-virtual_mailboxes.cf \\ -rw-r----- 1 root postfix 188 2010-11-26 11:25 /​etc/​postfix/​mysql-virtual_mailboxes.cf \\
--rw-r----- 1 root postfix 128 2010-11-26 11:25 /​etc/​postfix/​mysql-virtual_transports.cf**+-rw-r----- 1 root postfix 128 2010-11-26 11:25 /​etc/​postfix/​mysql-virtual_transports.cf**</​note>​
  
-Создаем нового пользователя и группу с названием vmail с домашней директорией /home/vmail ,  где будут находится почтовые ящики:+Создаем нового пользователя и группу с названием ​//vmail// с домашней директорией /home/vmail ,  где будут находится почтовые ящики:
  
-''​sudo groupadd -g 5000 vmail \\ +<code bash>sudo groupadd -g 5000 vmail \\ 
-sudo useradd -g vmail -u 5000 vmail -d /home/vmail -m''​+sudo useradd -g vmail -u 5000 vmail -d /home/vmail -m</​code>​
  
-Предварительная настройка postfix (нам еще придется ее менять чуть позже). Не забудьте поменять oban.aaa.ru на Ваше реальное полное имя сервера,​ а то postfix не будет работать! ​+Предварительная настройка ​//postfix// (нам еще придется ее менять чуть позже). Не забудьте поменять ​//oban.aaa.ru// на Ваше реальное полное имя сервера,​ а то //postfix// не будет работать! ​
  
-''​sudo postconf -e '​myhostname = oban.aaa.ru' ​\\ +<code bash>sudo postconf -e '​myhostname = oban.aaa.ru'​  
-sudo postconf -e '​mydestination = oban.aaa.ru,​ localhost, localhost.localdomain' ​\\ +sudo postconf -e '​mydestination = oban.aaa.ru,​ localhost, localhost.localdomain'​  
-sudo postconf -e '​mynetworks = 127.0.0.0/​8' ​\\ +sudo postconf -e '​mynetworks = 127.0.0.0/​8'​  
-sudo postconf -e '​virtual_alias_domains =' ​\\ +sudo postconf -e '​virtual_alias_domains ='  
-sudo postconf -e '​virtual_alias_maps = proxy:​mysql:/​etc/​postfix/​mysql-virtual_forwardings.cf,​ mysql:/​etc/​postfix/​mysql-virtual_email2email.cf' ​\\ +sudo postconf -e '​virtual_alias_maps = proxy:​mysql:/​etc/​postfix/​mysql-virtual_forwardings.cf,​ mysql:/​etc/​postfix/​mysql-virtual_email2email.cf'​  
-sudo postconf -e '​virtual_mailbox_domains = proxy:​mysql:/​etc/​postfix/​mysql-virtual_domains.cf' ​\\ +sudo postconf -e '​virtual_mailbox_domains = proxy:​mysql:/​etc/​postfix/​mysql-virtual_domains.cf'​  
-sudo postconf -e '​virtual_mailbox_maps = proxy:​mysql:/​etc/​postfix/​mysql-virtual_mailboxes.cf' ​\\ +sudo postconf -e '​virtual_mailbox_maps = proxy:​mysql:/​etc/​postfix/​mysql-virtual_mailboxes.cf'​  
-sudo postconf -e '​virtual_mailbox_base = /​home/​vmail' ​\\ +sudo postconf -e '​virtual_mailbox_base = /​home/​vmail'​  
-sudo postconf -e '​virtual_uid_maps = static:​5000' ​\\ +sudo postconf -e '​virtual_uid_maps = static:​5000'​  
-sudo postconf -e '​virtual_gid_maps = static:​5000' ​\\ +sudo postconf -e '​virtual_gid_maps = static:​5000'​  
-sudo postconf -e '​smtpd_sasl_auth_enable = yes' ​\\ +sudo postconf -e '​smtpd_sasl_auth_enable = yes'  
-sudo postconf -e '​broken_sasl_auth_clients = yes' ​\\ +sudo postconf -e '​broken_sasl_auth_clients = yes'  
-sudo postconf -e '​smtpd_sasl_authenticated_header = yes' ​\\ +sudo postconf -e '​smtpd_sasl_authenticated_header = yes'  
-sudo postconf -e '​smtpd_recipient_restrictions = permit_mynetworks,​ permit_sasl_authenticated,​ reject_unauth_destination' ​\\ +sudo postconf -e '​smtpd_recipient_restrictions = permit_mynetworks,​ permit_sasl_authenticated,​ reject_unauth_destination'​  
-sudo postconf -e '​smtpd_use_tls = yes' ​\\ +sudo postconf -e '​smtpd_use_tls = yes'  
-sudo postconf -e '​smtpd_tls_cert_file = /​etc/​postfix/​smtp.crt' ​\\ +sudo postconf -e '​smtpd_tls_cert_file = /​etc/​postfix/​smtp.crt'​  
-sudo postconf -e '​smtpd_tls_key_file = /​etc/​postfix/​smtp.key' ​\\ +sudo postconf -e '​smtpd_tls_key_file = /​etc/​postfix/​smtp.key'​  
-sudo postconf -e '​transport_maps = proxy:​mysql:/​etc/​postfix/​mysql-virtual_transports.cf' ​\\ +sudo postconf -e '​transport_maps = proxy:​mysql:/​etc/​postfix/​mysql-virtual_transports.cf'​  
-sudo postconf -e '​virtual_create_maildirsize = yes' \\ +sudo postconf -e '​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' ​</​code>​
-sudo postconf -e '​virtual_mailbox_extended = yes' \\ +
-sudo postconf -e '​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 ​$virtual_mailbox_limit_maps'​ ''+
 ===== Создание SSL-сертификатов ===== ===== Создание SSL-сертификатов =====
-Теперь создадим SSL сертификаты для TLS. Лучше всего (хотя и не обязательно) создать вначале свой CA (Certificate Authority), а потом подписать от его имени все сертификаты (нам еще понадобятся сертификаты для dovecot). В этом случае клиентам нужно будет добавить доверие к этому CA, а не каждому сертификату отдельно.+Теперь создадим SSL сертификаты для TLS. Лучше всего (хотя и не обязательно) создать вначале свой CA (Certificate Authority), а потом подписать от его имени все сертификаты (нам еще понадобятся сертификаты для ​//dovecot//). В этом случае клиентам нужно будет добавить доверие к этому CA, а не каждому сертификату отдельно.
  
 Создаем CA.  Создаем CA. 
Строка 270: Строка 275:
 Создадим папку, в которой будем генерить все сертификаты ​ Создадим папку, в которой будем генерить все сертификаты ​
  
-''​mkdir ~/CA_clean''​+<code bash>mkdir ~/CA_clean</​code>​
  
 Нам нужно вначале подготовить конфигурационный файл для создания CA  Нам нужно вначале подготовить конфигурационный файл для создания CA 
  
-''​nano ca.conf''​+<code bash>nano ca.conf</​code>​
  
 <​file>​[req] ​ <​file>​[req] ​
Строка 303: Строка 308:
 Здесь и далее (замените на нужное Вам): Здесь и далее (замените на нужное Вам):
  
-C= RU (страна) ​\\ +//C// = RU (страна)  
-ST = Moscow Region (регион) ​\\ + 
-L = Moscow (город) ​\\ +//ST// = Moscow Region (регион)  
-O = AAA Ltd. (название компании) ​\\ + 
-CN = aaa.ru (имя сервера,​ для которого выдается ключ; в случае CA - имя домена) ​\\ +//L// = Moscow (город)  
-emailAddress = admin@aaa.ru (почтовый адрес администратора) ​+ 
 +//O// = AAA Ltd. (название компании)  
 + 
 +//CN// = aaa.ru (имя сервера,​ для которого выдается ключ; в случае CA - имя домена)  
 + 
 +//emailAddress// = admin@aaa.ru (почтовый адрес администратора) ​
  
 (закоментаренные строки нужны только,​ если Вы действительно хотите иметь более-менее нормальный CA с листами отзыва ключей и т.п., но это выходит за рамки этого how-to) (закоментаренные строки нужны только,​ если Вы действительно хотите иметь более-менее нормальный CA с листами отзыва ключей и т.п., но это выходит за рамки этого how-to)
Строка 314: Строка 324:
 Создаем частный ключ ключ CA Создаем частный ключ ключ CA
  
-''​sudo openssl genrsa -des3 -out ca.key 4096''​+<code bash>sudo openssl genrsa -des3 -out ca.key 4096</​code>​
  
-**Enter pass phrase for ca.key: **+<note tip>**Enter pass phrase for ca.key: **</​note>​
  
-**Verifying - Enter pass phrase for ca.key: **+Введите пароль для файла ​ca.key ​(два раза для подтверждения) и не забывайте его!
  
-Введите пароль для файла ​ca.key ​(два раза для подтверждения) и не забывайте его! ​Он будет нужен для подписывания всех ключей (здесь используем sudo т.к. при этом переписывается состояние random_state компьютера)+<note tip>​**Verifying - Enter pass phrase for ca.key: **</​note>​ 
 + 
 +Он будет нужен для подписывания всех ключей (здесь используем ​//sudo// т.к. при этом переписывается состояние ​//random_state// компьютера)
  
 Создаем открытый ключ CA. Мы говорим,​ что ключи нашего CA имеют "​срок жизни"​ 10 лет (-days 3650). Создаем открытый ключ CA. Мы говорим,​ что ключи нашего CA имеют "​срок жизни"​ 10 лет (-days 3650).
  
-''​openssl req -new -x509 -nodes -sha1 -days 3650 -key ca.key -out ca.crt -config ca.conf''​+<code bash>openssl req -new -x509 -nodes -sha1 -days 3650 -key ca.key -out ca.crt -config ca.conf</​code>​
  
-**Enter pass phrase for ca.key: **+<note tip>**Enter pass phrase for ca.key: **</​note>​
  
 (вводим выбранный нами на предыдущем шаге пароль закрытого ключа CA) (вводим выбранный нами на предыдущем шаге пароль закрытого ключа CA)
Строка 332: Строка 344:
 Создаем сертификат для подписывания:​ Создаем сертификат для подписывания:​
  
-''​openssl x509 -trustout -inform PEM -in ca.crt -outform DER -out ca.pfx''​+<code bash>​openssl pkcs12 -export -in ca.cer -inkey ca.key -out ca.pfx</​code>​ 
 + 
 +<del>openssl x509 -trustout -inform PEM -in ca.crt -outform DER -out ca.pfx</​del>​
  
-Создадим директорию,​ в которой у нас будут лежать все ключи для всех серверов (если мы в дальнейшем будем создавать и подписывать ключи для других серверов;​ например,​ захотим,​ чтобы ключи были разные для smtp.aaa.ru pop3.aaa.ru и imap.aaa.ru) и, соответственно,​ директории для всех имен серверов (в нашем случае — oban.aaa.ru) ​+Создадим директорию,​ в которой у нас будут лежать все ключи для всех серверов (если мы в дальнейшем будем создавать и подписывать ключи для других серверов;​ например,​ захотим,​ чтобы ключи были разные для ​//smtp.aaa.ru// //pop3.aaa.ru// и //imap.aaa.ru//) и, соответственно,​ директории для всех имен серверов (в нашем случае — //oban.aaa.ru//
  
-''​mkdir SERVERS ​\\ +<code bash>mkdir SERVERS  
-mkdir SERVERS/​oban.aaa.ru''​+mkdir SERVERS/​oban.aaa.ru</​code>​
  
 Создаем файлы конфигураций для ключей серверов (в каждой директории - свой файл, т.к. в нем записано имя сервера). В случае одного имени (замените на нужные Вам значения):​ Создаем файлы конфигураций для ключей серверов (в каждой директории - свой файл, т.к. в нем записано имя сервера). В случае одного имени (замените на нужные Вам значения):​
  
-''​nano SERVERS/​oban.aaa.ru/​openssl.conf''​+<code bash>nano SERVERS/​oban.aaa.ru/​openssl.conf</​code>​
  
 <​file>​[ req ]  <​file>​[ req ] 
Строка 359: Строка 373:
 subjectKeyIdentifier = hash </​file>​ subjectKeyIdentifier = hash </​file>​
  
-Теперь сгенерим ключи для нашего сервера (заметьте,​ что мы опять используем здесь sudo):+Теперь сгенерим ключи для нашего сервера (заметьте,​ что мы опять используем здесь ​//sudo//):
  
-''​sudo openssl genrsa -passout pass:1234 -des3 -out SERVERS/​oban.aaa.ru/​server.key.1 2048''​+<code bash>sudo openssl genrsa -passout pass:1234 -des3 -out SERVERS/​oban.aaa.ru/​server.key.1 2048</​code>​
  
-Здесь 1234 — парольная фраза для промежуточного ключа. Она нам нужна только временно,​ т.к. мы в результате хотим получить ключ без пароля (требование postfix).+Здесь 1234 — парольная фраза для промежуточного ключа. Она нам нужна только временно,​ т.к. мы в результате хотим получить ключ без пароля (требование ​//postfix//).
  
 Убираем из ключа парольную фразу: Убираем из ключа парольную фразу:
  
-''​openssl rsa -passin pass:1234 -in SERVERS/​oban.aaa.ru/​server.key.1 -out SERVERS/​oban.aaa.ru/​server.key''​+<code bash>openssl rsa -passin pass:1234 -in SERVERS/​oban.aaa.ru/​server.key.1 -out SERVERS/​oban.aaa.ru/​server.key</​code>​
  
 Генерим запрос на подпись нашего ключа ​ Генерим запрос на подпись нашего ключа ​
  
-''​openssl req -config SERVERS/​oban.aaa.ru/​openssl.conf -new -key SERVERS/​oban.aaa.ru/​server.key -out SERVERS/​oban.aaa.ru/​server.csr ​''​+<code bash>openssl req -config SERVERS/​oban.aaa.ru/​openssl.conf -new -key SERVERS/​oban.aaa.ru/​server.key -out SERVERS/​oban.aaa.ru/​server.csr ​</​code>​
  
 и удаляем промежуточный ключ ​ и удаляем промежуточный ключ ​
  
-''​rm -f SERVERS/​oban.aaa.ru/​server.key.1''​+<code bash>rm -f SERVERS/​oban.aaa.ru/​server.key.1</​code>​
  
 Теперь нам нужно подписать наш созданный ключ от имени своего CA  Теперь нам нужно подписать наш созданный ключ от имени своего CA 
Строка 381: Строка 395:
 Сделаем конфигурационный файл для подписи (срок действия подписи 5 лет - 1828 дней): Сделаем конфигурационный файл для подписи (срок действия подписи 5 лет - 1828 дней):
  
-''​nano sign.config ​''​+<code bash>nano sign.config ​</​code>​
  
 <​file>​[ ca ]  <​file>​[ ca ] 
Строка 414: Строка 428:
 и создадим директорию для хранения сертификатов подписей:​ и создадим директорию для хранения сертификатов подписей:​
  
-''​mkdir ca.db.certs''​+<code bash>mkdir ca.db.certs</​code>​
  
 Для первого подписанного ключа создаем его номер и формируем индексный файл (для остальных - не нужно!) ​ Для первого подписанного ключа создаем его номер и формируем индексный файл (для остальных - не нужно!) ​
  
-''​echo '​01'​ > ca.db.serial ​\\ +<code bash>echo '​01'​ > ca.db.serial  
-cp /dev/null ca.db.index ​''​+cp /dev/null ca.db.index ​</​code>​
  
-и подписываем (обратите внимание,​ что мы опять используем sudo)+и подписываем (обратите внимание,​ что мы опять используем ​//sudo//)
  
-''​sudo openssl ca -batch -config sign.config -out SERVERS/​oban.aaa.ru/​server.crt -infiles SERVERS/​oban.aaa.ru/​server.csr''​+<code bash>sudo openssl ca -batch -config sign.config -out SERVERS/​oban.aaa.ru/​server.crt -infiles SERVERS/​oban.aaa.ru/​server.csr</​code>​
  
-**Enter pass phrase for ca.key: **+<note tip>**Enter pass phrase for ca.key: **</​note>​
  
 (введем пароль закрытого ключа CA) (введем пароль закрытого ключа CA)
Строка 431: Строка 445:
 Проверим подпись (на всякий случай):​ Проверим подпись (на всякий случай):​
  
-''​openssl verify -CAfile ca.crt SERVERS/​oban.aaa.ru/​server.crt''​+<code bash>openssl verify -CAfile ca.crt SERVERS/​oban.aaa.ru/​server.crt</​code>​
  
 Мы должны получить Мы должны получить
  
-**SERVERS/​oban.aaa.ru/​server.crt:​ OK**+<note tip>**SERVERS/​oban.aaa.ru/​server.crt:​ OK**</​note>​
  
 Номер ключа и индексный файл автоматически обновились,​ удалим старые файлы ​ Номер ключа и индексный файл автоматически обновились,​ удалим старые файлы ​
  
-''​rm -f ca.db.serial.old ​\\ +<code bash>rm -f ca.db.serial.old  
-rm -rf ca.db.index.old''​+rm -rf ca.db.index.old</​code>​
  
 Скопируем ключи в директорию /etc/ssl Скопируем ключи в директорию /etc/ssl
  
-''​sudo cp SERVERS/​oban.aaa.ru/​server.key /​etc/​ssl/​private/​oban.key ​\\ +<code bash>sudo cp SERVERS/​oban.aaa.ru/​server.key /​etc/​ssl/​private/​oban.key  
-sudo cp SERVERS/​oban.aaa.ru/​server.crt /​etc/​ssl/​certs/​oban.crt''​+sudo cp SERVERS/​oban.aaa.ru/​server.crt /​etc/​ssl/​certs/​oban.crt</​code>​
  
 и сменим права доступа к закрытому ключу и сменим права доступа к закрытому ключу
  
-''​sudo chmod og= /​etc/​ssl/​private/​oban.key''​+<code bash>sudo chmod og= /​etc/​ssl/​private/​oban.key</​code>​
  
 Теперь установим доверие к новому CA. Для этого создадим папку для него ​ Теперь установим доверие к новому CA. Для этого создадим папку для него ​
  
-''​sudo mkdir /​usr/​share/​ca-certificates/​aaa ​''​+<code bash>sudo mkdir /​usr/​share/​ca-certificates/​aaa ​</​code>​
  
 и скопируем туда наш сертификат CA  и скопируем туда наш сертификат CA 
  
-''​sudo cp ca.crt /​usr/​share/​ca-certificates/​aaa/ ​''​+<code bash>sudo cp ca.crt /​usr/​share/​ca-certificates/​aaa/ ​</​code>​
  
 После этого переконфигурируем наши корневые сертификаты ​ После этого переконфигурируем наши корневые сертификаты ​
  
-''​sudo dpkg-reconfigure ca-certificates ​''​+<code bash>sudo dpkg-reconfigure ca-certificates ​</​code>​
  
 (ответим,​ что мы хотим доверять новым сертификатам и выберем в списке наш новый сертификат для активации) (ответим,​ что мы хотим доверять новым сертификатам и выберем в списке наш новый сертификат для активации)
  
-Нашим клиентам,​ которые будут связываться с нашим ​первером с использованием шифрования (TLS, SSL) или с нашим веб-сервером по протоколу ​https нужно установить доверие к нашему CA. Тем или иным способом передайте им открытый ключ нашего CA - ca.crt. ​+Нашим клиентам,​ которые будут связываться с нашим ​сервером с использованием шифрования (TLS, SSL) или с нашим веб-сервером по протоколу ​HTTPS нужно установить доверие к нашему CA. Тем или иным способом передайте им открытый ключ нашего CA - ca.crt. ​ 
 <note warning>​Внимание! Никогда никому не передавайте созданные приватные ключи *.key и не делайте их доступными! </​note>​ <note warning>​Внимание! Никогда никому не передавайте созданные приватные ключи *.key и не делайте их доступными! </​note>​
 ===== Настройка saslauthd ===== ===== Настройка saslauthd =====
-Авторизация почтовых пользователей на нашем сервере будет происходить через pam, к которому будет обращаться демон авторизации sasl.+Авторизация почтовых пользователей на нашем сервере будет происходить через ​//pam//, к которому будет обращаться демон авторизации ​//sasl//.
  
 Сначала выполним следующую команду: ​ Сначала выполним следующую команду: ​
  
-''​sudo mkdir -p /​var/​spool/​postfix/​var/​run/​saslauthd ​''​+<code bash>sudo mkdir -p /​var/​spool/​postfix/​var/​run/​saslauthd ​</​code>​
  
 Затем отредактируем файл /​etc/​default/​saslauthd Затем отредактируем файл /​etc/​default/​saslauthd
  
-''​sudo nano /​etc/​default/​saslauthd''​+<code bash>sudo nano /​etc/​default/​saslauthd</​code>​
  
 Установим параметр ''​START''​ в ''​yes''​ и заменим строку ''​OPTIONS="​-c -m /​var/​run/​saslauthd"''​ на ''​OPTIONS="​-c -m /​var/​spool/​postfix/​var/​run/​saslauthd -r"''​ Установим параметр ''​START''​ в ''​yes''​ и заменим строку ''​OPTIONS="​-c -m /​var/​run/​saslauthd"''​ на ''​OPTIONS="​-c -m /​var/​spool/​postfix/​var/​run/​saslauthd -r"''​
Строка 482: Строка 497:
 Создадим файл /​etc/​pam.d/​smtp Создадим файл /​etc/​pam.d/​smtp
  
-''​sudo nano /​etc/​pam.d/​smtp''​+<code bash>sudo nano /​etc/​pam.d/​smtp</​code>​
  
 <​file>​auth sufficient pam_mysql.so user=mail_admin passwd=<​mail_admin_password>​ host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 ​ <​file>​auth sufficient pam_mysql.so user=mail_admin passwd=<​mail_admin_password>​ host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 ​
Строка 489: Строка 504:
 и сменим его права доступа и сменим его права доступа
  
-''​sudo chmod o= /​etc/​pam.d/​smtp''​+<code bash>sudo chmod o= /​etc/​pam.d/​smtp</​code>​
  
 Создаем файл /​etc/​postfix/​sasl/​smtpd.conf Создаем файл /​etc/​postfix/​sasl/​smtpd.conf
  
-''​sudo nano /​etc/​postfix/​sasl/​smtpd.conf''​+<code bash>sudo nano /​etc/​postfix/​sasl/​smtpd.conf</​code>​
  
 <​file>​pwcheck_method:​ saslauthd ​ <​file>​pwcheck_method:​ saslauthd ​
Строка 501: Строка 516:
 и меняем ему владельца и права доступа и меняем ему владельца и права доступа
  
-''​sudo chown postfix /​etc/​postfix/​sasl/​smtpd.conf ​\\ +<code bash>sudo chown postfix /​etc/​postfix/​sasl/​smtpd.conf  
-sudo chmod og= /​etc/​postfix/​sasl/​smtpd.conf''​+sudo chmod og= /​etc/​postfix/​sasl/​smtpd.conf</​code>​
  
-Добавляем пользователя postfix в группу sasl (это даст Postfix права доступа к saslauthd): ​+Добавляем пользователя ​//postfix// в группу ​//sasl// (это даст ​//Postfix// права доступа к //saslauthd//): 
  
-''​sudo adduser postfix sasl ''​+<code bash>sudo adduser postfix sasl </​code>​
  
-Перезапускаем Postfix и Saslauthd: ​+Перезапускаем ​//Postfix// и //Saslauthd//
  
-''​sudo /​etc/​init.d/​postfix restart ​\\ +<code bash>sudo /​etc/​init.d/​postfix restart  
-sudo /​etc/​init.d/​saslauthd restart''​+sudo /​etc/​init.d/​saslauthd restart</​code>​
  
-Для проверки авторизации создадим пользователя admin@bbb.ru в базе данных (заодно вначале в таблице domains зададим оба наших почтовых домена — aaa.ru и bbb.ru):+Для проверки авторизации создадим пользователя ​//admin@bbb.ru// в базе данных (заодно вначале в таблице ​//domains// зададим оба наших почтовых домена — //aaa.ru// и //bbb.ru//):
  
-''​mysql -u root -p''​+<code bash>mysql -u root -p</​code>​
  
-**Enter password:**+<note tip>**Enter password:**</​note>​
  
-ведем пароль mysql)+Введем пароль mysql
  
-''​USE mail; \\ +<code bash><​mysql_password></​code>​ 
-INSERT INTO `domains` (`domain`) VALUES ('​aaa.ru'​); ​\\ + 
-INSERT INTO `domains` (`domain`) VALUES ('​bbb.ru'​); ​\\ +<code mysql>USE mail;  
-INSERT INTO `users` (`email`, `password`, `quota`) VALUES ('​admin@bbb.ru',​ ENCRYPT('​secret'​),​ '​10M'​); ​\\ +INSERT INTO `domains` (`domain`) VALUES ('​aaa.ru'​);​  
-quit;''​+INSERT INTO `domains` (`domain`) VALUES ('​bbb.ru'​);​  
 +INSERT INTO `users` (`email`, `password`, `quota`) VALUES ('​admin@bbb.ru',​ ENCRYPT('​secret'​),​ '​10M'​);​  
 +quit;</​code>​
  
-(здесь secret - это пароль нашего пользователя,​ выберите более подходящий;​ квоту пользователю мы задаем в размере 10Мбайт)+(здесь ​//secret// - это пароль нашего пользователя,​ выберите более подходящий;​ квоту пользователю мы задаем в размере 10Мбайт)
  
 Для проверки авторизации нам нужно сгенерить строку,​ которую нужно передать при авторизации (обратите внимание на обратные слеши перед @ и 0): Для проверки авторизации нам нужно сгенерить строку,​ которую нужно передать при авторизации (обратите внимание на обратные слеши перед @ и 0):
  
-''​perl -MMIME::​Base64 -e 'print encode_base64("​admin\@bbb.ru\0admin\@bbb.ru\0secret"​);' ​''​+<code bash>perl -MMIME::​Base64 -e 'print encode_base64("​admin\@bbb.ru\0admin\@bbb.ru\0secret"​);' ​</​code>​
  
-**YWRtaW5AYmJiLnJ1AGFkbWluQGJiYi5ydQBzZWNyZXQ= **+<note tip>**YWRtaW5AYmJiLnJ1AGFkbWluQGJiYi5ydQBzZWNyZXQ= **</​note>​
  
 Теперь проверим авторизацию Теперь проверим авторизацию
  
-''​telnet 127.0.0.1 25''​+<code bash>telnet 127.0.0.1 25</​code>​
  
-**Trying 127.0.0.1... \\+<note tip>**Trying 127.0.0.1... \\
 Connected to 127.0.0.1. \\ Connected to 127.0.0.1. \\
 Escape character is '​^]'​. \\ Escape character is '​^]'​. \\
-220 oban.aaa.ru ESMTP Postfix (Ubuntu)**+220 oban.aaa.ru ESMTP Postfix (Ubuntu)**</​note>​
  
-''​EHLO testing''​+<code bash>EHLO testing</​code>​
  
-**250-oban.aaa.ru \\+<note tip>**250-oban.aaa.ru \\
 250-PIPELINING \\ 250-PIPELINING \\
 250-SIZE 10240000 \\ 250-SIZE 10240000 \\
Строка 556: Строка 573:
 250-ENHANCEDSTATUSCODES\\ ​ 250-ENHANCEDSTATUSCODES\\ ​
 250-8BITMIME \\ 250-8BITMIME \\
-250 DSN**+250 DSN**</​note>​
  
-''​AUTH PLAIN YWRtaW5AYmJiLnJ1AGFkbWluQGJiYi5ydQBzZWNyZXQ=''​+<code bash>AUTH PLAIN YWRtaW5AYmJiLnJ1AGFkbWluQGJiYi5ydQBzZWNyZXQ=</​code>​
  
 (здесь вставляем полученную ранее строку авторизации) (здесь вставляем полученную ранее строку авторизации)
  
-**235 2.7.0 Authentication successful **+<note tip>**235 2.7.0 Authentication successful **</​note>​
  
-''​QUIT ''​+<code bash>QUIT </​code>​
  
-**221 2.0.0 Bye \\ +<note tip>**221 2.0.0 Bye \\ 
-Connection closed by foreign host.**+Connection closed by foreign host.**</​note>​
  
-Если мы получим ответ, отличный от "​Authentication successful",​ то мы где-то ошиблись. Проверить,​ в чем именно,​ можно, посмотрев файлы /​var/​log/​auth.log и /​var/​log/​mail.log+Если мы получим ответ, отличный от **"​Authentication successful"​**, то мы где-то ошиблись. Проверить,​ в чем именно,​ можно, посмотрев файлы /​var/​log/​auth.log и /​var/​log/​mail.log
  
-Теперь сделаем аутентификацию по openldap. Установим нужные пакеты:​+Теперь сделаем аутентификацию по //openldap//. Установим нужные пакеты:​
  
-''​sudo apt-get install libpam-ldap''​+<code bash>sudo apt-get install libpam-ldap</​code>​
  
 и ответим на вопросы:​ и ответим на вопросы:​
  
-**LDAP server Uniform Resource Identifier:​**+<note tip>**LDAP server Uniform Resource Identifier:​**</​note>​
  
-''​%%ldap://​10.0.0.3/​%%''​ (обратите внимание — не ldapi)+<code bash>ldap://​10.0.0.3/​</​code>​ <note important>​Обратите внимание — не ldapi!</​note>​
  
-**Distinguished name of the search base:**+<note tip>**Distinguished name of the search base:**</​note>​
  
-''​dc=aaa,​dc=ru''​+<code bash>dc=aaa,​dc=ru</​code>​
  
-**LDAP version to use:**+<note tip>**LDAP version to use:**</​note>​
  
-''​3''​+<code bash>3</​code>​
  
-**Make local root Database admin:**+<note tip>**Make local root Database admin:**</​note>​
  
-''​Да''​+<code bash>Да</​code>​
  
-**Does the LDAP database require login?**+<note tip>**Does the LDAP database require login?**</​note>​
  
-''​Нет''​+<code bash>Нет</​code>​
  
-**LDAP account for root: **+<note tip>**LDAP account for root: **</​note>​
  
-''​cn=admin,​dc=aaa,​dc=ru''​+<code bash>cn=admin,​dc=aaa,​dc=ru</​code>​
  
-**LDAP root account password:**+<note tip>**LDAP root account password:**</​note>​
  
-''​<​ldap_root_password>​''​+<code bash><​ldap_root_password>​</​code>​
  
 (конечно,​ нужное замените на свои параметры). Здесь мы предполагаем,​ что: (конечно,​ нужное замените на свои параметры). Здесь мы предполагаем,​ что:
  
-  * ldap-сервер доступен по IP 10.0.0.3 +  * ldap-сервер доступен по IP //10.0.0.3// 
-  * корень расположен в dc=aaa,​dc=ru +  * корень расположен в //dc=aaa,​dc=ru// 
-  * администратор ldap-сервера это cn=admin,​dc=aaa,​dc=ru +  * администратор ldap-сервера это ​//cn=admin,​dc=aaa,​dc=ru// 
-  * он имеет пароль <​ldap_root_password>​+  * он имеет пароль ​//<​ldap_root_password>​//
  
 Редактируем файл Редактируем файл
  
-''​sudo nano /​etc/​ldap.conf''​+<code bash>sudo nano /​etc/​ldap.conf</​code>​
  
-и добавляем в него одну строку после закомментаренной #​bind_policy hard+и добавляем в него одну строку после закомментаренной ​//#​bind_policy hard//
  
 <​file>​bind_policy soft</​file>​ <​file>​bind_policy soft</​file>​
Строка 622: Строка 639:
 Редактируем файл Редактируем файл
  
-''​sudo nano /​etc/​pam.d/​smtp''​+<code bash>sudo nano /​etc/​pam.d/​smtp</​code>​
  
 и добавляем в него строки ​ и добавляем в него строки ​
Строка 629: Строка 646:
 account sufficient pam_ldap.so</​file>​ account sufficient pam_ldap.so</​file>​
  
-Теперь можем проверить аутентификацию ldap-пользователя (предполагаем,​ что в ldap есть пользователь admin с паролем secret (у которого,​ кстати,​ почтовый адрес admin@aaa.ru,​ но это сейчас неважно;​ важно понимать,​ что это — другой пользователь,​ а не admin@bbb.ru):​+Теперь можем проверить аутентификацию ldap-пользователя (предполагаем,​ что в //ldap// есть пользователь ​//admin// с паролем ​//secret// (у которого,​ кстати,​ почтовый адрес ​//admin@aaa.ru//, но это сейчас неважно;​ важно понимать,​ что это — другой пользователь,​ а не //admin@bbb.ru//):
  
-''​perl -MMIME::​Base64 -e 'print encode_base64("​admin\0admin\0secret"​);' ​''​+<code bash>perl -MMIME::​Base64 -e 'print encode_base64("​admin\0admin\0secret"​);' ​</​code>​
  
-**YWRtaW4AYWRtaW4Ac2VjcmV0**+<note tip>**YWRtaW4AYWRtaW4Ac2VjcmV0**</​note>​
  
-''​telnet 127.0.0.1 25 ''​+<code bash>telnet 127.0.0.1 25 </​code>​
  
-**Trying 127.0.0.1... \\+<note tip>**Trying 127.0.0.1... \\
 Connected to 127.0.0.1. \\ Connected to 127.0.0.1. \\
 Escape character is '​^]'​. \\ Escape character is '​^]'​. \\
-220 oban.aaa.ru ESMTP Postfix (Ubuntu) **+220 oban.aaa.ru ESMTP Postfix (Ubuntu) **</​note>​
  
-''​EHLO testing ​''​+<code bash>EHLO testing ​</​code>​
  
-**250-oban.aaa.ru \\+<note tip>**250-oban.aaa.ru \\
 250-PIPELINING \\ 250-PIPELINING \\
 250-SIZE 10240000 \\ 250-SIZE 10240000 \\
Строка 654: Строка 671:
 250-ENHANCEDSTATUSCODES \\ 250-ENHANCEDSTATUSCODES \\
 250-8BITMIME \\ 250-8BITMIME \\
-250 DSN **+250 DSN **</​note>​
  
-''​AUTH PLAIN YWRtaW4AYWRtaW4Ac2VjcmV0''​+<code bash>AUTH PLAIN YWRtaW4AYWRtaW4Ac2VjcmV0</​code>​
  
-**235 2.7.0 Authentication successful **+<note tip>**235 2.7.0 Authentication successful **</​note>​
  
-''​QUIT ''​+<code bash>QUIT </​code>​
  
-**221 2.0.0 Bye \\ +<note tip>**221 2.0.0 Bye \\ 
-Connection closed by foreign host. **+Connection closed by foreign host. **</​note>​
  
-Для почтовых ящиков локальных пользователей будем использовать ​ldap. Заметьте,​ что мы конфигурируем их как виртуальных пользователей,​ т.е. локальный домен (aaa.ru) мы занесли в базу данных. Предположим,​ что локальные пользователи в ldap расположены в ou=Users,​dc=aaa,​dc=ru причем их имена записаны в uid а почтовые адреса - в mail. +Для почтовых ящиков локальных пользователей будем использовать ​LDAP. Заметьте,​ что мы конфигурируем их как виртуальных пользователей,​ т.е. локальный домен (aaa.ru) мы занесли в базу данных. Предположим,​ что локальные пользователи в LDAP расположены в //ou=Users,​dc=aaa,​dc=ru// причем их имена записаны в //uid// а почтовые адреса - в //mail//
  
 Создаем файл /​etc/​postfix/​ldap-mailboxes.cf Создаем файл /​etc/​postfix/​ldap-mailboxes.cf
  
-''​sudo nano /​etc/​postfix/​ldap-mailboxes.cf''​+<code bash>sudo nano /​etc/​postfix/​ldap-mailboxes.cf</​code>​
  
 <​file>​server_host = 10.0.0.3 ​ <​file>​server_host = 10.0.0.3 ​
Строка 684: Строка 701:
 Меняем права доступа Меняем права доступа
  
-''​sudo chgrp postfix /​etc/​postfix/​ldap-mailboxes.cf ​\\ +<code bash>sudo chgrp postfix /​etc/​postfix/​ldap-mailboxes.cf  
-sudo chmod o= /​etc/​postfix/​ldap-mailboxes.cf ​''​+sudo chmod o= /​etc/​postfix/​ldap-mailboxes.cf ​</​code>​
  
 и меняем строку ''​virtual_mailbox_maps = … ''​ в файле /​etc/​postfix/​main.cf и меняем строку ''​virtual_mailbox_maps = … ''​ в файле /​etc/​postfix/​main.cf
  
-''​sudo nano /​etc/​postfix/​main.cf''​+<code bash>sudo nano /​etc/​postfix/​main.cf</​code>​
  
 <​file>​virtual_mailbox_maps = proxy:​mysql:/​etc/​postfix/​mysql-virtual_mailboxes.cf ldap:/​etc/​postfix/​ldap-mailboxes.cf</​file>​ <​file>​virtual_mailbox_maps = proxy:​mysql:/​etc/​postfix/​mysql-virtual_mailboxes.cf ldap:/​etc/​postfix/​ldap-mailboxes.cf</​file>​
Строка 700: Строка 717:
 (это запрещает доставку писем с локального IP-адреса не в наши виртуальные домены) ​ (это запрещает доставку писем с локального IP-адреса не в наши виртуальные домены) ​
  
-Перезапускаем postfix ​+Перезапускаем ​//postfix// 
  
-''​sudo /​etc/​init.d/​postfix restart ​''​+<code bash>sudo /​etc/​init.d/​postfix restart ​</​code>​
  
-и проверяем работу обоих наших тестовых адресов - test@bbb.ru (который записан в базе данных) и betatest@aaa.ru (который записан в ldap у пользователя betatest) ​+и проверяем работу обоих наших тестовых адресов - //test@bbb.ru// (который записан в базе данных) и //betatest@aaa.ru// (который записан в LDAP у пользователя ​//betatest//
  
-''​telnet 127.0.0.1 25 ''​+<code bash>telnet 127.0.0.1 25 </​code>​
  
-**Trying 127.0.0.1... \\+<note tip>**Trying 127.0.0.1... \\
 Connected to 127.0.0.1. \\ Connected to 127.0.0.1. \\
 Escape character is '​^]'​. \\ Escape character is '​^]'​. \\
-220 oban.aaa.ru ESMTP Postfix (Ubuntu) **+220 oban.aaa.ru ESMTP Postfix (Ubuntu) **</​note>​
  
-''​HELO test ''​+<code bash>HELO test </​code>​
  
-**250 oban.aaa.ru **+<note tip>**250 oban.aaa.ru **</​note>​
  
-''​MAIL FROM: aaa@aa.aa ​''​+<code bash>MAIL FROM: aaa@aa.aa ​</​code>​
  
-**250 2.1.0 Ok **+<note tip>**250 2.1.0 Ok **</​note>​
  
-''​RCPT TO: admin@bbb.ru ​''​+<code bash>RCPT TO: admin@bbb.ru</​code>​
  
-**250 2.1.5 Ok **+<note tip>**250 2.1.5 Ok **</​note>​
  
-''​RCPT TO: admin@aaa.ru ​''​+<code bash>RCPT TO: admin@aaa.ru ​</​code>​
  
-**250 2.1.5 Ok **+<note tip>**250 2.1.5 Ok **</​note>​
  
 (если мы попробуем передать на несуществующий адрес, мы получим:​) ​ (если мы попробуем передать на несуществующий адрес, мы получим:​) ​
  
-''​RCPT TO: aaa@bbb.ru''​+<code bash>RCPT TO: aaa@bbb.ru</​code>​
  
-**550 5.1.1 %%<​aaa@bbb.ru>​%%:​ Recipient address rejected: User unknown in virtual mailbox table **+<note tip>**550 5.1.1 %%<​aaa@bbb.ru>​%%:​ Recipient address rejected: User unknown in virtual mailbox table **</​note>​
  
-''​QUIT ''​+<code bash>QUIT </​code>​
  
-**221 2.0.0 Bye \\ +<note tip>**221 2.0.0 Bye \\ 
-Connection closed by foreign host. **+Connection closed by foreign host. **</​note>​
  
 Вернем обратно строку в файле /​etc/​postfix/​main.cf:​ Вернем обратно строку в файле /​etc/​postfix/​main.cf:​
  
-''​sudo nano /​etc/​postfix/​main.cf''​+<code bash>sudo nano /​etc/​postfix/​main.cf</​code>​
  
 <​file>​smtpd_recipient_restrictions = permit_mynetworks,​ permit_sasl_authenticated,​ reject_unauth_destination</​file>​ <​file>​smtpd_recipient_restrictions = permit_mynetworks,​ permit_sasl_authenticated,​ reject_unauth_destination</​file>​
  
-Для запрета аутентификации в postfix с передачей данных открытым текстом,​ вставляем в файл /​etc/​postfix/​main.cf ​+Для запрета аутентификации в //postfix// с передачей данных открытым текстом,​ вставляем в файл /​etc/​postfix/​main.cf ​
  
-''​sudo nano /​etc/​postfix/​main.cf ​''​+<code bash>sudo nano /​etc/​postfix/​main.cf ​</​code>​
  
 <​file>​smtpd_tls_auth_only = yes  <​file>​smtpd_tls_auth_only = yes 
Строка 755: Строка 772:
 smtpd_use_tls = yes</​file>​ smtpd_use_tls = yes</​file>​
  
-и перезапускаем postfix+и перезапускаем ​//postfix//
  
-''​sudo /​etc/​init.d/​postfix restart''​+<code bash>sudo /​etc/​init.d/​postfix restart</​code>​
  
-Откроем и изменим /​etc/​aliases+Откроем и изменим /​etc/​aliases
  
-''​sudo nano /​etc/​aliases''​+<code bash>sudo nano /​etc/​aliases</​code>​
  
-Сделайте так, чтобы postmaster указывал на root, а root указывал на ваше имя пользователя или ваш почтовый адрес, у вас должно получится примерно так: ​+Сделайте так, чтобы ​//postmaster// указывал на //root//, а //root// указывал на ваше имя пользователя или ваш почтовый адрес, у вас должно получится примерно так: ​
  
 <​file>​postmaster:​ root  <​file>​postmaster:​ root 
Строка 770: Строка 787:
 После изменения /​etc/​aliases вы должны запустить команду После изменения /​etc/​aliases вы должны запустить команду
  
-''​sudo newaliases ​''​+<code bash>sudo newaliases ​</​code>​
  
 ===== Настройка dovecot ===== ===== Настройка dovecot =====
 Скопируем файл ​ Скопируем файл ​
  
-''​sudo cp /​etc/​pam.d/​smtp /​etc/​pam.d/​dovecot''​+<code bash>sudo cp /​etc/​pam.d/​smtp /​etc/​pam.d/​dovecot</​code>​
  
-(мы будем для dovecot использовать тоже аутентификацию через pam)+(мы будем для ​//dovecot// использовать тоже аутентификацию через ​//pam//)
  
 Отредактируем файл /​etc/​dovecot/​dovecot-ldap.conf Отредактируем файл /​etc/​dovecot/​dovecot-ldap.conf
  
-''​sudo nano /​etc/​dovecot/​dovecot-ldap.conf''​+<code bash>sudo nano /​etc/​dovecot/​dovecot-ldap.conf</​code>​
  
 <​file>​uris = ldap://​10.0.0.3/ ​ <​file>​uris = ldap://​10.0.0.3/ ​
Строка 797: Строка 814:
 Отредактируем файл /​etc/​dovecot/​dovecot-sql.conf Отредактируем файл /​etc/​dovecot/​dovecot-sql.conf
  
-''​sudo nano /​etc/​dovecot/​dovecot-sql.conf''​+<code bash>sudo nano /​etc/​dovecot/​dovecot-sql.conf</​code>​
  
 <​file>​driver = mysql  <​file>​driver = mysql 
Строка 805: Строка 822:
 Отредактируем файл /​etc/​dovecot/​dovecot.conf,​ изменив следующие параметры:​ Отредактируем файл /​etc/​dovecot/​dovecot.conf,​ изменив следующие параметры:​
  
-''​sudo nano /​etc/​dovecot/​dovecot.conf''​+<code bash>sudo nano /​etc/​dovecot/​dovecot.conf</​code>​
  
 <​file>​disable_plaintext_auth = yes  <​file>​disable_plaintext_auth = yes 
Строка 863: Строка 880:
 Создадим скрипт,​ который будет посылать пользователям напоминания при превышении ими квоты Создадим скрипт,​ который будет посылать пользователям напоминания при превышении ими квоты
  
-''​sudo nano /​usr/​local/​bin/​quota-warning.sh''​+<code bash>sudo nano /​usr/​local/​bin/​quota-warning.sh</​code>​
  
 <code bash>#​!/​bin/​sh ​ <code bash>#​!/​bin/​sh ​
Строка 879: Строка 896:
 exit 0 </​code>​ exit 0 </​code>​
  
-(здесь мы посылаем сообщение от имени admin@aaa.ru,​ причем копию сообщения направляем на admin@aaa.ru)+(здесь мы посылаем сообщение от имени ​//admin@aaa.ru//, причем копию сообщения направляем на //admin@aaa.ru//)
  
 и сделаем его выполняемым и сделаем его выполняемым
  
-''​sudo chmod a+x /​usr/​local/​bin/​quota-warning.sh''​+<code bash>sudo chmod a+x /​usr/​local/​bin/​quota-warning.sh</​code>​
  
-Не ждите от dovecot немедленной реакции на достижение квоты пороговых значений:​ dovecot пересчитывает квоту периодически.+Не ждите от //dovecot// немедленной реакции на достижение квоты пороговых значений: ​//dovecot// пересчитывает квоту периодически.
  
 Сменим права файлам,​ в которых записана информация о доступе к mysql и ldap Сменим права файлам,​ в которых записана информация о доступе к mysql и ldap
  
-''​sudo chown root.root /​etc/​dovecot/​dovecot-ldap.conf ​\\ +<code bash>sudo chown root.root /​etc/​dovecot/​dovecot-ldap.conf  
-sudo chown root.root /​etc/​dovecot/​dovecot-sql.conf ​\\ +sudo chown root.root /​etc/​dovecot/​dovecot-sql.conf  
-sudo chmod og= /​etc/​dovecot/​dovecot-ldap.conf ​\\ +sudo chmod og= /​etc/​dovecot/​dovecot-ldap.conf  
-sudo chmod og= /​etc/​dovecot/​dovecot-sql.conf''​+sudo chmod og= /​etc/​dovecot/​dovecot-sql.conf</​code>​
  
 Перезапустим dovecot Перезапустим dovecot
  
-''​sudo /​etc/​init.d/​dovecot restart''​+<code bash>sudo /​etc/​init.d/​dovecot restart</​code>​
  
 и проверим аутентификацию dovecot для обоих наших пользователей:​ и проверим аутентификацию dovecot для обоих наших пользователей:​
  
-''​telnet 127.0.0.1 110 ''​+<code bash>telnet 127.0.0.1 110</​code>​
  
-**Trying 127.0.0.1... \\+<note tip>**Trying 127.0.0.1... \\
 Connected to 127.0.0.1. \\ Connected to 127.0.0.1. \\
 Escape character is '​^]'​. \\ Escape character is '​^]'​. \\
-+OK Dovecot ready.**++OK Dovecot ready.**</​note>​
  
-''​user admin@bbb.ru''​+<code bash>user admin@bbb.ru</​code>​
  
-**+OK **+<note tip>**+OK **</​note>​
  
-''​pass secret''​+<code bash>pass secret</​code>​
  
-(здесь,​ конечно,​ вводим пароль пользователя admin@bbb.ru)+(здесь,​ конечно,​ вводим пароль пользователя ​//admin@bbb.ru//)
  
-**+OK Logged in. **+<note tip>**+OK Logged in. **</​note>​
  
-''​quit''​+<code bash>quit</​code>​
  
-**+OK Logging out. \\ +<note tip>**+OK Logging out. \\ 
-Connection closed by foreign host. **+Connection closed by foreign host. **</​note>​
  
 и и
  
-''​telnet 127.0.0.1 110 ''​+<code bash>telnet 127.0.0.1 110 </​code>​
  
-**Trying 127.0.0.1... \\+<note tip>**Trying 127.0.0.1... \\
 Connected to 127.0.0.1. \\ Connected to 127.0.0.1. \\
 Escape character is '​^]'​. \\ Escape character is '​^]'​. \\
-+OK Dovecot ready.**++OK Dovecot ready.**</​note>​
  
-''​user admin''​+<code bash>user admin</​code>​
  
-**+OK **+<note tip>**+OK **</​note>​
  
-''​pass secret''​+<code bash>pass secret</​code>​
  
-(здесь,​ конечно,​ вводим пароль пользователя admin)+(здесь,​ конечно,​ вводим пароль пользователя ​//admin//)
  
-**+OK Logged in. **+<note tip>**+OK Logged in. **</​note>​
  
-''​quit''​+<code bash>quit</​code>​
  
-**+OK Logging out. \\ +<note tip>**+OK Logging out. \\ 
-Connection closed by foreign host. **+Connection closed by foreign host. **</​note>​
  
 После этой проверки,​ кстати,​ автоматически создадутся папки для хранения почты: После этой проверки,​ кстати,​ автоматически создадутся папки для хранения почты:
  
-''​sudo ls -R /​home/​vmail/​''​+<code bash>sudo ls -R /​home/​vmail/​</​code>​
  
-**/​home/​vmail:​ \\+<note tip>**/​home/​vmail:​ \\
 aaa.ru bbb.ru \\ aaa.ru bbb.ru \\
  /​home/​vmail/​aaa.ru:​ \\  /​home/​vmail/​aaa.ru:​ \\
Строка 965: Строка 982:
  /​home/​vmail/​bbb.ru/​admin/​cur:​ \\  /​home/​vmail/​bbb.ru/​admin/​cur:​ \\
  /​home/​vmail/​bbb.ru/​admin/​new:​ \\  /​home/​vmail/​bbb.ru/​admin/​new:​ \\
- /​home/​vmail/​bbb.ru/​admin/​tmp:​ **+ /​home/​vmail/​bbb.ru/​admin/​tmp:​ **</​note>​
  
 ===== Установка horde ===== ===== Установка horde =====
Строка 1124: Строка 1141:
 Отредактируем файл /​etc/​horde/​imp4/​servers.php Отредактируем файл /​etc/​horde/​imp4/​servers.php
  
-<code bash>​sudo /​etc/​horde/​imp4/​servers.php</​code>​+<code bash>​sudo ​nano /​etc/​horde/​imp4/​servers.php</​code>​
  
 <​file>​$servers['​imap'​] = array( ​ <​file>​$servers['​imap'​] = array( ​
Строка 1848: Строка 1865:
 <​file>​milter_default_action = accept ​ <​file>​milter_default_action = accept ​
 milter_protocol = 2  milter_protocol = 2 
-#smtpd_milters = inet:​localhost:​8891,​inet:​localhost:​8892 ​; for internal delivery only +smtpd_milters = inet:​localhost:​8891,​inet:​localhost:​8892
 non_smtpd_milters = inet:​localhost:​8891,​inet:​localhost:​8892 </​file>​ non_smtpd_milters = inet:​localhost:​8891,​inet:​localhost:​8892 </​file>​
- 
-Мы хотим, чтобы подписывались только исходящие письма,​ поэтому строка //​smtpd_milters//​ закомментарена. 
  
 Проверьте,​ что файл Проверьте,​ что файл
Строка 1860: Строка 1875:
  
 <​file>​$enable_dkim_verification = 1; </​file>​ <​file>​$enable_dkim_verification = 1; </​file>​
 +
 +Отредактируем файл /​etc/​postfix/​master.cf
 +
 +<code bash>​sudo nano /​etc/​postfix/​master.cf</​code>​
 +
 +и в блоке
 +
 +<​file>​127.0.0.1:​10025 inet n - - - - smtpd 
 +        -o content_filter= ​
 +        -o local_recipient_maps= ​
 +        -o relay_recipient_maps= ​
 +        -o smtpd_restriction_classes= ​
 +        -o smtpd_client_restrictions= ​
 +        -o smtpd_helo_restrictions= ​
 +        -o smtpd_sender_restrictions= ​
 +        -o smtpd_recipient_restrictions=permit_mynetworks,​reject ​
 +        -o mynetworks=127.0.0.0/​8 ​
 +        -o strict_rfc821_envelopes=yes ​
 +        -o receive_override_options=no_unknown_recipient_checks,​no_header_body_checks
 +        -o smtpd_bind_address=127.0.0.1 </​file>​
 +
 +изменим строку
 +
 +<​file> ​       -o receive_override_options=no_unknown_recipient_checks,​no_header_body_checks,​no_milters</​file>​
 +
 +иначе наши исходящие письма будут подписываться //DKIM// два раза.
  
 Последнее,​ что нам осталось сделать - это внести изменения в DNS-записи нашего домена (доменов):​ Последнее,​ что нам осталось сделать - это внести изменения в DNS-записи нашего домена (доменов):​
Строка 3619: Строка 3660:
  
 <​file>​procmail unix - n n - - pipe  <​file>​procmail unix - n n - - pipe 
-  -o flags=RO user=vmail argv=/​usr/​bin/​procmail -t -m USER=${user} EXTENSION=${extension} NEXTHOP=${nexthop} /​etc/​postfix/​procmailrc.common </​file>​+  -o flags=RO user=vmail argv=/​usr/​bin/​procmail -t -m USER=${user} EXTENSION=${extension} NEXTHOP=${nexthop} /​etc/​postfix/​procmail.common </​file>​
  
 (вторая строка должна начинаться хотя бы с одного пробела) (вторая строка должна начинаться хотя бы с одного пробела)
Строка 3857: Строка 3898:
  
 Теперь в разделе **Почта — Фильтры** можно активировать,​ редактировать имеющиеся фильтры или добавлять новые. Все правила,​ которые Вы будете задавать через //horde (ingo)// будут записываться в файл правил с именем //ingo//. Этот файл будет доступен для редактирования с помощью любого другого плагина //sieve// (например,​ к //​thunderbird//​). ​ Теперь в разделе **Почта — Фильтры** можно активировать,​ редактировать имеющиеся фильтры или добавлять новые. Все правила,​ которые Вы будете задавать через //horde (ingo)// будут записываться в файл правил с именем //ingo//. Этот файл будет доступен для редактирования с помощью любого другого плагина //sieve// (например,​ к //​thunderbird//​). ​
 +
 +===== FAQ =====
 +
 +**Q: В этой статье написано,​ как настроить LDAP?**\\
 +A: Нет. Настройка LDAP - это своя большая тема, которая лежит за рамками этого howto. Здесь просто показано,​ как использовать уже имеющийся LDAP. Если его нет (и нет AD) - используйте только mysql.
 +
 +**Q: Как сделать такой сервер,​ но без LDAP?**\\
 +A: Просто пропускайте все, что связано с LDAP и делайте только то, что связано с mysql.
  
 ===== Ссылки ===== ===== Ссылки =====
  
   * [[http://​forum.ubuntu.ru/​index.php?​topic=127090.0|Обсуждение статьи на форуме]]   * [[http://​forum.ubuntu.ru/​index.php?​topic=127090.0|Обсуждение статьи на форуме]]
-  * [[http://​forum.ubuntu.ru/​index.php?​action=dlattach;​topic=127090.0;​attach=25869|Статья в формате .odt]] +  * [[http://​forum.ubuntu.ru/​index.php?​action=dlattach;​topic=127090.0;​attach=30328|Статья в формате .odt]] 
- +  * [[http://​wiki.horde.org/​FAQ/​Admin/​Troubleshoot|Horde Administrator'​s FAQ]] — решение проблем с Horde
-{{tag>​postfix dovecot amavis spamassassin autoresponder sieve horde clamav razor pyzor postgrey spf dkim domainkey mailman fail2ban munin}}+
  
 +{{tag>​администрирование postfix dovecot amavis spamassassin autoresponder sieve horde clamav razor pyzor postgrey spf dkim domainkey mailman fail2ban munin}}