Postfix で SMTP-AUTH を実現
SMTP-AUTH (エスエムティーピー・オースと発音する)とは、SMTP Authentication の略語で、
メール送信時にアカウント名、パスワードをサーバに伝える事によりメールサーバーから認証を受けるシステムです。
SMTP-AUTH を実現するに当たり、以下のソフトウェアを使用しました。
Postfix のバージョンに関してですが、私の場合、バージョンダウンになりました。
「せっかくPostfixを再構築するのだからバージョンアップもしてしまおう」と思っていたのですが、
他のソフトとの依存関係にエラーが発生し、上記バージョンを導入する事を決めました。
POP before SMTP という技術もありますが、私個人として、「過渡期の技術」と思い込んでいますので、導入は考えていませんでした。
SMTP-AUTH は RFC2554 で策定されていますので、今後の主流となると勝手に予想し、導入を決定しました。
この SMTP-AUTH を実装してやれば、比較的安全に SMTP サーバを外部から利用可能になります。
つまり、自宅外(会社や学校、友人宅など)でも自宅に設置してある SMTP サーバが利用可能になるワケです。
なぜなら通常の SMTP は、メール送信時にはアカウント名、パスワードを必要としません。その為、悪意ある人がスパム目的で不正利用する事も可能でした。
メールの受信時(POP サーバ)では普通に認証します。
しかし、SMTP-AUTH はメール送信時にもアカウント名、パスワードで認証する事により、SMTP サーバの利用者をサーバに登録してあるアカウント名、パスワードと照合する事で利用者を限定できる様になるのです。
外部からメールを送信する為には、SMTP認証機能が付いたメーラーが必要です。
更に、POP サーバで、APOP を利用する場合も APOP に対応したメーラーが必要になります。
APOP については、当サイト内の「Qpopper で APOP を利用する」をご覧下さい。
2003/06/14 追記
ページ内コンテンツ一覧
SMTP-AUTH を実現させる上で必須のパッケージです。
ftp://core.ring.gr.jp/pub/linux/Vine/VinePlus/2.6/RPMS/i386/ に置いてある cyrus-sasl-1.5.27-17vl1.i386.rpm と cyrus-sasl-devel-1.5.27-17vl1.i386.rpm を取ってきます。
お使いの環境にあった rpm をダウンロードして下さい。
取ってきたら早速インストールします。
$ su
# rpm -ivh cyrus-sasl-1.5.27-17vl1.i386.rpm
# rpm -ivh cyrus-sasl-devel-1.5.27-17vl1.i386.rpm
Cyrus SASL のインストールはこれで完了です。
この Postfix の再構築が今回最大のキモになりますが、
私は「管理が楽になるかな?」との理由で RPM でインストールする事にしました。
現在設定している Postfix の設定を壊してしまわない様にするためにアップグレードしようとしましたが、
パッケージ間の依存関係が問題になり、結果的にダウングレードまでしてしまう事になりました。
新規でインストールするともっと楽だったと思います。
やいやい言っても始まりませんので、早速 Postfix を再構築して行きます。
ftp://core.ring.gr.jp/pub/linux/Vine/Vine-2.6/SRPMS/SRPMS/ から postfix-1.1.11-0vl3.src.rpm をダウンロードします。
取ってきたファイルを展開します。
# su hoge
$ rpm -Uvh postfix-1.1.11-0vl3.src.rpm
一般ユーザで上記コマンドを実行した場合、
ホームディレクトリ以下に ./rpm/SPECS/postfix.spec というファイルが生成されますので、エディタで編集します。
%build 以下の行を下記の通りに変更します。改行も下記の通りで構いません。
$ vi ./rpm/SPECS/postfix.spec
・・・ 省略 ・・・
%build <-- %build セクション内を編集します
make makefiles CCARGS=-DUSE_SASL_AUTH" \
-I/usr/include" AUXLIBS="-L/usr/lib -lsasl"
make DEBUG="" OPT="$RPM_OPT_FLAGS"
・・・ 省略 ・・・
編集できたら保存します。
次に spec ファイルから rpm を作成するのですが、構文エラーが無いか不安だったのでテストしてみました。
このテストは rpm も srpm も作成せずに、install までが問題無いかをチェックしてくれます。
%prep、%build、%install が仮想で実行されるので、本番のインストールと同様の時間が掛かります。
install までが上手く行くかのテスト( %prep, %build, %installが実行される)
$ rpm -bi ./rpm/SPECS/postfix.spec
ちなみに、make までが上手く行くかのテスト( %prep, %buildが実行される)
$ rpm -bc ./rpm/SPECS/postfix.spec
上記コマンド実行後、エラーがなければ、spec ファイルから rpm ファイルを作成します。
$ rpm -bb ./rpm/SPECS/postfix.spec
いよいよインストールです。
$ su
↓ダウングレードとなるので、強制的にパッケージの上書きを行う
# rpm -i --force ./rpm/RPMS/i386/postfix-1.1.11-0vl3.i386.rpm
パッケージを上書きしたら、SMTP-AUTH に対応させるべく、Postfix の設定ファイルを編集します。
/etc/postfix/main.cf をエディタで開き以下の記述を追加します。
追加場所はファイルの最下部で構いません。
## 2003/06/14 赤文字部分を追記 ##
# 以下の記述を適宜追加
# メール受信のインターフェースを設定
inet_interfaces = all
# SMTP AUTHの利用を設定
smtpd_sasl_auth_enable = yes
# SASL で認証する local domain
smtpd_sasl_local_domain = $myhostname
# 認証無しでも許可するネットワーク
mynetworks = 192.168.0.0/24, 127.0.0.0/8
# リレーを許可するものを設定する。
# 「permit_sasl_authenticated」はSMTP認証( SMTP-AUTH )を通過したものを許可する設定なので必ず加える。
# 「permit_mynetworks」は「mynetworks」で設定されたネットワークからの接続を許可する。
# 「reject」はそれ以外は拒否することを設定している。
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks,check_relay_domains,reject
# 匿名での接続を拒否する。下記のようにnoplaintextと記入するとPLAINでの認証を拒否する。
smtpd_sasl_security_options = noanonymous,noplaintext
記入したら保存します。
これで Postfix の再構築は終了です。
Postfix の詳細な設定方法については「 メールサーバ( Postfix ) 」をご覧下さい。
SMTP-AUTH 用のパスワードを設定します。これは、UNIX ユーザのパスワードとは異なるモノを指定しても構わないので、
サーバ機にログインするパスワードとは違うパスワードを設定しましょう。その方がセキュアーです。
sasl用パスワードデータベースの指定します。
/usr/lib/sasl/smtpd.conf を新規作成し、以下の1行のみを記入し、保存します。
pwcheck_method:sasldb
次に sasl 用アカウントとパスワードの設定します。
ここで指定するパスワードが SMTP 認証で使用するパスワードになります。
# /usr/sbin/saslpasswd -c -u `/usr/sbin/postconf -h myhostname` ユーザ名 <-- "ユーザ名" 部分は実在するユーザ名を指定します
Password:************* <-- 実際には入力してもなにも表示されません
Again (for verification):************* <-- 実際には入力してもなにも表示されません
必要なユーザ分上記コマンドを繰り返します。
設定したユーザ名・パスワードを削除する場合は以下のコマンドを実行します。
# /usr/sbin/saslpasswd -d -u `/usr/sbin/postconf -h myhostname` ユーザ名
登録したユーザの確認は以下のコマンドで確認できます。
# /usr/sbin/sasldblistusers
作成した sasldb のアクセス権を Postfix が使える様に変更します。
# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb
最後にPostfix に再起動をかけます。(もしくは起動)
再起動の場合
# /usr/sbin/postfix reload
postfix/postfix-script: refreshing the Postfix mail system <-- 再起動完了のメッセージ
起動の場合
# /usr/sbin/postfix start
postfix-script: starting the Postfix mail system <-- 起動完了のメッセージ
これで、SMTP-AUTH が使用可能になりました。
事項では、本当に SMTP 認証を行っているかをチェックしてみます。
SMTP-AUTH が正常に動作しているかを確認します。
具体的には Telnet で 25 番ポートにアクセスして確認します。
$ telnet localhost 25 <-- 入力し、エンター
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 www.miloweb.net ESMTP Postfix
EHLO localhost <-- EHLO localhostと入力
250-zdnet.hoge.org
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 <-- この行があればオッケーです
250 8BITMIME
QUIT <-- 確認できたので、QUITコマンドで切断します
もし「 250-AUTH PLAIN LOGIN 」と表示されていれば、SMTP-AUTH が上手く行っていないので、
Postfix のインストール手順を見直して、やり直さなければならない。
参考サイト