ご契約中のお客さま

メール不正中継対策

最近、メールサーバーを運用しているサイトで受け取り先のサーバーとは全く関係のないメール(特にSPAMメール)が第三者によって送り付けられ、これを受け取ったサーバーが本来必要のないメール配送(中継)処理をさせられてしまう場合が増えています。
これは、第三者によってサーバーの電子メール配送プログラム(sendmail等)が不正に利用されていることになり、下記に記述しているような問題が起こる可能性があります。
このような問題がお客様のサーバー等で発生しないようにするためには、サーバーを管理しているお客様ご自身で現状を確認して頂き、ご使用のサーバー環境に応じた対策をご検討して頂く必要があります。

メール中継を不正に利用されることで発生する問題

  • SPAMメールの踏台(中継地)として利用され、SPAMメールを受け取ったサイト(受信者)から苦情や問い合わせ等のメールを多数受け取り、その対応に時間と稼動が費やされることになります。
  • 特に不特定多数宛てのSPAMメールを一度に受け取ることで、メール配送処理に対する負荷が大きくなり、サーバーのパフォーマンスが著しく低下する場合があります。これによって、正常なメール配送処理に支障が生じて自サーバーのサービス低下を招くことになります。また、ネットワーク上のトラヒックを大量に浪費してしまうことにもなります。
  • メール中継の不正利用を許容(放置)しているサイトとして、独自に調査しているサイトのブラックリストに登録される可能性があり、このリストを使用してメール配送やその他のアクセス制限を行っているサイトとの通信ができなくなる場合もあります。

メール中継を不正に利用される可能性があるか?

ご使用の電子メール配送プログラムで、メール中継に関する制限を設定していない場合、不正に利用される可能性があります。

メール中継を不正に利用されているか?

サーバーにおいてメール送受信情報が記録されているログを確認し、サーバーがメールを受け取った後、送信先アドレスが自サイトとは無関係なものであっても全て送信(中継)処理を行っている場合、メール中継が不正に利用されている可能性があります。

sendmail ログの場合(例)

Sep 13 20:00:00 myhost sendmail[14300]: UAA14300: from=<user1@spammer.co.jp>, size=600, class=0,
pri=30600, nrcpts=1, msgid=<ooo.ooo@sv.spammer.co.jp>, proto=ESMTP, relay=sv.spammer.co.jp [xxx.xxx.xxx.xxx]

Sep 13 20:00:01 myhost sendmail[14301]: UAA14300: to=<user2@hogehoge.com>, delay=00:00:01, xdelay
00:00:01, mailer=esmtp, relay=host.hogehoge.com. [xxx.xxx.xxx.xxx], stat=Sent

xxx.xxx.xxx.xxx:IP Address
自サイトドメイン:mydomain.co.jp
自サイトホスト:myhost

上記の例では、

接続元サーバー relay= [sv.spammer.co.jp]
送信元アドレス from= [user1@spammer.co.jp]
から
送信先アドレス to= [user2@hogehoge.com]
接続先サーバー relay= [host.hogehoge.com]

へメール中継が行われたことになります。

電子メールの不正中継対策例

メール中継を不正に利用されないためには、電子メール配送プログラムにおいてメール中継の制限を行う必要があります。
基本的な設定例を、国内で多く利用されている電子メール配送プログラムの sendmailを使って以下に紹介いたします。
なお、ここで紹介する対策はあくまで一例ですので、お客様がご使用になっている電子メール配送プログラムや管理ポリシーに応じて、それぞれ設定してくださいますよう願い致します。

1. 今回の例では、以下のポリシーに基づき制限を行うこととします

  • 自サイト内のからのメール配送(受信、中継)は、無条件で許可
  • 他サイトからのメール配送(受信、中継)は、自サイト宛しか受け取らない
  • 他サイトから他サイトへのメール中継は拒否

2. sendmail と sendmail.cf ファイル

sendmail-8.8.x 以降から、メール配送制限機能(relay_check)が実装され、この機能にあるルールセット(check_relay,check_mail,check_rcpt,check_compat)を、メール配送処理に関するルールが記述されている sendmail.cf に設定することで、メール中継制限を行うことが可能になります。
なお、このルールセットは sendmail-8.7.x 以下では使用できません。
今回は、sendmail.cf を CFパッケージ(WIDE Sendmail.cf Generation Pakage)を使用して生成します。

3. 設定ファイルについて

以下の(a)-(c)で使用するディレクトリ先とファイル名は任意とし、ファイルに記述する IPアドレス、ドメイン名は使用する環境に合わせて設定して下さい。

(a)/etc/mail/LocalIP
ファイル内に記述された、ホストとネットワークアドレスからのメール受信、中継を無条件で許可し、設定されたアドレスと一致すると(c)の設定内容とのチェックは行われない。
一般的に、自サイト内に関連する。

/etc/mail/LocalIP(例)

192.168.69.2 ←端末のアドレス単位で許可
192.168.69.3 ←同上
192.168.68 ←ネットワーク単位で許可(192.168.68/24)

(b)/etc/mail/LocalDomain
ファイル内に記述された、ドメインからのメール受信、中継を無条件で許可し、設定されたアドレスと一致すると(c)の設定内容とのチェックは行われない。
一般的に、自サイト内に関連するDNS上に登録されたドメインを記述します。

/etc/mail/LocalDomain(例)

sample1.co.jp ← *.sample1.co,jp ドメインを許可
sample2.co.jp ← *.sample2.co.jp ドメインを許可

(c)/etc/mail/RelayTo
ファイル内に記述された、ドメインへのメール配送を許可する。一般的に、自サイトに関連するドメインを記述します。

/etc/mail/RelayTo(例)

sample1.co.jp ← *.sample1.co,jp ドメインを許可
sample2.co.jp ← *.sample2.co.jp ドメインを許可

(d)機能定義ファイル(*.def)
CFパッケージの生成時に元となる定義ファイル(例:sendmail.def)を、CFパッケージが置かれているディレクトリに作成します。
機能定義ファイルの詳細は、CFに附属しているdoc/MANUAL.janを参照して下さい。機能定義ファイル(*.def)のテンプレートは、Standards/配下にそれぞれあります。
CFパッケージは、CF-3.7Wpl2(現時点の最新版)を使用しております。機能定義ファイルは、各サイトの環境に合わせて作成して下さい。
(*)印は、デフォルト設定です。。

sendmail.def(例)

(*1) CF_TYPE=R8V7
(*2) OS_TYPE=solaris2.6
(*) MX_SENDMAIL=yes
(*3) MY_DOMAIN='sample1.co.jp'
(*4) MY_NAME='host'
(*5) OFFICICAL_NAME='$w.$m'
(*) FROM_ADDRESS='$j'
(*) DIRECT_DELIVER_DOMAIN=all
  COPY_ERRORS_TO='postmaser'
  ALIAS_FILE_PATH='/etc/mail/alias'
  HELP_FILE_PATH='/etc/mail/sendmail.hf'

# 以下は、中継制限に関する変数部分です。
 (*) MAIL_RELAY_RESTRICTION=yes
   LOCAL_HOST_IPADDR=/etc/mail/LocalIP
   LOCAL_HOST_DOMAIN=/etc/mail/LocalDomain
   ALLOW_RELAY_TO=/etc/mail/RelayTo

#####################################################
(*1) sendmail-8.8.x の場合 (sendmail-8.9.x の場合は、CF_TYPE=R8V8)
(*2) ご使用の OS と Version
(*3) ドメイン名
(*4) ホスト名
(*5) FQDN (Fully Qualified Domain Name)
#####################################################

4. sendmail.cfの生成

使用するsendmailのバージョン(8.8.x または 8.9.x)に合わせて(d)で作成した機能定義ファイル(sendmail.def)を元に、sendmail.cfファイルの生成を行なう。(生成時は、perlが必要になります。)
CF3.7Wpl2 ディレクトリで % make [機能定義ファイル.cf] を実行します。(make コマンドのパスは、ご使用の環境に合わせて実行してください。)

% cd /CF3.7Wpl2
% /usr/ccs/bin/make sendmail.cf

生成した sendmail.cf は動作確認後、所定のディレクトリへ置く。
【例】/etc/mail/sendmail.cf

5. メール中継制限の動作確認

sendmailを test modeで起動し、生成した sendmail.cfを指定する。
【例】 % /usr/lib/sendmail -bt -C/CF-3.7Wpl2/sendmail.cf

5-1. check_mailルールセットのテスト(発信者アドレス[MAIL FROM:]に関するチェック)

今回の制限条件では、メールの発信者制限は行なっていないので全て許可となる。

[SMTP接続元 (MAIL FROM:)]
1)自アドレス(自ドメイン)---- ○ ----> 許可
2)他アドレス(他ドメイン)---- ○ ----> 許可

(a-1)SMTP接続元ホスト情報の指定(他サイト)
ファイル内に記述された、ドメインへのメール配送を許可する。一般的に、自サイトに関連するドメインを記述します。

host.test.co.jp [192.168.80.10] を指定する場合

(*1) > .D{client_addr}192.168.80.10
(*2) > .D{client_name}host.test.co.jp
(*3) > ${client_addr}
   192.168.80.10
(*4) > ${client_name}
   host.test.co.jp

#####################################################
(*1) IPアドレスの設定 = 192.168.80.10
(*2) ホスト名の設定 = host.test.co.jp
(*3) 設定したIPアドレスの確認
(*4) 設定したホスト名の確認
#####################################################

(a-2)動作確認
ファイル内に記述された、ドメインへのメール配送を許可する。一般的に、自サイトに関連するドメインを記述します。

> check_mail user@host.test.co.jp

#####################################################
MAIL FROM:で受け取るアドレス = user@host.test.co.jp
#####################################################

rewrite: ruleset 199 returns:OK で終れば許可
rewrite: ruleset 199 returns:$# error ... で終れば拒否

(b-1)SMTP接続元ホスト情報の指定(自サイト)
ファイル内に記述された、ドメインへのメール配送を許可する。一般的に、自サイトに関連するドメインを記述します。

myhost.sample1.co.jp [192.168.69.2] を指定する場合

(*1) > .D{client_addr}192.168.69.2
(*2) > .D{client_name}myhost.sample1.co.jp
(*3) > ${client_addr}
   192.168.69.2
(*4) > ${client_name}
   myhost.sample1.co.jp

#####################################################
(*1) IPアドレスの設定 = 192.168.69.2
(*2) ホスト名の設定 = myhost.sample1.co.jp
(*3) 設定したIPアドレスの確認
(*4) 設定したホスト名の確認
#####################################################

(b-2)動作確認
ファイル内に記述された、ドメインへのメール配送を許可する。一般的に、自サイトに関連するドメインを記述します。

> check_mail user@host.test.co.jp

#####################################################
MAIL FROM:で受け取るアドレス = user@myhost.sample1.co.jp
#####################################################

rewrite: ruleset 199 returns:OK で終れば許可
rewrite: ruleset 199 returns:$# error ... で終れば拒否

5-2. check_rcptルールセットのテスト(受信者アドレス[RCPT TO:]とメール中継に関するチェック)

発信元が /etc/mail/LocalIP または /etc/mail/LocalDomain で設定したアドレスまたは、ドメインと一致している場合、無条件で受信、中継を許可する。
一致していなければ、[RCPT TO:]で受け取る受信者のアドレスと /etc/mail/RelayTo で設定したドメインとを比較して、一致していれば受信、中継を許可する。それ以外は、拒否をする。

[SMTP接続元 (MAIL FROM:)]      [受信先 (RCPT TO:)]
1)自アドレス(自ドメイン)---- ○ ----> 自サイト
2)自アドレス(自ドメイン)---- ○ ----> 他サイト
3)他アドレス(他ドメイン)---- ○ ----> 自サイト
4)他アドレス(他ドメイン)---- × ----> 他サイト

(a)SMTP接続元ホスト情報の指定
ファイル内に記述された、ドメインへのメール配送を許可する。一般的に、自サイトに関連するドメインを記述します。

host.test.co.jp [192.168.80.10] (他サイト)を指定する場合

(*1) > .D{client_addr}192.168.80.10
(*2) > .D{client_name}host.test.co.jp
(*3) > ${client_addr}
   192.168.80.10
(*4) > ${client_name}
   host.test.co.jp

#####################################################
(*1) IPアドレスの設定 = 192.168.80.10
(*2) ホスト名の設定 = host.test.co.jp
(*3) 設定したIPアドレスの確認
(*4) 設定したホスト名の確認
#####################################################

(b)発信者のメールアドレス(MAIL FROM:で渡されるもの)の指定

user@host.test.co.jp を指定する場合

.Df と 値 の間にスペースをいれないように。

(*1) > .Dfuser@host.test.co.jp
(*2) > $f
   user@host.test.co.jp

#####################################################
(*1) 発信者の指定 = user@host.test.co.jp
(*2) 指定した発信者の確認
#####################################################

(c)動作確認

> check_rcpt user@sample1.co.jp

#####################################################
RCPT TO: で受けるアドレス = user@sample1.co.jp
#####################################################

rewrite: ruleset 194 returns:OK で終れば許可
rewrite: ruleset 194 returns:$# error ... で終れば拒否

ページトップへ戻る