用ssh tunnel打造安全邮件系统

近期,甚至于连Google这样的企业也感觉到了邮件系统的安全问题。这里采用了相对实现成本较低的方式,通过ssh的tunnel达到邮件在传输的过程中不会受到中间人攻击造成数据泄露。

故名思义,tunnel就是在邮件服务器和企业防火墙之后设置一条逻辑上的隧道。这条隧道一方面为了数据安全,另一方面,由于ssh的压缩功能也能在一定程度上减少邮件这类纯文本传输的网络需求。

先决条件:

  1. Unix like的邮件系统,并安装了ssh-server,本例中假定邮件服务器ip为1.2.3.4
  2. 企业路由器和内网:路由最好有vpn和防火墙功能。
  3. 内网的 一台主机,配置不必太高(我用了虚拟机,64M内存已经足够近百人使用),安装有ssh-client,如果是win主机,推荐使用putty的安装版本。经过测试,个人觉得FreeBSD下的性能较好。考虑到安全,这台主机尽量不要安装远程控制台并尽可能上锁。本例假定ip 192.168.1.1。
  4. 注意整个系统的安全策略,账户策略等,相比中间人攻击这样的“高级”黑客行为,破解密码,利用漏洞永远是成本最低的方法。

SSH隧道实现安全mail
SSH隧道实现安全Mail系统示意

第一步:设置公钥方式登录:

内网主机上运行mkdir -p ~/.ssh;cd ~/.ssh;ssh-keygen –d,如果变态一点可以使用ssh-keygen -b 4096 -d增加强度,之后 不要输入任何信息,一律回车带过,很多人不能实现ssh的无验证通过,大多是因为这里没有弄好。这样~/.ssh目录下将会出现id_dsa 和id_dsa.pub两个文件。

将内网主机的id_dsa.pub文件拷贝邮件服务器,并在邮件服务器上执行cat id_dsa.pub >> ~/.ssh/authorized_keys 。尝试在内网主机上执行 ssh A主机的IP ,成功地话应该没有提示密码(即直接得到A主机的控制台)。

如果经常来小站做客的朋友会觉得这段很熟,没错它贴自这里,如果你用了windows作为内网主机,请参考这里的内容

第二步:配置管道:

写个脚本 vi /usr/sbin/ssh_tunnel
#!/bin/sh
localIP='192.168.1.1'
removteIP='1.2.3.4'
ports='25 80 110' #3个端口,smtp http pop3
for port in $ports
do
    /usr/bin/ssh -C -N -f -L $localIP:$port:$removteIP:$port root@$removteIP  &
done
chmod 755 /usr/sbin/ssh_tunnel

修改rc.local文件,在其中加入 /usr/sbin/ssh_tunnel,当然要放在exit那条之前。

windows不是很熟,写个笨蛋批处理吧ssh_tunnel.cmd

start /min cmd /c 'C:\Program Files\PuTTY\plink.exe' -C -N -f -L 192.168.1.1:25:1.2.3.4:25 root@1.2.3.4
start /min cmd /c 'C:\Program Files\PuTTY\plink.exe' -C -N -f -L 192.168.1.1:80:1.2.3.4:80 root@1.2.3.4
start /min cmd /c 'C:\Program Files\PuTTY\plink.exe' -C -N -f -L 192.168.1.1:110:1.2.3.4:110 root@1.2.3.4

其实putty的那个plink效果完全等同于ssh,当然,win下面主要是用里面的窗口程序,大多数人不怎么用而已。win下比较烦的是每次重起后都要手工加载key,执行这个批处理。希望对win熟的朋友可以提供自动解决方法。

第三步:设置邮件服务器防火墙

通过邮件服务的防火墙关闭除25和22之外的所有端口。这样做是最安全的,但这样的后果是在企业局域网之外只能发不能收邮件。VPN是比较好的折中方案。当然,如果你的邮件系统只需要内部收发邮件(那还要什么邮件系统?),你尽可以连25号也封上。

第四步:设置本地邮件客户端

将局域网内所有邮件客户端的smtp和pop都设置为192.168.1.1即可。我这里由于用了webmail,webmail同样也通过192.168.1.1访问
如果企业有自己的DNS服务器,甚至整个公司都在域管理模式之下。不妨通过本地的DNS服务器用本地IP覆盖掉外网真实IP。这样即便没有vpn,只要不封邮件服务器的110端口,在邮件客户端中设置域名,对用户来说在任何地方都是透明的。

总结:

  • 这种模式,从邮件服务器到企业局域网内的传输是加密透明的,外部很难窃取,如果定期为两边的ssh更换强化的秘钥,效果几乎可以达到变态的要求。据说4096位的秘钥的破解成本已经到了天文数字。
  • 这种方式相对成本较低,不需要太多的投入,特别是在多个分支机构之间成本优势更加突出。本想通过smtp的tls和pop的SSL进行加密,可outlook下对没有根秘证书签名的秘钥会弹出讨厌的警告框,反而增加了用户的不安。申请根证书的签名价格也不菲。
  • 由于企业的邮件系统最多的邮件往往来自于内部,这种方式可以减少差不多一半以上的互联网带宽。把带宽留给更重要的应用。
  • 同理,利用此种方式可以实现其他多种安全方案,达到双宿主机或者多机虚拟的效果,进而可以为企业节约宝贵的外网IP资源。

“用ssh tunnel打造安全邮件系统”的3个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据