るいすときのこの物語

オタクエンジニアの雑記

postfixadmin, SMTP-Auth を使う際に絶対に必要な設定【postfix dovecot cyrus sasl】


ちょっとバーチャルユーザーでメールサーバーを構築することがあって どのサイトにも注意書きされてなかった(言い訳)ので覚書として書きます。

 

postfixadmin(MySQL) + postfix + dovecot + Cyrus SASL で必要な設定だけ残します。 ここの設定だけでは動作しません。

 

バーチャルユーザーのメールを受けるアカウントの作成

# groupadd -g 10000 vmail
# useradd -u 10000 -g vmail -s /sbin/nologin vmail

//nologinのときってホームディレクトリ作られたっけ
# mkdir /home/vmail

 

Cyrus SASLでMySQLが扱えるように

yum install cyrus-*

 

postfixadmin の設定

色んなサイトで分かりやすく紹介されているので省略しますが postfixadmin + postfix + dovecot + Cyrus(SMTP-Auth)を使う際に必要な設定

vim /var/www/postfixadmin/config.inc.php

$CONF['encrypt'] = 'cleartext';

インストール作業をする前に前もってこの設定をしておいてください。 もしかしたらインストール後でも設定変更してどうにかすればいけそうだけどよく調べてません。

なんで平文で保存しないかといけないと SMTP-Auth認証する際に、Cyrus SASLライブラリを使いますがこのライブラリが暗号化された文字列に対応してない(MD5が非可逆)のために設定がどんなに合っていてもmaillogにはパスワード認証に失敗しましたって吐かれます。

参考:https://groups.yahoo.com/neo/groups/postfix-users/conversations/topics/241701

 

 

postfix の設定

大部分は割愛します。SMTP-Authらへんだけ最下部に追記。

vim /etc/postfix/main.cf

# SMTP-Auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

# Virtual
local_transport = virtual
virtual_transport = virtual
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_minimum_uid = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000

# VDA
virtual_create_maildirsize = yes
virtual_mailbox_limit = 0
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_quota_maps.cf
virtual_mailbox_limit_override = yes
virtual_mailbox_limit_inbox = no
virtual_maildir_extended = yes
#virtual_maildir_suffix = Maildir/
#virtual_trash_count = yes
#virtual_trash_name = ".Trash"
#virtual_maildir_limit_message = "Sorry, maximum quota reached!"
virtual_overquota_bounce = yes

# soft quota settings
#message_size_limit = 10240000 #default 10MB
#mailbox_size_limit = 51200000 #default 50MB
message_size_limit = 0
mailbox_size_limit = 0

 

OB25対策のためにサブミッションポートを使います。

vim /etc/postfix/master.cf

smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING

 

postfixのSMTP-Authの際に、postfixadminで登録した情報を見に行く情報を。

vim /etc/postfix/mysql_virtual_alias_maps.cf

user = postfixadminのデーターベースのユーザー
password = ↑のパスワード
hosts = localhost
dbname = postfixadminのデーターベース名
table = alias
select_field = goto
where_field = address
vim /etc/postfix/mysql_virtual_mailbox_domains_maps.cf

user = postfixadminのデーターベースのユーザー
password = ↑のパスワード
hosts = localhost
dbname = postfixadminのデーターベース名
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = '1'
vim /etc/postfix/mysql_virtual_mailbox_maps.cf

user = 割愛
password = 割愛
hosts = localhost
dbname = 割愛
table = mailbox
select_field = maildir
where_field = username
vim /etc/postfix/mysql_virtual_mailbox_quota_maps.cf

user = 割愛
password = 割愛
hosts = localhost
dbname = 割愛
table = mailbox
select_field = quota
where_field = username

 

 

saslauthd の設定

vim /etc/sasl2/smtpd.conf

pwcheck_method: auxprop
auxprop_plugin: sql
allowanonymouslogin: no
allowplaintext: yes
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 #多分CRAM-MD5 DIGEST-MD5はいらない いらない
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfixadminのデーターベースのユーザー
sql_passwd: ↑のパスワード
sql_database: postfixadminのデーターベース名
sql_statement: SELECT password FROM mailbox WHERE username = '%u@%r' AND active = '1'

 

 

dovecot の設定

必要なとこだけ

vim /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-sql.conf.ext

 

今回はバーチャルユーザーで、全てのメールはvmailユーザーで受け取ります。 postfixの設定によって /home/vmail/ドメイン名/バーチャルユーザー名 というディレクトリ形式になります。

vim /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/home/vmail/%d/%n

 

vim /etc/dovecot/conf.d/10-master.conf

# Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

 

SELECT concat部分はvmailユーザーで受け取るのでご注意。最後にスラッシュも注意。

vim /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = host=localhost dbname=割愛 user=割愛 password=割愛
default_pass_scheme = PLAIN
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT concat('/home/vmail/', maildir) as home, 10000 as uid, 10000 as gid FROM mailbox WHERE username = '%u' AND active = '1'

 

あとは必要なソフト類を全て再起動なりさせてください。

# service postfix restart
# service dovecot restart
# service saslauthd restart

 

今回はSSLを使用しなかったので本番で使うときはSSLになり設定したほうがいいと思います。