首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第29期->技术专题
期刊号: 类型: 关键词:
SASL&TLS on SMTP和APOP&TLS on POP3安装配置

作者:backend <backend@nsfocus.com>
主页:http://www.nsfocus.com
日期:2002-03-18

目录:

一、OpenSSL
二、Cyrus-sasl
  1、安装
  2、配置
三、支持SASL和TLS的Sendmail
  1、安装
  2、配置
  3、运行
  4、基本测试
  5、系统启动文件
  6、客户端配置
  7、SASL、TLS功能测试
四、支持APOP和TLS的POP3服务
  1、安装
  2、配置
  3、客户端配置
  4、APOP、TLS功能测试

--------------------------------------------------------------------------


环境:FreeBSD 4.5-Stable
      Build-in OpenSSL
      Cyrus-sasl 1.5.27
      Sendmail 8.12.2
      Qpopper 4.0.3

提示:虽然我是在FreeBSD平台上以ports collection方式安装本文所有需要的软件包,ports collection在安装过程的自动化处理(下载、配置、编译和安装)给我的感觉是比Windows平台安装软件还要方便和友好,但为了使用其它诸如Linux等Unix系统平台的朋友也能从本文获益,我将把ports collection的安装过程分解,尽量提供详细的安装细节。也就是说,其中的某些配置选项、编译选项等也许并不是必需的,而是FreeBSD ports collection的作者们的优化或建议。请在具体实施时注意按实际需求进行相应调整。


一、OpenSSL

对于*BSD家族,openssl是已经集成到系统的基本结构中,所以不需要安装了。对于其它Unix系统平台,基本上按缺省设置安装也就应该可以了。此外不再讲述如何安装
openssl。

现在的openssl软件包同时实现并提供SSLv2/SSLv3/TLSv1。TLS指Transport Layer
Security,它的主要功能是验证通信双方身份,并增强传输层数据的安全性。

为本文所需实现功能的配置步骤:

1、申请并获取自己的CA根证书(当然采用自签名的CA根证书也是可以的)。

2、创建相应证书的存放目录
<backend@nsfocus>> cd /etc/mail
<backend@nsfocus>> mkdir certs
<backend@nsfocus>> mkdir certs/CA

3、将自己的CA根证书(cacert.pem)复制到/etc/mail/certs目录下。

4、将用于验证对端证书的对应根证书复制到/etc/mail/certs/CA目录下(可选步骤,视情况而定)。

5、申请服务器X.509证书(用于向客户端标识身份)和客户端X.509证书(用于向其它服务器标识身份)。

6、用自己的CA根证书签发服务器X.509证书和客户端X.509证书。

7、将服务器X.509证书(server.crt.pem)及密钥(server.key.pem)和客户端X.509证书(client.crt.pem)及密钥(client.key.pem)复制到/etc/mail/certs。

8、调整证书和密钥文件的访问权限(建议为600)。

注意,上述证书和密钥都不能是加密的。

关于CA根证书和申请证书的签发不在本文讨论范围内。请参阅相关文档和网站。


二、Cyrus-sasl

SASL(即Simple Authentication and Security Layer)是为基于连接协议提供辅助认证支持的一种方法。使用SASL认证库时,应用层协议通过插入相关的认证命令来获取服务器的访问授权,同时也可以协商协议交互时的增强保护措施。当使用协商的安全措施时,一个安全协议层会被插入到应用协议层与连接层之间。

1、安装

解压缩:
<backend@nsfocus test>> tar -zxvf cyrus-sasl-1.5.27.tar.gz

编译配置:
<backend@nsfocus test>> cd cyrus-sasl-1.5.27
<backend@nsfocus cyrus-sasl-1.5.27>> ./configure --prefix=/usr/local \
                                     --sysconfdir=/usr/local/etc \
                                     --with-plugindir=/usr/local/lib/sasl \
                                     --with-dbpath=/usr/local/etc/sasldb \
                                     --includedir=/usr/local/include/sasl \
                                     --enable-static \
                                     --enable-login \
                                     --disable-plain \
                                     --disable-krb4 \
                                     --disable-anon \
                                     --with-pwcheck=/var/pwcheck \
                                     --with-rc4=openssl \
                                     --disable-gssapi \
                                     --with-dblib=ndbm

各个选项的含义请运行./configure --help获取。--disable-plain在测试时可以不要,--enable-login是必需的,否则Outlook/Outlook Express客户端不能实现SMTP认证。SASL除了支持DB3、ndbm数据库外,还支持MySQL、LDAP1和LDAP2等。

编译
<backend@nsfocus cyrus-sasl-1.5.27>> make

安装
<backend@nsfocus cyrus-sasl-1.5.27>> make install

2、配置

<backend@nsfocus cyrus-sasl-1.5.27>> cd /usr/local/lib/sasl

建立符号连接,以适应某些应用程序的需要:
<backend@nsfocus sasl>> ln -sf /usr/local/lib/sasl /usr/lib/sasl

为sendmail创建认证配置文件:
<backend@nsfocus sasl>> cat > Sendmail.conf << _EOF_
pwcheck_method: passwd
_EOF_

(注1:或指定pwcheck_method: pam。)
(注2:如果为MTA是postfix,则文件名为smtpd.conf。)

创建存放pwcheck domain socket的目录(XXX:对于某些应用程序,可能需要调整目录访问权限。):
<backend@nsfocus sasl>> mkdir /var/pwcheck

如果采用pam方式进行pwcheck,则需要增加对SMTP服务的PAM支持。在/etc/pam.conf文件中增加一行:

smtp    auth    required        pam_unix.so                   try_first_pass

关于 Cyrus SASL 认证程序库更详细的说明,请参阅 Cyrus SASL for System
Administrators。<http://www.sendmail.org/~ca/email/cyrus/sysadmin.html>


三、支持SASL和TLS的Sendmail

1、安装

如果系统中正在执行旧版的sendmail请先将其停止,停止 sendmail 的方法是 killall sendmail 或是先找出 sendmail 的 pid 然后 kill pid 将其停止。

为sendmail创建安全用户组smmsp,并将pop帐号加入其组(如果该服务器需要POP功能的话):

<backend@nsfocus test>> echo smmsp:*:25:pop >> /etc/group

解压软件包:

<backend@nsfocus test>> tar xvfz sendmail.8.12.2.tar.gz
<backend@nsfocus test>> cd sendmail-8.12.2

编译配置:

在子目录devtools/Site/下创建site.config.mc文件,以增加SASL和SSL支持。内容如下:

PREPENDDEF(`confMAPDEF',`-DMAP_REGEX')
PREPENDDEF(`confOPTIMIZE',`-O6')
APPENDDEF(`confENVDEF',`-DSASL')
APPENDDEF(`conf_sendmail_LIBS',`-lsasl')
dnl where are sasl libaries
APPENDDEF(`confLIBDIRS',`-L/usr/local/lib -L/usr/local/lib/sasl')
dnl where are sasl include files
APPENDDEF(`confINCDIRS',`-I/usr/local/include -I/usr/local/include/sasl')
APPENDDEF(`confLIBS',`-lsasl -lcrypt')

dnl allows AUTH_OPTIONS to prevent LOGIN/PLAIN over non-TLS link
APPENDDEF(`confENVDEF', `-D_FFR_SASL_OPTS')
define(`confAUTH_OPTIONS', `p')
APPENDDEF(`confENVDEF', `-DSTARTTLS')
APPENDDEF(`confLIBS', `-lssl -lcrypto')
dnl where are ssl libaries
APPENDDEF(`confLIBDIRS', `-L/usr/lib/ssl/lib')
dnl where are ssl include files
APPENDDEF(`confINCDIRS', `-I/usr/local/ssl/include')

(注意:请注意各目录在系统中是否正确。对于*BSD系统,最后两行是不需要的,因为openssl的库文件和头文件都在标准目录下。)

编译sendmail:

<backend@nsfocus sendmail-8.12.2>> cd sendmail
<backend@nsfocus sendmail>> sh Build -c -f ../devtools/Site/site.config.mc

安装:

<backend@nsfocus sendmail>> cd ..
<backend@nsfocus sendmail-8.12.2>> make all


2、配置

生成配置文件:

<backend@nsfocus sendmail-8.12.2>> cd cf/cf

将/etc/mail/freebsd.mc复制到此目录下,取名为sendmail.mc(或在当前目录下选取合适的mc文件):

<backend@nsfocus cf>> cp /etc/mail/freebsd.mc sendmail.mc

在最后一行define后添加认证配置:

TRUST_AUTH_MECH(`LOGIN CRAM-MD5 DIGEST-MD5')
define(`confAUTH_MECHANISMS', `LOGIN CRAM-MD5 DIGEST-MD5')dnl

define(`CERT_DIR', `/etc/mail/certs')
define(`confCACERT', `CERT_DIR/cacert.pem')
define(`confCACERT_PATH', `CERT_DIR/CA')

define(`confSERVER_CERT', `CERT_DIR/server.crt.pem')
define(`confSERVER_KEY', `CERT_DIR/server.key.pem')
define(`confCLIENT_CERT', `CERT_DIR/client.crt.pem')
define(`confCLIENT_KEY', `CERT_DIR/client.key.pem')

然后运行:

<backend@nsfocus cf>> sh Build sendmail.cf

注意,进行这一步前请确认相关路径和文件都已存在。
再对原有的配置文件备份以后,将新生成的sendmail.cf拷贝到目录/etc/mail中。

修正/var/mail的访问权限(可能并不需要):

<backend@nsfocus cf>> chgrp -R smmsp /var/mail


3、运行

启动pwcheck:

<backend@nsfocus cf>> nohup /usr/local/sbin/pwcheck &

启动sendmail:

<backend@nsfocus cf>> /usr/local/sbin/sendmail -bd -q30m


4、基本测试

检查SASL是否已经生效。过程如下:

<backend@nsfocus cf>> sendmail -d0.1 -bv root | grep SASL
                NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SASL

其中有SASL,则进行下一步。

运行下面命令
telnet localhost 25
ehlo localhost
注意有没有以下的信息出现.
250-xxxxxxxx
250-xxxxxxx
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5
250-xxxxxx

可能会略有不同,不过你选定的认证方式一定要有的。

测试STARTTLS是否已经生效。过程如下:

<backend@nsfocus cf>> sendmail -d0.1 -bv root | grep STARTTLS
                SCANF STARTTLS TCPWRAPPERS USERDB XDEBUG

如果其中有STARTTLS,则进行下一步。
telnet localhost 25
ehlo localhost
注意有没有以下的信息出现.
250-xxxxxxxx
250-xxxxxxx
250-STARTTLS
250-xxxxxxxx
250-xxxxxxx

如果显示没有问题,则说明sendmail的配置你已经成功了。如果没有出现上面的信息,请运行

sendmail -O loglevel=14 -bs

仔细检查问题所在。


5、修改系统启动文件,使pwcheck和sendmail进程(注意不是/usr/sbin/sendmail这个程序)自动运行。


6、客户端配置(以Outlook Express 6.0中文版为例)

如果是自签名的CA根证书,将CA根证书安装到客户机中。如果不安装,会弹出证书未被信任的警告框,但不影响功能使用。(可选)

启用SMTP认证功能。Outlook Express客户端鼠标点击操作:菜单“工具”栏->“选项”->“帐户”->“邮件”->选中邮箱所属帐号名->“属性”->“服务器”-> 选中“我的服务器要求身份验证”。

激活SMTP使用SSL的功能。Outlook Express客户端鼠标点击操作:菜单“工具”栏->“选项”->“帐户”->“邮件”->选中邮箱所属帐号名->“属性”-“高
级”->对SMTP服务选中“此服务器要求安全连接(SSL)”。

对于其它邮件客户端,请参阅帮助文档。


7、SASL、TLS功能测试

用配置好的邮件客户端通过支持SASL、TLS/SSL的SMTP服务器发送邮件。

如果发送成功,则说明SASL功能测试通过。

检查所收到的邮件头,如果包含有类似如下内容则说明TLS/SSL功能测试通过:

Received: from unknown (HELO backend.nsfocus.com) ([xxx.xxx.xxx.xxx])
(envelope-sender <backend@xxx.nsfocus.com>)
by mail.xxx.nsfocus.com (qmail-ldap-1.03)
with DES-CBC3-SHA encrypted SMTP for <backend@xxx.nsfocus.com>;
7 Mar 2002 14:45:10 -0000
Received: from bkd (bkd.nsfocus.com [xxx.xxx.xxx.xxx]) (authenticated bits=0)
by backend.nsfocus.com (8.12.2/8.12.2)
with ESMTP id g27EgOpQ017403 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128
verify=NO) for <backend@xxx.nsfocus.com>;
Thu, 7 Mar 2002 22:42:31 +0800 (CST) (envelope-from backend@xxx.nsfocus.com)

其中列出了TLS/SSL版本、加密和签名算法、强度等信息。

另外测试时可用tcpdump之类的工具来抓包分析以确定TLS是否已起作用。



四、支持APOP和TLS的POP3服务

关于APOP

通常的POP3服务在验证客户端帐号时采用USER/PASS命令方式。这种验证方式把帐号和密码都以明文形式在网络中传输,非常不安全。有鉴于此,在RFC1939中定义了用于增强安全性的APOP命令,其基本原理是客户端对一个包含时间戳和共享密码的字符串用共享密码进行MD5签名,服务器端对该签名进行验证。

本文所选用的qpopper 4.0.3能够支持APOP认证和TLS协议。

1、安装

解压缩源代码包:
<backend@nsfocus test> tar zxvf qpopper4.0.3.tar.gz
<backend@nsfocus test> cd qpopper4.0.3

编译配置:
<backend@nsfocus qpopper4.0.3> ./configure --prefix=/usr/local \
                                           --enable-apop= \
                                           /usr/local/etc/qpopper/pop.auth \
                                           --enable-nonauth-file= \
                                           /usr/local/etc/qpopper/popusers \
                                           --with-apopuid=pop \
                                           --without-gdbm \
                                           --enable-servermode \
                                           --enable-keep-temp-drop \
                                           --with-openssl=/usr

各个选项的含义请运行./configure --help获取。如果希望qpopper以独立进程方式运行,可增加--enable-standalone。--with-openssl用于指定openssl软件包的安装前缀(对于自编译的openssl,可能为/usr/local)。

编译:
<backend@nsfocus qpopper4.0.3> make

安装:
<backend@nsfocus qpopper4.0.3> make install


2、配置

初始化APOP认证用户数据库
<backend@nsfocus qpopper4.0.3> qapopauth -init

添加每一个APOP认证用户(注意,不要对使用Outlook Express客户端的帐号添加APOP密码!!!)
<backend@nsfocus qpopper4.0.3> qapopauth -user backend
Adding only APOP password for backend.
New password:
Retype new password:

生成配置文件,并根据需要进行适当配置:
<backend@nsfocus qpopper4.0.3> cp samples/qpopper.config \
                                  /usr/local/etc/qpopper/
<backend@nsfocus qpopper4.0.3> cd /usr/local/etc/qpopper
<backend@nsfocus qpopper> vi qpopper.config
必须修改的内容有:
set clear-text-password      = tls
set tls-support              = alternate-port
set tls-server-cert-file        = /etc/mail/certs/server.crt.pem
set tls-private-key-file        = /etc/mail/certs/server.key.pem
其它可选的内容有:
set reverse-lookup           = false
set server-mode              = true
set statistics               = true
set shy                      = true

对于使用超级守护进程运行方式,修改/etc/inetd.conf,使之包含以下内容:
pop3s  stream  tcp     nowait  root    /usr/local/libexec/qpopper      \
                        qpopper -f /usr/local/etc/qpopper/qpopper.config

然后:
<backend@nsfocus qpopper> killall -HUP inetd

对于使用独立守护进程运行方式,修改系统自启动文件。


3、客户端配置(以Outlook Express 6.0中文版为例)

如果是自签名的CA根证书,将CA根证书安装到客户机中。如果不安装,会弹出证书未被信任的警告框,但不影响功能使用。(可选)

激活POP3使用SSL的功能。Outlook Express客户端鼠标点击操作:菜单“工具”栏->“选项”->“帐户”->“邮件”->选中邮箱所属帐号名->“属性”->“高级”->对POP3服务选中“此服务器要求安全连接(SSL)”。

注意,当选中要求安全连接时,其上方的POP3端口将自动修改为995,即pop3s的通用
(well-known)协议端口。

对于其它邮件客户端,请参阅帮助文档。


4、测试

由于Outlook Express客户端不支持APOP命令,故不能为使用此客户端的邮箱帐号设置APOP密码。要验证APOP功能是否生效,请选用其它支持APOP功能的邮件客户端(例如TheBat、Becky!等)。请参阅软件使用帮助文档。

激活了TLS/SSL功能的POP3客户端只要能正常收信,就表明测试成功通过。或者测试时可用tcpdump之类的工具来抓包分析以确定TLS是否已起作用。
http://www.rtfm.com/ssldump/上的ssldump也是一个不错的SSLv3/TLS分析工具。

版权所有,未经许可,不得转载