RHEL 5 上 dovecot+sendmail 的 SSL/TLS 实现

qmail 在那台 Sun E450 上的免费日子终于结束了。 迎来了自己的 RHEL5 跑在
Intel(R) Core(TM)2 Duo CPU E8300 @ 2.83GHz
MemTotal: 4002428 kB
而新的邮件系统添加的 SSL/TLS 功能,也让系统有了更亮丽的特色。

1. 检查相关软件是否已经安装:

dovecot-1.0-1.2.rc15.el5
sendmail-8.13.8-2.el5
sendmail-cf-8.13.8-2.el5
spamassassin-3.1.7-4.el5

2.配置 dovecot
我用的是简单的 /etc/shadow 文件的认证
[root@freelamp certs]# dovecot -n
# /etc/dovecot.conf
protocols: pop3s
login_dir: /var/run/dovecot/login
login_executable: /usr/libexec/dovecot/pop3-login
login_greeting: FreeLAMP.com Day Day Up
mail_location: mbox:~/mail:INBOX=/var/mail/%u
mail_executable: /usr/libexec/dovecot/pop3
mail_plugin_dir: /usr/lib/dovecot/pop3
auth default:
mechanisms: plain login
cache_size: 1024
passdb:
driver: shadow
userdb:
driver: passwd

这里只用了 pop3s 协议,也就是 995 端口。

3. 配置 dovecot 证书
vi /etc/pki/dovecot/dovecot-openssl.cnf
mv /etc/pki/dovecot/private/dovecot.pem /etc/pki/dovecot/private/dovecot.pem.orig
mv /etc/pki/dovecot/certs/dovecot.pem /etc/pki/dovecot/certs/dovecot.pem.orig

生成新的自己 domain 的证书
/usr/share/doc/dovecot-1.0/examples/mkcert.sh
mv /etc/pki/dovecot/private/dovecot.pem /etc/pki/dovecot/private/mydomain.pem
mv /etc/pki/dovecot/certs/dovecot.pem /etc/pki/dovecot/certs/mydomain.pem

主要修改的地方是:
ssl_disable=no
ssl_cert_file=/etc/pki/dovecot/certs/mydomain.pem
ssl_key_file=/etc/pki/dovecot/private/mydomain.pem
ssl_parameters_regenerate=168
verbose_ssl=no

这样,POP3S 收取邮件时,就可以在 /etc/log/maillog 里看到这样的日志:
Oct 8 22:22:40 freelamp dovecot: pop3-login: Login: user=, method=PLAIN, rip=::ffff:61.171.62.106, lip=::ffff:61.152.249.2, TLS

至此,POP3 的加密完成。下面介绍 SMTP 的加密。

1. 生成 CA 证书
cd /etc/pki/tls/misc
./CA -newca
根据提示输入,Common Name 输入自己的邮件服务器主机名字,mail.yourdomain.com
会生成两个文件:
/etc/pki/CA/cacert.pem (CA证书,你可以和其他通信的机构交换这个证书)
/etc/pki/CA/private/cakey.pem(密码保护的私密证书,用来签名和撤销证书)

2.生成私密和证书签名请求(CSR)
./CA -newreq
在 /etc/pki/tls/misc 目录下生成两个文件:
/etc/pki/tls/misc/newreq.pem
/etc/pki/tls/misc/newkey.pem

3.签名:
./CA -sign
这一步生成 /etc/pki/CA/newcerts/.pem 和 /etc/pki/tls/misc/newcert.pem 2个一样的文件。

4.拷贝证书到 sendmail 的证书目录下,并修改文件权限
mkdir /etc/mail/certs
cp /etc/pki/CA/cacert.pem /etc/mail/certs
cp /etc/pki/tls/misc/newcert.pem /etc/mail/certs/mycert.pem
openssl pkcs8 -in newkey.pem -topk8 -nocrypt -out mykey.pem (解决 SSL_CTX_use_PrivateKey_file Error 问题)
cp /etc/pki/tls/misc/mykey.pem /etc/mail/certs

chmod -R 700 /etc/mail/certs
chown -R root:sys /etc/mail/certs

5.配置 sendmail,并重启
修改 /etc/mail/sendmail.mc
define(`confCACERT_PATH’, `/etc/mail/certs’)dnl
define(`confCACERT’, `/etc/mail/certs/cacert.pem’)dnl
define(`confSERVER_CERT’, `/etc/mail/certs/mycert.pem’)dnl
define(`confSERVER_KEY’, `/etc/mail/certs/mykey.pem’)dnl
define(`confCLIENT_CERT’, `/etc/mail/certs/mycert.pem’)dnl
define(`confCLIENT_KEY’, `/etc/mail/certs/mykey.pem’)dnl

测试 Sendmail 是否编译支持 STARTTLS:
$ sendmail -bt -d0.8 < /dev/null

Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF STARTTLS TCPWRAPPERS
USERDB USE_LDAP_INIT

m4 /etc/mail/sendmail.mc >/etc/mail/sendmail.cf
service sendmail restart

6.从客户端检查:
telnet mail.freelamp.com 25
EHLO your_hostname

应该看到:
250-STARTTLS

至此, SMTP 的加密功能完成,下面结合 Spamassassin 的反垃圾邮件功能。

spamassassin 结合 procmail 实现 Anti Spamming 机制:

vi /etc/sysconfig/spamassassin
SPAMDOPTIONS=”-d -c -l -m5 -H”

建立 /etc/procmailrc 文件:
[root@freelamp mail]# cat /etc/procmailrc
# /etc/procmailrc
LOGABSTRACT=all
LOGFILE=/var/spool/mail/procmail.log
VERBOSE=off

# Send all mail through Spamassassin

:0 fw
* < 256000
| /usr/bin/spamc -u mail

:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*
/var/mail/spam10

如果 SA 分数大于10 的话,邮件就被移到 /var/mail/spam10 文件里。

而 procmail.log 里面会看到下面的日志:

From CharleyhaugenKoch@wftv.com Sat Oct 18 00:46:18 2008
Subject: [SPAM] free slot machines to play
Folder: /var/mail/spam10 2662

用 statmail /var/spool/mail/procmail.log 可以查看邮件过滤的统计。
其他需要注意的一些小事情:

其他,每次修改配置,需要重启服务,例如:
service spamassassin restart

可以修改 /etc/mail/spamassassin/local.cf 来添加白名单,黑名单等等。

sendmail 对多个 domain 的支持:
把需要转发的域名加入 /etc/mail/local-host-names

修改域名,用户映射表:/etc/mail/virtusertable
makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

对 alias 的修改: /etc/aliases,然后运行 newaliases 。

ThunderBird 邮件客户端使用加密的 SMTP/POP3 的设置:
POP3S: 账户设置->服务器设置->安全设置->SSL,端口会自动变成 995 。
SMTPS: 外发服务器(SMTP)->也是选择 SSL,端口自动变成 465。

安装 Remember Mismatched Domains 1.4.6 插件 (https://addons.mozilla.org/en-US/thunderbird/addon/2131)
以解决每次都遇到 Remember Mismatched Domains Extension – Mozilla Add-ons
thunderbird security error domain name mismatch

iptables 的设置文件为: /etc/sysconfig/iptables ,修改后 servie iptables restart

SA 默认的分数清单:
http://spamassassin.apache.org/tests_3_2_x.html

相关文章

您可以 发表评论, 或者从您的网站trackback

发表评论

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-spam image