免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yindows
打印 上一主题 下一主题

[Mail] sendmail,已做了smtp认证,但却无法防止内部员工以老板名义向外发邮件! [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
21 [报告]
发表于 2007-01-25 10:36 |只看该作者
原帖由 dragonets 于 2007-1-25 10:02 发表


所有出去进来的信我在filter_end做了add_recipient("postmaster"),是否能找到是谁发的?

這樣不夠自動,需要人工去判讀

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
22 [报告]
发表于 2007-01-25 10:39 |只看该作者
原帖由 abel 于 2007-1-25 09:55 发表

如果我用 telnet 來送,除了 IP 外,什麼都可以假了
而且若我 auth_authen = Sender , 但 Mail Header 中的 From: 又是老板,那一般的人也很難判斷
這到底是不是老板發的了

當然,這種狀況在 sendmail + m ...


Postfix不会!应该比Sendmail更容易.

http://blog.chinaunix.net/u/9817/showart.php?id=207355

如果采用ldap或mysql的话应该更简单.

[ 本帖最后由 枫影谁用了 于 2007-1-25 10:42 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
23 [报告]
发表于 2007-01-25 10:50 |只看该作者
原帖由 枫影谁用了 于 2007-1-25 10:39 发表


Postfix不会!应该比Sendmail更容易.

http://blog.chinaunix.net/u/9817/showart.php?id=207355

如果采用ldap或mysql的话应该更简单.

枫兄倒不妨舉個實例看看 postfix 怎麼做 Envelope Sender 和 Header From 怎麼比對 ?


sendmail + mimedefang 非常簡單,不過就是

  1. my $header_object = $entity->head;
  2. my $header_from= $header_object->get('From', 0);
  3. return action_bounce("Envelope From != Header From") if ($header_from != ~ /$Sender/);
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
24 [报告]
发表于 2007-01-25 10:54 |只看该作者
原帖由 枫影谁用了 于 2007-1-25 10:39 发表


Postfix不会!应该比Sendmail更容易.

http://blog.chinaunix.net/u/9817/showart.php?id=207355

如果采用ldap或mysql的话应该更简单.

你說的不過是
Envelope Sender 和 auth 的比對而以,和 Header From 跟本沒有關係
http://archives.neohapsis.com/archives/postfix/2005-11/0452.html
這篇也說了, postfix 尚做不到 Header 中的東西和 envelope 的比對!
當然,現在行不行或有沒有替代方法這我就不知道了

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
25 [报告]
发表于 2007-01-26 07:56 |只看该作者
原帖由 abel 于 2007-1-25 10:54 发表

你說的不過是
Envelope Sender 和 auth 的比對而以,和 Header From 跟本沒有關係
http://archives.neohapsis.com/archives/postfix/2005-11/0452.html
這篇也說了, postfix 尚做不到 Header 中 ...


abel說得極是。

论坛徽章:
0
26 [报告]
发表于 2007-01-26 08:08 |只看该作者

有点迷糊

原帖由 abel 于 2007-1-25 10:54 发表

你說的不過是
Envelope Sender 和 auth 的比對而以,和 Header From 跟本沒有關係
http://archives.neohapsis.com/archives/postfix/2005-11/0452.html
這篇也說了, postfix 尚做不到 Header 中 ...


abel,请问,您说的情况是否是这样:

一个a用户,使用a帐号通过sasl验证后,在发邮件的时候,header里面使用From b ?

一个例子:

Return-Path: <dragonetS@dragonetsss.com>
Received: from dragonet (dragonet [192.168.16.166] (may be forged))
        (authenticated bits=0)
        by dragonetsss.com (8.13.1/8.13.1) with ESMTP id l0NAQJ38007048
        for <dragonets@dragonetsss.com>; Tue, 23 Jan 2007 18:26:19 +0800
Message-ID: <000601c74052$d3629e20$a610a8c0@dragonet>
From: "test" <dragonetS@dragonetsss.com>
To: <dragonets@dragonetsss.com>
Subject:


您说的是不是红色那行?

PS:MIMEDefang中$sender 和 $Sender 有什么区别?我看了下说明,好象都是指发件者?

[ 本帖最后由 dragonets 于 2007-1-26 09:33 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
27 [报告]
发表于 2007-01-26 11:37 |只看该作者
你用一些標準的 MTA ,在 Envelope Sender,authen,Header From 都是一樣的,
你若用 spam tools 發的信這些東西都可以不一樣,所以最好應該做到三者的一致性檢查
我的意思是其他的 MTA 應該沒有這種功能,但 sendmail+ mimedefang 可以做到三者的一致性檢查
一般只做 mail from (Envelope Sender) 和 auth 的檢查根本對 End user 是沒有意義的

紅字那些應包含
"test" <dragonetS@dragonetsss.com>
而 Sender (or sender) 則是 <dragonetS@dragonetsss.com>
所以這兩個內容要比對是否一致

Sender/sender 都是一樣的,只要慣例上用在 filter_sender/filter_repicient 用 $sender (也可以叫 ssssender),
而在 filter/filter_begin/filter_end 等都是用系統的全域變數 $Sender (不可變,系統預設)
只兩個都是一樣的

论坛徽章:
0
28 [报告]
发表于 2007-01-26 14:01 |只看该作者

谢谢回答

原帖由 abel 于 2007-1-26 11:37 发表
你用一些標準的 MTA ,在 Envelope Sender,authen,Header From 都是一樣的,
你若用 spam tools 發的信這些東西都可以不一樣,所以最好應該做到三者的一致性檢查
我的意思是其他的 MTA 應該沒有這種功能,但 sen ...


TANKS! 近来正在研究Sendmail + MIMEDefang , 确实如您说,很强大。有空还要向您多请教。

还有几个问题想请教一下:

my $header_object = $entity->head;
my $header_from= $header_object->get('From', 0);
return action_bounce("Envelope From != Header From") if ($header_from != ~ /$Sender/);

以上是否还应该在filter_sender?或者在其他function内?

return action_bounce("Envelope From != Header From") if ($header_from !~ /$Sender/);

红色部分是否应当是!~?

刚才实验了一下,在filter_sender里面加的,结果返回 try again later 错误信息了。。

代码如下:

sub filter_sender {
        my($sender,$ip,$hostname,$helo)=@_;
        if (lc($Sender) =~ /\@dragonetsss\.com\>$/i) {
                     read_commands_file();
             return (0,"this is not allow for auth!=sender") if (!(lc($sender) =~/$SendmailMacros{auth_authen}\@/));
             return (0,"smtp authentication required.") if (!defined($SendmailMacros{auth_authen}));
             my $header_object=$entity->head;
             my $header_from=$header_object->get('From',0);
             return action_bounce("Envelope From != Header From") if ($header_from !~ /$Sender/);
}

哪里出问题了呢?

[ 本帖最后由 dragonets 于 2007-1-26 14:27 编辑 ]

论坛徽章:
0
29 [报告]
发表于 2007-01-27 09:37 |只看该作者
已经成功,谢谢abel指点。

在filter_begin增加:
if ($Sender =~ /\@dragonetsss\.com/) {

my $header_object = $entity->head;
my $header_from= $header_object->get('From', 0);
return action_bounce("Envelope From != Header From") if ($header_from ! ~ /$Sender/);

}

以下为实验记录,红色部分为自己输入部分:

220 dragonetsss.com ESMTP Sendmail 8.13.1/8.13.1; Thu, 25 Jan 2007 04:32:00 +0800
helo a
250 dragonetsss.com Hello dragonet [192.168.16.166] (may be forged), pleased to meet you
auth login
334 VXNlcm5hbWU6
YWJj
334 UGFzc3dvcmQ6
YWJj
235 2.0.0 OK Authenticated
mail from:abc@dragonetsss.com
250 2.1.0 abc@dragonetsss.com... Sender ok
rcpt to:dragonets@dragonetsss.com
250 2.1.5 dragonets@dragonetsss.com... Recipient ok
data
354 Enter mail, end with "." on a line by itself
from:a@dragonetsss.com
to:a
heihei
.

554 5.7.1 ENV FROM != HEADER FROM
mail from:abc@dragonetsss.com
250 2.1.0 abc@dragonetsss.com... Sender ok
rcpt to:dragonet@dragonetsss.com
250 2.1.5 dragonet@dragonetsss.com... Recipient ok
data
354 Enter mail, end with "." on a line by itself
from:abc@dragonetsss.com
to:a
a
.

250 2.0.0 l0OKW0Od004940 Message accepted for delivery

[ 本帖最后由 dragonets 于 2007-1-27 09:40 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
30 [报告]
发表于 2007-01-29 09:20 |只看该作者
原帖由 dragonets 于 2007-1-27 09:37 发表
已经成功,谢谢abel指点。

在filter_begin增加:
if ($Sender =~ /\@dragonetsss\.com/) {

my $header_object = $entity->head;
my $header_from= $header_object->get('From', 0);
return action ...

這種做法有一點你必需注意的是 mailling list 的問題 (aliases)
也就是若是用 mailman 或 majadomo 之類的,可能 Envelope From != Header From
避免方式就是判斷 Header List-* 之類的是否存在
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP