Changes between Version 13 and Version 14 of HowTo/SakuraVpsSetup


Ignore:
Timestamp:
Oct 14, 2010, 11:40:50 PM (14 years ago)
Author:
村山 俊之
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/SakuraVpsSetup

    v13 v14  
    301301# yum install postfix
    302302}}}
    303  1. SMTP-AUTH を利用する為、 SASL をインストールする。
    304 {{{
    305 # yum install cyrus-sasl
    306 }}}
    307303 1. /etc/postfix/main.cf を書き換える。
    308304{{{
     
    311307# 以下は既存の項目を書き換え。
    312308myhostname = developer.harapeko.jp
     309myorigin = $mydomain
    313310inet_interfaces = all
    314311mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
     
    327324        >$config_directory/$process_name.$process_id.log & sleep 5
    328325
    329 # SASL 関連の設定; SSL 証明書を取得するまでコメントアウト
    330 #smtpd_sasl_auth_enable = yes
    331 #smtpd_sasl_security_options = noanonymous, noplaintext
    332 #smtpd_sasl_local_domain = $myhostname
    333 #smtpd_tls_cert_file = /etc/httpd/conf/developer_harapeko_jp.crt
    334 #smtpd_tls_key_file = /etc/httpd/conf/developer.harapeko.jp.key.pk
    335 #smtpd_tls_CApath = /etc/httpd/conf/
    336 #smtpd_use_tls = yes
    337 #smtpd_tls_auth_only = yes
    338 #smtpd_tls_session_cache_timeout = 3600s
    339 #smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
    340 
    341326# メールサイズを 10MB に制限
    342327message_size_limit = 10485760
     
    346331# mkdir -p /etc/skel/Maildir/{new,cur,tmp}
    347332# chmod -R 700 /etc/skel/Maildir/
    348 }}}
    349  1. /etc/postfix/master.cf を書き換える。
    350 {{{
    351 # vim /etc/postfix/master.cf
    352 
    353 # サブミッションポートを有効にする
    354 submission inet n       -       n       -       -       smtpd
    355 #  -o smtpd_sasl_auth_enable=yes    # あとで
    356333}}}
    357334 1. システムで使用するサーバー機能を Postfix に切り替える。
     
    10561033== メールサーバーを再度設定する ==
    10571034
    1058 SSL が使えるようになったので、 POP3S と Submission over SMTP-AUTH の設定をして、メールが利用できるようにする。
     1035SSL が使えるようになったので、 POP3S と Submission over SSL/TLS の設定をして、メールが利用できるようにする。
     1036
     1037=== メールユーザー DB を構築 ===
     1038
     1039弊社メールサーバーの動作用件は以下の通り。
     1040
     1041 * クライアントとの接続プロトコルは POP3S と Submission over SSL/TLS を用いる。 POP3 は使わない。
     1042   * 25番ポート (SMTP) はメール配送用に開けておく必要がある。
     1043 * Linux アカウントのパスワードと同じパスワードを使わせたくない。
     1044 * 受信/送信の両方で同一のパスワードとして管理したい。
     1045
     1046POP3S の認証は dovecot にて、 Submission over SSL/TLS の認証は cyrus-SASL にて行う。この場合、
     1047
     1048 * cyrus-SASL では /etc/shadow や PAM を参照する saslauthd ではなく、 auxprop を用いる。 auxprop がサポートしている参照先は以下のいずれかである。
     1049   * sasldb (cyus-SASL 独自形式の DB; 解説をもっともよく見かける)
     1050   * DBMS (MySQL/PostgleSQL/SQLite)
     1051   * LDAP
     1052 * 上記のうち、 sasldb は dovecot が理解できず、双方で同一のパスワードを管理できなくなってしまうので、NG。
     1053 * 別にアプリケーション間で共通のパスワードを一元管理したいわけでもないので、わざわざ LDAP 使う必要もないかな。
     1054
     1055というわけで、せっかく MySQL も入れてあるし、 MySQL でメールユーザー DB を構築することにしてみた。
     1056
     1057なお、 dovecot はメール配送時のユーザー情報参照にもこの DB を利用することになる為、その内容はユーザー ID とパスワードの他、メールサーバーのドメイン名、ホームディレクトリ、UID、GID も必要になる。この辺の情報については dovecot をインストール後、 /usr/share/doc/dovecot-x.x.x/wiki/AuthDatabase.SQL.txt ファイルを参照のこと。
     1058
     1059 1. DB を作成。 DB 名、 DB ユーザー名共に mailusers とした。
     1060{{{
     1061$ mysql -u root -p
     1062
     1063mysql> create database mailusers;
     1064mysql> mysql> grant all privileges on mailusers.* to mailusers@localhost identified by 'パスワード';
     1065mysql> use mailusers;
     1066mysql> create table users (
     1067    ->   userid varchar(128) primary key,
     1068    ->   domain varchar(128),
     1069    ->   plain_passwd varchar(64),
     1070    ->   home varchar(255) not null,
     1071    ->   uid integer not null,
     1072    ->   gid integer not null
     1073    -> );
     1074mysql> quit
     1075}}}
     1076   * ドメイン名とパスワードは NULL 可とした。メール配送は受け付けるが転送するだけで認証することのないアカウント (root, admin など) もある為。
     1077 1. mailusers でのアクセス確認を兼ねて、テーブルにさしあたって必要なメール用のアカウントをいくつか登録してみる。
     1078{{{
     1079$ mysql -u mailusers -p mailusers
     1080
     1081mysql> insert users values
     1082    ->   ('toshiyuki.murayama', 'developer.harapeko.jp', 'パスワード', '/home/toshiyuki.murayama', 502, 502),
     1083    ->   ('root', null, null, '/root', 0, 0),
     1084    ->   ('admin', null, null, '/home/admin', 503, 503);
     1085mysql> quit
     1086}}}
     1087   * ホームディレクトリや UID, GID は事前に /etc/passwd を参照して確認しておくこと。
     1088   * パスワードは、危険だが平文で保存する。ちなみに dovecot は MD5 ハッシュ、 cyrus-SASL は平文を要求する… cyrus も MD5 に対応してくれよ… orz
     1089   * もちろんパスワードは Linux アカウントのパスワードと同じである必要はない。むしろセキュリティリスクを抑える為にも、別々のパスワードを設定すべきである。
    10591090
    10601091=== POP3S の設定 ===
     
    10731104# 接続対象アドレス範囲。 IPv6 で指定しているが、暗黙に IPv4 アドレスも含むことになる。
    10741105listen = [::]
    1075 
    1076 # 平文認証を禁止する。 Outlook Express だと NG なんだっけかな?
    1077 disable_plaintext_auth = yes
    10781106
    10791107# SSL 証明書ファイル、および鍵ファイルの場所を指定。
     
    10851113
    10861114auth default {
    1087   # MD5 ダイジェスト認証および CRAM-MD5 に対応する。
    1088   mechanisms = digest-md5 cram-md5
    1089 
    1090 }}}
    1091  1. /usr/lib/sasl2/smtpd.conf を作成する。
    1092 {{{
    1093 $ vim /usr/lib/sasl2/smtpd.conf
     1115  # 平文認証、ログイン認証、MD5 ダイジェスト認証、CRAM-MD5 に対応する。
     1116  mechanisms = plain login digest-md5 cram-md5
     1117
     1118  # 認証に PAM は使わないので、コメントアウト
     1119  #passdb pam {
     1120  # (中略)
     1121  #}
     1122 
     1123  # 認証に DBMS を利用する
     1124  passdb sql {
     1125    # DBMS への接続方法を記した設定ファイルのパス。あとで作成
     1126    args = /etc/dovecot-sql.conf
     1127  }
     1128 
     1129  # ユーザー情報も DB を参照するようにする。コメントアウト
     1130  #userdb passwd {
     1131  # (中略)
     1132  #}
     1133 
     1134  # ユーザー情報を DBMS にて参照する。
     1135  userdb sql {
     1136    args = /etc/dovecot-sql.conf
     1137  }
     1138 
     1139  # MySQL には root でなくてもアクセスできるので、以下はコメントアウト。
     1140  #user = root
     1141}
     1142}}}
     1143 1. DBMS への接続方法を示す設定ファイルを作成する。
     1144{{{
     1145$ sudo vim /etc/dovecot-sql.conf
     1146
     1147# MySQL を使用する。
     1148driver = mysql
     1149# 接続情報 (ホスト名、DB 名、DB ユーザーの ID/パスワード)
     1150connect = host=localhost dbname=mailusers user=mailusers password=パスワード
     1151# 認証の際のクエリー SQL - パスワードは MD5 ハッシュを要求するので、 MD5() 関数を噛ませる
     1152password_query = select concat(userid, '@', domain) as user, md5(plain_passwd) as password from users where userid = '%n'
     1153# ユーザー情報を参照する際のクエリー SQL
     1154user_query = select home, uid, gid from users where userid = '%u'
     1155
     1156$ sudo chmod 600 /etc/dovecot-sql.conf  # DB ユーザーのパスワードを知られてはマズイので、権限を変更しておく
     1157}}}
     1158 1. dovecot を起動し、デフォルトで起動するようにする。
     1159{{{
     1160$ sudo /etc/init.d/dovecot start
     1161$ sudo /sbin/chkconfig --add dovecot
     1162}}}
     1163
     1164=== Submission over SSL/TLS の設定 ===
     1165
     1166 1. cyrus-SASL と、それ用の MD5 認証用プラグインと SQL auxprop プラグインをインストールする。
     1167{{{
     1168$ sudo yum install cyrus-sasl cyrus-sasl-md5 cyrus-sasl-sql
     1169}}}
     1170 1. cyrus-SASL の設定。設定方法は[http://www.postfix.org/SASL_README.html#auxprop_sql ここ]を参考にした。
     1171{{{
     1172$ vim /etc/sasl2/smtpd.conf
    10941173
    10951174pwcheck_method: auxprop
    1096 auxprop_plugin: sasldb
    1097 mech_list: cram-md5 digest-md5
    1098 }}}
     1175auxprop_plugin: sql
     1176mech_list: cram-md5 digest-md5 plain login
     1177sql_engine: mysql
     1178sql_hostnames: localhost
     1179sql_user: mailusers
     1180sql_passwd: パスワード
     1181sql_database: mailusers
     1182sql_select: select plain_passwd as password from users where userid = '%u'
     1183
     1184$ sudo chmod 600 /etc/sasl2/smtpd.conf  # DB ユーザーのパスワードを知られてはマズイので、権限を変更しておく
     1185$ rm -f /usr/lib64/sasl2/smtpd.conf /usr/lib64/sasl/smtpd.conf  # この辺のファイルが残っていると悪さをするので消しておく
     1186}}}
     1187   * '''最後のファイル削除は超重要'''。これで何時間嵌ったことか…。orz
     1188 1. Postfix の設定に、 SASL 関連の設定と、サブミッションポートの設定を追加する。 main.cf の設定パラメータについては[http://www.postfix-jp.info/trans-2.2/jhtml/postconf.5.html こちら]を参照。
     1189{{{
     1190$ sudo vim /etc/postfix/main.cf
     1191
     1192# SMTP の SASL による認証を有効にする
     1193smtpd_sasl_auth_enable = yes
     1194# 匿名での利用、および平文認証を禁止する
     1195smtpd_sasl_security_options = noanonymous, noplaintext
     1196# realm の名前。ホスト名にしておく
     1197smtpd_sasl_local_domain = $myhostname
     1198# SSL 証明書および秘密鍵ファイル
     1199smtpd_tls_cert_file = /etc/httpd/conf/ssl/developer.harapeko.jp.crt
     1200smtpd_tls_key_file = /etc/httpd/conf/ssl/developer.harapeko.jp.key
     1201# STARTTLS サポートをクライアントに通知する
     1202smtpd_use_tls = yes
     1203# TLS 暗号化されていない接続を受け付けない
     1204smtpd_tls_auth_only = yes
     1205# SASL 認証に成功した場合のみ、 SMTP によるメールの配送 (RCPT TO コマンド) を受け付けるようにする
     1206# (この順番で書くことにより、サーバー上で sendmail コマンドを用いる場合 (Web アプリからのメール発送等)
     1207# には SASL 認証が不要になる)
     1208smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
     1209
     1210$ sudo vim /etc/postfix/master.cf
     1211
     1212# サブミッションポートを有効にする
     1213submission inet n       -       n       -       -       smtpd
     1214  -o smtpd_sasl_auth_enable=yes
     1215}}}
     1216 1. Postfix を再起動する。
     1217{{{
     1218$ sudo /etc/init.d/postfix restart
     1219}}}