Postfixのぺーじ | ||
− SMTP Auth 対応版 Postfix インストールの記録 | ||
更新: 2005年2月19日 |
ホーム >オリジナルドキュメント >SMTP Auth 対応版 Postfix インストールの記録
SMTP AuthはRFC2554で規定されているメール送信時に認証を求める方法です。 ここでは、PostfixのSMTPサーバにSMTP Authオプションをつけてみました。 なお、OSによってはSASL対応のパッケージが配布されていることも多いので、 そちらを利用する方がよいかもしれません。
(通常のインストール記録はこちらへ。)
/tmp/postfix にソースのtar ballがあるものとします。
また、# はスーパーユーザでの実行をあらわし、% は一般ユーザでの実行を
あらわします。シェルはcsh系を仮定してるので、bsh系の方は読み替えて下さい。
以下の例では、設定ファイルは /etc/postfix に、実行ファイル類は
/usr/postfix 以下にインストールしました。
この記録はバージョン2.1.5を使用しています。インストールはFreeBSD 5.3Rで 行ないました。インストールにあたっては SASL_READMEファイルも 参照して下さい。
PostfixのSMTP Authは現時点ではcyrus-SASLパッケージのライブラリを利用して 実装しています。このライブラリを先にインストールしておきます。 cyrus-SASLパッケージはProject Cyrusの FTPサイトから 取得できます。FTPサーバ上にあるPGPの署名ファイルと公開鍵を使ってファイルの 検証も可能です。検証方法は通常の インストール記録を参照してください。
% tar xvzf cyrus-sasl-2.1.19.tar.gz % cd cyrus-sasl-2.1.19 % ./configure # MS Outlook Express をサポートするには # --enable-login=yes オプションが必要 % make % su # make install # ln -s /usr/local/lib/sasl /usr/lib/sasl
(MS Outlook ExpressはSMTP認証のうちLOGIN認証しかサポートしていないため、 configureに --enable-login=yes をつけないと認証できません。)
ここで SASL 認証ユーザ用のアカウントを作成します。
# /usr/local/sbin/saslpasswd2 username # vi /usr/local/lib/sasl2/smtpd.conf (利用したい方法にあわせてどれか1つを指定します) (SASLチェック用デーモンを利用する場合) pwcheck_method: saslauthd mech_list: plain login (PAM,shadowではcram-md5等が使えないため、plainおよびlogin認証のみに限定します) (SASL用パスワードファイルを利用する場合) pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: cram-md5 digest-md5 plain login (これを指定しないと、CRAM-MD5が使えてもplainが優先されてしまうことがあります) (Unixパスワードデータベースを利用する場合) pwcheck_method: pwcheck
saslauthdを使用すると、pamやLDAP、MySQLなどを利用した認証も 使えるようになります (configure時に指定が必要)。saslauthdを利用する場合、 Postfixを起動する前に以下のようにデーモンを起動しておく必要があります。
# /usr/local/sbin/saslauthd -a pam (PAMを利用した認証を使う場合) # /usr/local/sbin/saslauthd -a shadow (/etc/shadowファイルを使う場合)
auxprop (CyrusSASL 1.xではsasldbという名前でした) を使用する場合、
# chmod 640 /etc/sasldb2.db # chown cyrus:mail /etc/sasldb2.db # vi /etc/group mail:*:6:postfix (mailグループにpostfixユーザを追加)
のように/etc/groupファイルを編集してpostfixユーザをmailグループに 加えることで読み込み権を与える必要があるでしょう。
お好みの場所でtar ballを展開して、コンパイルします。ほとんど普通の コンパイルと同じですが、SASL ライブラリを使用するためにオプションをつけた makefileを作成します。make tidy は以前にbuildしたものが 残っていた場合に実行します。
% setenv SRCDIR /tmp/postfix % cd ${SRCDIR} % tar xvzf postfix-2.1.5.tar.gz % cd postfix-2.1.5 % make tidy # if you have left-over files from a previous build % make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl" \ AUXLIBS="-L/usr/local/lib -lsasl2" % make
% su # pw groupadd postfix # pw groupadd postdrop (ユーザ `postfix' 用、およびmaildrop用のグループを作成) # pw useradd postfix -d /nonexistent -g postfix -s /sbin/nologin (ユーザ `postfix' をパスワード・ホームディレクトリ・ログインシェルなしで追加) # vi /etc/aliases postfix: root (postfix 宛のメールを root に向ける)
お使いのシステムにあわせてpw, useradd, adduser, vipwなどでグループ・ ユーザを作成してください。
/etc/inetd.conf でsendmailを叩いている場合には、その記述を コメントアウトして、kill -HUP を送ります。その場合は、 ここからpostfixを起動するまでの間メールの送受信はできません。
# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF # mv /usr/bin/newaliases /usr/bin/newaliases.OFF # mv /usr/bin/mailq /usr/bin/mailq.OFF # chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF \ /usr/bin/mailq.OFF
ただし、今回は新規にインストールしたFreeBSDマシンにインストールを 行なったため、上記の操作は行ないませんでした。最近のFreeBSDでは sendmailなどのコマンドがmailwrapperのリンクになっており、実際には /etc/mail/mailer.conf に記述したコマンドが実行されます。そこで、 Postfix sendmailなどのコマンドはFreeBSDに入っているsendmailにならって、 /usr/libexec/postfix 以下にインストール することにしました。 (FreeBSD 以外ではデフォルトのディレクトリにインストールする方が 良いでしょう。)
# make install
質問には以下のように答えました。[]の後に何もないものはデフォルトを 指定しています。インストールスクリプトの質問内容については 通常のインストール記録も参照して ください。
install_root: [/] tempdir: [/home/ike/src/mail/postfix/postfix-2.1.5] config_directory: [/etc/postfix] daemon_directory: [/usr/libexec/postfix] command_directory: [/usr/sbin] /usr/local/sbin queue_directory: [/var/spool/postfix] sendmail_path: [/usr/sbin/sendmail] /usr/libexec/postfix/sendmail newaliases_path: [/usr/bin/newaliases] /usr/libexec/postfix/newaliases mailq_path: [/usr/bin/mailq] /usr/libexec/postfix/mailq mail_owner: [postfix] setgid_group: [postdrop] html_directory: [no] manpage_directory: [/usr/local/man] readme_directory: [no]
以下はサーバ側PostfixをSMTP Auth対応にするための設定です。
# cd /etc/postfix # cp main.cf main.cf.org # vi main.cf #(必ず設定するのは以下の項目。値は適切なものに変えてください。) myorigin = $myhostname inet_interfaces = all mydestination = $myhostname, localhost.$mydomain alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mail_spool_directory = /var/mail mynetworks_style = subnet #(これまで通りに mynetworks を記述することもできます。) # mynetworks = XXX.XXX.XXX.XXX/YY, 127.0.0.0/8 # ネットワークアドレスを書く。 smtpd_sasl_auth_enable = yes # SASL 認証をおこないます。 #(設定によっては次の項目も必要です) default_privs = username allow_mail_to_commands = alias,forward,include relayhost = mail.host.domain smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated # SASL 認証済アクセスを許可します。 reject_unauth_destination
これ以外の設定は、以上の設定で問題なく動くことを確認してから1つずつ 変更してください。
SMTP Auth対応のサーバにメールを転送するなど、PostfixをSMTP Auth クライアントにする場合には、以下のような設定が必要です:
/etc/postfix/main.cf: smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = (空値、サーバがLOGIN/PLAINといった平文の認証を必要とする場合) /etc/postfix/sasl_passwd: example.com username:password example.net username
# kill -TERM 'sendmail-PID' # postfix start
PostfixでSMTP Authが使えるようになったかチェックするには、SMTPサーバを 直接叩いて、
% telnet mail.example.com smtp >>220 mail.example.com ESMTP Postfix <<EHLO client.example.com >>250-mail.example.com >>250-PIPELINING >>250-SIZE 10240000 >>250-ETRN >>250-AUTH CRAM-MD5 DIGEST-MD5 PLAIN LOGIN >>250 8BITMIME <<AUTH PLAIN dGVzdAB0ZXN0AHRlc3RwYXNz >>235 Authentication successful
(dGVzdAB0ZXN0AHRlc3RwYXNzはユーザtest、 パスワードtestpassをusername\0username\0password (\0はヌル文字)のように並べたものをbase64エンコードしたものです。)
のように返せばうまくいっているはずです。
ユーザ名などをエンコードした情報は次のように生成させることができます。
% printf 'username\0username\0password' | mmencode % perl -MMIME::Base64 -e \ 'print encode_base64("username\0username\0password");'
mmencodeはmetamail ソフトウェアの一部です (metamailの本家で配布しているものはセキュリティホールが あるようなので、各OS用パッケージで修正されているもの以外は使わない方が よいでしょう)。MIME::Base64は www.cpan.org から入手できます。