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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
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 с привилегиями SELECTINSERTUPDATE и DELETE. Доступ ему будет разрешен только с локального компьютера ​(т.е. с самого сервера):+CREATE TABLE forwardings ​ 
 +source varchar(80NOT NULL 
 +destination TEXT NOT NULL 
 +PRIMARY KEY (source) ​ 
 +TYPE=MyISAM; ​
  
-''​GRANT SELECTINSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'​localhost'​ IDENTIFIED BY '<​mail_admin_password>';​ \\  +CREATE TABLE transport (  
-GRANT SELECTINSERT, 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 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}}