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

Post to Twitter

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word