Главная > IT > Ubuntu 8.04 Mail Server (Postfix+Courier+MySQL)

Ubuntu 8.04 Mail Server (Postfix+Courier+MySQL)

Ершов Илья
Почтовый сервер на Ubuntu 8.04 с авторизацией в MySQL
5 ноября 2009

Настройка почтового сервера на базе Ubuntu Server 8.04, установленного с компонентами LAMP- и OpenSSH- сервер.
Настройку делаем удаленно по SSH.
Переходим к настройке почтового сервера. Почтовый сервер будем строить на основе postfix. В качестве авторизации будем использовать базу MySQL.

Устанавливаем необходимые пакеты:

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon \
courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl \
libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl mailx

В ходе установки отвечаем на следующие вопросы:

Create directories for web-based administration? – No
General type of mail configuration – Internet Site
System mail name - fqdn

Создадим базу данных в MySQL

mysqladmin create mail

В MySQL создадим пользователя mail_admin и предоставим ему права на базу данных mail.

mysql mail
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'пароль_пользователя';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'пароль_пользователя';
FLUSH PRIVILEGES;

В базе данных создадим таблицы domains, forwardings, users и transport.

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));
quit

Таблица domains будет хранить наименования виртуальных доменов, для которых Postfix будет получать письма. Таблица forwardings будет содержать псевдонимы почтовых ящиков. Таблица users будет содержать всю информацию о виртуальных пользователях. Таблица transport необязательного характера, она для продвинутых пользователей. Позволяет перенаправлять почту отдельных пользователей, доменов либо всю почту на другой почтовый сервер.

Проверим, на каком адресе слушает MySQL. Для этого выполним:

cat /etc/mysql/my.cnf | grep bind-address

Ответ должен быть следующим:

bind-address = 127.0.0.1

Создадим 4 файла конфигурации для postfix. В каждом из них убеждаемся, что параметр password задан верно.

Файл /etc/postfix/mysql-virtual_domains.cf
-----------------
user = mail_admin
password = пароль_пользователя
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
Файл /etc/postfix/mysql-virtual_forwardings.cf
-----------------
user = mail_admin
password = пароль_пользователя
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
Файл /etc/postfix/mysql-virtual_mailboxes.cf
-----------------
user = mail_admin
password = пароль_пользователя
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1
Файл /etc/postfix/mysql-virtual_email2email.cf
-----------------
user = mail_admin
password = пароль_пользователя
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1

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

chmod 660 /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf

Создадим пользователя, от имени которого будет работать наш почтовый сервер. Все виртуальные домены и ящики будут храниться в домашнем каталоге этого пользователя:

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

Внесем изменения в конфигурацию postfix. Проверьте параметры, относящиеся к вашему почтовому серверу

postconf -e 'myhostname = fqdn_of_your_mail_server'
postconf -e 'mydestination = fqdn_of_your_mail_server, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'message_size_limit = 30720000'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf,mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'virtual_create_maildirsize = yes'
postconf -e 'virtual_maildir_extended = yes'
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'

Создадим сертификат:

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

В ходе генерации отвечаем на ряд простых вопросов:

Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:NN
Locality Name (eg, city) []:NN
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany, LLC
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:server.yourdomain.local
Email Address []:support@yourdomain.local

Дадим на него права:

chmod o= /etc/postfix/smtpd.key

Создадим каталог для saslauthd

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

Отредактируем файл /etc/default/saslauthd. Изменим параметры START и OPTIONS на следующие:

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

Создадим файл /etc/pam.d/smtp и вставим в него две строки (измените пароль на свой):

auth required pam_mysql.so user=mail_admin passwd= пароль_пользователя host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail_admin passwd= пароль_пользователя host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

Создаем файл /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: пароль_пользователя
sql_database: mail
sql_select: select password from users where email = '%u'

Добавляем пользователя postfix в группу sasl и перезапускаем postfix и saslauthd:

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

Редактируем /etc/courier/authdaemonrc

sed --in-place -e 's/authmodulelist="authpam"/authmodulelist="authmysql"/g' /etc/courier/authdaemonrc

Сохраняем файл /etc/courier/authmysqlrc. Вместо него создаем вместо него пустой файл:

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc

Добавляем в созданный файл следующее:

MYSQL_SERVER localhost
MYSQL_USERNAME mail_admin
MYSQL_PASSWORD пароль_пользователя
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),'/')

Удаляем оригинальные сертификаты, созданные Courier

rm -f /etc/courier/imapd.pem && rm -f /etc/courier/pop3d.pem

В файлах /etc/courier/imapd.cnf и /etc/courier/pop3d.cnf заменяем CN=localhost на CN=полное_доменное_имя_почтового_сервера.
Регенерируем сертификаты и перезапускаем сервисы:

cd /etc/courier
mkimapdcert
mkpop3dcert
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart

Редактируем псевдонимы в файле /etc/aliases:

postmaster: root
root: postmaster@yourdomain.com

Обновляем алиасы и перезапускаем postfix:

newaliases
/etc/init.d/postfix restart

Проверяем наш smtp сервер:

telnet localhost 25

Когда подключимся, выполняем:

ehlo localhost

Если все правильно настроили, вывод будет примерно таким:

250-ubuntusrv.zz.local
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

Теперь можно создавать виртуальные домены и пользователей. Для этого заходим в MySQL:

mysql mail
INSERT INTO domains (domain) VALUES ('yourdomain.local');
INSERT INTO users (email, password) VALUES ('ozzy@ yourdomain.local ', ENCRYPT('ozzy'));
quit;

Для создания почтового ящика отправляем письмо на адрес ozzy@yourdomain.local

mailx ozzy@yourdomain.local

Сначала вводите тему сообщения, потом тело. Для выхода из редактирования нажимаем Ctrl+D.
Все. Можно настраивать почтовых клиентов.

Источники:
Ubuntu Mail-server

Реклама
Метки: , ,
  1. edik
    03.12.2009 в 09:47

    ozzy =)

  2. edik
    03.12.2009 в 09:47

    спасибо, хорошее описание!

  3. 25.02.2011 в 12:35

    Родила царица в ночь Коле — сына, Толе — дочь.
    В здоровом теле — здоровый стул!
    Кишка тонка, и танки наши быстры!
    Трое в лодке, не стесняясь собаки…
    В темноте да не в обиде
    Одна голова — хорошо, а две — много.
    От любви до ненависти один акт.
    Повторение — мать удовлетворения.
    Наши поезда — самые поездатые поезда в мире.
    Обещанного три гада ждут…
    Не пеняй на зеркало, коли яйца мешают.
    Тому виднее, у кого нос длиннее.
    Слово не воробей, а последовательность символов алфавита.
    С красивой жить не запретишь.
    Клип клипом вышибают.
    Кто не работает, тот пьет!
    Не суй свой взнос не в свое дело!
    Лысый пешему не конный.
    Ёж — птица гордая. Пока не пнешь — не полетит!
    Отдам концы в хорошие руки.
    Рожденный ползать летит за деньги.
    Не плюй в колодец — у ГринПиса длинные руки!
    Рожденный строить не пить не может.
    Все лишнее — детям !
    Не нытьем, так каканьем!
    Кто раньше встает, того и тапки.
    Изготовим портрет вашего врага на туалетной бумаге.
    Hичто не дается нам так дешево, как хочется.
    На безрыбье и сам раком станешь.
    Спермоисточник.
    Не все то солнышко, что встает.
    У семи нянек… четырнадцать сисек!
    Ученье — свет, а не ученых — тьма!
    Баба с возу, и волки сыты!
    Гостей встречают по одежке, а провожают — по морде!
    Взялся за член, не говори что чечен.
    Хочешь сидеть на шее — раздвигай ноги.
    C долгами жить — по-волчьи выть.
    Тише будешь — дальше уедешь.
    Столовые приборы — самые точные приборы в мире.
    Старый друг лучше новых русских двух.
    На безбабье и рыбу раком.
    Hа каждого мудреца — девять грамм свинца.
    Плох тот солдат, который упал и не отжался.
    Женщина ищет там, где больше, а мужчина — там где женщина.
    После свадьбы кулаками не машут.
    Ничто так не красит женщину, как перекись водорода!
    Сексу не прикажешь.
    В любви все возрасты проворны.
    Лучше один раз родить, чем каждый день бриться.

    спонсор поста — битвы онлайн икариам

  1. No trackbacks yet.

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: