Tomcat安全加固

近期安全部门内部漏扫时,发现部分tomcat存在通过OPTIONS方法提交特定的请求的问题,在响应中查看allow头信息,在allow头中发现delete、put等选项,delete方法是用来调试web服务器连接的http方式,支持该方式的服务器文件可能被非法删除;put方法用来向服务器提交文件,测试显示部分请求中这些方法是允许的。借此机会,顺手整理了下针对tomcat的安全加固。

一、删除示例文档

删除webapps/docs、examples、manager、ROOT、host-manager,这个步骤不提供了,拿到tomcat一般第一件事就做这个,老生常谈了。

二、禁止列目录

打开web.xml,将listings 改成 false ,防止直接访问目录时由于找不到默认页面而列出目录下的文件。

三、修改默认端口

编辑conf/server.xml文件,把8080改成1024-65535的未使用端口。

四、禁用tomcat默认帐号

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

<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->

五、禁用不需要的http方法

对应开头,一般禁用delete,put方法,修改web.xml文件,增加如下内容:

<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>

注意,web.xml文件的修改,需重启tomcat生效。

六、启用安全cookie

防止xss跨站点攻击,tomcat6开始支持此属性,此处在context.xml中添加启用配置,context.xml配置即调用时生效不需要重启tomcat

# http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
<Context useHttpOnly="true">

七、修改tomcat版本信息

进入apache-tomcat目录lib下,找到catalina.jar,使用压缩工具依次找到org\apache\catalina\util下的ServerInfo.properties。打开ServerInfo.properties编辑:(去掉版本信息)如下:

server.info=Apache Tomcat
server.number=
server.built=

八、重定向错误页面

conf/web.xml在倒数第1行之前加如下内容:

<error-page>
     <error-code>401</error-code>
     <location>/401.htm</location>
</error-page>
<error-page>
     <error-code>404</error-code>
     <location>/404.htm</location>
</error-page>
<error-page>
     <error-code>500</error-code>
     <location>/500.htm</location>
</error-page>

然后在webapps\manger目录中创建相应的401.html\404.htm\500.htm文件,错误返回页也可在应用中配置,应用中配置则只在当前应用生效。

九、其他

以下这个项可能不完全和安全相关,也单独列下吧。

1、禁止使用root用户运行

这个只针对类linux系统而言的,一旦有漏洞,被人注入上传木马,以什么样的用户运行就获取了什么权限。

2、虚拟目录

配置类似如下:

<Host name="XXXXx" appBase="D:\webroot"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/" reloadable="true" docBase="D:\webroot\xxx\WebRoot\" />
</Host>

默认server.xml里一般只有appBase,没有docBase,两者的区别是:appBase这个目录下面的子目录将自动被部署为应用,且war文件将被自动解压缩并部署为应用。如果不想自动war部署,就把autoDeploy配置为false。默认为tomcat下的ROOT目录;docBase只是指向了你某个应用的虚拟目录,这个可以和appBase没有任何关系。这个可以拿apache httpd的默认目录DocumentRoot和虚拟主机VirtualHost对比。

3、日志审核

access log,新的版本里默认都是开启这个的:

修改conf/server.xml,取消注释如下部分:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> 

启用access_log后,重启tomcat,在tomcat_home/logs中可以看到访问日志。

发表回复

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