目录
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 会不会替使用者将信转寄到外部去。
比如说,我将信寄给 tetralet@pchome.com.tw ,如果 tetralet@pchome.com.tw 这个信箱并不是位于本机上,那么这封信将会转给 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 已经正确启动了。
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 会不会替使用者将信转寄到外部去。
比如说,我将信寄给 tetralet@pchome.com.tw ,如果 tetralet@pchome.com.tw 这个信箱并不是位于本机上,那么这封信将会转给 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 已经正确启动了。