SMTP Authenticationの導入(Postfix編)

Mail System Postfix SMTP-Auth SMTP-Auth+TLS SMTP+Virtual Qpopper Qpopper/SSL Courier-IMAP FetchMail Procmail WebMail AntiVirus Relay Mail
インストール・設定  − テスト

SMTPサーバを動かす場合、不正中継(リレーメール)対策をしっかりしないと、Spamメールの踏み台にもされかねません。おやじは、取り敢えずは家庭内からしか送信しないということで中継制限をしていましたが、外部からも使用できるようにしました。
当初は、POP before SMTPでいくつもりでしたが、使用しているメーラ(Outlook Express)は送受信すると送信から始まります。従って、送信時に必ずエラーになり送信トレイに格納され、その後、送受信するとまたエラーになり、その後の送受信で送信されることになってしまいます。慣れれば問題ないかもしれませんが、如何せん面倒であり、家族が騒ぎそうなので何か手はないか探していたところ、SMTP Authenticationという方法があることがわかりました。
SMTP Authenticationは、読んで字のごとくSMTPへのアクセス時に認証を行い、許可ユーザのみ送信を受け付ける方法です。Outlook Expressも対応していることから設定さえしておけば、今までと同じ感覚で使用できますのでこれでいくことにしました。
SMTP Authentication(SMTP AUTH)導入には、Cyrus SASLを利用します。RedHat では、既にCyrus SASLが組み込まれており、本編は、おやじが使用しているRedHat を前提にしています。他のデイストリビューションでは、Cyrus SASLのインストールが必要になる、インストールパスが異なる(RedHatでもソースからインストールした場合を含む)等で、若干、修正が必要と思いますが、おやじは他の環境がないので確認できませんのであしからず。

サーバソフトが吐くメールがうまく配送されていなかったので、設定を変更したのをこちらのページで修正が漏れていました。(2002.12.30)
Postfix2.0系では、少し設定が変わっているので変更内容を追加しました。(2003.06.10)

■Postfixの再コンパイルとインストール

PostfixでSMTP AUTHを導入するには、Postfixを再コンパイル・再インストールする必要があります。Postfixそのもののインストールについては、こちらを参照願います。
インストールは、任意の場所にソースを展開してコンパイルします。
$ tar zxfv postfix-1.1.7-20020331.tar.gz
$ cd postfix-1.1.7-20020331
$ make tidy  
←注
$ make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/include" AUXLIBS="-L/usr/lib -lsasl"
$ make

$ su
# make install
注: 以前にインストールしたソースディレクトリで作業を行う場合に必要です。新規インストールや異なるディレクトリで作業する場合は、この作業は不要です。
make install後、いろいろ聞かれますが、再インストールならば全て「Enter」でOK.。新規の場合は、make後、こちらのとおり作業して、make installしてください。

■パスワードファイルの作成

ここでは、SMTP AUTHで使用するパスワードを作成します。セキュリテイのことを考え、UNIXパスワードとは別のパスワードを使用することとし、パスワードはsasldbを参照するようにしてあります。

◆パスワードデータベースの指定

ここで、パスワードデータベースとしてsasldbを使用することを設定します。

# vi /usr/lib/sasl/smtpd.conf
pwcheck_method:sasldb
上記を記述後、「Esc」、「:」、「wq」で設定を保存してください。

◆パスワードの作成

パスワードの作成は、以下のように行います。mydomainにはmain.cfで設定したドメイン名を指定し入力すると、設定するパスワードを聞いてくるので、確認を含めて2回入力します。何故か、二人目以降は大丈夫なのですが、一人目の登録は何回かインストールしましたが必ず失敗しますので、再登録しましょう。
# saslpasswd -c -u mydomain ユーザ名

例: saslpasswd -c -u mail.aconus.com oyaji  
設定したパスワードを削除する場合は、以下のようにします。
# saslpasswd -d -u mydomain ユーザ名
作成されたパスワードの確認は、以下のようにします。
# sasldblistusers
user.oyaji realm: mail.aconus.com mech: DIGEST-MD5
user.oyaji realm: mail.aconus.com mech: PLAIN
user.oyaji realm: mail.aconus.com mech: CRAM-MD5 

◆パスワードファイルの設定

Postfixがsasldbを利用できるようにグループに登録し、パーミッションを変更します。
# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb

■Postfixの設定ファイルの編集

Postfix設定ファイル(main.cf)を編集します。「Other configurable parameters」の下に、以下のように追加します。

# Other configurable parameters.
smtpd_sasl_auth_enable = yes  ←(1)
smtpd_sasl_local_domain = $myhostname  ←(2) (2002.12.30 下記に変更)
smtpd_sasl_local_domain = $mydomain  ←(2)
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains, reject  ←(3)
smtpd_sasl_security_options = noanonymous noplaintext ←(4)
broken_sasl_auth_clients = yes  ←(5)

(1) SASLによるSMTP認証を使用。
(2) SMTP認証するlocal domainの指定。
  おやじは、1台しかサーバがないので$mydomainとしたが、デフォルトはmyhostnameである。
  ここでの設定は、myoriginの設定とsaslpasswdの設定時のmydomainの設定の3個所が同一でないとエラーになるので注意が必要。

(3) リレーを許可するものを設定。
  ・permit_mynetworks : mynetworksで指定されたネットワークからのリレーを許可。
  ・permit_sasl_authenticated : SMTP認証を通過したものは許可。
  ・check_relay_domains : relay_domainsで指定されたドメインへはリレーを許可。
   (本設定をしないと外部からのメールが全てrejectされてしまう。main.cfでのrelay_domainsの設定も忘れずに。)
   check_relay_domainsはPostfix2.0では使用されなくなったので、替わりに reject_unauth_destination を指定し、最後のrejectを削除すること。
   ・reject :上記以外拒否。 
(4) noanonymous : 匿名での接続を拒否。
     noplaintext : PLAIN認証を拒否(Outlook ExpressはPLAIN認証のみ対応のためおやじは未記述)
(5) AUTHコマンドのサポートを認識できないクライアントへの対応。
   Outlook Express 4 および Exchange 5等はAUTH コマンドをサポートしていることを認識できないので、
   使用時は設定を追加する。おやじはOE 6.0なのでnoのまま。

■Postfix の起動

設定が終わったら、

      # /usr/sbin/postfix start

と入力して、Postfixを起動します再起動時に上記コマンドを自動実行するよう登録するには、/etc/rc.d/rc.local に上記コマンド(/usr/sbin/postfix start)を追記しておけば、再起動時に実行されます。念のため、再起動後に、netstat -lnで25番ポートがListen状態になっているか確認しておきましょう。


Mail System Postfix SMTP-Auth SMTP-Auth+TLS SMTP+Virtual Qpopper Qpopper/SSL Courier-IMAP FetchMail Procmail WebMail AntiVirus Relay Mail

インストール・設定  − テスト