Top過去ログ目次掲示板

作成日:2005年09月16日 作成:おやじ
掲示板で過去に質問された内容です。

No.5165 送信者gotoniによるメール送信制限


No.5165 投稿時間:2005年09月16日(Fri) 22:07 投稿者名:まっきー URL:
タイトル:送信者gotoniによるメール送信制限

はじめまして。

メールサーバーにて送信者によるメール送信制限というものは可能なのでしょうか?
具体的に申しますと、
送信者:aaa@bbb.comの人は、bbb@zzz.com,ccc@fff.co.jp宛にしか送信をできなくするようなことは可能なのでしょうか?
情報漏えい等の問題に対処するため、各fromアドレスにて送信先を限定させるようにしたいのです。

もし、可能かどうかご存知の方がいらっしゃいましたら、よろしくお願いいたします。
なお、SMTPサーバーにはqmailもしくはPostfixを考えています。
実際の運用はMs ExchangeサーバーからSmarthostにてqmail,Postfixなどのメールサーバーに転送し、そこで制限をかけたいと思っています。

どうぞ、よろしくお願いいたします。


No.5167 投稿時間:2005年09月16日(Fri) 22:29 投稿者名:まっきー URL:
タイトル:送信者ごとに受信者を制限してのメール送信

すみません。編集途中に誤ってEnterキーを押してしまい、中途半端なまま投稿されてしまいました。

正しくは、「送信者ごとに受信者を制限してのメール送信」です。

Postfixなら可能かと思い、いろいろ調べてみましたところ、
smtpd_recipient_restrictions
permit_auth_destination
などを用いれば実現可能のような気がしますが、よくわかりません。

苦肉の策?として、main.cfを下記のように設定してみました。

MS Exchange ServerからのすべてのメールをPostfixに中継し、すべてのメールをtemp@mail2.hoge.comに転送するようにしました。
smtpd_client_restrictions =
check_client_access hash:/usr/local/etc/postfix/reject_client

[reject_client]
192.168.0.100 REDIRECT temp@mail2.hoge.com

そして、.fowardにてtemp@mail2.hoge.com宛てのメールをPHPプログラムに転送し、ヘッダーを解析し、MySQLに登録されてある情報に従って、再配送するというものです。
この方法であれば、誰がどこにどのようなメールを送信したのかログも残せるので、なかなか良いなと思いました。
最初はうまく動作しているように思いましたのですが、この方法ではBCCアドレスに配信できないことが判明しました。
そうです。BCCメールにはToヘッダが存在しません。
仕方なく、この方法をあきらめようと思います。

Postfixの標準機能でこのような制限は可能なのでしょうか?
また、他のメールサーバーでも構いませんので情報をお待ちしております。


No.5169 投稿時間:2005年09月17日(Sat) 09:35 投稿者名:おやじ URL:
タイトル:Delivered-To: では?だめですか?

> Postfixなら可能かと思い、いろいろ調べてみましたところ、
> smtpd_recipient_restrictions
> permit_auth_destination
> などを用いれば実現可能のような気がしますが、よくわかりません。
>
> 苦肉の策?として、main.cfを下記のように設定してみました。
>
> MS Exchange ServerからのすべてのメールをPostfixに中継し、すべてのメールをtemp@mail2.hoge.comに転送するようにしました。
> smtpd_client_restrictions =
> check_client_access hash:/usr/local/etc/postfix/reject_client
>
> [reject_client]
> 192.168.0.100 REDIRECT temp@mail2.hoge.com
>
> そして、.fowardにてtemp@mail2.hoge.com宛てのメールをPHPプログラムに転送し、ヘッダーを解析し、MySQLに登録されてある情報に従って、再配送するというものです。
> この方法であれば、誰がどこにどのようなメールを送信したのかログも残せるので、なかなか良いなと思いました。
> 最初はうまく動作しているように思いましたのですが、この方法ではBCCアドレスに配信できないことが判明しました。
> そうです。BCCメールにはToヘッダが存在しません。
> 仕方なく、この方法をあきらめようと思います。

Delivered-To: では?だめですか?

> Postfixの標準機能でこのような制限は可能なのでしょうか?
> また、他のメールサーバーでも構いませんので情報をお待ちしております。

標準機能では無理と思います。
なお、転送についてはフィルタ機能を使ってコントロールされたらどうですか?
フィルタの例は、おやじの例で言えばAntiVirを通したり、spamassassinでSPAM除去をしているのと同じ原理です。フィルタにまわす方法は下記にあります。

 http://www.kobitosan.net/postfix/trans-2.1/jhtml/FILTER_README.html

・AntiVirでの例
 http://www.aconus.com/~oyaji/suse/antivir_suse.htm
・Spamassassinでの例
 http://www.aconus.com/~oyaji/suse9.2/smtp-mysql-spamassassin-suse.htm


No.5187 投稿時間:2005年09月19日(Mon) 22:08 投稿者名:まっきー URL:
タイトル:Re: Delivered-To: では?だめですか?

おやじさん。アドバイスありがとうございます。

> > そうです。BCCメールにはToヘッダが存在しません。
> > 仕方なく、この方法をあきらめようと思います。

> Delivered-To: では?だめですか?
上記のような転送方法では、
Delivered-To: temp@mail2.hoge.comとなってしまい元の送信先がわかりません。

> > Postfixの標準機能でこのような制限は可能なのでしょうか?
> > また、他のメールサーバーでも構いませんので情報をお待ちしております。
>
> 標準機能では無理と思います。
やはりそうですか。Postfixに関するいろいろなサイトを閲覧してみたのですが、このような事例が載っていません。(必要がないのかもしれませんが...。)
私がもしかしたら可能かも?と思ったのは下記のサイトの「サイト外にメールを送信できるユーザを制限したい」という段落の中で「一つにはどのユーザがどこにメールを送ることができるかを定義し...」という文言を見つけたからです。
http://www.kobitosan.net/postfix/jhtml/faq.html#relay_restrict

> なお、転送についてはフィルタ機能を使ってコントロールされたらどうですか?
> フィルタの例は、おやじの例で言えばAntiVirを通したり、spamassassinでSPAM除去をしているのと同じ原理です。フィルタにまわす方法は下記にあります。
>
>  http://www.kobitosan.net/postfix/trans-2.1/jhtml/FILTER_README.html
>
> ・AntiVirでの例
>  http://www.aconus.com/~oyaji/suse/antivir_suse.htm
> ・Spamassassinでの例
>  http://www.aconus.com/~oyaji/suse9.2/smtp-mysql-spamassassin-suse.htm
早速調べてみます。
どうもありがとうございました。
結果を報告させていただきたいと思います。


No.5188 投稿時間:2005年09月20日(Tue) 06:27 投稿者名:まっきー URL:
タイトル:Re^2: Delivered-To: では?だめですか?


早速コンテンツフィルタを試してみました。

設定は下記のとおりです。(FreeBSD5.3.0)

まず、/usr/local/etc/postfix/master.cfを下記のように編集
--ここから---------------------------------------------------------------------------
smtp inet n - n - - smtpd
-o content_filter=filter:dummy
filter unix - n n - 10 pipe
flags=Rq user=filter argv=/usr/home/filter/filter_test -f ${sender} -- ${recipient}
--ここまで---------------------------------------------------------------------------

そして、/usr/home/filter/filter_testという名前のシェルスクリプトを作成。
---ここから--------------------------------------------------------------------------
#!/bin/sh

# Simple shell-based filter. It is meant to be invoked as follows:
# /path/to/script -f sender recipients...

# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL="/usr/sbin/sendmail -i"

# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || {
echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
cat >in.$$ || {
echo Cannot save mail to file; exit $EX_TEMPFAIL; }

# Specify your content filter here.
/usr/home/filter/filter.php <in.$$ || {
echo Message content rejected; exit $EX_UNAVAILABLE; }

#$SENDMAIL "$@" <in.$$

exit $?
--ここまで-----------------------------------------------------------------------------

PHPスクリプト/usr/home/filter/filter.phpを作成
--ここから-----------------------------------------------------------------------------
#!/usr/local/bin/php -q

<?php

main();

/* Main */
function main(){

//メールを標準入力から読み込み
$j = 0;
$stdin = fopen ('php://stdin' , 'r');
while (!feof ($stdin)){
//一行ずつ配列に格納
$buf_ary[$j] = fgets($stdin, 4096);
$j++;
}
fclose ($stdin);//Get Mail

//メールをテキストに保存
$fp = fopen("/home/filter/mail.txt", "a");
foreach($buf_ary as $val){
fwrite($fp,$val);
}
fclose($fp);
}

?>
--ここまで-------------------------------------------------------------------------------

BCCアドレスを判別するという課題がありますので、自作フィルタプログラムで送信したメールをテキストに保存してみました。

この例ではToに"Hoge" <to-user@hoge.com>を指定し、Bccにbcc-user@sample.comを指定しました。
下記は保存されたテキストファイルですが、やはり、bcc-user@sample.comに送るメールかどうかの判別がつきません。
やはり、ユーザーごとに送信先の制限を行うのは無理なのでしょうか?とほほ...。
--ここから-------------------------------------------------------------------------------
Return-Path: <test1@mail2.sample.com>
Received: from w166 (w166 [192.168.0.235])
by mail2.sample.com (Postfix) with SMTP id B0E516175;
Mon, 19 Sep 2005 15:56:49 -0500 (CDT)
Message-ID: <00a401c5bd5c$f1aa06e0$eb00a8c0@sample.com>
From: "Test" <test1@mail2.sample.com>
To: "Hoge" <to-user@hoge.com>
Subject: Test
Date: Mon, 19 Sep 2005 15:58:50 -0500
MIME-Version: 1.0
Content-Type: text/plain;
format=flowed;
charset="iso-8859-1";
reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2180
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180

Test Mail
--ここまで-------------------------------------------------------------------------------

ちなみに、おやじさんの下記ののページに
[Postfixの設定]
Postfixにフィルタ処理をさせるため、/etc/postfix/main.cf に設定を行います。
と書かれていますが、正しくは/etc/postfix/master.cfではないでしょうか?
もし、main.cfでも構わないんだったらごめんなさい。

http://www.aconus.com/~oyaji/suse9.2/smtp-mysql-spamassassin-suse.htm

以上、他になにか気がついた点等ございましたら、アドバイスをよろしくお願いいたします。


No.5192 投稿時間:2005年09月21日(Wed) 01:20 投稿者名:まっきー URL:
タイトル:Re^3: Delivered-To: では?だめですか?

>
> そして、/usr/home/filter/filter_testという名前のシェルスクリプトを作成。
上記のスクリプトの引数を取得することによってBCCを含むすべての送信先アドレスが取得できました。
当たり前のようなことですが、うっかり引数の存在を見落としていました。
これで何とかなりそうです。アドバイスありがとうございました。感謝します。


No.5196 投稿時間:2005年09月21日(Wed) 19:30 投稿者名:おやじ URL:
タイトル:勉強になりました。

> > そして、/usr/home/filter/filter_testという名前のシェルスクリプトを作成。
> 上記のスクリプトの引数を取得することによってBCCを含むすべての送信先アドレスが取得できました。
> 当たり前のようなことですが、うっかり引数の存在を見落としていました。
> これで何とかなりそうです。アドバイスありがとうございました。感謝します。

この件では、おやじの頭の中が整理でき、逆にありがとうございました。
BCCメールは、filterにくる時点では既に別々のメールで来るものと思っていましたので、「Delivered-To: では?だめですか?」と思ったのですが、SMTPで最終段階で分けているんですね。また、BCCはメールヘッダから削除されエンベロープを見なければわからないということを知りました。filterにはメールヘッダ以下しか来ておらず、エンベロープは引数で渡されているのも見れば当たり前のことを意識してませんでした。
ご指摘いただいたHPは誤っていますので修正しておきました。この手のミスがh上に多くお恥ずかしいです。
何はともあれ、あちこちで聞かれていたようですが解決の目処がたってよかったですね。



掲示板▲頁先頭