ちょっとバーチャルユーザーでメールサーバーを構築することがあって
どのサイトにも注意書きされてなかった(言い訳)ので覚書として書きます。
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になり設定したほうがいいと思います。