- PR -

qmailの外部ネットワークからのSMTPについて

1
投稿者投稿内容
nanasisu
会議室デビュー日: 2004/12/22
投稿数: 10
投稿日時: 2005-06-17 12:00
FedoraCore3を使用し、qmailをインストールして
メールサーバとして使用しています。

下記のようなローカルアドレスを騙って、
ローカルアドレス宛てにメールを送信されています。
(自ドメインはhoge.co.jp)

--------
Return-Path: <webmaster@hoge.co.jp>
Received: (qmail 27694 invoked from network); 16 Jun 2005 09:50:14 +0900
Received: from XXX.tekito.co.jp (HELO hoge.co.jp) (XXX.XXX.XXX.XXX)
by ml.aaaa.co.jp with SMTP; 16 Jun 2005 09:50:14 +0900
From: webmaster@hoge.co.jp
To: myname@hoge.co.jp
Subject: Notice: **Last Warning**
--------

内容を確認するとウィルスメールなので、
また送信元ホストについては顧客先のクライアントPCなので、
ウィルスを除去するようにお願いすればいいのでしょうが、
サーバ側で対処する事はできないでしょうか。

また同じような事を自PCで試したところ、
ローカルアドレス宛てであれば外部ネットワークからでも
Fromを偽って送信できるようです。

利用者に一斉連絡するためのアドレスなので、
外部の適当な人間に使用されると困りますし、
かといってbadmailfromで拒否設定にすると、
メールそのものが取れなくなって困ってしまいます。

例えばある送信元メールアドレス(Fromヘッダ)については、
内部ネットワークからのSMTP要求なのか
外部ネットワークからのSMTP要求なのかを確認して
サーバ自体で拒否するような方法はないのでしょうか。

どなたかご教授頂けますよう、よろしくお願い致します。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-06-17 12:43
こんにちは。
引用:
ローカルアドレス宛てであれば外部ネットワークからでも
Fromを偽って送信できるようです。


From にしても、Return-Path の元となる envelope-from にしても、メール送信者の自己申告制なので、現状仕方の無い所ですね…。
引用:
例えばある送信元メールアドレス(Fromヘッダ)については、
内部ネットワークからのSMTP要求なのか
外部ネットワークからのSMTP要求なのかを確認して
サーバ自体で拒否するような方法はないのでしょうか。


ネットワーク情報で条件を変える方法としては、tcpserver の -x オプションを使用する手があるのですが、qmail-smtpd の badmailfrom との連携はできないように思います。

もし標準の qmail で対応するのであれば、思いつくのは 2インスタンス使い分ける方法になるでしょうか…。

○qmailインスタンス1
・従来の設定を引き継ぐ
・もう一つのインスタンスとの連携用に qmtpd サーバも起動する
・ただし、qmail-smtpd は、ローカルネットワーク専用の tcpserver で起動する。

○qmailインスタンス2
・ミニqmailを別途インストールし、受け付けたメールは qmailインスタンス1 へ、QMQPで転送する。
・自ドメイン宛以外のメールは拒否する
・badmailfrom で特定の送信者を弾く
・qmail-smtpd は、外向けネットワーク専用の tcpserver で起動する。

なお、2つのインスタンス用に tcpserver を使い分けるにあたって、IPアドレスやポート番号を分離できない場合には、もう一工夫必要です。

一つは、
・公開するアドレス・ポートは共通のものとして、送信元ネットワークに応じて適切な tcpserver へ通信がいくよう、iptables の NAT機能を使い宛先アドレス・ポートを変更する。

もう一つは、今思いついただけで、できるかどうか試したことはないのですが、
・tcpserver プロセス自体を共有し、-x オプションで、送信元ネットワークに応じて PATH変数を調節する。( これにより、起動する qmail-smtpd の場所を調節する )

以上、ご参考まで。

[ メッセージ編集済み 編集者: angel 編集日時 2005-06-17 12:58 ]
nanasisu
会議室デビュー日: 2004/12/22
投稿数: 10
投稿日時: 2005-06-17 13:30
早速のご回答ありがとうございます。

引用:-------------------------------------------------------------------

ネットワーク情報で条件を変える方法としては、tcpserver の -x オプションを使用する手があるのですが、qmail-smtpd の badmailfrom との連携はできないように思います。

--------------------------------------------------------------------------

qmailの設定ファイル関連だけでは、ipアドレスレベルでの制御や
送信元ホスト名での制御はできないのですね。

引用:-------------------------------------------------------------------

もし標準の qmail で対応するのであれば、思いつくのは 2インスタンス使い分ける方法になるでしょうか…。

--------------------------------------------------------------------------

内部ネットワーク(以下NW)用のqmailと外部NW用のqmailを2つたてて、
外部NW用qmailから内部NW用qmailに転送させるときに、badmailfromではじくという事でしょうか。
1つのサーバ上でやるとなると、やはりかなり難解な手順がいるようですね。
詳細の方、ありがとうございます。

また他のメールサーバではどうされているのでしょうか?
qmailだからこのような事ができてしまうのでしょうか?
ゲートウェイ等のメールサーバ直前で制御されているのでしょうか。
もしメールサーバの運用をされている方で現状を教えていただけたら幸いです。
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2005-06-17 15:29
引用:

nanasisuさんの書き込み (2005-06-17 12:00) より:
利用者に一斉連絡するためのアドレスなので、
外部の適当な人間に使用されると困りますし、
かといってbadmailfromで拒否設定にすると、
メールそのものが取れなくなって困ってしまいます。



こういったメールアドレスはメーリングリストのソフトを使います。
moderate機能があるものであれば審査を通らなければバラまけませんから。

ま、審査員はメールを受けるので後ろ向きかも知れませんが
受けるメールの数はグッと減りますよね。
内外を判別出来たとしても内側の人間が
いらんことしないとは限りませんから。


あとは転送方法をどうやっているか分かりませんが
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17451&forum=10
このあたりを参考にして良い感じのdot-qmailを書いてみるとか。

| except condredirect hoge0@example.com grep -q '内部からって判別する正規表現'
&hoge1@example.com
&hoge2@example.com
.
.
.

パスは環境に合わせて下さい。
exceptしているのは1行転送処理したら終わってしまうので。
逆に条件に合わなければハードエラーになるので処理終了です。
判定処理は一回で済みますからgrep部分はperlスクリプトあたりで
書いてしまうのもありかもしれません。

本文からは判別出来ないでしょうけどヘッダに特徴があればいけるのでは?
こんな処理は実際にはやってはいないのでご参考まで。

nanasisu
会議室デビュー日: 2004/12/22
投稿数: 10
投稿日時: 2005-06-18 00:03
確認するのが遅くなりましたが、
anights様、ご回答ありがとうございます。

-------------------------------------------------------------

こういったメールアドレスはメーリングリストのソフトを使います。
moderate機能があるものであれば審査を通らなければバラまけませんから。

-------------------------------------------------------------

確かに利用者への配信自体は、メーリングリストのソフト(fml)を利用して、
行っています。そしてその発信元アドレスとして、webmaster等のアドレスを
使用しています。

従って、メーリングリストを使用しての一斉配信は
決められた人間しか行えません。

自分の認識違いであれば申し訳ないのですが、dot-qmailファイルは
確か宛先がそのアドレスであった場合にどこに転送するかを
表記するファイルと思っていたのですが、
設定次第で着たメールの送信元(From)を判断する事ができるという事
なのでしょうか?

他のNWの人間がメーリングリストを悪用して、
一斉配信を行う事はできないと思っています。(管理者でない限り)
ただfromを詐称して、個別にメールを送りつける事はできます。
これを止めたいと思っています
nanasisu
会議室デビュー日: 2004/12/22
投稿数: 10
投稿日時: 2005-06-18 00:10
qmailの2インスタンス化ですが、とりあえず2台サーバをたててみて、
1台は外部ネットワーク用、もう1台はローカルネットワーク用として、
設定してみました。
tcp.smtp.cdbで自PCを他ネットワークとして確認してみましたところ、
確かに拒否する事ができました。
ありがとうございます。

あとはiptablesやqmtpdを利用して1サーバ内で
処理させるという点です。
試行錯誤しながら確認してみたいと思います。
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2005-06-18 21:34
引用:

また他のメールサーバではどうされているのでしょうか?
qmailだからこのような事ができてしまうのでしょうか?
ゲートウェイ等のメールサーバ直前で制御されているのでしょうか。
もしメールサーバの運用をされている方で現状を教えていただけたら幸いです。



まず、私が対処するならpostfixでリレーサーバを立てて
(まあ、同じサーバ内でポートでリレーでもいいですけど)
smtpd_sender_restrictionsを正しく設定すれば
envelope fromの自ドメイン詐称は拒否出来ますし。
FROMヘッダの方はネットワークの条件と
併せてチェック出来なかった気がするので(header_checks)微妙ですが
まあ、angelさんがおっしゃっているように何でもありな所ですから
ほっときます。

引用:

nanasisuさんの書き込み (2005-06-18 00:03) より:
自分の認識違いであれば申し訳ないのですが、dot-qmailファイルは
確か宛先がそのアドレスであった場合にどこに転送するかを
表記するファイルと思っていたのですが、
設定次第で着たメールの送信元(From)を判断する事ができるという事
なのでしょうか?



まずは、こちらを。
http://man.qmail.jp/jman8/qmail-command.html

別にqmailに限らずdot-forwardファイルを扱うMTAでもコマンドに
渡せるのは同じですが。。。

まあ、要するにdot-qmailファイルからコマンドを呼び出した場合は
標準入力経由でメッセージそのものが渡されますので
その中身を見て判別すればいいのでは?と。

Receivedヘッダに経路の特徴は出ますし。
tcpserverに与えるcdbファイルでTCPREMOTEHOSTなんかの環境変数を
コントロールしてあげればネットワーク判定ももっと楽ですよ。
1

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