Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3012815
  • 博文数量: 535
  • 博客积分: 15788
  • 博客等级: 上将
  • 技术积分: 6507
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 09:11
文章分类

全部博文(535)

文章存档

2016年(1)

2015年(1)

2014年(10)

2013年(26)

2012年(43)

2011年(86)

2010年(76)

2009年(136)

2008年(97)

2007年(59)

分类:

2010-08-17 11:12:13

qmail服务器收到大量发送给本地域不存在的用户的邮件。造成qmail向发送者(发送者所在的域存在,但用户不不存在)发送退信,以及对方发回的退信(因为用户不存在),本机发送给postmaster的退信。

原理:
     通过向本地域发送一封邮件 Return-Path:XXX@74.cerfrance.fr,RCPT TO:xxx@local_domain(域为本地域,可以绕过rcpthosts验证)。Return-Path和RCPT TO的用户都不存在。

qmail服务器收到邮件后,因为不存在该用户,会向Return-Path的地址发送退信,此信同时会发送给postmaster。远程服务器收到此退信后,因为不存在该用户,于是又发送一封退信到qmail服务器,同时也会向本地服务器的postmaster发送双重退信通知。

解决:
步骤1:
接收用户不存在的邮件,然后删除,这样就不会向远端服务器发送退信了。

在qmail的alias目录下建立.qmail-default文件:
内容为:包含无效指令,但一定要非空
#
或者
       #throw messages away undelivered

或者传送到shell,然后丢弃:
|>/dev/null

步骤2:
安装反垃圾邮件,在tcpserver这一层将垃圾邮件拒绝掉。

如果使用的是ucspi-tcp 0.88,里面包含rblsmtpd,如果是老的版本,需要单独安装。修改启动脚本,增加“DNSBL”:

/usr/local/bin/tcpserver ---l localhost -c 200 -x /etc/tcp.smtp.cdb \
-u $QMAILDUID -g $NOFILESGID 0 smtp /usr/local/bin/rblsmtpd \
-r sbl.spamhaus.org \
-r xbl.spamhaus.org \
-r pbl.spamhaus.org \
/var/qmail/bin/qmail-smtpd >>/var/qmail/tcpserver.log 2>&1 &



rblsmtpd drops the limited SMTP conversation after 60 seconds, even if the client has not quit by then.

Options:

  • -t n: Change the 60-second timeout to n seconds.



qmail的标准别名机制是由qmail的本地传送机制自然派生出来的.qmail-local 试图传送地址为 localpart@host 的邮件给本地叫做 localpart 名字的用户. 如果没有匹配这个名字的用户存在, 邮件将会被发送给别名 alias 用户, 别名用户是qmail系统里面通常主目录位于 /var/qmail/alias 的伪用户.

举例, 如果你想要创建一个叫做 info@example.com 的别名, 这个别名用户将把上文收到的所有无主邮件转发给用户 tom, 在我们举例的 example.com 上, 这样作的方式是: 作为 root 用户, 运行下面的命令:

    echo \&tom > /var/qmail/alias/.qmail-info
如果创建一个空的/var/qmail/alias/.qmail-info ,则接收发往该地址的邮件,并存到Maildir/new/目录下

 小节, 以及  细目介绍了如何创建 .qmail文件, 这些文件确定了那些别名存在, 以及如何处理哪些发给他们的邮件的.

附录  介绍了两个关于别名应用的复杂案例. 那些别名使用了大写字母和小数点("."), 以及 .qmail 文件的 man 手册页面, 其中包含了完整的关于 .qmail 文件用法的文档.

注意由于别名在 qmail 里面的实现方式, 别名是不能够优先与一个已知用户的传送的. 例如, 如果 rachel 是一个普通用户, 那么~alias/.qmail-rachel 别名是无效的.

 软件包另外提供了一个可行的别名机制, 它将多个别名放入单独一个和Sendmail别名数据库兼容的文件里面.


qmail 支持用户控制扩展地址. 在基本地址 username@hostname.domain 上扩展的扩展地址为: username-extension@hostname.domain ,用户同样可以接收发往扩展地址的邮件. 在本节其余部分, 我们讨论的范围都是在本地系统上, 所以我们将不再使用"@hostname.domain" 部分.

给用户 username 的邮件传送指令由 ~username/.qmail 文件指定. 对于型如username-extension 的扩展地址的传送指令由用户目录下的~username/.qmail-extension 文件指定.

举一个例子, dave-lwq@sparge.example.com 这个扩展地址的传送将由文件 ~dave/.qmail-lwq 来控制.

扩展地址可以拥有多个字段, 例如 dave-list-qmail 这个扩展地址, 由 ~dave/.qmail-list-qmail 来控制. 在这个例子里面, dave-list-qmai 这个地址被用来订阅 qmail 的邮件列表, ~dave/.qmail-list-qmail 则负责归档这个列表的邮件到单独的邮箱里面.

.qmail 文件可以用-default 后缀进行匹配。 所以 dave-list-qmail 可以由 ~dave/.qmail-list-default 操作. 这个文件可以一对多方式用一个.qmail文件控制所有型如 dave-list-加上任何后缀的地址. 注意 dave-list 不能由 ~dave/.qmail-list-default 控制, 因为在"list"后面没有"-".

qmail 会使用最接近的匹配方式. 例如, qmail在传送一个标志着送给dave-list-qmail这个地址的邮件时, 会按照下面顺序查找.qmail控制文件, 并按照最先匹配的.qmail文件传送这个邮件.

    .qmail-list-qmail
    .qmail-list-default
    .qmail-default

如果没有找到相匹配的.qmail文件, 传送失败, 并且将邮件反弹给发送者.


传送用户邮件通常是由一个或者几个 ".qmail"(发音 dot kyoo mail) 文件控制的. 这些文件位于用户的主目录, 文件名由 .qmail 开头. .qmail 的man 手册页面描述了 .qmail 文件使用方法.

.qmail 文件包括了一个传送指令清单, 每行一个指令. 每行的第一个字符决定了选择那种传送方式.

字符传送类型
# (注释)忽略
|程序由shell 执行的命令
/ 或者 .mbox邮箱格式 (如果路径最后一个字符不是一个斜杠)

mbox 的路径名 (包括斜杠"/"或者 点".")

/ 或者 .maildir邮箱格式 (如果路径最后一个字符是一个反斜杠)maildir 的路径名 (包括斜杠"/"或者 点".")
&转发转发邮件的地址
字母或者数字转发转发邮件的地址 (包括第一个字符)



更多详细的可以查看


阅读(2734) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~