Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:почтовый_сервер_со_всем_фаршем_на_10.04_lts [2011/07/20 11:32] [Установка amavisd-new, SpamAssassin и ClamAV] |
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 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 ===== | ||
Установим нужные пакеты | Установим нужные пакеты | ||
- | ''sudo apt-get install horde3 imp4 turba2 sork-passwd-h3'' | + | <code bash>sudo apt-get install horde3 imp4 turba2 sork-passwd-h3</code> |
Разрешим доступ к нашей web-почте только через ssl. Для этого вначале отредактируем файл /etc/apache2/sites-available/default-ssl | Разрешим доступ к нашей web-почте только через ssl. Для этого вначале отредактируем файл /etc/apache2/sites-available/default-ssl | ||
- | ''sudo nano /etc/apache2/sites-available/default-ssl '' | + | <code bash>sudo nano /etc/apache2/sites-available/default-ssl </code> |
Заменяем | Заменяем | ||
Строка 1022: | Строка 1039: | ||
SSLCertificateKeyFile /etc/ssl/private/oban.key</file> | SSLCertificateKeyFile /etc/ssl/private/oban.key</file> | ||
- | Подключаем модуль ssl, разрешаем сайт default-ssl и перезапускаем apache | + | Подключаем модуль //ssl//, разрешаем сайт //default-ssl// и перезапускаем //apache// |
- | ''sudo a2enmod ssl \\ | + | <code bash>sudo a2enmod ssl |
- | sudo a2ensite default-ssl \\ | + | sudo a2ensite default-ssl |
- | sudo /etc/init.d/apache2 restart'' | + | sudo /etc/init.d/apache2 restart</code> |
Редактируем файл /etc/horde/horde3/conf.php и закомментарим строки | Редактируем файл /etc/horde/horde3/conf.php и закомментарим строки | ||
- | ''sudo nano /etc/horde/horde3/conf.php'' | + | <code bash>sudo nano /etc/horde/horde3/conf.php</code> |
<file>//echo "Horde3 configuration disabled by default because the administration/install wizard gives the whole world too much access to the system. Read /usr/share/doc/horde3/README.Debian.gz on how to allow access."; | <file>//echo "Horde3 configuration disabled by default because the administration/install wizard gives the whole world too much access to the system. Read /usr/share/doc/horde3/README.Debian.gz on how to allow access."; | ||
//exit (0);</file> | //exit (0);</file> | ||
- | Распаковываем скрипт для создания базы данных horde | + | Распаковываем скрипт для создания базы данных //horde// |
- | ''sudo gzip -d /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql.gz '' | + | <code bash>sudo gzip -d /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql.gz </code> |
и меняем пароль в файле /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql | и меняем пароль в файле /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql | ||
- | ''sudo nano /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql '' | + | <code bash>sudo nano /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql </code> |
<file>-- IMPORTANT: Change this password. | <file>-- IMPORTANT: Change this password. | ||
PASSWORD('horde') </file> | PASSWORD('horde') </file> | ||
- | на другой (далее будем называть его <horde_password>) | + | на другой (далее будем называть его //<horde_password>//) |
- | Исполняем скрипт с параметрами администратора mysql | + | Исполняем скрипт с параметрами администратора //mysql// |
- | ''sudo mysql --user=root --password=<mysql_password> < /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql'' | + | <code bash>sudo mysql --user=root --password=<mysql_password> < /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql</code> |
- | и заходим браузером на %%https://oban.aaa.ru%% | + | и заходим браузером на https://oban.aaa.ru |
В первый раз нас пустят с администраторскими привилегиями. Настроим систему аутентификации. Вначале войдем в **Управление - Приложения - Портал (horde)** и выберем закладку **Authentication**. | В первый раз нас пустят с администраторскими привилегиями. Настроим систему аутентификации. Вначале войдем в **Управление - Приложения - Портал (horde)** и выберем закладку **Authentication**. | ||
Строка 1058: | Строка 1075: | ||
Зададим список пользователей-администраторов, перечислив двух наших пользователей — ''admin@bbb.ru, admin'' (через запятую) в поле **"Which users should be treated as administrators (root, super-user) by Horde?"**. | Зададим список пользователей-администраторов, перечислив двух наших пользователей — ''admin@bbb.ru, admin'' (через запятую) в поле **"Which users should be treated as administrators (root, super-user) by Horde?"**. | ||
- | Затем выберем способ аутентификации - через imap (выберем ''IMAP authentication'' в поле **"What backend should we use for authenticating users to Horde?"**). Страница обновится, дав нам настройки для выбранного нами способа аутентификации. | + | Затем выберем способ аутентификации - через IMAP (выберем ''IMAP authentication'' в поле **"What backend should we use for authenticating users to Horde?"**). Страница обновится, дав нам настройки для выбранного нами способа аутентификации. |
В поле **"Configuration type"** выберем ''Separate values''. | В поле **"Configuration type"** выберем ''Separate values''. | ||
Строка 1116: | Строка 1133: | ||
Это нормально, т.к. мы не хотим, чтобы возможно было менять конфигурацию через веб. Скопируем показанный внизу на странице сгенеренный код и запишем его в файл /etc/horde/horde3/conf.php (важно скопировать ВЕСЬ текст, заменив ВЕСЬ текст, имеющийся в файле). | Это нормально, т.к. мы не хотим, чтобы возможно было менять конфигурацию через веб. Скопируем показанный внизу на странице сгенеренный код и запишем его в файл /etc/horde/horde3/conf.php (важно скопировать ВЕСЬ текст, заменив ВЕСЬ текст, имеющийся в файле). | ||
- | ''sudo nano /etc/horde/horde3/conf.php'' | + | <code bash>sudo nano /etc/horde/horde3/conf.php</code> |
(здесь вставляем скопированный текст со страницы броузера) | (здесь вставляем скопированный текст со страницы броузера) | ||
Строка 1124: | Строка 1141: | ||
Отредактируем файл /etc/horde/imp4/servers.php | Отредактируем файл /etc/horde/imp4/servers.php | ||
- | ''sudo /etc/horde/imp4/servers.php'' | + | <code bash>sudo nano /etc/horde/imp4/servers.php</code> |
<file>$servers['imap'] = array( | <file>$servers['imap'] = array( | ||
Строка 1142: | Строка 1159: | ||
и закомментируем все остальные примеры ниже. | и закомментируем все остальные примеры ниже. | ||
- | Войдем заново на %%https://oban.aaa.ru%% уже под одним из введенных нами пользователей с правами администратора. | + | Войдем заново на https://oban.aaa.ru уже под одним из введенных нами пользователей с правами администратора. |
Зайдем в **Управление - Приложения - Почта (imp)** и выберем закладку **Server**. | Зайдем в **Управление - Приложения - Почта (imp)** и выберем закладку **Server**. | ||
Строка 1150: | Строка 1167: | ||
Нажмем кнопку **Generate Почта Configuration**, скопируем сгенеренный текст конфигурации и запишем в файл /etc/horde/imp4/conf.php | Нажмем кнопку **Generate Почта Configuration**, скопируем сгенеренный текст конфигурации и запишем в файл /etc/horde/imp4/conf.php | ||
- | ''sudo nano /etc/horde/imp4/conf.php'' | + | <code bash>sudo nano /etc/horde/imp4/conf.php</code> |
(здесь вставляем скопированный текст со страницы броузера) | (здесь вставляем скопированный текст со страницы броузера) | ||
Строка 1156: | Строка 1173: | ||
Отредактируем файл /etc/horde/passwd3/backends.php | Отредактируем файл /etc/horde/passwd3/backends.php | ||
- | ''sudo nano /etc/horde/passwd3/backends.php'' | + | <code bash>sudo nano /etc/horde/passwd3/backends.php</code> |
Закомментируем все кроме | Закомментируем все кроме | ||
Строка 1199: | Строка 1216: | ||
); </file> | ); </file> | ||
- | (здесь вместо <mail_admin_password> вставьте пароль mysql пользователя mail_admin, а также можете изменить политику паролей — какие пароли допустимы: | + | (здесь вместо //<mail_admin_password>// вставьте пароль //mysql// пользователя //mail_admin//, а также можете изменить политику паролей — какие пароли допустимы: |
- | 'minLength' — минимальная длина паролей | + | //'minLength'// — минимальная длина паролей |
- | 'maxLength' — максимальная длина паролей | + | //'maxLength'// — максимальная длина паролей |
- | 'minUpper' — минимальное количество заглавных букв в паролях | + | //'minUpper'// — минимальное количество заглавных букв в паролях |
- | 'minLower' — минимальное количество прописных букв в паролях | + | //'minLower'// — минимальное количество прописных букв в паролях |
- | 'minNumeric' — минимальное количество цифровых символов в паролях | + | //'minNumeric'// — минимальное количество цифровых символов в паролях |
- | 'minSymbols' — минимальное количество прочих символов букв в паролях) | + | //'minSymbols'// — минимальное количество прочих символов букв в паролях) |
Зайдем в **Управление - Приложения - Пароль (passwd)** и в поле **"Should we display a list of backends (defined in config/backends.php) for users to choose from? The options are 'shown', 'hidden'. If the backend list is hidden then you can use the 'preferred' mechanism to auto-select from it based on an HTTP virtualhost or another piece of data. If it is shown, the user will be able to pick from any of the options."** выберем ''Hidden''. | Зайдем в **Управление - Приложения - Пароль (passwd)** и в поле **"Should we display a list of backends (defined in config/backends.php) for users to choose from? The options are 'shown', 'hidden'. If the backend list is hidden then you can use the 'preferred' mechanism to auto-select from it based on an HTTP virtualhost or another piece of data. If it is shown, the user will be able to pick from any of the options."** выберем ''Hidden''. | ||
Строка 1217: | Строка 1234: | ||
Нажмем кнопку **Generate Пароль Configuration**, скопируем сгенеренный текст конфигурации и запишем в файл /etc/horde/passwd3/conf.php | Нажмем кнопку **Generate Пароль Configuration**, скопируем сгенеренный текст конфигурации и запишем в файл /etc/horde/passwd3/conf.php | ||
- | ''sudo nano /etc/horde/passwd3/conf.php '' | + | <code bash>sudo nano /etc/horde/passwd3/conf.php </code> |
(здесь вставляем скопированный текст со страницы броузера) | (здесь вставляем скопированный текст со страницы броузера) | ||
Строка 1223: | Строка 1240: | ||
Отредактируем файл /etc/horde/horde3/registry.php | Отредактируем файл /etc/horde/horde3/registry.php | ||
- | ''sudo nano /etc/horde/horde3/registry.php'' | + | <code bash>sudo nano /etc/horde/horde3/registry.php</code> |
- | и для приложений imp, passwd и turba заменим | + | и для приложений //imp//, //passwd// и //turba// заменим |
<file> 'status' => 'inactive', </file> | <file> 'status' => 'inactive', </file> | ||
Строка 1233: | Строка 1250: | ||
<file> 'status' => 'active', </file> | <file> 'status' => 'active', </file> | ||
- | Учтите, что для пользователей, которые входят с использованием ldap мы не настроили смену пароля (это лучше делать другими средствами - внутри нашей сети, а не давать им менять пароль через веб). Кроме этого, этим пользователям (т.к. они входят, вводя только имя, а не имя@домен), нужно задавать свой почтовый адрес в поле "Ваш адрес отправителя:" в **Настройки - Почта — Личные**. | + | Учтите, что для пользователей, которые входят с использованием ldap мы не настроили смену пароля (это лучше делать другими средствами - внутри нашей сети, а не давать им менять пароль через веб). Кроме этого, этим пользователям (т.к. они входят, вводя только имя, а не имя@домен), нужно задавать свой почтовый адрес в поле **"Ваш адрес отправителя:"** в **Настройки - Почта — Личные**. |
Для настройки адресной книги выполним | Для настройки адресной книги выполним | ||
- | ''sudo mysql -u horde -p horde < /usr/share/doc/turba2/examples/scripts/sql/turba.sql '' | + | <code bash>sudo mysql -u horde -p horde < /usr/share/doc/turba2/examples/scripts/sql/turba.sql</code> |
- | **Enter password: ** | + | <note tip>**Enter password: **</note> |
+ | |||
+ | Введем пароль пользователя //horde// | ||
- | (введем пароль пользователя horde - <horde_password>) | + | <code bash><horde_password></code> |
Зайдем в **Управление - Приложения — Адресная книга (turba)** и нажмем кнопку **Create Адресная книга Configuration**, скопируем сгенеренный текст конфигурации и запишем в файл /etc/horde/turba2/conf.php | Зайдем в **Управление - Приложения — Адресная книга (turba)** и нажмем кнопку **Create Адресная книга Configuration**, скопируем сгенеренный текст конфигурации и запишем в файл /etc/horde/turba2/conf.php | ||
- | ''sudo nano /etc/horde/turba2/conf.php '' | + | <code bash>sudo nano /etc/horde/turba2/conf.php </code> |
(здесь вставляем скопированный текст со страницы броузера) | (здесь вставляем скопированный текст со страницы броузера) | ||
Строка 1846: | Строка 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// закомментарена. | ||
Проверьте, что файл | Проверьте, что файл | ||
Строка 1858: | Строка 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-записи нашего домена (доменов): | ||
Строка 3617: | Строка 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> |
(вторая строка должна начинаться хотя бы с одного пробела) | (вторая строка должна начинаться хотя бы с одного пробела) | ||
Строка 3855: | Строка 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}} |