Для быстрой настройки почтового сервера связка 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 и создадим несколько таблиц.
Для начала создадим пользователя БД, для наших целей.
CREATE USER 'mailadmin' @ 'localhost' IDENTIFIED BY 'MyPasswordHere' ; |
Замените MyPasswordHere на свой собственный пароль.
Далее, дадим этому пользователю необходимые привилегии:
FLUSH PRIVILEGES ;
GRANT SELECT , INSERT , UPDATE , DELETE ON `mail` . * TO 'mailadmin' @ 'localhost' ;
FLUSH PRIVILEGES ;
|
1.
Теперь мы можем выбрать нашу БД 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= "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:
Выбираем базу данных:
Заполняем таблицу доменов:
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:
Для проверки работоспособности нужно отправить письмо на наш адрес
Через какое-то время проверьте папку /home/vmail:
Увидите новый каталог:
А для каждого пользователя домена 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:
Если все нормально — перегрузите apache:
sudo /etc/init.d/apache2 reload |
Теперь мы можете заходить как domain1.com/squirrelmail/ или webmail.domain1.com если предпочитаете виртуальный хост.
Настроим squirrelmail, чтобы вы могли не только увидеть его стартовую страничку, но и проверить свою почту.
sudo squirrelmail-configure |
Откроется интерфейс конфигурации веб-клиента.
Нажмите 2 (+Enter) чтобы войти в секцию настроек сервера. Нажмите A, чтобы редактировать настройки IMAP.
Нажмите 8 чтобы изменить программу авторизации. введите 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