SASL: Postfix + Dovecot

Февраль 10, 2012 at 15:32 Оставьте комментарий

Для начала: зачем нужен SASL? Это набор правил. Выполнение которых дает прошедшему авторизацию бонусы. Начиная от просто отправки писем и заканчивая тем, что Postfix может разрешить удаленным клиентам(не принадлежащим mynetworks) отправлять письма на чужие домены, а не только на обслуживаемые Postfix. Таким образом, SMTP в частности защищается от возможности стать опенрелеем.
Сам Postfix не реализует поддержку SASL, но позволяет использовать сторонние пакеты. Чтобы узнать, что поддерживает ваш Postfix как SMTP-сервер надо в консоли набрать postconf -a.
Я думаю, что у вас непременно будет cyrus и вероятно dovecot. У меня dovecot, поэтому разбираться будем с этой связкой.
Что дальше: dovecot использует базу данных(/etc/passwd, LDAP и тд) пользователей и их паролей. Итак, есть идентификатор пользователя и его пароль. В сумме это дает аутентификацию. Есть два понятия: «механизм аутентификации» и password scheme и тут надо не путать: механизм аутентификации — это о том, как клиент и сервер общаются между собой, в каком виде они передают информацию друг о друге, шифруется ли она и каким образом (SSL, TLS..). А password scheme — это то, в каком виде вы храните эти пароли в базе dovecot(просто так, в md5 и т.д.).
Аутентификация.
Например, все почтовые клиенты поддерживают PLAIN, при этом клиент шлет свой логин/пароль dovecot-у прям как есть. (Не пугайтесь. Если вы организовали SSL\TLS, то это нестрашно. Все равно никто пароль расшифровать не сумеет.)
Пример:

auth default {
  mechanisms = plain login cram-md5
  # ..
}

Это означает: dovecot ожидает, что клиент пошлет по сети свой пароль в открытом виде(plain и login) или может использовать non-plaintext authentication — cram-md5. Второй вариант безопасен и в отсутствие SSL/TLS. Но такой способ работает только с паролями, которые есть у dovecot в явном (нешифрованном) виде: все non-plaintext authentication механизмы сами вычисляют свои собственные хэши. Поэтому нельзя в этом случае использовать password scheme из DES паролей. Dovecot вынет из базы зашифрованный одним способом пароль, сравнит его с полученным (тоже зашифрованным, но по-другому) и естественно они не совпадут. В принципе выход есть: если вы хотите поддерживать только один механизм non-plaintext (и это еще и не PAM!), то в dovecot пароль может храниться в виде точно такого же хэша, что генерирует выбранный механизм. Но если вам нужно хотя бы два таких механизма, то придется хранить пароли как есть — то есть cleartext.
Password Scheme
Здесь можно посмотреть, какие варианты хранения паролей есть у dovecot. Кроме того, есть варианты по умолчанию для разных способов организации хранения паролей(SQL, LDAP и пр). Там же есть список сочетающихся между собой Non-plaintext механизмов аутентификации и Password Scheme. Например, если у вас механизм аутентификации CRAM-MD5, то пароли должны хранится только в CRAM-MD5 или plaintext.
Так вот. SASL — это как раз и есть набор требований к механизму аутентификации в системе. Еще вообще-то к протоколу. Но мы рассматриваем POP3|IMAP|SMTP, а они отвечают требованиям по умолчанию.
В принципе, требования SASL могут быть и такие: plain-аутентификация и plaintext-хранение паролей. Хотя это вообще мало похоже на безопасность, но тем не менее. Поэтому SASL — это не обязательно TLS, md5 и еще чем-нибудь заполировать страшным сверху.
Чтобы включить в своей системе SASL мы требуем с dovecot-a следующее:

auth default {
# механизмы аутентификации:
# login устарел, но outlook express еще никто не отменял
    mechanisms = plain login md5-cram
# схемы паролей:
    passdb pam {
    }
# пользователи хранятся в БД, используем стандартную схему SQL
    passdb sql {
        args = /etc/dovecot/dovecot-sql.conf
    }
# пользователи:
    userdb passwd {
# для системных пользователей
    }
    userdb static {
# для виртуальных пользователей, которые привязаны к одному реальному с uid и gid
# allow_all_users=yes позволяет не проверять dovecot-у существование пользователя с помощью passdb
        args = uid=5000 gid=5000 home=/home/umail/%d/%n allow_all_users=yes
      }
# сокеты:
       socket listen {
# master - для локальной доставки писем dovecot-ом. Он должен иметь доступ к базе, чтобы знать, куда письма класть
        master {
          path = /var/run/dovecot/auth-master
          mode = 0600
          user = umail
        }
# а этот сокет для того, чтобы дать им попользоваться Postfix-у и он как раз и реализовал у себя SASL 
        client {
          path = /var/spool/postfix/private/auth
          mode = 0660
          user = postfix
          group = postfix
         }
      }
    }

Кстати если использовать SQL и для passdb, и для userdb с одним и тем же параметром, то и пользователь, и его пароль будут извлечены из базы за один запрос.
Ну а в Postfix main.conf надо указать, что мы используем SASL.

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
# выполняем требования SASL:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Теперь мы поддерживаем у себя SASL. Ура!

Реклама

Entry filed under: Mail Server. Tags: , , , .

dokuwiki: custom e-mail notification fetchmail: connection to localhost:smtp [::1/25] failed

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed



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