Счетчик

Поисковый анализ сайта
яндекс.ћетрика
Cервер и сайт запущен 2011.02.01 на Debian

Добавляю книгу по postfix многие конфиги я брал именно из нее

postfix_podrobnoe_rukovodstvo_gildebrandt_ketter.pdf

я расскажу как установить Postfix в связке с Dovecot (IMAP/POP3) и MySQL на сервер Apache под управлением OC Debian. Руководство было опробовано на Debian 5 Lenny и Debian 6 Squeeze
И так поехали

Базовая настройка системы
настройка apache2 
настройка sql 


Postfix — очень мощный почтовый сервер, основанный на идеологии Open Source, его часто называют Postfix MTA — Postfix Mail Transfer Agent. В этом руководстве, собранном из разных истоников и дополненных личными переживаниями, я расскажу как установить Postfix в связке с Dovecot (IMAP/POP3) и MySQL на сервер Apache под управлением OC Debian. Руководство было опробовано на Debian 5 Lenny и Debian 6 Squeeze.

Текст статьи достаточно объёмный, но выполнив все шаги, мы получим в своё распоряжение надёжный почтовый сервер с возможностью добавления почтовых доменов и ящиков прямо через интерфейс MySQL, а это многого стоит. 
Базовая настройка системы
Предполагается, что в файле /etc/hosts уже есть запись для нашего сервера, в этом примере и ниже по тексту будет использована следующая запись:

127.0.0.1 localhost.localdomain localhost
192.168.1.2 mail.sysadmin-komi.ru mail



В файле /etc/hostname должно содержаться сокращённое название сервера, в данном случае mail:

echo "mail" > /etc/hostname
hostname -F /etc/hostname



Перед установкой пакетов следует обновить сведения и систему:

aptitude update && aptitude safe-upgrade



Установка нужных пакетов
Выполним следующую команду для установки Postfix, Dovecot, OpenSSL и MySQL:

aptitude install postfix postfix-mysql postfix-doc mysql-client mysql-server dovecot-common dovecot-imapd dovecot-pop3d postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl telnet libsieve2-1 bsd-mailx mutt



В процессе установки появится несколько диалогов первоначальной настройки пакетов, вот основные шаги:

•Во время установки сервера MySQL, если он не был установлен ранее, потребуется ввести пароль для пользователя root. Пароль следует выбрать надёжный;
•Тип используемого Postfix сервера, — в одноимённом диалоге, — «Internet Site»;
•В диалоге настройки Postfix следует определиться с почтовым именем. Имеется ввиду полное доменное имя сервера, в нашем примере это mysrv.example.com, его ещё называют FQDN (Fully Qualified Domain Name).

Итак мы установили все необходимые пакеты и готовы перейти к детальной настройке конфигурации.

Настройка MySQL базы данных доменных имён и пользователей

Для простоты душевной рекомендую все коды mysql делать в phpmyadmin (рекомендую для новичков)

Для начала подключимся к MySQL серверу прямо из командной строки, нужно будет ввести пароль пользователя root, указанный при установке:

mysql -u root -p



После этого должно появиться приглашение к вводу команд MySQL, вроде этого:
mysql>

Создадим базу данных для Postfix и выберем её для дальнейшего использования:

CREATE DATABASE mail;
USE mail;



Подобные команда может быть выполнена и через интерфейс phpMyAdmin, но это менее безопасно во всех случаях.

Создадим пользователя с говорящим именем «mail_admin», он у нас будет главный по почте, поэтому наделим его всему привилегиями на всех локальных доменах. ВАЖНО! Сейчас и ниже «mail_admin_password» следует заменить на пароль для этого пользователя, в первой строке он задаётся впервые:

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;



Далее создаём таблицу в которой будут храниться все активные почтовые домены, доменов может быть сколько угодно и это радует:

CREATE TABLE domains ( domain varchar(50) NOT NULL, PRIMARY KEY (domain) );



Создадим таблицу пересылки почты с ящика на ящик:

CREATE TABLE forwardings ( source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );



Создадим таблицу для хранения почтовых аккаунтов:

CREATE TABLE users ( email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );



И наконец создадим таблицу транспортировки:

CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) );



Работа с MySQL на данном этапе завершена, выходим обратно в консоль:

quit



Проверим, что MySQL связана с localhost (127.0.0.1). Для этого откроем файл /etc/mysql/my.cnf и найдём следующую строку:

bind-address = 127.0.0.1



Если MySQL на сервере уже настроен на другой IP адрес, следует это учесть в поледующих шагах настройки Postfix. Не рекомендуется запускать MySQL сервер на публичном IP адресе — это небезопасно.

Чтобы внесённые нами изменения корректно вступили в силу — перезапустим MySQL сервер:

/etc/init.d/mysql restart



На следующем этапе мы настроим Postfix на работу с MySQL.

Настройка Postfix на работу с MySQL
Для каждой таблицы в MySQL нам следует создать файл соответствия для Postfix.

Создадим файл для работы с почтовыми доменами Postfix:

nano /etc/postfix/mysql-virtual_domains.cf



В созданный файл /etc/postfix/mysql-virtual_domains.cf нужно добавить следующие строки, замените пароль «mail_admin_pass» на пароль вашего пользователя «mail_user»:

user = mail_user
password = mail_admin_pass
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain = '%s'
hosts = 127.0.0.1



Создадим похожий файл для настройки пересылки почты с ящика на ящик:

nano /etc/postfix/mysql-virtual_forwardings.cf



В созданный файл /etc/postfix/mysql-virtual_forwardings.cf нужно добавить следующие строки, замените пароль «mail_admin_pass» на пароль вашего пользователя «mail_user»:

user = mail_user

password = mail_admin_pass
dbname = mail
query = SELECT destination FROM forwardings WHERE source = '%s'
hosts = 127.0.0.1



Далее создадим файл для работы с почтовыми аккаунтами:

nano /etc/postfix/mysql-virtual_mailboxes.cf



В созданный файл /etc/postfix/mysql-virtual_mailboxes.cf нужно добавить следующие строки, замените пароль «mail_admin_pass» на пароль вашего пользователя «mail_user»:

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



И наконец создаём вспомогательный файл для виртуального отображения почты:
nano /etc/postfix/mysql-virtual_email2email.cf

В созданный файл /etc/postfix/mysql-virtual_email2email.cf нужно добавить следующие строки, замените пароль «mail_admin_pass» на пароль вашего пользователя «mail_user»:

user = mail_user
password = mail_admin_pass
dbname = mail
query = SELECT email FROM users WHERE email = '%s'
hosts = 127.0.0.1



Установим нужные права и владельца на только что созданные файлы:

chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf



Добавим почтовую группу и пользователя для передачи почты. Все сообщения виртуальных почтовых ящиков будут храниться в папке /home/vmail на сервере:

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



На редактирование файл /etc/postfix/main.cf и убедимся в наличии следующих строк, адрес сервера следует заменить на выбранный ранее:

myhostname = mail.sysadmin-komi.ru
mydestination = mail.sysadmin-komi.ru, localhost, localhost.localdomain
mynetworks = 127.0.0.0/8
message_size_limit = 30720000
virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
virtual_create_maildirsize = yes
virtual_maildir_extended = yes
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1



На этом мы закончим конфигурировать Postfix и перейдём к настройке SSL и генерации сертификата.

Создание SSL сертификата для Postfix
Нам нужно сгенерировать SSL сертификат для Postfix, чтобы работать с почтой по защищённому соединению. Это гораздо безопаснее нежели обычный доступ по незащищённому каналу. Перейдём в директорию Postfix и создадим там сертификат с приватным ключом:

cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509



Сертификат создаётся на год, о чём говорит цифра 365.

На экран будет выведен диалог ввода информации о ключе:

Country Name (2 letter code) [US]: RU
State or Province Name (full name) [Some-State]: Komi
Locality Name (eg, city) []: Syktyvkar
Organization Name (eg, company) [Internet Widgits Pty Ltd]: sysadmin-komi.ru
Organizational Unit Name (eg, section) []: Email Services
Common Name (eg, YOUR name) []: mail.sysadmin-komi.ru
Email Address []: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.



Установим права на файл ключа таким образом, чтобы любой доступ был только у владельца, иными словами — отменим права у остальных:

chmod o= /etc/postfix/smtpd.key



На этом создание SSL сертификата завершено, перейдём к настройке saslauthd для доступа к MySQL.

Настройка saslauthd для доступа к MySQL
Saslauthd — это демон аутентификации, который работает посредствам SASL. Нам он нужен, чтобы связать Postfix с MySQL и позволять им совместно работать.

Для начала создадим директорию для saslauthd:

mkdir -p /var/spool/postfix/var/run/saslauthd



Сохраним начальную версию файла:

cp -a /etc/default/saslauthd /etc/default/saslauthd.bak



Откроем на редактирование файл /etc/default/saslauthd и установим в нём следующие значения:

START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"



После этого нам нужно создать файл /etc/pam.d/smtp:

nano /etc/pam.d/smtp



И внести в него следующие строки. Укажите нужный пароль для пользователя «mail_admin», заменив «mail_admin_password» на верное значение:

auth required pam_mysql.so user=mail_user passwd=mail_admin_pass host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail_user passwd=mail_admin_pass host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1



Создадим файл /etc/postfix/sasl/smtpd.conf:

nano /etc/postfix/sasl/smtpd.conf



И внесём в него следующие строки, так же заменив пароль на верный:

pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: mail_admin
sql_passwd: mail_admin_password
sql_database: mail
sql_select: SELECT password FROM users WHERE email = '%u'



Установим права на вновь созданные файлы:

chmod o= /etc/pam.d/smtp
chmod o= /etc/postfix/sasl/smtpd.conf



Теперь добавим пользователя postfix в группу sasl и перезапустим сервисы:

adduser postfix sasl
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart


На этом конфигурирование saslauthd завершено. Далее мы настроим Dovecot на использование базы данных MySQL для IMAP/POP3 идентификации.

Настройка Dovecot
Dovecot — это IMAP и POP3 сервер, который позволит нам забирать почту программами сборщиками. Это гибкий и безопасный инструмент в системе Linux.
Нам нужно открыть на редактирование файл /etc/postfix/master.cf и добавить в конце следующие ниже строки:

dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
перед переменной flags нужно оставить 2 пробела

Сохраним для потомков изначальный конфигурационный файл Dovecot:

cp -a /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak



После чего откроем файл /etc/dovecot/dovecot.conf на редактирование и заменим всё его содержимое указанным ниже кодом. Ящик «Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.» следует заменить на желаемый:

protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir
ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem
namespace private {
  separator = .
  prefix = INBOX.
  inbox = yes
}
protocol lda {
  log_path = /home/vmail/dovecot-deliver.log
  auth_socket_path = /var/run/dovecot/auth-master
  postmaster_address = Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.sysadmin-komi.ru
  mail_plugins = sieve
  global_script_path = /home/vmail/globalsieverc
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
auth default {
  user = root
  passdb sql {
    args = /etc/dovecot/dovecot-sql.conf
  }
  userdb static {
    args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
  }
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = vmail
    }
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}



MySQL будет сохранять в себе пароли доступа, поэтому мы сохраним копию первоначального /etc/dovecot/dovecot-sql.conf, а потом произведём настройку:

cp -a /etc/dovecot/dovecot-sql.conf /etc/dovecot/dovecot-sql.conf.bak



Содержимое исходного файла /etc/dovecot/dovecot-sql.conf полностью заменим на нижеуказанное, не забудем поменять пароль «mail_admin_password» на актуальный:

driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail_user password=mail_admin_pass
default_pass_scheme = CRYPT
password_query = SELECT email AS user, password FROM users WHERE email = '%u';



На этом настройка Dovecot завершена, следует перезагрузить его:

/etc/init.d/dovecot restart



Проверим файл /var/log/mail.log на отсутсвие ошибок:

tail -50 /var/log/mail.log



И найдём примерно следующие строки:

Feb 13 14:00:17 somevar dovecot: Dovecot v1.0.15 starting up
Jan 21 20:00:18 somevar dovecot: auth-worker(default): mysql: Connected to 127.0.0.1 (mail)



Перед началом тестирования следует установить права и владельца на файл конфигурации Dovecot /etc/dovecot/dovecot.conf:

chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf



Проверим корректность работы POP3 сервера, для этого мы подключимся к POP3 серверу через терминал:

telnet localhost pop3



После ввода команды в консоли должно отобразиться примерно следующие:

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



Выйдем из режима терминала, пока он нам больше не нужен:

quit



С Dovecot разобрались, теперь перейдём к настройке алиасов.

Настройка почтовых алиасов
Откроем на редактирование файл /etc/aliases и убедимся в корректности значений для директив «postmaster» и «root», адрес почты для root следует изменить на желаемый:

postmaster: root
root: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.



Активируем новые алиасы и перезагрузим Postfix:

newaliases
/etc/init.d/postfix restart



На этом настройка алиасов завершена, перейдём к тестированию Postfix.

Тестирование Postfix
Для проверки корректности функционирования SMTP-AUTH и TLS, в консоли введём следующую команду:

telnet localhost 25


После успешного соединения, в терминале должно появиться что-то вроде этого:

220 mysrv.example.com ESMTP Postfix (Debian/GNU)



Далее вводим команду в терминал:

ehlo localhost



После ввода команды, в терминале должно отобразиться нечто вроде этого:

Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 mail.sysadmin-komi.ru ESMTP Postfix (Debian/GNU)
ehlo localhost
250-mail.sysadmin-komi.ru
250-PIPELINING
250-SIZE 30720000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN



Для нас важно наличие строки «250-STARTTLS». Вводим в терминал команду «quit» и перейдём к наполнению базы данных MySQL почтовыми доменами и пльзователями.

Настройка почтовых доменов и аккаунтов
На этом этапе нужно иметь настроенные записи DNS для почтовых доменов. Для этого следует создать необходимую запись MX, если её ещё нет, в списках DNS, которая будет указывать на полный домен.

Подключимся к MySQL из консоли, добавить аккаунт в MySQL можно любым другим способом, в том числе и из PHP или Python скрипта, но сейчас мы остановимся на консоли:

mysql -u root -p


Добавим в список доменов наш основной домен и создадим первый почтовый аккаунт, «example.com», «Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.» и «password» следует заменить корректными значениями:

USE mail;
INSERT INTO domains (domain) VALUES ('sysadmin-komi.ru');
INSERT INTO users (email, password) VALUES (Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.', ENCRYPT('pass'));
quit



Обратите внимание на команду шифрования пароля, добавлять или менять пароль нужно именно так.

Теперь попробуем отправить почту вновь созданному аккаунту. Это необходимо для создания структуры директорий на диске, которые появяться после получения первого письма. Для отправки почты непосредственно из консоли мы будем использовать mailx или bsd-mailx, в зависимости от того, что установилось выше:

mailx Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.



После ввода команды будет предложено ввести тему сообщения. Вводим, нажимаем Enter, после чего нажимаем Ctrl + D. Поле «CC» можно оставить пустым.

Так как почтовых доменов может быть несколько, следует указывать полный почтовый адрес «Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.» для сборщика почты, иначе по имени пользователя «info» нельзя будет определить, к какому домену он принадлежит и почта не будет отправлена или получена.

На этом перейдём к следующему шагу — проверке лог файлов.

Проверка логов
После отправки тестового сообщения нам следует проверить логи на остутствие ошибок. Проверим содержимое файла /var/log/mail.log в последних 50 строках:

tail -50 /var/log/mail.log



Мы должны увидеть нечто подобное:

Feb 13 15:07:49 somevar postfix/cleanup[5877]: E1D145803: message-id=<Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.;
Aug 13 15:07:49 somevar postfix/qmgr[5867]: E1D145803: from=, size=377, nrcpt=1 (queue active)
Aug 13 15:07:49 somevar postfix/pipe[5883]: E1D145803: to=, relay=dovecot, delay=0.05, delays=0.04/0.01/0/0.01, dsn=2.0.0, status=sent (delivered via dovecot service)
Aug 13 15:07:49 somevar postfix/qmgr[5867]: E1D145803: removed



Далее мы проверим лог доставки Dovecot, котрый находится в файле /home/vmail/dovecot-deliver.log и должны увидеть нечто похожее на:

deliver(Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.): 2011-02-13 17:05:19 Info: msgid=<Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.;: saved mail to INBOX



Теперь можно проверить структуру почтового хранилища и директорий на диске.

Проверка структуры директорий на диске
Перейдём в директорию /home/vmail/sysadmin-komi.ru/info/Maildir, где «sysadmin-komi.ru» адрес нашего почтового домена:

cd /home/vmail/sysadmin-komi.ru/info/Maildir



Выполним команду поиска:

find



Внутри директории должно содержаться примерно следующее:

./dovecot-uidlist
./cur
./new
./new/1285673545.P4152W0M168494.somevar
./dovecot.index
./dovecot.index.log
./tmp



Просмотреть почту можно прямо из консоли при помощи утилиты mutt:

cd /home/vmail/sysadmin-komi.ru/info/Maildir
mutt -f .



Если она не установлена, выполним:

aptitude install mutt



Настройка почтовых программ
Пользователь может забрать почту любой доступной почтовой программой. В качестве IMAP/POP3 и SMTP сервера следует указать домен, записанный в MX записи интерфейса DNS, например «mail.example.com». Логин — это почтовый адрес пользователя, как уже говорилось это необходимо при мультидоменной конфигурации, которую мы и реализовали. Шифрование входящей почты — SSL, исходящей — TLS.

Чтобы забирать почту пользователя root, в нашем примере его почтовый ящик «Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.», следует настроить переадресацию в таблице forwardings:

mysql -u root -p
USE mail;
INSERT INTO forwardings (source, destination) VALUES (Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.'Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.');
quit



Статья допилина, работает на все 100% пользуйтесь на здоровье

Добавить комментарий


Защитный код
Обновить