1、Linux下安全高效Web邮件服务器 利用浏览器通过web方式来收发电子邮件的服务或技术(WebMail),不需借助邮件客户端,可以说只要能上网就能使用极大地方便了用户对邮件的收发。对于不能熟练使用邮件客户端, 或者在网吧不便使用邮件客户端的用户来说,WebMail更是必不可少的选择。另外, 设定 pop3 server, smtp server 等对于某些使用者来说也有点困难。这时候 WebMail 就显出它的好处了。 ebMail 就是使用者透过浏览器连到web服务器, 而由 web server 上的程序负责作收信/送信的动作. 使用者直接透过 browser 作读信/
2、写信等操作, 信件其实并不存在使用者的计算机上. 因此无论使用者用的是哪一部计算机, 只要可以连上网络, 都可以使用读到之前与新收到的信件。 另外一个好处是 WebMail 不容易因为读取含有病毒的档案而导致中毒, 更不会发生个人邮件系统中毒后, 寄送大量病毒信件给其它亲朋好友的这种惨剧。 一、 软件概述与下载: Email能够成为当今Internet上应用最广泛的网络服务,WebMail可谓功不可没。 在Linux下系统中MTA服务的软件有许多,常用Sendmail、Qmail、Postfix等软件,本文使用RHEL 4.0 + Postfix + dovecot + Apac
3、he + OpenWebMail制作一个集POP和WebMail等功能的电子邮件系统。下面讲述如何把Linux机器配置成一个基于Web的电子邮件系统。这个电子邮件系统可以用于一个小团体或者组织之中。当然如果你家里有一个互联网连接(比如ADSL),那么它也可以用安全的方式远程检测你的电子邮件。 Postfix是一个非常优秀的MTA,她素以高效、安全的特点而著称。Postfix是作者在UNIX上所见过的MTA中在反垃圾邮件(Anti-Spam或Anti-UCE)方面做得最好的一个,甚至有很多公司在Postfix代码的基础上进行二次开发而推出反垃圾邮件网关产品。MTA的反垃圾邮件功能,实际
4、上就是在MTA处理过程中对会话进行过滤。这个过滤不但过滤了发往自身的垃圾邮件,而且还防止了自身被恶意利用发送垃圾邮件。Postfix实现了目前所有主要的MTA过滤技术。postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。和Sendmail相比Postfix更快、更容易管理、更灵活、更安全,同时还与sendmail保持足够的兼容性。Sendmail相比Postfix对比见表1。 表1 Sendmail与Postfix的对比 Open Webmail 优点: 良好的使用接口 、 多国语言 (目前共支持超过 30 种语言
5、) 、 多组图示,多组布景,可以依个人喜好自订背景、 在线更改密码 (必需记得原来的密码)、 与 Outlook 接近的多媒体信件显示能力 、 多种字集内码自动转换、 支援 HTML 信件编写 、拼字检查 (英文字典字数可能不足)、 支持草稿暂存 、 可动态切换写信字集内码、 POP3 外部邮件 、 邮件规则 (可建立过滤规则 ) 、 信件“搬移/复制/删除/下载”功能、 信箱“ 建立/重整/更名/删除/下载”功能 、 通讯簿 、 全文检索 、自动清除垃圾桶 N 天以上邮件。openwebmail缺点:由于openwebmail使用perl脚本语言编写的,执行速度可能不如php。OpenWeb
6、mail主页提供许多格式的软件,请根据Linux发行版本选择合适的软件包。 本文使用rpm格式。 本文设定一台Linux服务器配域名:,i p地址:192.168.1. 253, 邮件主机:。 所有需要安装的软件:cyrus-sasl、dovecot、httpd 、perl-Text-Iconv、perl-suidperl、perl-Compress-Zlib、perl-CGI-SpeedyCGI 。其中Postfix、sendmail +cyrus-sasl+dovecot+httpd+perl在安装系统时一起安装。 其他软件需要进行下载:
7、 #wget #wget http://distro.ibiblio.org/pub/linux/distributions/startcom/ML-4.0.4/updates/i386/perl-suidperl-5.8.5-12.1.1.i386.rpm #wget http://mirrors.ircam.fr/pub/dag/packages/perl-Text-Iconv/perl-Text-Iconv-1.4-1.2.el4.rf.i386.rpm #wget http://ftp.belnet.be/packages/dries.ulys
8、sis.org/redhat/el4/en/i386/RPMS.dries/perl-CGI-SpeedyCGI-2.22-1.2.el4.rf.i386.rpm 二、 postfix的安装与启动过程: (1)杀掉所有Sendmail进程 #killall sendmail (停止所有的Sendmaail进程) sendmail: no process killed # rpm -ivh postfix-2.2.5-3.rhel4.i386.rpm (2)启动dovecot服务过程: # service postfix st
9、art Starting postfix: [ 确定 ] # service dovecot start 启动 Dovecot Imap: [ 确定 ] 现在可以使用邮件服务器发送邮件了,但是还不能下载邮件,因为新版redhat Linux中 dovecot代替了imap软件包,但是还没有绑定POP3和POP协议,下面修改配置文件: /etc/dovecot.conf, #protocols = imap imap3 protocols = imap imap3 pop3 pop3s auth_passdb =
10、 更改为: auth_passdb = shadow 然后重新启动dovecot服务: # service dovecot restart 停止 Dovecot Imap: [ 确定 ] 启动 Dovecot Imap: [ 确定 ] (3)修改postfix邮件服务器配置文件: #myhostname = host.domain.tld 更改为: myhostname = #mydomain = domain.tld 更改为: mydomain = #m
11、yorigin = $mydomain 更改为: Myorigin = #inet_interfaces = all 更改为: Inet_interfaces =all #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain 更改为: mydestination = $myhostname, localhost.$mydomain, l
12、ocalhost, $mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain #mynetworks = host 更改为: mynetworks = host (4)端口测试: # telnet 25 (测试25端口) Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 ESMTP Postfix
13、 quit 221 Bye Connection closed by foreign host. # telnet 110 (测试110端口) Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. +OK dovecot ready. quit +OK Logging out Connection closed by foreign host. (5)
14、安装防范病毒软件 F-Prot Antivirus软件包安装和配置过程: Wegt http://files.f- 安装F-Prot Antivirus软件包前,请先启动SpamAssassin服务器: Matt Sergeant、Craig Hughes和Justin Mason于发布的SpamAssassin(SA)。目前最新版本是3.0.2,它是较为流行的反垃圾邮件软件,据SpamAssassin供应商 Deersoft的统计,目前大约有3万台Unix服务器上使用了SpamAssassin。SpamAssassin利用Perl语言来对邮件内
15、容进行规则匹配,从而达到判断过滤垃圾邮件的目的。它的判断方式是基于评分的方式,也就是说如果这封邮件符合某条规则,则给与一定分值;当累计的分值超过了一定限度时,则判定该邮件为垃圾邮件。对Sendmail、Qmail、Postfix和Exim等各种邮件平台都适用。SpamAssassin的安装过程比较简单。 # service spamassassin start (启动SpamAssassin服务器) Starting spamd: [ 确定
16、 ] # rpm -ivh fp-linux-ws.rpm (安装F-Prot Antivirus软件包) 升级的F-Prot Antivirus病毒库的操作: # cd /usr/local/f-prot/tools/ # ./check-updates.pl (升级命令) *************************************** * F-Prot Antivirus Updater * *************************************** N
17、othing to be done... MailScanner软件包安装和配置过程: Wegt http://www.sng.ecs.soton.ac.uk/mailscanner/downloads.shtml # mv MailScanner-4.50.5-1.rpm.tar.gz /tmp/source/ (移动文件到/tmp/source/目录中) # cd /tmp/source/ (进入source目录中) # tar -zxvf MailScanner-4.50.5-1.rpm.tar.gz (MailScanner解压过程)
18、 # cd MailScanner-4.50.5-1 (进入MailScanner软件解压目录) # ./install.sh (执行MailScanner软件的安装命令) 更改incoming、quarantine两个目录相关用户和组的使用权限: # chown postfix.postfix /var/spool/MailScanner/incoming # chown postfix.postfix /var/spool/MailScanner/quarantine 修改/etc/MailScanner/目录下的MailSca
19、nner.conf文件,修改详细内容以下: 详细内容: Run As User = Run As Group = 更改为: Run As User = postfix Run As Group = postfix Incoming Queue Dir = /var/spool/mqueue.in Outgoing Queue Dir = /var/spool/mqueue 更改为: Incoming Queue Dir = /var/spool/postfix/hold Out
20、going Queue Dir = /var/spool/postfix/incoming MTA = sendmail 更改为: MTA = postfix Virus Scanners = none 更改为: Virus Scanners = f-prot Always Include SpamAssassin Report = no 更改为: Always Include SpamAssassin Report = yes Use SpamAssassin = no 更改为
21、 Use SpamAssassin = yes Required SpamAssassin Score = 6 更改为: Required SpamAssassin Score = 4 SpamAssassin User State Dir = 更改为: SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin SpamAssassin Install Prefix = 更改为: SpamAssassin Ins
22、tall Prefix = /usr/bin SpamAssassin Local Rules Dir = 更改为: SpamAssassin Local Rules Dir = /etc/MailScanner 修改/etc/postfix/目录下的header_checks文件,新增加以下一行内容到文件中,详细内容如下: /^Received:/ HOLD 修改/etc/postfix/目录下的main.conf文件,详细内容如下: #header_checks = regexp:/etc/postfix/header
23、checks 更改为: header_checks = regexp:/etc/postfix/header_checks 停止Postfix服务器,因为启动MailScanner服务时会自动启动Postfix服务器: 启动MailScanner服务器和设置开机时自动启动: # service MailScanner start Starting MailScanner daemons: incoming postfix:
24、 [ 确定 ] outgoing postfix: [ 确定 ] MailScanner: [ 确定 ] # chkconfig --level 33 MailScanner on (6)病毒检测测试: 从网站(http://www.eicar.org/anti_virus_test_fi
25、le.htm)下载一个测试病毒文件:。编写一封测试邮件(附件中带上的文件)。系统检测到邮件病毒,见图1。 图1 病毒检测界面 查看maillog日志,请确认日志中是否存在以下相近的信息: 详细内容: Jan 8 12:11:08 mail MailScanner[9199]: Virus Scanning: F-Prot found virus EICAR_Test_File Jan 8 12:11:08 mail MailScanner[9199]: Virus Scanning: F-Prot found 1 infecti
26、ons Jan 8 12:11:08 mail MailScanner[9199]: Infected message E73EE13C07C.07685 came from Jan 8 12:11:08 mail MailScanner[9199]: Virus Scanning: Found 1 viruses Jan 8 12:11:09 mail MailScanner[9199]: Requeue: A9D6413C085.39DDE to 6414713C089 Jan 8 12:11:09 mail MailScanner[9199
27、]: Uninfected: Delivered 1 messages 如出现以上的日志信息就代表您的F-Prot Antivirus + MailScanner-4.31.6-1架设已经成功啦, (7)如果希望邮件服务器每次启动都能自动运行,可以用服务设置功能。以root权限运行命令: #redhat-config-services 图2 邮件服务器自动启动 打开如图2所示的窗口,在dovecot服务选项加上勾,然后重新启动系统,这样系统会启动邮件服务。 三、 安装配置Web邮件服务器 (1)软件安装 #r
28、pm -ivh perl-5.8.5-12.1.i386.rpm # rpm -ivh perl-CGI-SpeedyCGI-2.22-1.2.el4.rf.i386.rpm # rpm -ivh perl-Compress-Zlib-1.34-1.2.el4.rf.i386.rpm # rpm -ivh perl-suidperl-5.8.5-12.1.1.i386.rpm # rpm -ivh perl-Text-Iconv-1.4-1.2.el4.rf.i386.rpm # rpm -ivh openwebmail-2.51-1.i386
29、rpm (2) 初始化配置文件 运行命令: # /var/www/cgi-bin/openwebmail/openwebmail-tool.pl ――init 根据屏幕提示修改配置文件,见图3。 图3 屏幕提示要修改配置文件 (3)修改配置文件 #cd /var/www/cgi-bin/openwebmail/etc/ 使用编辑器手工建立 dbm.conf文件,主要包括以下内容: dbm_ext .db dbmopen_ext .dbm
30、 dbmopen_haslock no (4)重新初始化配置文件 # /openwebmail-tool.pl –init 系统询问是否发送站点包括选择不发送(按“n”按钮),见图4。 图4 重新初试化设定 (5)修改其他文件 把/var/www/cgi-bin/openwebmail/etc/openwebmail.conf 文件中字段: # domainnames auto 更改为: domainnames #更改为自己定义的域名# default_languag
31、e en 更改为: default_language zh_CN.GB2312 #更改为简体中文版介面# 把/var/www/cgi-bin/openwebmail/etc/defaults/openwebmail.conf文件中的字断: smtpserver 127.0.0.1 更改为: smtpserver 192.168.1.253 #更改smtp服务器的地址# authpop3_server localhost 更改为: authpop3_server 192.168.1.253 #
32、更改pop3服务器的地址# 把/var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf文件中的字断: dbmopen_ext none 更改为: dbmopen_ext .db dbmopen_haslock no 更改为: dbmopen_haslock yes smtpserver 192.168.1.253 #添加smtp服务器的地址# (6)再次运行openwebmail-tool.pl文件 然后在浏览器输入:http://localh
33、ost/var/www/cgi-bin/openwebmail/openwebmail.pl即刻进入见图5。 图5 openwebmai的登录界面 至此,Webmail邮件服务器设定就完成了! 四、openwebmail的系统基本设置和管理 (1) 基本工作界面设定 图5是 中文Openwebmail工作界面。 图5 中文Openwebmail工作界面 图5是基本设置选项,它允许你改变许多设定以适合你的邮寄需求。假如你是初次使用Open Webmail,你应当先进入设定控制画面,而不是直接到收件箱。
34、首先点击配置按钮进行设置选项的单元。包括:个人信息 ,外观设定 ,读信相关设定 ,邮件操作设定 ,回信设定 ,邮件过滤设定 ,日程表设定 ,其他设定。见图6。 图6 Openwebmail的配置界面 个人信息主要内容见下表。 外观设定可以让你改变颜色、格式、大小、图片和其他的显示设定。主要内容见见下表。 读信相关设定相当简单,改变收信的方法只要确定方块勾选或是不勾选就可以了。你可以依据你的使用喜好和最适屏幕宽度来设定。 见下表。 邮件操作设定关于邮件的执行行为设定 (例如移动或是复制)。见下表。
35、 回信设定是关于信件回复时的方式 ,见下表。 邮件过滤设定决定如何过滤邮件。见下表。 日程表设定见下表。 其他设定收集一些设定项目,不一定会被归类在一起的项目。见下表。 (2)Openwebmail的使用非常简单,在的首页的“帮助”中有200页的常见操作信息。中文帮助界面见图7。 图7 Openwebmail的帮助中心 如果你无法在帮助中找到您所需要的答案,或是在安装Open Webmail需要协助,请连到下列网站... Official Open Webmail Site Source
36、F Webmail Forum FreshM Open Webmail Forum (3)openwebmail的日志文件的定期地清理 日志文件都会随着时间的推移和访问次数的增加而迅速增长,因此必须对日志文件进行定期清理以免造成磁盘空间的不必要的浪费。同时也加快了网管员查看日志所用的时间,因为打开小文件的速度比打开大文件的速度要快。要使系统重新使用空的日志文件,可以执行操作: 修改文件 /etc/logrotate.d/syslog,在文件尾加入以下内容: /var/log/openwebmail.log { postrotate
37、 /usr/bin/killall -HUP syslogd endscript} 五、增强Web邮件服务器的安全 (1)Web服务器的安全 由于使用了Apache Web服务器,所以要为其配置SSL库。这些库提供了SSL需要的功能。在你查看电子邮件时,需要有一个安全的Web服务器来保护你的密码,以及所有流到Web服务器的信息。这样可以避免别有用心的人通过监听会话来获取密码。由于Apache服务器安全不是本文关注重点,所以具体步骤请查看相关文档。 (2)保护postfix服务器 本文中openwebmail是基于post
38、fix邮件服务器的,所以要保护postfix服务器。 1、 通过阻止IP地址或主机名方式访问邮件服务器来拒收邮件: 在main.cf配置文件中使用以下行定义网络地址“ # mynetwork=192.168.1.0/24 表示除非客户端的ip地址符合$mynetworks参数定义的范围则接受该客户端的连接请求,才转发该邮件。 2.在postfix中添加RBL功能 RBL(Realtime Blackhole List)是实时黑名单。国外有一些机构提供RBL服务,它们把收集到的专发垃圾邮件的IP地址加入他们的黑名单,我们只要在post
39、fix中加入RBL认证功能,就会使我们的邮件服务器在每次收信时都自动到RBL服务器上去查实,如果信件来源于黑名单,则postfix会拒收邮件,从而少受垃圾邮件之苦。通常在mail.cf加入 map_rb1_domains=mail-abuse.org smtp_client_restrictions=reject_map1_rb1 其中第一行设置需要联系得到的RBL列表的所有主机,接着设置需要进行应用的限制。然后存盘,从新启动postfix服务器。 3 、通过化装隐藏内部邮件地址 如果网络中有发送邮件的中央邮件服务器,它为主机提供许多服务。那么
40、必须隐藏邮件地址的主机名称部分。例如在一台名为pc-服务器上有一个用户名称是joe,当joe通过Postfix网关发送邮件时,他的地址显示为:joe@pc-。对外隐藏内部主机名称是一个很好的安全策略,相关配置文件下列选项: masquerade_domains = $mydomain masquerade_exceptions = root 上面代码第一行表示:对所有域进行化装,通过变量$mydomain来完成。这意味joe@pc-以后作为joe@.出现。上面代码第二行表示:不对root用户进行化装。 4.使用header_checks & body_ch
41、ecks 要使用 header_checks 或 body_checks 請在 main.cf手工建立: header_checks = regexp:/etc/postfix/header_checks body_checks = regexp:/etc/postfix/body_checks 5.拒绝找不到 DNS 资源记录中 MX / A 记录的主机的邮件 这个机制是查寻寄件者的主机地址,再使用这个位置去做 DNS 查寻,一般在垃圾邮件发送者会随意造一个主机名称以企图蒙骗过关,对于这种手法实只要使用一个设定既可。在 main.cf 加上一行: smtp
42、d_sender_restrictions = reject_unknown_sender_domain (3) 升级openwebmail版本 早期的openwebmail版本存在一些安全隐患,所以要使用2.3以后版本。过程和安装相同。另外由于openwebmail功能强大包含系统信息也比较多,所以,您必须要了解到这个软件有可能会产生一些安全上的漏洞的。建议您随时注意openwebmail 官方网站: 六、加速邮件服务器 (1)使用speedcgi来加速 针对Openwebmail速度慢的缺点,可以使用speedcgi来加速。 # rpm -ivh
43、 perl-CGI-SpeedyCGI-2.22-1.2.el4.rf.i386.rpm 接着执行命令:“speedy_convert”,这个命令会自动设定已安装的 OpenWebMail 以便让其以 SpeedyCGI 方式执行。 (2)启动HTTP资料压缩传送 从OpenWebMail 2.10版本开始, 新增支持 HTTP 数据压缩传送功能, 对于透过调制解调器联机或是使用 PDA 上网的使用者来说, 这个功能能够大幅地降低传输网页数据所需的时间. 要让这个功能正常动作, 必须先在您的 openwebmail server 上安装 Compress-
44、Zlib模块,方法如下: # wget tar -zxvf Compress-Zlib-1.33.tar.gz cd Compress-Zlib-1.33 perl Makefile.PL make ;make install 此时在登录openwebmail时会出现“HTTP资料压缩传送”选项。这样可以加速邮件服务器运行速度。 附录资料:web前端面试题 1. W3C标准有哪些? W3C推行的主要规范有HTML,CSS,XML,XHTML和DOM(Document Object Model)。 2. 谈
45、谈Js的内存泄露问题。 3. 谈谈对Html 5的了解。 4. 谈谈对CSS 3的了解。 5. 用js实现随即选取10--100之间的10个数字,存入一个数组,并排序。 var iArray = []; funtion getRandom(istart, iend){ var iChoice = istart - iend +1; return Math.floor(Math.random() * iChoice + istart; } for(var i=0; i<10; i++){ iArray.push(getRand
46、om(10,100)); } iArray.sort(); 6. 把两个数组合并,并删除第二个元素。 var array1 = ['a','b','c']; var bArray = ['d','e','f']; var cArray = array1.concat(bArray); cArray.splice(1,1); 7. Js面向对象的几种方式。 8. 请谈谈原型方式构造对象的特点。 9. 在Css中那个属性会影响dom读取文档流的顺序。 答: float属性。 10. 请介绍几种用div实现两列布局的方案(兼容),另外要考虑文档流的加载。 11. 谈谈css
47、在浏览器中的兼容问题,详细谈谈IE6的一些bug,以及解决方案。 12. 谈谈你对闭包的理解。以及如何实现js方法的重写。 [HTML && CSS] 1.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义? 首先我讲讲如何触发两种模式: 加入xml头部声明可以触发IE浏览器的Quirks mode,触发之后,浏览器解析方式就和IE5.5一样,拥有IE5.5一样的bug和其他问题,行为(Javascript)也是如此。 IE6的触发 在XHTML的DOCTYPE前加入XML声明
48、1.0" encoding="utf-8"?> IE7的触发 在XML声明和XHTML的DOCTYPE之间加入HTML注释 IE6和IE7都可以触发的 在HTML4.01的DOCTYPE文档头部加入






