このページではLinux構築した自宅サーバーで使用するMTAであるSendmailメールの転送・受信・拒否の制御について初心者向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
Sendmailの設定

Sendmailについて

Sendmailのファイル構成

sendmail.mcの編集と設定

sendmail.cfの作成

受信するホスト名の設定

ホスト名毎のメールの振分け

メール転送設定の使い分け

受信/転送に関する設定

Sendmailのコントロール

連携するアプリケーション等


受信、転送を許可するホストの設定

Sendmail は、任意の ホスト からのメールを受信するとき、その宛先のメールアドレスの "@" 以降が "/etc/mail/local-host-names" の記述と一致する場合は自ホスト内への保存を試み 受信するホスト名の設定 、一致しない場合は外部の MTA への転送を試みます。

この働きはMTAにとって最も重要なものですが、この設定を誤ると不正なスパムメールの 「配信の踏み台」 にされる可能性がありますので、仕組みをきちんと理解して設定を行う必要があります。

MTAは通常、メールの受け入れの許可、転送の許可について、メールの送信元のホストの IPアドレス または ドメイン名 で判別することができるようになっています。

Sendmailではその制御を行うのに、 "/etc/mail/access.db" という バイナリ データベース ファイルを参照します。

"/etc/mail/access.db"は、 テキスト ファイルである "/etc/mail/access" の内容を、 "makemap" コマンド でバイナリ型に変換して作成されますから、実際に編集を行うのはこの"/etc/mail/access"となります。

まず、 cp コマンドでバックアップを作成した後、 nano エディタで "/etc/mail/access" を開きます nanoエディタでファイルを開く

[root@web1 ~]# cp /etc/mail/access /etc/mail/access.orgEnter
[root@web1 ~]# nano /etc/mail/accessEnter


WBEL3,CentOS3,WBEL4,CentOS4のデフォルトの/etc/mail/access
WBEL3,CentOS3,WBEL4,CentOS4のデフォルトの"/etc/mail/access"

CentOS5のデフォルトの/etc/mail/access
CentOS5のデフォルトの"/etc/mail/access"

"/etc/mail/access"は、行頭に "#" を記述するとコメント文として無視されますから、自分で説明を入れたり、一時的に設定を無効にする場合などに利用してください。

書式は、対象となるIPアドレスまたはドメイン名を向かって左側に記述し、スペースまたはタブで区切って右側にアクセス制御キーワードを記述します。

さて、上のように "/etc/mail/access" の内容は、WBEL3、CentOS3、WBEL4、CentOS4のものとCentOS5のものでは少し記述内容が異なります。

本来、 ディストリビューター が推奨する "/etc/mail/access" の基本書式は、

[タグ]:[パラメータ]  [アクセス制御キーワード]

です。つまりCentOS5の

Connect:localhost.localdomain     RELAY

が正式な書き方です。

この例では[タグ]が "Connect" となっていますが、これは[パラメータ]である "localhost.localdomain" ホスト名 または IPアドレス と解釈して動作させるための明示的な指定を意味します。

ただし[タグ]が省略された場合には "Connect" が設定されているものとみなされて動作しますから、WBEL3、CentOS3、WBEL4、CentOS4の "/etc/mail/access" に記述されている

localhost.localdomain     RELAY

は、設定としてはCentOS5のそれと全く同じになります。

[タグ]には "Connect" の他に "From" "To" を指定することが可能で、主にスパムメール対策として有効に利用することができますが、これについてはこのページの最後に説明します。

とりあえずここでは、 "/etc/mail/access" の記述について Connect: を省略した書式で説明しますが、[タグ]を記述する書式が デフォルト になっているCentOS5をご利用の方は、以下の設定の各行の先頭に Connect: を付加して記述するほうが望ましいと思われます。

さて記述例ですが、

192.168.100.101  RELAY

と記述すると、Sendmailは、

「IPアドレス"192.168.100.101"のホストのMUAからのメールの受信と、他のMTAへの転送を許可する。」

という動作をします。また、

obenriclient.com  REJECT

と記述すると、

FQDN "*.obenriclient.com"のホストのMUAからのメールの受信を拒否する。」

という動作をします。

アクセス制御キーワードはいくつかの種類がありますが、少しわかり難いかもしれませんので図解してみます。

"OK"〜受信と自ホストへの保存のみ許可

デフォルト の設定です。

明示的に設定を行わない場合は、自動的に任意のホストに "OK" が設定されたものとみなされます。

この場合、

メールはユーザーがMUAから発信するだけでなく、Sendmailと同じホスト上で動作する他の アプリケーション (例えば httpd から送信されるフォームメールなど) からも発信されます。
この場合の送信元のホストはいうまでもなく "localhost" として扱われ、 "/etc/mail/access" の制御を受けます。
キーワードにOKが指定(あるいは無指定)されたときのSendmailの動作
キーワードに"OK"が指定(あるいは無指定)されたときのSendmailの動作

のように、Sendmailは MUA MTA からの受信を受け入れ、自ホストへの保存動作を試みます。

メールの宛先が自ホストではない場合には、Sendmailは受信そのものを拒否し、送信元にその旨のメッセージを送り返します。

つまりこの設定では、 「他のMTAへの転送は行わない」 ので、先に説明した "local-host-names" で指定されていないメールアドレス宛てのメールは、一切扱わないことになります。

"RELAY"〜受信と自ホストへの保存と他ホストへ転送を許可

上の "OK" の動作に加えて、他の ホスト へのメールの転送を許可します。

MUA クライアント アプリケーション ですから、MTAからのメールの転送先ではありえません。

ここでいう「他のホスト」とは、正確には 「他のホストからメールの受け入れが可能な MTA ということになります。

キーワードにRELAYが指定されたときのSendmailの動作
キーワードに"RELAY"が指定されたときのSendmailの動作

Sendmail は、"RELAY"キーワードで指定されたホスト(MTAまたはMUA)からのメールを受信すると、その宛先が "local-host-names" で指定されたもの以外の場合、 DNSサーバー を利用してメールの宛先の 名前解決 を行い、自身以外のMTAへの転送を試みることになります。

実際のところ、ほとんどのインターネット利用者は ISP から提供されたメールアドレスを使用しているはずですから、あなたが 構築中のLinuxサーバー 上のSendmailを使って友人などにメールを送りたい場合、あなたが使うMUAに対して"RELAY"を設定する必要があります。

ただし、自分の管理下にないMTAやMUAに対しては、 絶対に"RELAY"を設定してはいけません。

もしもそういう設定をしてしまうと、 構築中のLinuxサーバー スパムメールの発信基地 にされてしまうかもしれないからです。

スパマーは自分で設置したMTAから直接スパムメールを発信するわけにはいきませんから 自分所有するサーバーでスパムメールを発信できない理由 、「不用意に外部のMTAからの中継を許可しているメールサーバー」を常日頃から探し回っています。

そしてもし 構築中のLinuxサーバー がスパムメールの発信基地にされてしまったら、あなたのメールサーバーそのうちブラックリストに挙げられ、多くのMTAから受信拒否されてしまうことになるでしょう。

"REJECT"〜受信を拒否する(エラー表示)

ホスト からの受信を拒否し、送信元にエラーを表示させる動作を行うキーワードです。

頻繁にスパムメールを送りつけてくる MTA などに設定します。

"550 [メッセージ]"〜受信を拒否する(エラー+メッセージ表示)

動作は"REJECT"と同じですが、エラーとともに[メッセージ]を送信します。

"DISCARD"〜受信メールを破棄する(エラー非表示)

ホスト からの受信メールを破棄し、送信元にエラーを表示させないためのキーワードです。

この動作を行われると、送信元にとっては「正常にメールが送信できた。」と錯覚することになりますから、正当なユーザーにとってはかなり迷惑な設定になります。

また、未熟なスパマーが「スパムメールの踏み台」が見つかったと錯覚する恐れもありますから、一般的には使用すべきキーワードではありません。

関連セクションへ 関連セクション・ メールサーバーの構築

このページの先頭へ↑

"/etc/mail/access"の設定とデータベース化

WBEL3 CentOS3 、WBEL4、CentOS4の デフォルト "/etc/mail/access" からコメント文を除くと、次のようになっているはずです。

localhost.localdomain      RELAY
localhost            RELAY
127.0.0.1            RELAY

またCentOS5では、

Connect:localhost.localdomain      RELAY
Connect:localhost            RELAY
Connect:127.0.0.1            RELAY

となっているはずです。つまり、 構築中のLinuxサーバー 上で動作する httpd やその他の アプリケーション から送信されるメールのみ、他の MTA に転送許可されています。

これに、自宅内の同じ サブネット "192.168.100.0/24" の中にある ホスト機 MUA を使って、任意のメールアドレス宛にメール送信を可能にするには、WBEL3、CentOS3、WBEL4、CentOS4では、

localhost.localdomain      RELAY
localhost            RELAY
127.0.0.1            RELAY
192.168.100           RELAY

CentOS5では、

Connect:localhost.localdomain      RELAY
Connect:localhost            RELAY
Connect:127.0.0.1            RELAY
Connect:192.168.100           RELAY

と設定します。

単独の IPアドレス ではなく、サブネット単位で ホスト を指定するときは、このように オクテット 単位で ネットワーク部 を指定し、 ホスト部 を省略します。

プレフィックス長 形式や サブネットマスク 形式は記述できません。

一般的にはこれ以外の設定を行う必要はありませんが、例えば頻繁にスパムメールを送ってくる "*.spam.com" という ホスト名 のMTAがある場合は、WBEL3、CentOS3、WBEL4、CentOS4では、

localhost.localdomain      RELAY
localhost            RELAY
127.0.0.1            RELAY
192.168.100           RELAY
spam.com            REJECT

CentOS5では、

Connect:localhost.localdomain      RELAY
Connect:localhost            RELAY
Connect:127.0.0.1            RELAY
Connect:192.168.100           RELAY
Connect:spam.com            REJECT

と設定します。

もちろん、ホストを特定できるのであれば、記述は FQDN でもIPアドレスでも構いません。

/etc/mail/accessの設定例と動作イメージ図
"/etc/mail/access"の設定例と動作イメージ図

設定が終了したら保存して nanoエディタ を閉じ nanoエディタを閉じる "/etc/mail/access" に対して データベース 化処理を行い、 "/etc/mail/access.db" として保存します。

この変換作業を行っても"/etc/mail/access"はそのまま残りますので、バックアップをとる必要はありません。

"makemap" コマンド "-v" オプション付きで実行すると、 "key=","val=" で処理内容を確認することができます。
[root@web1 ~]# cd /etc/mailEnter cdコマンドについて
[root@web1 mail]# makemap -v hash access.db < accessEnter 入力のリダイレクトについて
key=`localhost.localdomain', val=`RELAY'
key=`localhost', val=`RELAY'
key=`127.0.0.1', val=`RELAY'
key=`192.168.100', val=`RELAY'
key=`spam.com', val=`REJECT'
[root@web1 mail]# ls -l access.dbEnter lsコマンドについて
-rw-r-----  1 root   root    12288 2月 27 19:24 access.db
             現在の日時に変更されています↑。
[root@web1 mail]#

このようにして作成された"/etc/mail/access.db"は、 Sendmail が一つの動作ごとに参照するデータベースですから、設定を反映するためにSendmailを再起動する必要はありません。データベースを作成すれば即動作に反映されるようになります。

関連セクションへ 関連セクション・ メールサーバーの構築

NEC「得選街」
このページの先頭へ↑

"/etc/mail/access"中に記述できるタグについて

このページの最初のほうで説明したとおり、本来 "/etc/mail/access" へは、 CentOS5 デフォルト の形式である、

[タグ]:[パラメータ]  [アクセス制御キーワード]

のように記述することが推奨されています。

設定可能なタグは以下の三つです。

Connect:

[パラメータ]を ホスト名 または IPアドレス とみなして動作します(省略可)。

From:

[パラメータ]を差出人のメールアドレスとみなして動作します。

To:

[パラメータ]を受信者のメールアドレスとみなして動作します。

例えば、

From:spam@obenrispam.com    REJECT

と設定を追加すると "spam@obenrispam.com" を差出人とするメールの受信を拒否することができますし、

From:obenrispam.com    REJECT

と設定するとホスト名の部分に "obenrispam.com" を持つメールすべてを受信拒否し、

From:spam@    REJECT

と設定すると "spam" というユーザー名を持つメールアドレスからのメールのすべてを受信拒否することができます。

タグに "To" を用いる場合は[パラメータ]が宛先に変わるだけで設定の意味は同じです。

例えば MUA として "Outlook Express" をお使いの場合、アカウント設定で 電子メールアドレス(M): を書き換えたり、 返信アドレス(Y): を書き加えたりするだけで簡単に差出人のメールアドレスを誤魔化すことができます。
これは本物の郵便を出すときに、ウソの差出人を書いてもちゃんと相手に届くのと同じことですね。

ただし電子メールを出すときの差出人の署名や表示上の宛先は、実際には自己申告のようなものですからいくらでも偽装が可能です。

従って "From:" "To" を利用した迷惑メールの処理は、送信元のホスト名やIPアドレスのように簡単には偽装のできない情報を元に制御を行う "Connect" タグによる処理に比べると遥かに実効性は低くなりますので過信は禁物です。

また、 "/etc/mail/access" での受信、リレー制御は過剰に設定すると必要なメールまで送受信できなくなるミスを犯す危険がありますので、必要最小限のシンプルな設定にとどめておくことをお勧めします。

関連セクションへ 関連セクション・ メールサーバーの構築

NEC「得選街」
このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System