3.3 六大Web服务器

统计数据显示,超过80%的Web应用程序和网站都使用开源Web服务器。目前最为流行的Web服务器有Apache HTTP Server、IIS、GFE、Nginx、Lighttpd和Tomcat等。

3.3.1 Apache HTTP Server

Apache HTTP Server(简称Apache),是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数操作系统中运行,由于其具有的跨平台性和安全性,被广泛使用,是流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,Perl/Python解释器可被编译到服务器中,可以创建一个每天有数百万人访问的Web服务器。

Apache起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发。此后,Apache被开放源代码团体的成员不断发展和加强。Apache服务器拥有牢靠可信的美誉,已应用在超过半数的网站中,特别是热门和访问量最大的网站。

Apache HTTP Server安全加固主要涉及以下几个方面。

1)严格设置配置文件和日志文件的权限,防止未授权访问。

使用命令chmod 600 /etc/httpd/conf/httpd.conf设置配置文件为属主可读写,其他用户无权限。

使用命令chmod 644 /var/log/httpd/*.log设置日志文件为属主可读写,其他用户只读权限。

2)安全审计方面,要满足安全日志完备性要求,关键错误、用户操作都需要记录以备查。

配置日志功能,对运行错误、用户访问等进行记录,记录内容包括时间和用户使用的IP地址等内容。

编辑httpd.conf配置文件,设置日志记录文件、记录内容和记录格式。

对以上命令说明如下。

● ErrorLog指令设置错误日志文件名和位置。错误日志是最重要的日志文件,Apache httpd将在这个文件中存放诊断信息和处理请求中出现的错误。若要将错误日志送到Syslog,则设置ErrorLog syslog。

● CustomLog指令设置访问日志的文件名和位置。访问日志中会记录服务器所处理的所有请求。

● LogFormat设置日志格式。LogLevel用于调整记录在错误日志中信息的详细程度,建议设置为notice。

3)入侵防范方面,删除缺省安装的无用文件,防止被恶意利用对系统进行攻击。

删除缺省HTML文件,位置为apache2/htdocs下的默认目录及文件。

删除缺省的CGI脚本,位置为apache2/cgi-bin目录下的所有文件。

删除Apache说明文件,位置为apache2/manual目录。

4)错误页面处理方面,通过自定义错误页面,防止敏感信息泄露。

Apache默认的错误页面会泄露系统及应用的敏感信息,因此需要采用自定义错误页面的方式,防止信息泄露。

修改httpd.conf配置文件:

其中,Customxxx.html为要设置的错误页面,需要手动建立相关文件并自定义内容。

5)禁止Apahce目录没有默认首页时,显示目录文件。

编辑httpd.conf配置文件:

将Options Indexes FollowSymLinks中的Indexes删除,就可以禁止Apache显示该目录结构。Indexes的作用是当该目录下没有index.html文件时,显示目录结构,设置完成后,需要重新启动Apache服务才能生效。

6)隐藏Apache的版本号及其他敏感信息。

修改httpd.conf配置文件:

当然,还有其他安全加固设置,产品运维工程师可根据实际需要进行设置。

3.3.2 IIS

互联网信息服务(Internet Information Services,IIS)是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。

IIS日志是每个服务器管理者都必须学会查看的,服务器的一些状况和访问IP的来源都会记录在IIS日志中,所以IIS日志对每个服务器管理者都非常重要,可方便网站管理人员查看网站的运营情况。

IIS与Window Server完全集成在一起,因而用户能够利用Windows Server和NTFS(NT File System,NT的文件系统)内置的安全特性,建立强大、灵活而安全的Internet和Intranet站点。

IIS安全加固主要涉及以下几个方面。

1)停用或删除默认站点。

IIS安装后的默认主目录是C:\inetpub\wwwroot,为了更好地抵抗踩点、刺探等攻击行为,应该更改主目录位置,禁用默认站点,新建立站点并进行安全配置。

单击“开始”→“管理工具”→“Internet信息服务(IIS)管理器”,选择相应的站点,然后右击站点,在弹出的快捷菜单中选择“停止”或“删除”选项。

2)卸载不需要的IIS角色服务。

通常下列角色可以删除:默认文档、目录浏览、CGI和在服务器端包含的文件。

3)关闭目录浏览。

在“目录浏览”中,在最右边操作栏单击“禁用”链接,即可禁用目录浏览。

4)开启日志审计。

默认情况下Web日志存放于系统目录%SystemDrive%\inetpub\logs\LogFiles中,将Web日志文件放在非网站目录和非操作系统分区,并定期对Web日志进行异地备份。

5)删除不必要的脚本映射。

在“处理程序映射”中,从列表中删除不必要的脚本。删除的原则是只保留需要的脚本映射,也可以自定义添加映射。

6)限制目录执行权限。

在“处理程序映射”中,把“编辑功能权限”中的“脚本”删除,这样即使上传了木马文件在此目录,也无法执行。

3.3.3 GFE

谷歌基础设施内部的服务需要通过谷歌前端服务(Google Front End,GFE)注册之后,才能运行于外部互联网上。GFE确保所有TLS连接使用正确的证书和安全策略,同时还能起到防御拒绝服务(Denial of Service,DoS)攻击的作用。GFE对请求的转发使用了前述的RPC安全协议。实际上,任何通过GFE注册运行于互联网的内部服务都是敏捷的反向前端代理服务,该前端不仅能提供服务的DNS公共IP,还能起到防御DoS攻击和保护TLS的作用。GFE像其他运行于谷歌基础设施的服务一样,可以应对大量的发起请求。

GFE安全加固主要涉及以下几个方面。

以谷歌运算引擎(Google Compute Engine,GCE)服务为例,简单描述谷歌云存储平台(Google Cloud Platform,GCP)的安全设计和改进。

1)GCE控制平台通过GFE显示出API接口,所以它具有和GFE实例一样的DoS攻击防御和SSL/TLS连接保护功能,与此同时,客户在运行虚拟机时,可以选择使用内置于GFE中的谷歌云服务负载平衡器,它能缓解多种类型的DoS攻击。用户认证的GCE控制面板API通过谷歌集中身份认证服务提供安全保护,如劫持检测。授权则使用中央云IAM服务完成。

2)控制面板之间的网络流量,以及从GFE到其他服务之间的流量都经过自动认证和加密,可以安全地从一个数据中心到达另一个数据中心。每个虚拟机(Virtual Machine,VM)与相关的虚拟机管理器(Virtual Machine Manger,VMM)服务实例同时运行。

3)谷歌基础设施为虚拟机提供了两个认证身份,一个用于VMM服务实例自身调用,另一个用于VMM对客户VM身份的代表,这也增加了来自VMM的调用信任。

4)GCE的永久磁盘采用静态数据加密,使用谷歌中央密钥管理系统分发的密钥进行安全保护,并允许密钥自动轮换和系统审计。另外,虚拟机隔离技术是基于硬件虚拟化的开源KVM堆栈,为了最大化的安全防护,谷歌还对KVM的核心代码进行了如Fuzzing、静态分析和手工核查等一系列的安全测试。

5)谷歌的运维安全控制也是确保数据访问遵循安全策略的关键部分。作为谷歌云平台的一部分,GCE客户的数据使用行为同样遵循GCP的使用策略,谷歌不会访问或使用客户数据,但必要的为客户提供服务的情况除外。

3.3.4 Nginx

Nginx(engine x)是一个高性能的HTTP和反向代理Web服务器,同时也提供了IMAP/POP3/SMTP服务。俄罗斯的Igor Sysoev从2002年开始开发Nginx,并在2004年发布了第一个公开版本。Nginx的开发是为了解决C10K(C10K是如何处理1万个并发连接的简写)问题,目前,全球有超过30%的网站在使用Nginx。

Nginx作为负载均衡服务既可以在内部直接支持Rails和PHP程序对外进行服务,也可以支持作为HTTP代理服务对外进行服务。Nginx采用C语言编写,无论是系统资源开销还是CPU使用效率都比较好。

Nginx安全加固主要涉及以下几个方面。

1)禁止目录浏览。

先备份nginx.conf配置文件,然后编辑配置文件,在HTTP模块中添加如下内容:

保存,然后重启Nginx服务。

2)隐藏版本信息。

先备份nginx.conf配置文件,然后编辑配置文件,在http模块中添加如下内容:

保存,然后重启Nginx服务。

3)限制HTTP请求的方法。

先备份nginx.conf配置文件,然后编辑配置文件,添加如下内容:

保存,然后重启Nginx服务。只允许常用的GET、POST和HEAD方法。

4)Nginx降权。

先备份nginx.conf配置文件,然后编辑配置文件,添加如下内容:

保存,然后重启Nginx服务。

5)防盗链。

先备份nginx.conf配置文件,然后编辑配置文件,在server标签内添加如下内容:

保存,然后重启Nginx服务。

6)设置禁止部分搜索引擎蜘蛛人程序爬行网站。

7)设置禁止部分安全扫描工具扫描网站。

3.3.5 Lighttpd

Lighttpd是一个德国人领导的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的Web服务器环境。Lighttpd具有非常低的内存开销、CPU占用率低、效能好及丰富的模块等特点。

Lighttpd是众多开源、轻量级的Web服务器中较为优秀的一个,支持FastCGI、CGI、Auth、输出压缩、URL重写和Alias等重要功能。Apache之所以流行,很大程度也是因为其功能丰富,而在Lighttpd上也实现了很多相应的功能,这点对于Apache的用户是非常重要的,因为迁移到Lighttpd就必须面对这些问题。

Lighttpd安全加固主要涉及以下几个方面。

1)Lighttpd SSL安全优化与HTTP安全头设置。

2)强制HTTP定向到HTTPS的部分配置如下。

3)禁用SSL Compression(抵御CRIME攻击)。

CRIME攻击的原理:通过在受害者的浏览器中运行JavaScript代码并同时监听HTTPS传输数据,解密会话Cookie。

3.3.6 Tomcat

Apache只支持静态网页,像PHP、CGI和JSP等动态网页就需要Tomcat来处理。Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和Java Server Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视为一个单独的Web服务器。但是,不能将Tomcat和Apache Web服务器混淆,Apache Web Server是一个用C语言实现的HTTP Web Server;这两个HTTP Web Server不是捆绑在一起的。Apache Tomcat包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。Apache、Nginx和Tomcat并称为网页服务三剑客。

Tomcat安全加固主要涉及以下几个方面。

1)网络访问控制。

如果业务不需要使用Tomcat管理后台和管理业务代码,可以直接将Tomcat部署目录下webapps文件夹中的manager、host-manager文件夹全部删除,并注释Tomcat目录下conf文件夹中的tomcat-users.xml文件中的所有代码。

如果业务系统确实需要使用Tomcat管理后台,进行业务代码的发布和管理,建议为Tomcat管理后台配置强口令,并修改默认admin用户,且密码长度不低于10位,必须包含大写字母、特殊符号和数字组合。

2)开启Tomcat的访问日志。

修改conf/server.xml文件,将下列代码取消注释:

启用访问日志功能,重启Tomcat服务后,在tomcat_home/logs文件夹中就可以看到访问日志。

3)禁用Tomcat默认账号。

打开conf/tomcat-user.xml文件,将以下用户注释掉:

4)屏蔽目录文件自动列出。

编辑conf/web.xml文件如下。

这里listings的值为false,则不列出,true为允许列出。

5)脚本权限回收。

控制CATALINAHOME/bin目录下的start.sh、catalina.sh、shutdown.sh的可执行权限。

6)禁用PUT、DELETE等一些不必要的HTTP方法。

不同Web服务器的默认配置都不安全,需要做进一步加固与优化,这对于系统上线与运维很重要。