Debian+Postfix-SASL认证配置全解
目录
1
所需套件
2 Mail Relay
简介
3
让
Postfix
支援
Cyrus-SASL? V2
认证:(
Debian Sarge
)
4
检测方式
所需套件
postfix-tls sasl2-bin libsasl2-modules
(
apt-get install postfix-tls sasl2-bin libsasl2-modules
)
Mail Relay
简介
所谓的
Mail Relay
,指的就是
Mail Server
会不会替使用者将信转寄到外部去。
比如说,我将信寄给
[email]tetralet@pchome.com.tw[/email]
,如果
[email]tetralet@pchome.com.tw[/email]
这个信箱并不是位于本机上,那么这封信将会转给
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
已经正确启动了。
本文转自yahoon 51CTO博客,原文链接:http://blog.51cto.com/yahoon/40091,如需转载请自行联系原作者