- PR -

存在しないユーザへのメールを受信しない為には?

投稿者投稿内容
linux
ベテラン
会議室デビュー日: 2005/10/24
投稿数: 50
投稿日時: 2005-10-24 14:55
サーバA、Bの環境
OS:fedoracore3
mta:sendmail8.13

現在メールサーバが2台あります。
インターネット側からイントラネット側へのメールは、サーバAがまとめて受信し、
smart_host機能を使ってサーバBメールを転送しています。
サーバAにユーザはおらず、全てサーバBにユーザが登録されています。

ここで、存在しないユーザへのspamメールが多く送られて、困っております。
通常であれば、存在しないユーザへのメールは受信拒否したいところなのですが、
サーバAはsmart_hostで転送を行っているだけなので、受信したメールは
全て無条件にサーバBに送ってしまいます。

そこで、サーバBに存在しないユーザは、サーバAで受信を拒否したいのですが、
どなたか実現方法をご存知でしたらご教授下さい。
よろしく御願い致します。
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-10-24 15:26
どもです。がると申します。

まず質問なのですが。
「受信を拒否」というのは、どのような挙動を想定していますでしょうか?
1.user unknownで送り元に丁重に突っ返す
2.送り元には告知しないが、例えばpostmasterなどのアドレスに転送する
3.音もなく破却してしまう

1番はよくあるパターンですが、SMTPのやり取りレベルで細工されると、
間接的にspamを送りつけてしまう可能性があります。
2番も多分割合におおいパターンですが、管理者の手間が、場合に
よっては半端じゃなくなります。
3番も耳にしますが、万が一「本当にちょっと間違えただけ」といった
ケースの場合に、特に会社だとトラブルの元になりやすいです。

いずれも長短ありますので、運用実態にそったチョイスが重要
かと思われます。

次に。「サーバAで破却する」必要が本当にあるでしょうか?
もちろん「ネットワークトラフィック的に優位」であることは
確かなのですが。
サーバAが「存在するユーザかどうか」を判断するためには、
常にサーバBとのデータ同期が必須になります。
言い方を変えると、データの二重管理ですね。

技術的に可能(なので探せば製品があるかも…)な範疇で考えても、
サーバBとの通信が発生するので、やはりトラフィック的には
さほどメリットがないような(0ではないと思いますが)。

メールサーバを二台に切り分けている理由にもよるのですが。
もしセキュリティ的な発想だとすると、より危険なサーバAに
ユーザデータが(どのような形跡にせよ)存在するのは少々危険で
あるように思われるのですがどんなもんでしょうか?

ぜんぜん回答になってなくて申し訳ないのですが。
linux
ベテラン
会議室デビュー日: 2005/10/24
投稿数: 50
投稿日時: 2005-10-24 15:51
がるさん、レスありがとうございます。

>「受信を拒否」というのは、どのような挙動を想定していますでしょうか?
>1.user unknownで送り元に丁重に突っ返す
>2.送り元には告知しないが、例えばpostmasterなどのアドレスに転送する
>3.音もなく破却してしまう
この1.のuser unknownで送り返してしまうというのが望ましいのです。
なぜかと申しますと、
1.サーバAで受け取ったメールをサーバBに転送する

2.サーバBで宛先無しとして、サーバAに返す

3.サーバAも送信元に送信しようとするのですが、spamメールの送信元が
 架空のアドレスだった場合、そこで宛先無しとして再度サーバBへ
 返送される

4.サーバBで宛先無しとして、再度サーバAに・・・
この3.と4.の繰り返しが果てしなく続き、ヘッダだけが膨大に膨れたメールが
最終的にpostmaster宛に届き、ログ管理が行えない状況に陥ります。

また、おっしゃる通り、セキュリティ上、極力サーバAへはユーザ情報を
持たせないようにしています。

どうにかしてサーバBに存在しないユーザ宛のメールを、
サーバAで転送せずに、userunknownで送り元に丁重に突っ返したいのです。

実現方法をご存知でしたら、どうぞお教え下さい。
linux
ベテラン
会議室デビュー日: 2005/10/24
投稿数: 50
投稿日時: 2005-10-24 15:52
がるさん、レスありがとうございます。

>「受信を拒否」というのは、どのような挙動を想定していますでしょうか?
>1.user unknownで送り元に丁重に突っ返す
>2.送り元には告知しないが、例えばpostmasterなどのアドレスに転送する
>3.音もなく破却してしまう
この1.のuser unknownで送り返してしまうというのが望ましいのです。
なぜかと申しますと、
1.サーバAで受け取ったメールをサーバBに転送する

2.サーバBで宛先無しとして、サーバAに返す

3.サーバAも送信元に送信しようとするのですが、spamメールの送信元が
 架空のアドレスだった場合、そこで宛先無しとして再度サーバBへ
 返送される

4.サーバBで宛先無しとして、再度サーバAに・・・
この3.と4.の繰り返しが果てしなく続き、ヘッダだけが膨大に膨れたメールが
最終的にpostmaster宛に届き、ログ管理が行えない状況に陥ります。

また、おっしゃる通り、セキュリティ上、極力サーバAへはユーザ情報を
持たせないようにしています。

どうにかしてサーバBに存在しないユーザ宛のメールを、
サーバAで転送せずに、userunknownで送り元に丁重に突っ返したいのです。

実現方法をご存知でしたら、どうぞお教え下さい。
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-10-24 17:10
どもです。がるです。
少々引用が前後しますが。

引用:

また、おっしゃる通り、セキュリティ上、極力サーバAへはユーザ情報を
持たせないようにしています。


という場合、

引用:

どうにかしてサーバBに存在しないユーザ宛のメールを、
サーバAで転送せずに、userunknownで送り元に丁重に突っ返したいのです。


の実現はセキュリティ的な問題を孕んでしまうので、少々
しんどいように思われます。
ひとつには「VRFY コマンドによる確認」という手段がありまして。
サーバAが受信したときに
・サーバBに対してVRFYコマンドを発行、ユーザ確認
・unknownであれば突っ返す
というのが技術的には可能かとは思われるのですが。
ちょっとソフトウェア、もしくは設定としてそのような挙動を
するものを知らないので。
# どなたか、そーゆー挙動をするものをご存知でしたら是非。

もうひとつ、代案なのですが。
拝見している限りですと、
引用:

この3.と4.の繰り返しが果てしなく続き、ヘッダだけが膨大に膨れたメールが
最終的にpostmaster宛に届き、ログ管理が行えない状況に陥ります。


というのを回避したいというのが要求であるように思われます。
だとすると、もうちょっと楽に出来るかもしれません。

ちょっと細かく流れを。
1.サーバAで受け取ったメールをサーバBに転送する
From 嘘アドレス@嘘ドメイン To 嘘アドレス@サーバBドメイン

2.サーバBで宛先無しとして、サーバAに返す
From MAILER-DAEMON?@サーバBドメイン To 嘘アドレス@嘘ドメイン

3.サーバAも送信元に送信しようとするのですが、spamメールの送信元が
 架空のアドレスだった場合、そこで宛先無しとして再度サーバBへ
 返送される
From 嘘アドレス@嘘ドメイン To MAILER-DAEMON?@サーバBドメイン

…という流れになるです。

だとすると、取り合えず「MAILER-DAEMONユーザのメールが受け取れる」
ようにしておくとよいのではないでしょうか?
まぁ受信メールはかなり速やかに膨れ上がるであろうとは思うのですが。

MAILER-DAEMONアカウントについては
・当面は毎日手でチェックあるいは削除(削除onlyならcronでもよいのかも)

という手段で、ある程度運用回避できるように思われます。
あとは抜本的には「smap対策」なんでしょうねぇ。大変だとは
思うのですが。

あいも変わらず、ちょっと斜め下な回答で恐縮ですが。
linux
ベテラン
会議室デビュー日: 2005/10/24
投稿数: 50
投稿日時: 2005-10-24 18:41
がるさん、レスありがとうございます。

vrfyを調べてみましたが、sendmail.mcにほぼデフォルトで
下記設定が入っており、利用できなそうです。
define(`confPRIVACY_FLAGS', ``authwarnings,noexpn,novrfy'')

おっしゃるとおり、From 嘘アドレス@嘘ドメイン To MAILER-DAEMON?
@サーバBドメイン で受け取り、他ユーザに転送する事にしました。

また、代替案として、もうひとつ、お聞きしたいのですが、
メールサーバAがメールを中継する際に、発信元のドメイン名が
実在するか、もしくはメールアドレスが実在するかをチェックする事は
できますでしょうか。


がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-10-24 22:08
どもです。がるです。
引用:

vrfyを調べてみましたが、sendmail.mcにほぼデフォルトで
下記設定が入っており、利用できなそうです。
define(`confPRIVACY_FLAGS', ``authwarnings,noexpn,novrfy'')


はい。
書いておいてなんですが。
現在、VRFYは大抵のサーバで弾かれます(苦笑
結局「spam用メール収集コマンド」と化しつつ
あるので。現在。

引用:

また、代替案として、もうひとつ、お聞きしたいのですが、
メールサーバAがメールを中継する際に、発信元のドメイン名が
実在するか、もしくはメールアドレスが実在するかをチェックする事は
できますでしょうか。


ドメイン名のチェックは…出来るはずです。
ちとsendmailでのやり方をちゃんと把握していないのですが。
技術的には
・MXレコードの確認
・逆引きの確認
あたりを行うことで可能なはずです。

メールアドレスの実在チェックは難しいっていうより
基本的に無理だと思うです。
上のVRFYの話しにつながってしまうので。

なにかもうちょっとよいアイデアが出せると
よいのですが。
思いついたらまた書き込んでみますね ^^
zume
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 93
投稿日時: 2005-10-25 00:08
zumeです。

ご質問のsendmailに直接の回答ではなく申し訳ありません。

もしpostfixでも構わないという事あれば以下のパラメータを設定すれば
ご希望されている事が可能です。
(サーバBに存在しないアカウントは、前段の中継サーバであるAで全て
”550 <aaa@example.com>: User unknown in relay recipient table”
のように返すことが可能です)

・relay_domains パラメータ
・relay_recipient_maps パラメータ

ただ、どうしてもsendmailでという事であれば、以下のページで逆引きしては
どうでしょうか?
一応sendmail(CF)からpostfixへの移行を説明したページですが、sendmailの
変数名は拾えるはずです。

http://www.kobitosan.net/postfix/origdocs/cf-compat.html#top

スキルアップ/キャリアアップ(JOB@IT)