Linux で自宅サーバ [ Home Server Techncial ]

>>トップページに戻る

 Postfix2 で SMTP-AUTH

SMTP-AUTH (エスエムティーピー・オースと発音する)とは、SMTP Authentication の略語で、
メール送信時にアカウント名、パスワードをサーバに伝える事によりメールサーバーから認証を受けるシステムです。
通常、メールを送信する際にはSMTPというプロトコルを使用します。しかし、このSMTPは「ユーザの認証を行わない」という欠点を持っています。
この欠点を補うべく SMTP-AUTH を導入します。

このページでは基本的な Postfix で SMTP-AUTH を実現させる設定方法と、不正中継されない為の一歩踏み込んだ設定方法をご紹介致します。
メールサーバの構築は、ダイナミック DNS サーバが MX レコードの設定に対応している事が必須です。
( miniDNS での MX レコードの設定方法は、当サイト内の「 MX レコードの設定 」で行っています。 )
また、独自ドメインでも、サブドメインでも同様に設定する事が可能です。

この SMTP-AUTH を実装してやれば、比較的安全に SMTP サーバを外部から利用可能になります。
つまり、自宅外(会社や学校、友人宅など)でも自宅に設置してある SMTP サーバが利用可能になるワケです。

なぜなら通常の SMTP は、メール送信時にはアカウント名、パスワードを必要としません。その為、悪意ある人がスパム目的で不正利用する事も可能でした。
メールの受信時(POP サーバ)では普通に認証します。
しかし、SMTP-AUTH はメール送信時にもアカウント名、パスワードで認証する事により、SMTP サーバの利用者をサーバに登録してあるアカウント名、パスワードと照合する事で利用者を限定できる様になるのです。
なお、メールを送信する為には、SMTP認証機能が付いたメーラーが必要です。

今回は最新版を使いたかったのでソースからコンパイルしてインストールすることにしました。

おことわり
このページは「 メールサーバ( Postfix ) 」や「 Postfix で SMTP-AUTH を実現 」と内容が似通っていますが、
最新版の環境( Postfix 2.1.4、Cyrus SASL 1.5.27 )で SMTP-AUTH を実現したいのであれば、このページが参考になるかと思います。
また上記2つのページも参照しながらこのページをご覧下さい。

ページ内コンテンツ一覧

▲ページの最上部に戻る

 Cyrus SASLのインストール

さあ長い前フリもそこそこに早速設定して行きましょう!
SMTP-AUTH を実現させる上で必須のパッケージです。

ftp://core.ring.gr.jp/pub/linux/Vine/VinePlus/2.6/RPMS/i386/ に置いてある cyrus-sasl-1.5.27-17vl1.i386.rpmcyrus-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 の再構築

依存の関係でデフォルトでインストールされている Postfixfetchmail を削除します。

# rpm -e fetchmail
# rpm -e postfix

Postfix の最新版をダウンロードします。
私がダウンロードした時点での最新版は postfix-2.1.4でした。

$ wget ftp://postfix.get7.biz/postfix/official/postfix-2.1.4.tar.gz  <-- 本体をダウンロード
$ tar xvfz postfix-2.1.4.tar.gz  <-- 展開
$ cd postfix-2.1.4
$ make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/include" AUXLIBS="-L/usr/lib -lsasl"  <-- 先ほどインストールしたSASLのライブラリを使用するようにmakefileを作成します
$ make
$ su

次に、インストールを始める前に postfix 用のユーザー「 postfix 」とグループ「 postdrop 」を作成します。
本来なら、「 vipw 」で編集すればいいのでしょうが、上手くいきませんでした。なので、一旦 adduser コマンドでユーザー「 postfix 」を追加し、
passwd コマンドで適当なパスワード(使うことはありません)を設定してから「 vipw 」で編集しました。

# adduser postfix  <--「 postfix 」ユーザを追加
# passwd postfix  <-- パスワード設定
# groupadd postdrop  <-- 「 postfrop 」グループを追加
# vipw  <-- 「 vipw 」でpostfixの該当箇所を変更(以下を参考)

vipw でpostfixの行を以下の様に変更します。

postfix:x:501:502:Postfix:/nonexistent:/sbin/nologin
※「501」、「502」の部分は環境によって異なるのでデフォルトのままで構いません。

Linux システムでシャドウパスワードを使用している場合、
保存時に「このシステムではシャドウパスワードが使われています。 /etc/shadowを今すぐ編集しますか[y/n]?
と聞かれるので「 y 」を押し、postfix の部分を以下の様に変更します。

postfix:!!:11964:0:99999:7:::
※先程と同様に「11964」の部分は環境によって異なるのでデフォルトのままで構いません。

これでインストールの準備は整いましたので、インストールを行います。

# make install

続いて Postfix の基本設定に入ります。
エディタで /etc/postfix/main.cf を編集します。

# ホスト名の設定
# サーバのホスト名を記述します。
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = mail.example.com

# ドメイン名の設定
# 自分の取得したドメイン名を記述します。
#mydomain = domain.tld
mydomain = example.com

# メール送信の設定
# ローカルで配送されたメールがどこからくるように見えるか指定するもので、1台しかサーバがないので
# ここでは$mydomainを指定すればいい。
# なお、ここでの設定は後述するsaslpasswdの設定時のmydomainと同一でないとエラーとなるので注意が必要。
#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $mydomain

# メール受信の設定
# メールを受け取るネットワークインタフェースのアドレス範囲を指定する。特別な用件が無ければ指定不要(デフォルトでは all が適用になります)。
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost

# メールの最終目的地とみなす範囲の指定
#mydestination = $myhostname, localhost.$mydomain
#mydestination = $myhostname, localhost.$mydomain $mydomain
#mydestination = $myhostname, localhost.$mydomain, $mydomain,
# mail.$mydomain, www.$mydomain, ftp.$mydomain
mydestination = $myhostname, localhost.$mydomain, $mydomain

# 信頼できるクライアントのネットワークを指定(192.168.0.0/24と192.168.1.0/24を合わせて指定)
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
mynetworks = 192.168.0.0/23, 127.0.0.0/8

# リレーを許可するドメインを指定
#relay_domains = $mydestination
relay_domains = $mydestination

# sendmail互換プログラムの修正
# sendmail互換プログラムがsendmail.postfixとなっており、CGIとの整合が取れないので修正する。
#sendmail_path = /usr/sbin/sendmail.postfix
endmail_path = /usr/sbin/sendmail

引き続き、SMTP-AUTH に関わる設定を行います。
設定ファイルも引き続き、/etc/postfix/main.cf です。

# SMTP サーバ制御の設定
# SASLによるSMTP認証を使用
#smtpd_sasl_auth_enable = yes
#smtpd_sasl_auth_enable = no
smtpd_sasl_auth_enable = yes

# 使用可能な認証メカニズムの設定(そのまま)
# noanonymous : 匿名での接続を拒否。
# noplaintext : PLAIN認証を拒否(Outlook ExpressはPLAIN認証のみ対応)
#smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_security_options = noanonymous

# ローカル認証 realm の名前を設定
# Postfixのデフォルトはmyhostnameである。
# 実はここで大嵌りで、PAM 認証の場合はここは設定なしのままでないと認証できないので注意が必要。
# 但し、これはsaslauthdによるPAM 認証の場合で、sasl パスワード認証の場合は、myorigin で設定した
# ドメイン(ホスト)名と同一の値を設定しないと、認証に失敗する。
#smtpd_sasl_local_domain = $mydomain
#smtpd_sasl_local_domain = $myhostname

# リレーを許可するものを設定(sample-smtpd.cf)
# ・permit_mynetworks : mynetworksで指定されたネットワークからのリレーを許可。
# ・permit_sasl_authenticated : SMTP認証を通過したものは許可。
# ・reject_unauth_destination : 目的地が $inet_interfaces、$mydestination $virtual_alias_domains
# または $virtual_mailbox_domains にマッチするアドレス宛のメール、及び$relay_domains にマッチする
# 目的地へのメール以外を拒否。
# (本設定で不正な外部からのメールをrejectする。check_relay_domainsは2.0では使用
# されなくなった。)
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

# AUTHコマンドのサポートを認識できないクライアントへの対応(sample-compatibility.cf)
# Outlook Express 4 および Exchange 5等はAUTH コマンドをサポートしていることを認識できないので、
# 使用時は下記のような設定を追加する。
broken_sasl_auth_clients=no

▲ページの最上部に戻る

 SMTP-AUTH 用アカウントの作成

Linux システムのアカウントのパスワードとは別に、SMTP-AUTH 用のパスワードを設定します。
必要なユーザ分繰り返します。

# /usr/sbin/saslpasswd -c -u `/usr/sbin/postconf -h myhostname` ユーザ名

認証用DBのアクセス権変更します。(初回のみ

# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb

最後にSMTP認証の際に使用するDBを指定します。/usr/local/lib/sasl/ に新規に smtp.conf というファイルを作成して、次の1行のみを記入します。

pwcheck_method: sasldb

次にエイリアスを設定します。
例としてroot宛に来たメールを任意のユーザであるusernameに転送します

# cp /etc/postfix/aliases /etc  <-- 必要なファイルを /etc にコピーします

/etc/aliases をエディタで開き以下の様に編集します。

root: username

エイリアスの設定を以下のコマンドで反映させます。

# newaliases

Postfixを起動させます。

# /usr/sbin/postfix start

以上でSMTP-AUTHの設定が終了しました。
メールが送信されるかをチェックして下さい。

なお、SMTP-AUTH は通常の SMTP と同じく 25番ポートを使用しますので、ルータの設定変更も忘れずに行って下さい。

▲ページの最上部に戻る

 SMTP-AUTH の確認

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 のインストール手順を見直して、やり直さなければなりません。

後はメーラーの設定をしてやれば、使えるようになります。

以上の設定で SMTP-AUTH を用いてメールの送信が行えるようになったハズです。
しかし、これで安心してはいけません

スパムメールの踏み台にならないための最低限のセキュリティとして、次項のメール不正中継拒否テストは必ず行って下さい。

▲ページの最上部に戻る

 メール不正中継拒否のテスト

上記の不正中継拒否の設定が出来たら本当に不正中継が拒否されるかテストしてみましょう。

テストは以下のサイトで可能です。

NETWORK ABUSE CLEARINGHOUSE - Mail relay testing
確認くんをクリックし、自分のグローバル IP アドレスを確認します。(プロキシ(代理)サーバーを経由しないで下さい。
確認くんを開いて上から3つ目の「現在接続している場所(現IP)」があなたのIPアドレスです。
このIPアドレスを NETWORK ABUSE CLEARINGHOUSE - Mail relay testing の「 Address to test:(as host name or dotted quad) 」の欄に入力し、「 Test for relay 」をクリックするとテストが開始されます。

17 種類のチェックが行われ、不正中継に問題が無ければ、最下部に「 All tests performed, no relays accepted. 」と表示されます。
もし不正中継される様であればひっかかった時点でテストは終了します。

▲ページの最上部に戻る

参考サイト

私が実際にPostfix2 で SMTP-AUTH 環境を構築する際に、上記3サイトを参考にさせていただきました。
また、このページ作成時には設定ファイルの設定値等、参考にさせて頂きました。ここに御礼申し上げます。


Copyright© Home Server Technical. All Right Reserved.
webmaster@miloweb.net