在Debian 4.0 rc3上安装postfix+sasl 验证及防垃圾SPAM机制

作者:何祖彬[RobinHe] Mail:[email protected]
始于2008年8月4日 PM

Blog: http://blog.csdn.net/zubin006/

WebSite : http://www.wearelinuxer.com/

版本号:Debian-Postfix-SASL-SPAM-

V1.0-20080804, 2008年8月4日首版

转载请注明出处,本文也是采用两篇网友的大部分内容,因此转载时,请也将下面“参考文章”的出处也一并加入!谢谢!
本文中难免有不足、遗漏、错别字和句子不通之处,如发现、或者有更新改变之处,请与我联系以及时修正和完善!

系统信息:
OS : Debian 4.0 rc3

使用说明:
绿色加粗字体的绝大部分是输入的命令和系统输出显示的结果。

参考文章:
POSTFIX+SASL:
http://www.debian.org.tw/index.php/Postfix-SASL

http://community.itbbs.cn/showthread.php?t=7395



让 Postfix 支持 Cyrus-SASL© V2 认证


第一步,安装所需套件并进行相关的配置:

#apt-get install openssh-blacklist postfix-tls sasl2-bin libsasl2-modules spamassassin popa3d

修改/etc/default/saslauthd文件,让START=yes,即,启动SASL认证:
#vi /etc/default/saslauthd

# This needs to be uncommented before saslauthd will be run automatically
START=yes

修改 /etc/postfix/sasl/smtpd.conf,设定 PostFix 使用 Saslauthd
#mkdir -p /etc/postfix/sasl
#echo "pwcheck_method: saslauthd" > /etc/postfix/sasl/smtpd.conf
再编辑这个文件:/etc/postfix/sasl加入下面这一句:
mech_list:plain login 将postfix 加入 sasl 群组中
#addgroup postfix sasl

修改 /etc/postfix/main.cf ,使其使用 SMTP AUTH 及 SASL Authenticate 以及 加入spam防垃圾邮件机制

#vi /etc/postfix/main.cf
# Enable SASL Auth

# 设定 Postfix 使用 SASL 认证。
smtpd_sasl_auth_enable = yes

# 设定 SASL 支援非标准 E-mail Client 的认证动作。
broken_sasl_auth_clients = yes

# 不使用 ANONYMOUS 这个认证。
smtpd_sasl_security_options = noanonymous

# 设定 SASL 的认证方法
# permit_sasl_authenticated → 如果用户端可通过 SASL 认证则可 Relay Mail。
# permit_mynetworks → 如果用户端的位址为 $mynetworks 则可 Relay Mail。
# check_relay_domains
# reject_unauth_destination
smtpd_client_restrictions =

smtpd_helo_required = yes
smtpd_helo_restrictions =

smtpd_sender_restrictions =

smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_invalid_hostname,
    check_sender_access  hash:/etc/postfix/sender_access,
    reject_unauth_pipelining,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    reject_unverified_sender,
    reject_multi_recipient_bounce,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_rbl_client      cbl.abuseat.org ,
    reject_rbl_client      dul.dnsbl.sorbs.net ,
    reject_rbl_client      zen.spamhaus.org ,
    reject_rbl_client      list.dsbl.org ,
    reject_rbl_client      opm.blitzed.org ,
    reject_rhsbl_sender    dsn.rfc-ignorant.org ,
    permit

保存退出。

同时重启SASL:
#/etc/init.d/saslauthd restart

验证SASL是否正常工作:
#testsaslauthd -u username -p password

重启postfix:
#/etc/init.d/postfix restart

第二步,修正调整Debian中Postfix+SASL的一些配置[谢谢HENRY的帮忙解决以下的问题,以下是我的总结]:

因为Debian的postfix套件预设用chroot安装在/var/spool/postfix。因此, /etc/sasldb2要搬到/var/spool/postfix/etc/sasldb2,否则在非本地IP用SASL验证时 会出现以下错误:
Jun 24 11:12:36 www last message repeated 2 times
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: SASL authentication failure: no secret in database
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: unknown[222.222.222.222 : SASL NTLM authentication failed: authentication failure
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory
Jun 24 11:12:36 www last message repeated 5 times
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: SASL authentication failure: Password verification failed
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: unknown[222.222.222.222]: SASL PLAIN authentication failed: authentication failure
因为它找不到sasldb2这件相对于/var/spool/postfix下的/etc/sasldb2文件,log中的/etc/sasldb2 其实 就是/var/spool/postfix/etc/sasldb2,现在这个目录下找不到这个文件,因此会提示:No such file or directory

因此:
#cp /etc/sasldb2 /var/spool/postfix/etc/.
同时在/etc/group中加入相应的组:
mail:x:8:postfix
sasl:x:45:postfix

但是在Debian/Ubuntu环境下,因为chroot的关系,所以还要将saslauthd的PIDFILE目录修改为 /var/spool/postfix/var/run/saslauthd,所以请先建立这个目录:
#mkdir /var/spool/postfix/var/run/saslauthd

然后修改/etc/default/saslauthd文件:
START=yes
MECHANISMS="pam"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

重启saslauthd:

#/etc/init.d/saslauthd restart

确认一下saslauthd.pid不在/var/run下,而是在新的目录 /var/spool/postfix/var/run/saslauthd下面,

然后在利用远程电脑发一送需要SMTP验证的MAIL,看一下是事正常,同时检查/var/log/mail.log


完成...

接下去做SSL收发MAIL的配置,期待中...









-------------------------------------------------------------------------------------
参考资料:
http://www.debian.org.tw/index.php/Postfix-SASL

Postfix-SASL

出自DebianWiki

目录

[隐藏 ]

[编辑 ] 所需套件

postfix-tls sasl2-bin libsasl2-modules

[编辑 ] Mail Relay 简介

所谓的 Mail Relay,指的就是 Mail Server 会不会替使用者将信转寄到外部去。

比如说,我将信寄给 [email protected] , 如果 [email protected] 这个信箱并不是位于本机上,那么这封信将会转给PCHome 的 Mail Server,而这个将邮件转寄的动作就是 Mail Relay。

Open Relay 就是不设限地完全开放 Mail Relay 的功能,它会替所有的人进行邮件转寄。

架设 Mail Server 的第一件事,就是防止不速之客利用您的 Mail Server 来乱发邮件,也就是关掉 Open Relay 这个功能。(基本上,几乎所有的 Mail Server 预设上都已把 Open Relay 给关掉了) 取而代之的,是使用 SMTP 认证 (SMTP AUTH) 来验证使用者可否进行 Mail Relay。

在这里所要介绍的,是如何使用 Cyrus-SASL© V2 来实作 SMTP 认证的功能。 其中的 SASL (Simple Authentication and Security Layer) 就是用来提供符合 RFC 2222 标准的各种认证机制的 Daemon。

[编辑 ] 让 Postfix 支援 Cyrus-SASL© V2 认证:(Debian Sarge)

  • 修改 /etc/default/saslauthd,设定 START=yes
# This needs to be uncommented before saslauthd will be run automatically
START=yes

# You must specify the authentication mechanisms you wish to use.
# This defaults to "pam" for PAM support, but may also include
# "shadow" or "sasldb", like this:
# MECHANISMS="pam shadow"

MECHANISMS="pam"
  • 修改 /etc/postfix/sasl/smtpd.conf,设定 PostFix 使用 Saslauthd
mkdir -p /etc/postfix/sasl
echo "pwcheck_method: saslauthd" > /etc/postfix/sasl/smtpd.conf
  • 将 postfix 加入 sasl 群组中
addgroup postfix sasl
  • 修改 /etc/postfix/main.cf , 使其使用 SMTP AUTH 及 SASL Authenticate
(上略)

# Enable SASL Auth

# 设定 Postfix 使用 SASL 认证。
smtpd_sasl_auth_enable = yes

# 设定 SASL 支援非标准 E-mail Client 的认证动作。
broken_sasl_auth_clients = yes

# 不使用 ANONYMOUS 这个认证。
smtpd_sasl_security_options = noanonymous

# 设定 SASL 的认证方法
# permit_sasl_authenticated → 如果用户端可通过 SASL 认证则可 Relay Mail。
# permit_mynetworks → 如果用户端的位址为 $mynetworks 则可 Relay Mail。
# check_relay_domains
# reject_unauth_destination
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, check_relay_domains, reject_unauth_destination

smtpd_client_restrictions = permit_sasl_authenticated
  • 修改 /etc/postfix/master.cf , 让 Postfix 不要以 chroot 启动。
    后面的 -v 参数可以用来 Debug,但正式上线时最好拿掉,以免系统被 Log 塞爆了。
(上略)

# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd -v

(下略)

或者是新增一个 listen 在 smtps (port 465) 上的 service

# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtps inet n - n - - smtpd
# 强迫 tls 连线 (?)
-o smtpd_tls_wrappermode=yes
# 使用 sasl auth (如果在 main.cf 已经设定了,这行可以省略)
-o smtpd_sasl_auth_enable=yes
# 所有连线到这里的都必须通过 sasl auth
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
  • 重新启动 SASL Daemon
/etc/init.d/saslauthd restart

跑起来后,可以用

testsaslauthd -u username -p password

来测试 saslauthd 是否有正常运作

  • 重新启动 Postfix
/etc/init.d/postfix restart

[编辑 ] 检测方式

首先把帐号及密码转换成 base64 的编码:(可能需要安装 libmime-base64-perl 套件)

perl -MMIME::Base64 -e 'print encode_base64("/0username/0password");'

登入 Postfix:

$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 Virtual ESMTP Postfix (Debian/GNU)
EHLO qemu (这里要输入的是 HostName)
250-Virtual
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-XVERP
250 8BITMIME
auth plain AHXXXXXXXXXXXXXXXXXXXX8/ (刚才 perl 指令计算的结果)
235 Authentication successful
quit
221 Bye
Connection closed by foreign host.

如果认证成功即表示 SASL 已经正确启动了。











postfix无法使用sasl认证

warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory

原因: 这是因为Debian的postfix套件是用 chroot,因此错误讯息中所说的/etc/sasldb2是指/var/spool/postfix/etc/sasldb2。
解决方法: cp /etc/sasldb2 /var/spool/postfix/etc/sasldb2。还要chmod o+r /var/spool/postfix/etc/sasldb2,否则postfix没有读的权限。

warning: SASL authentication failure: no secret in database

原因: 这是因为/var/spool/postfix/etc/sasldb2里面没有你用的帐号密 码。
解决方法: 需要安装sasl2-bin套件,用saslpasswd2 -c -f /var/spool/postfix/etc/sasldb2 新增帐号密码。然后用sasldblistusers2 -f /var/spool/postfix/etc/sasldb2检视有那些帐号。


祖彬:

帐号不知为何/var/spool/postfix/etc/sasldb2里面的帐号会变成 [email protected]
只要你用这个帐号,密码用zubin就一定能通过认证

新增帐号:
saslpasswd2 -c -f /var/spool/postfix/etc/sasldb2 -u 指定域名 帐号
不指定域名就是www.huiying-group.com , 晚上我再看看在那里设定

检视有那些帐号:
sasldblistusers2 -f /var/spool/postfix/etc/sasldb2

--
Henry


在Debian上安装 Postfix+SASL的问题解决

上 篇 提到Debian的postfix套件预设用chroot安装在/var/spool/postfix。因此, /etc/sasldb2要搬到/var/spool/postfix/etc/sasldb2。但是忘了提权限 问 题,一定要将postfix这个用户加入sasl群组。我在 /etc/group中修改了mail和sasl两个群组:

mail:x:8:dovecot,postfix
sasl:x:45:postfix

要让员工在公司网路外使用SMTP服务器寄信,需要在 /etc/postfix/main.cf 中增加设定:

smtpd_sasl_auth_enable = yes //开启sasl认证功能
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated, //如果不在公司网路内,能通过sasl认证者也行

然后在/etc/postfix/sasl目录内增加一个新档: smtpd.conf

pwcheck_method: saslauthd
mech_list:plain login

这是告诉postfix我们使用saslauthd来负责检验密码。saslauthd在sasl2-bin套件中,必须安装(要 安装后才有 /etc/sasldb2):

sudo apt-get install sasl2-bin

但是在Debian/Ubuntu环境下,因为chroot的关系,所以还要麻烦将saslauthd的PIDFILE目录修 改为/var /spool/postfix/var/run/saslauthd。所以请先建立这个目录,然后修改/etc/default/saslauthd:

START=yes //开机自动执行
MECHANISMS="pam” //使用pam就不需要sasldb
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd”

启动saslauthd:

sudo /etc/init.d/saslauthd start

确认一下saslauthd.pid不在/var/run,而是在/var/spool/postfix/var/run/saslauthd/ 目 录。否则可能是因为原saslauthd没有停就修改/etc/default/saslauthd,这样会造成saslauthd restart时因为找不到/var/spool/postfix/var/run/saslauthd/saslauthd.pid 而无法重启。

tail -f /var/log/mail log,在公司网路外寄一封邮件看看,应该是没有问题了。

 

聊天记录:
[2008-6-24 10:49:54] CHT IT Henry 说: 我看一下再说
[2008-6-24 10:50:49] CHT IT ZubinHe 说: OK,TKS
[2008-6-24 12:03:18] CHT IT Henry 说: 我移除了postfix openssh-client openssh-server
[2008-6-24 12:03:35] CHT IT Henry 说: 现在正在重装
[2008-6-24 12:04:03] CHT IT ZubinHe 说: OK,先吃饭吧!
[2008-6-24 12:04:09] CHT IT Henry 说: openssh-blacklist openssh-client openssh-server
[2008-6-24 12:04:31] CHT IT ZubinHe 说: 跟ssh也有关系?
[2008-6-24 12:04:37] CHT IT Henry 说: 你去吃吧
[2008-6-24 12:04:49] CHT IT Henry 说: 现在正在装postfix
[2008-6-24 12:05:04] CHT IT ZubinHe 说: 我在电脑前边吃,边看
[2008-6-24 12:05:09] CHT IT ZubinHe 说: :)
[2008-6-24 12:05:39] CHT IT Henry 说: domain name是huiying.com
[2008-6-24 12:05:45] CHT IT ZubinHe 说: no
[2008-6-24 12:06:22] CHT IT ZubinHe 说: huiying-group.com
[2008-6-24 12:06:29] CHT IT Henry 说: ok
[2008-6-24 12:07:08] CHT IT Henry 说: 装好了
[2008-6-24 12:12:57] CHT IT Henry 说: 看看Ubuntu 8.04上装的是什么pop3套件
[2008-6-24 12:13:13] CHT IT ZubinHe 说: 我现在在WINDOWS上面
[2008-6-24 12:13:27] CHT IT ZubinHe 说: 应该没有预装吧!
[2008-6-24 12:13:40] CHT IT ZubinHe 说: 要通过APT-GET装的吧
[2008-6-24 12:13:59] CHT IT Henry 说: dovecot
[2008-6-24 12:14:21] CHT IT ZubinHe 说: 没见过,有空装一下试试
[2008-6-24 12:15:03] CHT IT ZubinHe 说: 对了,现在HY主机上的POSTFIX可以进行SASL认证发MAIL了?
[2008-6-24 12:16:01] CHT IT Henry 说: 移除了
[2008-6-24 12:16:07] CHT IT Henry 说: popa3d
[2008-6-24 12:16:17] CHT IT Henry 说: 开始安装dovedot
[2008-6-24 12:16:25] CHT IT ZubinHe 说: OK
[2008-6-24 12:17:33] CHT IT Henry 说: 没有dovecot只有dovecot-pop3d和dovecot-imapd
[2008-6-24 12:19:31] CHT IT Henry 说: 装好了 dovecot
[2008-6-24 12:21:44] CHT IT Henry 说: 安装spamassassin
[2008-6-24 12:24:34] CHT IT Henry 说: 启动了spamd
[2008-6-24 12:25:27] CHT IT Henry 说: 目前没遇上问题,你试试
[2008-6-24 12:25:39] CHT IT ZubinHe 说: OK
[2008-6-24 12:31:36] CHT IT ZubinHe 说: Jun 24 08:23:01 www spamd[14628]: prefork: child states: II
Jun 24 08:27:16 www postfix/smtpd[14636]: connect from unknown[59.58.97.2]
Jun 24 08:27:16 www postfix/smtpd[14636]: NOQUEUE: reject: RCPT from unknown[59.58.97.2]: 554 5.7.1 <[email protected]> : Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.0.172]>
Jun 24 08:27:19 www postfix/smtpd[14636]: disconnect from unknown[59.58.97.2]
Jun 24 08:29:47 www postfix/smtpd[14642]: connect from unknown[59.58.97.2]
Jun 24 08:29:47 www postfix/smtpd[14642]: NOQUEUE: reject: RCPT from unknown[59.58.97.2]: 554 5.7.1 <[email protected]> : Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.0.172]>
Jun 24 08:29:50 www spamd[14628]: spamd: server killed by SIGTERM, shutting down
[2008-6-24 12:31:44] CHT IT ZubinHe 说: 没有提示我输入密码?
[2008-6-24 12:33:31] CHT IT ZubinHe 说: 你饭还没吃吧,先吃吧,我也要出去去拿修理的机箱了,回头再弄
[2008-6-24 12:34:12] CHT IT Henry 说: 必须将huiying-group.3322.org 列 入mydestination,现在应该可以了
[2008-6-24 12:35:23] CHT IT Henry 说: 我再看一下
[2008-6-24 12:36:18] CHT IT ZubinHe 说: 应该跟那个没有关系
[2008-6-24 12:36:31] CHT IT ZubinHe 说: OK,我先出去先...
[2008-6-24 12:43:14] CHT IT Henry 说: 原来是你要用这主机来转信,ok. 加上 mynetworks就可以了
[2008-6-24 12:49:14] CHT IT Henry 说: 加上一些smtpd_recipient_restrictions
[2008-6-24 12:51:02] CHT IT Henry 说: 吃饭啰
[2008-6-24 14:41:46] CHT IT ZubinHe 说: 我的目的是要让用户通过输入用户名和密码认证后才能用这台机器的SMTP发信
[2008-6-24 14:41:56] CHT IT ZubinHe 说: 加了mynetworks就不要认证了
[2008-6-24 14:48:32] CHT IT Henry 说: smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
的用意就是: 若不是在mynetwork,但是通过sasl认证也行
[2008-6-24 14:54:04] CHT IT ZubinHe 说: 我看一下
[2008-6-24 14:54:59] CHT IT ZubinHe 说: 有空的时候,把安装过程简单的写一下,谢谢!
[2008-6-24 14:56:09] CHT IT Henry 说: 安装不就是刚才apt-get install那些
[2008-6-24 14:56:43] CHT IT Henry 说: 你给我的感觉好像是第一次安装 mail server
[2008-6-24 14:58:30] CHT IT ZubinHe 说: 没有,我只是奇怪,我先前那样都正常!
[2008-6-24 15:00:11] CHT IT ZubinHe 说: 刚才我把莆田的 59.58.97.2去掉,然后重启postfix,还是不能通过认证发的
[2008-6-24 15:00:57] CHT IT ZubinHe 说: 你把你当前的IP去除后是否可以通过认证发MAIL?
[2008-6-24 15:04:19] CHT IT Henry 说: 应该是这样
[2008-6-24 15:05:34] CHT IT ZubinHe 说: 你试一下
[2008-6-24 15:05:52] CHT IT ZubinHe 说: 连跳出让我输用户和密码的对话框都没有
[2008-6-24 15:07:15] CHT IT Henry 说: 你认为应该是那里有问题呢?
[2008-6-24 15:10:21] CHT IT ZubinHe 说: postfix没有调用sasl认证
[2008-6-24 15:10:24] CHT IT Henry 说: 对
[2008-6-24 15:10:28] CHT IT Henry 说: smtpd_sasl_auth_enable = yes
[2008-6-24 15:11:17] CHT IT Henry 说: 加三行上去:
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
[2008-6-24 15:11:19] CHT IT ZubinHe 说: 我来一步一步检查一下,看还少了哪些
[2008-6-24 15:14:15] CHT IT ZubinHe 说: Jun 24 11:12:36 www last message repeated 2 times
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: SASL authentication failure: no secret in database
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: unknown[59.58.97.2]: SASL NTLM authentication failed: authentication failure
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory
Jun 24 11:12:36 www last message repeated 5 times
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: SASL authentication failure: Password verification failed
Jun 24 11:12:36 www postfix/smtpd[15023]: warning: unknown[59.58.97.2]: SASL PLAIN authentication failed: authentication failure
Jun 24 11:12:37 www postfix/smtpd[15023]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory
Jun 24 11:12:37 www last message repeated 5 times
Jun 24 11:12:37 www postfix/smtpd[15023]: warning: unknown[59.58.97.2]: SASL LOGIN authentication failed: authentication failure
[2008-6-24 15:14:50] CHT IT ZubinHe 说: 还是跟我上次一样的问题,SASL会调用/etc/sasldb2就出错没找到这个文件!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章