Sendmail环境中检测是否存在邮件代理的小技巧

运维 系统运维
sendmail是 FreeBSD 中的默认邮件传输代理 (MTA)。 sendmail 的任务是从邮件用户代理 (MUA) 接收邮件然后根据配置文件的定义把它们送给配置好的的寄送程序。 sendmail 也能接受网络连接,并且发送邮件到本地邮箱或者发送它到其它程序。如何在Sendmail环境中检测是否存在邮件代理,请看下文。

我们知道邮件代理有可能是是善意的,也有可能是恶意的,我们如何在Sendmail环境中检测和排除邮件代理带本身的影响呢,请看下文介绍。

  作为广泛应用的邮件服务器软件,sendmail需要和各种smtp的客户端软件打交道。在这些smtp客户端软件中,有些软件是真正的邮件软件,比如Microsoft Outlook Express;有些是有着特殊目的的应用程序,比如Norton Antivirus。

  有些应用程序会截断邮件客户端和sendmail的连接,以“邮件代理”的形式接收客户端的数据,对数据进行处理(比如Norton Antivirus使用这种方式来扫描外出邮件中的病毒),然后转发给sendmail。

  这种“邮件代理”程序可能是善意的也可能是恶意的。但是,当sendmail和邮件客户端软件的通信出现问题的时候,应该首先着手检测此类“邮件代理”程序是否存在以便进一步排除它们的影响。

  sendmail服务程序具有记录smtp会话的功能,大部分邮件客户端软件也有类似的功能。我们可以通过对比服务器和客户端上的会话记录来判断邮件代理程序是否存在。

  首先,您需要用 -X参数运行sendmail:

  #startsrc -s sendmail -a"-bd -q 30m -X /tmp/smtp.sessions"

  注意:

  在一个生产环境中,-X参数可能会产生大量的日志信息。请只在进行测试或故障排除时使用-X参数。

  一个典型的客户机-服务器smtp会话会被这样地记录在/tmp/smtp.sessions中:

  127184 >>> 220 marshak.austin.ibm.com ESMTP Sendmail Tue, 1 Nov 2005 10:31:22 -0600

  127184 <<< HELO IBM8370FEC6B24^M

  127184 >>> 250 marshak.austin.ibm.com Hello [9.53.167.160], pleased to meet you

  127184 <<< MAIL FROM: ^M

  200898 >>> 250 2.1.0 ... Sender ok

  200898 <<< RCPT TO: ^M

  200898 >>> 250 2.1.5 ... Recipient ok

  200898 <<< DATA^M

  200898 >>> 354 Enter mail, end with "." on a line by itself

  200898 <<< Message-ID: <000f01c5df01$88a95fd0$a0a73509@austin.ibm.com>^M

  200898 <<< From: "internship test" ^M

  200898 <<< To: ^M

  200898 <<< Subject: test^M

  200898 <<< Date: Tue, 1 Nov 2005 10:29:06 -0600^M

#p#  

  其中"<<<"表示sendmail服务接收到的信息,而">>>"则表示sendmail服务向客户端发送的信息。如果邮件客户端直接和sendmail服务会话,那么在客户端的smtp会话中所记录的文本信息应该和/tmp/smtp.sessions一致。我们可以利用这个特点来检测邮件代理的存在。

  让我们用一个例子来说明。

  /tmp/smtp.sessions:

  127184 >>> 220 marshak.austin.ibm.com ESMTP Sendmail Tue, 1 Nov 2005 10:31:22 -0600

  127184 <<< HELO IBM8370FEC6B24^M

  127184 >>> 250 marshak.austin.ibm.com Hello [9.53.167.160], pleased to meet you

  127184 <<< MAIL FROM: ^M

  200898 >>> 250 2.1.0 ... Sender ok

  200898 <<< RCPT TO: ^M

  200898 >>> 250 2.1.5 ... Recipient ok

  200898 <<< DATA^M

  200898 >>> 354 Enter mail, end with "." on a line by itself

  200898 <<< Message-ID: <000f01c5df01$88a95fd0$a0a73509@austin.ibm.com>^M

  200898 <<< From: "internship test" ^M

  200898 <<< To: ^M

  200898 <<< Subject: test^M

  200898 <<< Date: Tue, 1 Nov 2005 10:29:06 -0600^M

  200898 <<< X-Priority: 3^M

  200898 <<< X-MSMail-Priority: Normal^M

  200898 <<< X-Mailer: Microsoft Outlook Express 6.00.2800.1506^M

  200898 <<< X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506^M

  200898 <<< ^M

  200898 <<< test^M

  200898 <<< ^M

  200898 <<< ^M

  200898 <<< .^M

  200898 >>> 250 2.0.0 jA1GVM5200898 Message accepted for delivery

  邮件客户端软件的记录:

  SMTP: 10:38:54 [rx] 220 marshak.austin.ibm.com ESMTP Sendmail Tue, 1 Nov 2005 10:40:03 -0600

  SMTP: 10:38:54 [tx] HELO IBM8370FEC6B24

  SMTP: 10:38:54 [rx] 250 marshak.austin.ibm.com Hello [9.53.167.160], pleased to meet you

  SMTP: 10:38:54 [tx] RSET

  SMTP: 10:38:54 [rx] 250 2.0.0 Reset state

  SMTP: 10:38:54 [tx] MAIL FROM:

  SMTP: 10:38:54 [rx] 250 2.1.0 ... Sender ok

  SMTP: 10:38:54 [tx] RCPT TO:

  SMTP: 10:38:54 [rx] 250 2.1.5 ... Recipient ok

  SMTP: 10:38:54 [tx] DATA

  SMTP: 10:38:54 [rx] 354 Please start mail input.

  SMTP: 10:38:54 [tx]

  SMTP: 10:38:54 [rx] 250 Mail queued for delivery.

  我们可以看到,在要求客户端输入邮件信息时,sendmail发出的信息是“354 Enter mail, end with "." on a line by itself”,而邮件客户端收到的信息是“354 Please start mail input.”。由此可知有邮件代理程序存在于邮件客户端与sendmail之间。

  如果您的邮件客户端不支持记录smtp会话的功能,您可以采用以下两种方法:

  1、使用支持smtp会话记录的客户端进行测试;

  2、使用telnet命令连接到sendmail服务器的25端口,手工输入HELO,MAIL FROM,RCPT TO,DATA等命令。

通过文章,我们知道了如何在Sendmail环境中检测是否存在邮件代理,希望对大家有所帮助!

【编辑推荐】

  1. Sendmail 配置文件(一)
  2. Sendmail 配置文件(二)
  3. Nagios中告警邮件如何处理 Sendmail服务的配置
  4. Nagios Sendmail无法发送mail邮件的解决方法
  5. 用sendmailanalyzer来监控自己的Sendmail服务器
  6. Solaris 10下可以用Sendmail发送邮件
  7. Sendmail的安全篇之限制权限、文件修改
  8. 关于Sendmail信件队列
责任编辑:赵鹏 来源: 网络转载
相关推荐

2011-02-21 16:33:53

2011-01-21 09:49:18

sendmail目录

2011-01-21 13:21:21

sendmail安全

2011-01-21 10:38:52

sendmail

2011-02-21 16:21:49

Sendmail

2009-06-05 11:11:11

2009-04-28 00:44:03

2011-01-21 15:08:45

Sendmail

2011-01-21 15:27:10

Sendmail

2011-01-21 10:58:57

sendmail流程

2011-01-21 10:46:47

sendmail流程

2011-02-21 11:35:29

sendmail命令

2011-01-21 16:27:43

NagiosSendmail

2011-01-21 11:32:07

sendmail

2011-01-21 10:28:06

2013-05-14 09:27:13

垃圾邮件LinuxSendmail

2011-01-21 14:52:37

Sendmail

2011-01-21 11:05:46

2011-01-21 10:40:52

Sendmail

2009-07-20 10:26:12

点赞
收藏

51CTO技术栈公众号