четверг, 4 августа 2011 г.

Установка и настройка почтового сервера на базе Courier и Postfix в Ubuntu

 

Для быстрой настройки почтового сервера связка Courier и Postfix является очень удобной.

Для работы нам понадобится наличие домена с обратным преобразованием оного и записью типа MX, а также база данных MySQLдля хранения информации о пользователях и доменах.

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

25 (SMTP), 110, 995 (POP, POPS), 143, 993 (IMAP, IMAPS)

Самый простой способ настроить место для хранения почты — создать пользователя vmail с соответствующей группой и назначить ему специфичный userID.

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

Для начала создадим группу vmail:

 

sudo groupadd -g 5000 vmail

Это команда создает группу vmail и присваивает ее GID (group ID) 5000.

Затем создаем пользователя vmail:

 

sudo useradd -s /usr/sbin/nologin -g vmail -u 5000 vmail -d /home/vmail -m

Эта команда создает пользователя vmail, чтобы он не мог логиниться в систему, присваивает его группе vmail, а так же создает ему домашнюю директорию /home/vmail

Установим Postfix:

 

sudo apt-get install postfix postfix-mysql postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl

 

В процессе установки Postfix сервера вначале система выведет на экран окно с информацией, после чего потребуется выбрать пункт 'Internet Site'.

На вопрос о имени имя вашего почтового домена mail.domen1.com.

Настройка MySQL.

Для начала создадим базу данных с оригинальным названием — mail.

 

mysqladmin -u root -p create mail

В процессе выполнения команды система вас попросит ввести пароль администратора MySQL (вы его ввели при инсталляции MySQL).

Далее залогинимся в MySQL и создадим несколько таблиц.

 

mysql -u root -p

Для начала создадим пользователя БД, для наших целей.

 

CREATE USER 'mailadmin'@'localhost' IDENTIFIED BY 'MyPasswordHere';

Замените MyPasswordHere на свой собственный пароль.

Далее, дадим этому пользователю необходимые привилегии:

 

FLUSH PRIVILEGES;

GRANT SELECT, INSERT, UPDATE, DELETE ON `mail` . * TO 'mailadmin'@'localhost';

FLUSH PRIVILEGES;

1.Теперь мы можем выбрать нашу БД mail и создать необходимые таблицы.

 

USE mail;

Необходимо создать три таблицы для хранения почтовых доменов, пользователей и деталей доставки сообщений (форвардинг сообщений).

Таблица доменов. В Mysql введите следующие команды:

 

CREATE TABLE domains (

domain varchar(50) NOT NULL,

PRIMARY KEY (domain)

)

TYPE=MyISAM;

Таблица пользователей. Как раньше, введите в MySQL:

 

CREATE TABLE users (

email varchar(80) NOT NULL,

password varchar(20) NOT NULL,

PRIMARY KEY (email)

)

TYPE=MyISAM;

Таблица форвардинга:

 

CREATE TABLE forwards (

source varchar(80) NOT NULL,

destination TEXT NOT NULL,

PRIMARY KEY (source)

)

TYPE=MyISAM;

Теперь можно выйти из MySQL.

Для того, чтобы Postfix мог использовать таблицы MySQL, необходимо создать несколько настроечных файлов.

Создадим текстовый файл:

 

sudo nano /etc/postfix/mysql-domains.cf

Введем следующие строки:

 

user = mailadmin

password = MyPasswordHere

dbname = mail

query = SELECT domain AS virtual FROM domains WHERE domain='%s'

hosts = 127.0.0.1

MyPasswordHere надо заменить на введенный при создании пользователя БД mailadmin пароль.

Создаем файл:

 

sudo nano /etc/postfix/mysql-forwards.cf

Заполняем его:

 

user = mailadmin

password = MyPasswordHere

dbname = mail

query = SELECT destination FROM forwards WHERE source='%s'

hosts = 127.0.0.1

 

Каждый домен имеет множество различных почтовых ящиков. Этот скрипт получает правильные характеристики почтового ящика.

 

sudo nano /etc/postfix/mysql-mailboxes.cf

Содержимое:

 

user = mailadmin

password = MyPasswordHere

dbname = mail

query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'

hosts = 127.0.0.1

 

И наконец создадим файл адресов.

 

sudo nano /etc/postfix/mysql-email.cf

Содержимое

 

user = mailadmin

password = MyPasswordHere

dbname = mail

query = SELECT email FROM users WHERE email='%s'

hosts = 127.0.0.1

Эти четыре файла позволят Postfix-у получить доступ к информации в базе данных mail и присвоить корректные данные каждому письму.

Установим нужные права:

 

sudo chmod o= /etc/postfix/mysql-*

(другие группы не имеют доступа к файлам.

И сменим владельца:

 

sudo chgrp postfix /etc/postfix/mysql-*

Postfix должен иметь к ним доступ.

Теперь настроим Postfix

Отредактируем файл настроек Postfix:

 

sudo nano /etc/postfix/main.cf

Обычно нижняя часть файла выглядит так:

 

myhostname = mail.domen1.com

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

myorigin = /etc/mailname

mydestination =

relayhost =

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mailbox_size_limit = 0

recipient_delimiter = +

inet_interfaces = all

Убедитесь, что mydestination не сделано присвоение.

Добавим ссылки на созданные файлы настроек, чтобы Postfix использовал их в процессе работы. В конец файла добавьте строки:

 

virtual_alias_domains =

virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-forwards.cf, mysql:/etc/postfix/mysql-email.cf

virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domains.cf

virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-mailboxes.cf

virtual_mailbox_base = /home/vmail

virtual_uid_maps = static:5000

virtual_gid_maps = static:5000

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

Дальше нужно настроить безопасное соединение.

Saslauthd требуется для того, чтобы устанавливать безопасные соединения с вашим почтовым сервером.

Посмотрим основной файл настроек программы:

 

sudo nano /etc/default/saslauthd

Первым делом надо установить автоматический запуск демона (поменяйте значение на 'yes'. По умолчанию стоит 'no'):

 

# Should saslauthd run automatically on startup? (default: no)

START=yes

Далее нужно изменить некоторые опции в конце файла. По умолчанию они выглядят так:

 

#

# Example for postfix users: "-c –m /var/spool/postfix/var/run/saslauthd"

OPTIONS="-c -m /var/run/saslauthd"

 

Изменим их следующим образом :

 

#

# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"

OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Мы только что указали каталог, который не существует в природе. Непорядок. Устраним это:

 

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

Мы используем MySQL для хранения наших идентификационных данных. Точнее не наших, а пользователей сервера. Значит процесс авторизации должен знать, где брать данные.
Создадим два файла, чтобы процесс мог получить доступ к базе данных и добыть необходимую ему информацию:

 

sudo nano /etc/pam.d/smtp

Добавим в этот файл следующий текст:

 

auth    required   pam_mysql.so user=mailadmin passwd=MyPasswordHere host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

account sufficient pam_mysql.so user=mailadmin passwd=MyPasswordHere host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

Это позволит процессу авторизации иметь доступ к БД для проверки пароля и e-mail-а.

И второй файл:

 

sudo 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: mailadmin

sql_passwd: MyPasswordHere

sql_database: mail

sql_select: select password from users where email = '%u'

Для того, чтобы Postfix мог получить доступ к процессу Saslauthd, добавим пользователя Postfix в группу Saslauthd

 

sudo adduser postfix sasl

Перезапускаем демоны:

 

sudo /etc/init.d/postfix restart

sudo /etc/init.d/saslauthd restart

Создадим сертификат безопасности. По умолчанию он будет создан в каталоге /etc/ssl/certs.

 

sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/certs/mailcert.pem

В процессе создания, вам зададут несколько вопросов. Ответить можно, например так:

 

Country Name - UA

State or Province -

Locality name - Kiev

Organisation Name - MyGreat Company

Organisational Unit Name - Mail

Hostname - mail.domen1.com

Email address - admin@domen1.com

Важно, чтобы Hostname совпадал с именем mail server-а — hostname. В нашем случае, это mail.domen1.com.
Мы создали самоподписанный сертификат здесь:

 

/etc/ssl/certs/mailcert.pem

Теперь требуется отредактировать главный файл настроек Postfix:

 

sudo nano /etc/postfix/main.cf

Найдите секцию TLS parameters. Настройки по умолчанию в ней выглядят так:

 

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

smtpd_use_tls=yes

smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Стираем их полностью. И вставляем вместо них следующие:

 

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/ssl/certs/mailcert.pem

smtpd_tls_key_file = $smtpd_tls_cert_file

Тем самым мы активировали безопасные соединения, перечислили, какие соединения будем принимать, и, наконец, указали путь к сертификату.

Установим Courier который позволит нам получить POP3 и IMAP доступ к нашей почте.

 

sudo apt-get install courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl

Во время установки вам будет задан вопрос, нужно ли создать директории. Правильный ответ — НЕТ

Для начала отредактируем файл:

sudo nano /etc/courier/authdaemonrc

Поменяйте строку

authmodulelist="authpam"

на

authmodulelist="authmysql"

Далее редактируем файл с деталями БД /etc/courier/authmysqlrc:

 

MYSQL_SERVER localhost

MYSQL_USERNAME mailadmin

MYSQL_PASSWORD MyPasswordHere

MYSQL_PORT 0

MYSQL_DATABASE mail

MYSQL_USER_TABLE users

MYSQL_CRYPT_PWFIELD password

MYSQL_UID_FIELD 5000

MYSQL_GID_FIELD 5000

MYSQL_LOGIN_FIELD email

MYSQL_HOME_FIELD "/home/vmail"

MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')


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

 

sudo /etc/init.d/courier-authdaemon restart

sudo /etc/init.d/courier-imap restart

sudo /etc/init.d/courier-imap-ssl restart

sudo /etc/init.d/courier-pop restart

sudo /etc/init.d/courier-pop-ssl restart

Нужно заполнить таблички в MySQL, чтобы все то, что мы настроили ранее заработало.

Логинимся в MySQL:

 

mysql -u root -p

Выбираем базу данных:

 

USE mail;

Заполняем таблицу доменов:

 

INSERT INTO `domains` (`domain`) VALUES ('domen1.com');

Чтобы ввести любой другой домен, выполните аналогичную команду:

 

INSERT INTO `domains` (`domain`) VALUES ('domen2.ru');

Заполняем таблицу пользователей:

 

INSERT INTO `users` (`email`, `password`) VALUES ('admin@domen1.com', ENCRYPT('secretpassword'));

Остальные пользователи вводятся аналогично:

 

INSERT INTO `users` (`email`, `password`) VALUES ('kot@domen2.ru', ENCRYPT('secretpassword'));

Когда все таблицы заполнены — выходим из ведения БД:

Перегружаем postfix:

 

sudo postfix reload

Для проверки работоспособности нужно отправить письмо на наш адрес

 

mail admin@domen1.com

Через какое-то время проверьте папку /home/vmail:

 

ls /home/vmail

Увидите новый каталог:

 

/home/vmail/domen1.com

А для каждого пользователя домена domen1.com в папке /home/vmail/domen1.com будет создан собственный каталог с письмами.

Осталось обеспечить возможность проверки почты с помощью WEB клиента.
Наиболее известным бесплатным и свободно распространяемым продуктом для этого является Squirrelmail.

 

sudo apt-get install squirrelmail squirrelmail-locales php-pear php5-cli

Скорее всего сразу после инсталляции ваш веб-клиент будет доступен по адресу: www.domen1.com/squirrelmail (www.domen1.com — ваш домен)
Если это не так, то нужно проделать следующее:

 

sudo cp /etc/squirrelmail/apache.conf /etc/apache2/sites-available/squirrelmail

sudo a2ensite squirrelmail

Тем самым мы копируем файл конфигурации по умолчанию в папку доступных сайтов Apache, после чего активируем его.

Теперь он точно будет доступен по адресу www.domen1.com/squirrelmail. Но это не совсем удобно.
Поэтому проделаем следующее:

 

sudo nano /etc/apache2/sites-available/squirrelmail

 

Закомментируем следующие строки в файле настроек:

 

# alias /squirrelmail /usr/share/squirrelmail

 

Уберем символы комментария в начале строк со следующего блока:

 

# users will prefer a simple URL like http://webmail.example.com

DocumentRoot /usr/share/squirrelmail

ServerName webmail.domen1.com

Если для вашего сервера apache активирован SSL, то можно убрать комментарии с секции mod_rewrite для того, чтобы обеспечить наилучшую безопасность системы.
Сохраните файл. Потом проверьте настройки apache:

 

sudo apache2ctl -t

Если все нормально — перегрузите apache:

 

sudo /etc/init.d/apache2 reload

Теперь мы можете заходить как domain1.com/squirrelmail/ или webmail.domain1.com если предпочитаете виртуальный хост.

Настроим squirrelmail, чтобы вы могли не только увидеть его стартовую страничку, но и проверить свою почту.

 

sudo squirrelmail-configure

Откроется интерфейс конфигурации веб-клиента.

Нажмите 2 (+Enter) чтобы войти в секцию настроек сервера. Нажмите A, чтобы редактировать настройки IMAP.

Нажмите 8 чтобы изменить программу авторизации. введите courier.

 

courier

Теперь нажмем 7, чтобы изменить настройки безопасности secure IMAP. Введите Y для активации.
Введите 5 для редактирования порта IMAP. Введите значение 993.
Нажмите S для сохранения настроек. И «Enter».
Нажмите Q, чтобы выйти из программы настроек.

Сейчас вы можете зайти на страницу domain1.com/squirrelmail/ или webmail.domain1.com и попробовать проверить свою почту, залогинившись.

 

 

Источник: http://blog.laptev.info/2009/ubuntu-mail-server-1.html http://blog.laptev.info/2009/ubuntu-mail-server-2.html