sendmailの設定

提供: Wikiducca
移動: 案内検索

sendmailでspamの踏み台とならないためにいくつかの設定を行う必要があります。 ここでは、sendmailの基本的な設定の他に行わなければならないspamの踏み台とならないための設定を行います。 spamの対策には、大きく分けて2種類あります。1つは踏み台とならないために中継の禁止をおこなうもの、もう1つは自サイトに対してspamを送られないようにするためのものです。

sendmailの設定を行う際、自サイトのメール設定だけでなく、中継を行わないように設定する必要があります。

(1) 中継の禁止

中継を許可したばかりにspamの踏み台となってしまっては、自サイトの影響だけでなく、多くのサイトに迷惑をかけ無駄な資源を使用してしまうことになります。 そこで、他サイトから自サイトに対するメール以外を排除します。 ここの説明はsendmail.8.11.3を前提としています。 sendmailにおいて中継の禁止はsendmail.cfにおいて設定します。sendmailの起動時に、その動作を定義するものです。 ここでは、sendmail.cfをm4形式のマクロを使用し生成します。今回は、ducca.mcというファイル名で作成しますが、任意の判りやすい名前で構いません。 このマクロの雛型は、sendmailのソースに含まれており、sendmail-8.11.3/cf/cfのパスにOSごとに置かれています。 Linuxの場合はgeneric-linux.mc、FreeBSDの場合はgeneric-bsd4.4.mcをducca.mcというファイルにコピーします。 このときのducca.mcの内容は次の通りです。

divert(0)dnl
VERSIONID(`$Id: generic-bsd4.4.mc,v 8.10 1999/02/07 07:26:02 gshapiro Exp $')
OSTYPE(`bsd4.4')dnl
DOMAIN(`generic')dnl
MAILER(`local')dnl
MAILER(smtp)dnl

FreeBSDにおいてのみ注意しなければならない点があります。 それは4.2-RELEASEからmail.localのインストール方法が変わったことです。 これによって、mail.localをメール配送に使用している場合は、 sendmail.cfのMlocalにおいてF=Sフラグを設定する必要があります。 ducca.mcファイルには次の行を追加します。

MODIFY_MAILER_FLAGS(`LOCAL', `+S')dnl

ここまでは通常のメール設定です。 ここからは、/etc/mail/aliasesをはじめとするsendmailの動作に必要な設定が終わっているとして解説を行います。 中継を禁止するには、さらに次の一行を加えます。 これは、メールの転送や中継の制限や、受け取りたくないメールアドレスやドメインを記述します。

FEATURE(`access_db', `hash -o /etc/mail/access')dnl

/etc/mail/accessには、中継を許可するサイトの設定を記述し、 次のようにデータベースを作成します。

# makemap hash /etc/mail/access < /etc/mail/access

この他、メールサーバの本来の動作を行う設定を記述し、 次のようにsendmail.cfを生成します。

% m4 -D_CF_DIR_=./sendmail-8.11.3/cf/cf/ ./sendmail-8.11.3/cf/m4/cf.m4 ducca.mc > sendmail.cf

最後に、sendmailを再起動するか、システムを再起動することによって、 最新のsendmail.cfが読み込まれます。 中継しないことを確認する

設定したサーバが中継するかどうかを確認することが必要です。 これには、abuser.netが提供しているテストによって確認することができます。

Mail relay testing

(2) データベースを参照し禁止する

中継を許可しているサイトを集めたデータベースが存在します。 一種のブラックリストとして考えて良いでしょう。 このデータベースに掲載されているサイトからはメールを拒否する設定も可能です。 このためには、ducca.mcに次の行を追加します。

FEATURE(dnsbl,`inputs.orbs.org')dnl
FEATURE(dnsbl,`outputs.orbs.org')dnl
FEATURE(dnsbl,`dul.maps.vix.com')dnl
FEATURE(dnsbl,`relays.mail-abuse.org')dnl
FEATURE(dnsbl,`rbl.maps.vix.com')dnl

(3) 特定のメールを拒否する

sendmailの設定では、中継を拒否するだけでなく特定のドメインから自サイトに届くメールを拒否することも可能です。 これには、/etc/mail/accessファイルを修正します。 たとえば、以下のように記述します。

[email protected]     REJECT
relay-dom.com            REJECT

拒否する方法はいくつかあります。

  • ドメインを拒否
  • IPアドレスを拒否
  • メールアドレスを拒否
  • ユーザ名を拒否

ドメインを拒否

もし、spamを送るドメイン全体を拒否したい場合は次のように指定します。 これは、sample-spam.comドメインがspamの発信源である、または中継に利用されやすいサーバであり、このドメインから自サイトに対するメールは一切拒否するという場合に使用します。 なお、このドメインは架空のものであるため、実際に拒否するメールアドレスを使用してください。

relay-dom.com            REJECT

IPアドレスを拒否

もし、特定のIPアドレス(192.168.128.1)から自サイトに対するメールは一切拒否するという場合に使用します。 なお、このIPアドレスは架空のものであるため、実際に拒否するIPアドレスを使用してください。

192.168.128.1  REJECT

メールアドレスを拒否

特定のユーザがspamを送信している場合、このユーザから自サイトに対するメールは一切拒否するという場合に使用します。 なお、このメールアドレスは架空のものであるため、実際に拒否するメールアドレスを使用してください。

[email protected]     REJECT

ユーザ名を拒否

spam@といった明らかにspam送信を目的としたユーザ名を全て拒否する場合は次のように指定します。 ただし、この場合はspamを目的としたユーザ以外も拒否するため、 使用には十分注意する必要があります。 また、spam777@といったユーザ名には有効にならない点にも注意しておく必要があります。 spam@ REJECT

(4) 拒否したメール

これらの設定を行うごとにmakemapコマンドによってaccessファイルのデータベースを作成する必要があります。 データベースを作成し、実際に拒否されたメールは、次のようにログに記述されます。ログはFreeBSDの場合/var/log/maillogとなります。 ここには、次のように記述されます。

日時 mail sendmail[2210]: f44FSEe02210: ruleset=check_mail, arg1=, relay=mail.duccaa.com, reject=550 5.7.1 ... Message from [email protected] rejected

もし、拒否せず受信できるようにするためには、/etc/mail/accessから該当行を削除します。 なお、既に拒否したメールは送信者に返されているため、再送信してもらわなければ受信者に配送することはできません。

(5) ユーザ情報列挙の拒否

SMTPのコマンドにはEXPNとVRFYがあります。 つまり、これらを使用すると、そのユーザが存在するかということが分かります。 たとえば、下の赤色部が、 telnetコマンドでSMTPのポートに接続し、EXPNコマンドを入力したところです。

% telnet mail.ducca.org smtp
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.ducca.org ESMTP Sendmail 8.11.3+3.4W/8.11.3; Mon, 3 Mar 2010 21:06:18 +0900 (JST)
HELO www.ducca.org
250 mail.ducca.org Hello localhost [192.168.0.1], pleased to meet you
EXPN yamada
250 2.1.5 YAMADA Taro >[email protected]<

これらを禁止するには、ducca.mcにて、noexpnとnovrfyを定義することが必要です。 このためには、ducca.mcに次の一行を追加します。

define(`confPRIVACY_FLAGS', ``authwarnings,noexpn,novrfy)dnl