4 Краткий отчет о практике (приложение 1). Строки с таким выделением
Скачать 0.62 Mb.
|
Настройка saslauthdАвторизация почтовых пользователей на нашем сервере будет происходить через pam, к которому будет обращаться демон авторизации sasl. Сначала выполним следующую команду: sudo mkdir -p /var/spool/postfix/var/run/saslauthd Затем отредактируем файл /etc/default/saslauthd sudo nano /etc/default/saslauthd Установим параметр START в yes и заменим строку OPTIONS=«-c -m /var/run/saslauthd» на OPTIONS=«-c -m /var/spool/postfix/var/run/saslauthd -r» Создадим файл /etc/pam.d/smtp sudo nano /etc/pam.d/smtp auth sufficient pam_mysql.so user=mail_admin passwd= account sufficient pam_mysql.so user=mail_admin passwd= и сменим его права доступа sudo chmod o= /etc/pam.d/smtp Создаем файл /etc/postfix/sasl/smtpd.conf sudo nano /etc/postfix/sasl/smtpd.conf pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true и меняем ему владельца и права доступа sudo chown postfix /etc/postfix/sasl/smtpd.conf sudo chmod og= /etc/postfix/sasl/smtpd.conf Добавляем пользователя postfix в группу sasl (это даст Postfix права доступа к saslauthd): sudo adduser postfix sasl Перезапускаем Postfix и Saslauthd: sudo /etc/init.d/postfix restart sudo /etc/init.d/saslauthd restart Для проверки авторизации создадим пользователя admin@bbb.ru в базе данных (заодно вначале в таблице domains зададим оба наших почтовых домена — aaa.ru и bbb.ru): mysql -u root -p Enter password: Введем пароль mysql USE mail; INSERT INTO `domains` (`domain`) VALUES ('aaa.ru'); INSERT INTO `domains` (`domain`) VALUES ('bbb.ru'); INSERT INTO `users` (`email`, `password`, `quota`) VALUES ('admin@bbb.ru', ENCRYPT('secret'), '10M'); quit; (здесь secret - это пароль нашего пользователя, выберите более подходящий; квоту пользователю мы задаем в размере 10Мбайт) Для проверки авторизации нам нужно сгенерить строку, которую нужно передать при авторизации (обратите внимание на обратные слеши перед @ и 0): perl -MMIME::Base64 -e 'print encode_base64("admin\@bbb.ru\0admin\@bbb.ru\0secret");' YWRtaW5AYmJiLnJ1AGFkbWluQGJiYi5ydQBzZWNyZXQ= Теперь проверим авторизацию telnet 127.0.0.1 25 Trying 127.0.0.1… Connected to 127.0.0.1. Escape character is '^]'. 220 oban.aaa.ru ESMTP Postfix (Ubuntu) EHLO testing 250-oban.aaa.ru 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH PLAIN YWRtaW5AYmJiLnJ1AGFkbWluQGJiYi5ydQBzZWNyZXQ= (здесь вставляем полученную ранее строку авторизации) 235 2.7.0 Authentication successful QUIT 221 2.0.0 Bye Connection closed by foreign host. Если мы получим ответ, отличный от «Authentication successful», то мы где-то ошиблись. Проверить, в чем именно, можно, посмотрев файлы /var/log/auth.log и /var/log/mail.log Теперь сделаем аутентификацию по openldap. Установим нужные пакеты: sudo apt-get install libpam-ldap и ответим на вопросы: LDAP server Uniform Resource Identifier: ldap://10.0.0.3/ Обратите внимание — не ldapi! Distinguished name of the search base: dc=aaa,dc=ru LDAP version to use: 3 Make local root Database admin: Да Does the LDAP database require login? Нет LDAP account for root: cn=admin,dc=aaa,dc=ru LDAP root account password: (конечно, нужное замените на свои параметры). Здесь мы предполагаем, что: ldap-сервер доступен по IP 10.0.0.3 корень расположен в dc=aaa,dc=ru администратор ldap-сервера это cn=admin,dc=aaa,dc=ru он имеет пароль Редактируем файл sudo nano /etc/ldap.conf и добавляем в него одну строку после закомментаренной #bind_policy hard bind_policy soft Редактируем файл sudo nano /etc/pam.d/smtp и добавляем в него строки auth sufficient pam_ldap.so account sufficient pam_ldap.so Теперь можем проверить аутентификацию ldap-пользователя (предполагаем, что в ldap есть пользователь admin с паролем secret (у которого, кстати, почтовый адрес admin@aaa.ru, но это сейчас неважно; важно понимать, что это — другой пользователь, а не admin@bbb.ru): perl -MMIME::Base64 -e 'print encode_base64("admin\0admin\0secret");' YWRtaW4AYWRtaW4Ac2VjcmV0 telnet 127.0.0.1 25 Trying 127.0.0.1… Connected to 127.0.0.1. Escape character is '^]'. 220 oban.aaa.ru ESMTP Postfix (Ubuntu) EHLO testing 250-oban.aaa.ru 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH PLAIN YWRtaW4AYWRtaW4Ac2VjcmV0 235 2.7.0 Authentication successful QUIT 221 2.0.0 Bye Connection closed by foreign host. Для почтовых ящиков локальных пользователей будем использовать LDAP. Заметьте, что мы конфигурируем их как виртуальных пользователей, т.е. локальный домен (aaa.ru) мы занесли в базу данных. Предположим, что локальные пользователи в LDAP расположены в ou=Users,dc=aaa,dc=ru причем их имена записаны в uid а почтовые адреса - в mail. Создаем файл /etc/postfix/ldap-mailboxes.cf sudo nano /etc/postfix/ldap-mailboxes.cf server_host = 10.0.0.3 server_port = 389 version = 3 bind = yes bind_dn = cn=admin,dc=aaa,dc=ru bind_pw = search_base = ou=Users,dc=aaa,dc=ru query_filter = (mail=%s) result_attribute = mail result_filter = %d/%u/ Меняем права доступа sudo chgrp postfix /etc/postfix/ldap-mailboxes.cf sudo chmod o= /etc/postfix/ldap-mailboxes.cf и меняем строку virtual_mailbox_maps = … в файле /etc/postfix/main.cf sudo nano /etc/postfix/main.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf ldap:/etc/postfix/ldap-mailboxes.cf Для проверки в том же файле временно меняем строку #smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination (это запрещает доставку писем с локального IP-адреса не в наши виртуальные домены) Перезапускаем postfix sudo /etc/init.d/postfix restart и проверяем работу обоих наших тестовых адресов - test@bbb.ru (который записан в базе данных) и betatest@aaa.ru (который записан в LDAP у пользователя betatest) telnet 127.0.0.1 25 Trying 127.0.0.1… Connected to 127.0.0.1. Escape character is '^]'. 220 oban.aaa.ru ESMTP Postfix (Ubuntu) HELO test 250 oban.aaa.ru MAIL FROM: aaa@aa.aa 250 2.1.0 Ok RCPT TO: admin@bbb.ru 250 2.1.5 Ok RCPT TO: admin@aaa.ru 250 2.1.5 Ok (если мы попробуем передать на несуществующий адрес, мы получим:) RCPT TO: aaa@bbb.ru 550 5.1.1 QUIT 221 2.0.0 Bye Connection closed by foreign host. Вернем обратно строку в файле /etc/postfix/main.cf: sudo nano /etc/postfix/main.cf smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination Для запрета аутентификации в postfix с передачей данных открытым текстом, вставляем в файл /etc/postfix/main.cf sudo nano /etc/postfix/main.cf smtpd_tls_auth_only = yes smtpd_tls_cert_file = /etc/ssl/certs/oban.crt smtpd_tls_key_file = /etc/ssl/private/oban.key smtpd_use_tls = yes и перезапускаем postfix sudo /etc/init.d/postfix restart Откроем и изменим /etc/aliases sudo nano /etc/aliases Сделайте так, чтобы postmaster указывал на root, а root указывал на ваше имя пользователя или ваш почтовый адрес, у вас должно получится примерно так: postmaster: root clamav: root root: admin@aaa.ru После изменения /etc/aliases вы должны запустить команду sudo newaliases |