![]()
いろいろなところで SMTP サーバーが必要になってきました。しかし、sendmail を不正使用されないような設定や SPAM 対策がされています。そこで、sendmail に認証のメカニズムを組み込み、認証が正常に行なわれたら SMTP サーバーとして利用できるようにします。それを実現する機能として、SMTP AUTH を利用します。しかし、OutLook Express, Netscape Messanger といったメジャーな MUA はセキュリティーレベルの低い認証方式を利用しているので SMTP over SSLを設定して暗号化しておく必要があります(ここでは SSL の設定は省略しています)。 認証の機構には、SASL(Simple Authentication and Security Layer)を利用します。SASLは、認証方式(メカニズム)と照合方法が数多くサポートされています。 【認証方式】
【照合方法】 これは、SASLの pwcheck_method オプションを変更することで実現できます。
MTAとして sendmail を利用し、認証には Cyrus SASL API を利用します。OS(Redhat Linux を例に説明します) や機能によって必要なモジュールが異なります。必要なモジュールをダウンロードしてください。最低でも、上の二つのモジュールをダウンロード/コンパイルする必要があります。(ここでは、Kerberos 4/5 共にインストールしないので上記の二つのみを利用した説明になります)
SMTP-AUTH を実現するには、SASLパッケージをインストールし、それを利用するように sendmail をコンパイルします。 SASL パッケージをインストールする場合、必要な認証方式を選択する必要があります。デフォルトで、ほとんどの MUA が利用できるアルゴリズムは組み込まれます。しかし、OutLook Express ではデフォルトで組み込まれない LOGIN を利用するので configure 時に有効にします(使いたくないが仕方ない...)。また、ここの説明では KERBEROS_V4, GSSAPI のパッケージをインストールしていないので、configure 時に無効になります。
# gzip -dc cyrus-sasl-1.5.24.tar.gz | tar xvf - # gzip -dc sendmail.8.11.6.tar.gz | tar xvf - # cd cyrus-sasl-1.5.24 # ./configure --enable-login # make # make install ... * WARNING: * Plugins are being installed into /usr/local/lib/sasl, * but the library will look for them in /usr/lib/sasl. ... # ln -s /usr/local/lib/sasl /usr/lib/sasl # chmod 755 /usr/local/lib/sasl sendmail をコンパイルするときに、SASL を組み込むように設定します。 # cd ../sendmail-8.11.6/devtools/Site
# edit site.config.m4
APPENDDEF(`confENVDEF', `-DSASL')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl')
APPENDDEF(`confINCDIRS', `-I/usr/local/include')
APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')
# cd ../..
# ./Build
# ./Build install
今まで、sendmail を使っていた場合、いきなりインストールせずに
プロセスを終了させ必要なファイルをバックアップしてください。
今まで使用していた sendmail.cf (すでに sendmail を導入していた場合)では、SMTP AUTH の定義がないので作り直します。cf を作成するもととなる m4 マクロファイルに以下の内容を追加します。このとき、利用したい認証のアルゴリズムを指定してください。これは、利用する MUA がサポートしているアルゴリズムを調べておく必要があります。 define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
define(`confDEF_AUTH_INFO', `/etc/mail/default-auth-info')dnl
利用可能な認証方式を confAUTH_MECHANISMS で指定し、中継を許可するメカニズムを TRUST_AUTH_MECH で指定します。confDEF_AUTH_INFO は、sendmail がクライアントとして機能するときに必要な認証情報を記述したファイルを指定します(これは必要がなければ指定しなくてよい)。ここで指定したファイルは、root または信頼のおけるユーザー以外はアクセスできないようにしておく。例: 認可識別子(ログインするための識別子)、認証識別子(そのパスワードが用いられるであろう識別子)、パスワード、realm(ドメイン名)を記述します。 /etc/mail/default-auth-info
admin
admin
SecretPassword
foobar.co.jp
cf の作成は、sendmail のソースパッケージに含まれるテンプレートを利用して作成します。上記で説明した SMTP AUTH の設定とそれぞれ必要な設定(SMTPサーバーとして動作させるための情報の追加やスパム対策など)を行います。 # cd cf/cf
# edit config.mc
divert(-1)
access_db を設定して、メールの中継やスパムに関するデーターベースを作成します。詳しい記述方法は cf/README ファイルを参照してください。 # edit /etc/mail/access
spammer@aol.com REJECT
spammer.com ERROR:"550 We don't accept mail from spammers"
192.168.200 DISCARD
spam@ REJECT
cyberspammer.com REJECT
good.cyberspammer.com OK
mydomain.co.jp RELAY
# makemap hash /etc/mail/access < /etc/mail/access
sendmail.cf を作成した際に、DOMAIN の指定で generic.m4 ファイルを利用したので /etc/mail/local-host-names に FQDN 形式で利用するローカルドメインを記述しておく。 # edit /etc/mail/local-host-names
foobar.co.jp
それぞれの設定が完了したら、sendmail を起動します。(通常は、システムの設定ファイルで起動される)telnet コマンドで sendmail にコネクトすると有効となる認証方式が確認できます。 # /usr/sbin/sendmail -bd -q30m # telnet localhost smtp Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.foobar.co.jp ESMTP Sendmail 8.11.6/8.11.6; Thu, 4 Oct 2001 00:06:12 - 0700 ehlo localhost 250-mail.foobar.co.jp Hello IDENT:root@localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-SIZE 250-DSN 250-ONEX 250-ETRN 250-XUSR 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 250 HELP quit 221 2.0.0 mail.foobar.co.jp closing connection Connection closed by foreign host. #
照合方法は幾つかありますが、ここでは SASL のパスワードデータベース(/etc/sasldb)を利用する方法を記述します。設定ファイル /usr/lib/sasl/Sendmail.conf を以下のように編集(追加)します。 pwcheck_method: sasldb SASL のパスワードデータベースの作成やパスワードの設定は、 saslpasswd コマンドを利用します。例えばあるユーザーのパスワードを設定するときは、必ずスーパーユーザーで saslpasswd -u <ドメイン名> <ユーザ名> として登録します。-u オプションを使用することで、ドメインをうまく利用した登録が行えます。セキュリティー上、作成された /etc/sasldb は root のみアクセスできるモード(chmod 600 /etc/sasldb)に変更しておく必要があります。 # /usr/local/sbin/saslpasswd -u baz.co.jp shin passwd:(パスワード) 登録したアカウントは、sasldblistusers コマンドで確認することができます。 # /usr/local/sbin/sasldblistusers user: shin realm: baz.co.jp mech: PLAIN user: shin realm: baz.co.jp mech: CRAM-MD5 user: shin realm: baz.co.jp mech: DIGEST-MD5 saslpasswd コマンドは、スーパーユーザーでないと使えないので一般のユーザー向けになんらかのコマンドを用意した方が良い。もっとも、SASL データベースを利用せずに /etc/passwd を利用するように設定しても良い。(安全性を考慮するなら SMTP over SSL は必須)。
MUA側の設定は以下のようになります。これまでの設定から、SMTP サーバが mail.foobar.co.jp で SASL 認証用のアカウントが shin@baz.co.jp として MUA の設定をします。 【OutLook Express の場合】 OutLook Express の「ツール」メニューから「アカウント」を選択し、「メール」でサーバを選択してからプロパティーを開くと以下のようなウィンドウが表示されます。
ここで、「送信メール(SMTP)」に SMTP サーバーである mail.foobar.co.jp を指定します。「送信メール サーバー」の「このサーバーは認証が必要」をチェックして「設定...」ボタンを押します。
ここで、「次のアカウントとパスワードでログオンする」を選び、SASL 認証用のアカウント shin@baz.co.jp と saslpasswd コマンドで入力したパスワードを入力します。 これらの設定が終了したら、後は通常通りメールの送信が行えます。
【Netscape Messenger の場合】 Netscape Communicator の Preferences(設定)を開きメールサーバーを選択します。
ここで、Outgoing mail server(SMTPサーバー)に SMTP サーバーである mail.foobar.co.jp を指定し、Outgoing mail server user name(SMTP サーバーのアカウント)に SASL 認証用のアカウント shin@baz.co.jp を指定します。 これらの設定が終了したら、後は通常通りメールの送信が行えます。Netscape を起動して一番はじめのメールの送信時に以下のようなウィンドウが表示されます。
ここで、saslpasswd コマンドで入力したパスワードを入力します。2回目以降はパスワードを入力する必要はありません。
|