Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:почтовый_сервер_со_всем_фаршем_на_10.04_lts [2011/07/20 12:38] [Создание SSL-сертификатов] |
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'' | + | Ответим |
- | Нас спросят пароль пользователя toor на oban | + | <code bash>yes</code> |
- | **toor@10.0.0.6's password:** | + | Нас спросят пароль пользователя //toor// на //oban// |
+ | |||
+ | <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//. Доступ ему будет разрешен только с локального компьютера (т.е. с самого сервера): | ||
+ | |||
+ | <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>'; | ||
+ | FLUSH PRIVILEGES;</code> | ||
+ | |||
+ | Теперь создадим нужные нам таблицы в базе данных //mail// | ||
+ | |||
+ | <code mysql>use mail; | ||
+ | CREATE TABLE domains ( | ||
+ | domain varchar(50) NOT NULL, | ||
+ | PRIMARY KEY (domain) ) | ||
+ | TYPE=MyISAM; | ||
- | Создадим специального пользователя mail_admin и паролем <mail_admin_password> (замените!) для доступа к нашей базе данных mail с привилегиями SELECT, INSERT, UPDATE и DELETE. Доступ ему будет разрешен только с локального компьютера (т.е. с самого сервера): | + | CREATE TABLE forwardings ( |
+ | source varchar(80) NOT NULL, | ||
+ | destination TEXT NOT NULL, | ||
+ | PRIMARY KEY (source) ) | ||
+ | TYPE=MyISAM; | ||
- | ''GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY '<mail_admin_password>'; \\ | + | CREATE TABLE transport ( |
- | GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY '<mail_admin_password>'; \\ | + | domain varchar(128) NOT NULL DEFAULT '', |
- | FLUSH PRIVILEGES;'' | + | transport varchar(128) NOT NULL DEFAULT '', |
+ | UNIQUE KEY domain (`domain`) | ||
+ | ) ENGINE=MyISAM; | ||
- | Теперь создадим нужные нам таблицы в базе данных mail | + | 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, а не каждому сертификату отдельно. | ||
Строка 339: | Строка 344: | ||
Создаем сертификат для подписывания: | Создаем сертификат для подписывания: | ||
- | <code bash>openssl x509 -trustout -inform PEM -in ca.crt -outform DER -out ca.pfx</code> | + | <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//) | ||
Строка 472: | Строка 479: | ||
(ответим, что мы хотим доверять новым сертификатам и выберем в списке наш новый сертификат для активации) | (ответим, что мы хотим доверять новым сертификатам и выберем в списке наш новый сертификат для активации) | ||
- | Нашим клиентам, которые будут связываться с нашим первером с использованием шифрования (TLS, SSL) или с нашим веб-сервером по протоколу HTTPS нужно установить доверие к нашему CA. Тем или иным способом передайте им открытый ключ нашего CA - ca.crt. | + | Нашим клиентам, которые будут связываться с нашим сервером с использованием шифрования (TLS, SSL) или с нашим веб-сервером по протоколу HTTPS нужно установить доверие к нашему CA. Тем или иным способом передайте им открытый ключ нашего CA - ca.crt. |
<note warning>Внимание! Никогда никому не передавайте созданные приватные ключи *.key и не делайте их доступными! </note> | <note warning>Внимание! Никогда никому не передавайте созданные приватные ключи *.key и не делайте их доступными! </note> | ||
Строка 1134: | Строка 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( | ||
Строка 1858: | Строка 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// закомментарена. | ||
Проверьте, что файл | Проверьте, что файл | ||
Строка 1870: | Строка 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-записи нашего домена (доменов): | ||
Строка 3629: | Строка 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> |
(вторая строка должна начинаться хотя бы с одного пробела) | (вторая строка должна начинаться хотя бы с одного пробела) | ||
Строка 3867: | Строка 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}} |