tomcat安全加固和规范

tomcat是一个开源Web服务器,基于TomcatWeb运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐。不过,在默认配置下其存在一定的安全隐患,可被恶意攻击。以下是一些安全加固的方法:

版本安全

升级到最新稳定版,出于稳定性考虑,不建议进行跨版本升级。

服务降权

不要使用root用户启动tomcat,使用用普通用户启动Tomcat,集群内用户名统一UID

端口保护

1 更改tomcat管理端口8005 ,此端口有权限关闭tomcat服务,但要求端口配置在8000~8999之间,并更改shutdown执行的命令
2 若 Tomcat 都是放在内网的,则针对 Tomcat 服务的监听地址都是内网地址
3 修改默认的ajp 8009端口为不易冲突(大于1024),但要求端口配置在8000~8999之间

禁用管理端

1 删除默认CATALINA_HOME/conf/tomcat-users.xml文件,重启tomcat将会自动生成新的文件 2 删除CATALINA_HOME/webapps下载默认的所有目录和文件
3 将tomcat应用根目录配置为tomcat安装目录以外的目录

隐藏Tomcat的版本信息

针对该信息的显示是由一个jar包控制的,该jar包存放在$CATALINA_HOME/lib目录下,名称为 catalina.jar,
通过 jar xf 命令解压这个 jar 包会得到两个目录 META-INF 和 org ,
修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段来实现来更改我们tomcat的版本信息

关闭war自动部署

默认 Tomcat 是开启了对war包的热部署的。为了防止被植入木马等恶意程序,因此我们要关闭自动部署。

修改实例:

<Host name="localhost" appBase="" unpackWARs="false" autoDeploy="false">

自定义错误页面

编辑conf/web.xml,在</web-app>标签上添加以下内容:

[
复制代码

](javascript:void(0); "复制代码")

<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.html</location>
</error-page>

[
复制代码

](javascript:void(0); "复制代码")

屏蔽目录文件自动列出

编辑conf/web.xml文件

[
复制代码

](javascript:void(0); "复制代码")

<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<param-value>false</param-value> 这里false为不列出,true为充许列出

[
复制代码

](javascript:void(0); "复制代码")

多虚拟主机

强烈建议不要使用 Tomcat 的虚拟主机,推荐每个站点使用一个实例。即,可以启动多个 Tomcat,而不是启动一个 Tomcat 里面包含多个虚拟主机。
因为 Tomcat是多线程,共享内存,任何一个虚拟主机中的应用崩溃,都会影响到所有应用程序。虽然采用多实例的方式会产生过多的开销,但至少保障了应用程序的隔离和安全。

脚本权限回收

控制CATALINAHOME/bin目录下的start.sh、catalina.sh、shutdown.sh的可执行权限
chmod−R744 CATALINA_HOME/bin/*

分离 Tomcat 和项目的用户

为了防止 Tomcat 被植入 web shell 程序后,可以修改项目文件。因此我们要将 Tomcat 和项目的属主做分离,这样子,即便被搞,他也无法创建和编辑项目文件。

server head重写

在HTTP Connector配置中加入server的配置 server="server_name",默认是Apache-Copyote/1.1

通过配置,限定访问的IP来源

<Host name="localhost" appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30,192.168.2." deny=""/>
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="www.test.com,
.test.com" deny=""/>
</Host>

访问日志格式规范

开启tomcat默认访问日志中Referer和User-Agent记录

标准配置:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false" />

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,915评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,951评论 6 342
  • 转自陈明乾的博客,可能有一定更新。 转原文声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 ...
    LUNJINGJIE阅读 4,002评论 1 33
  • 1 目录结构 /bin:脚本文件目录。 /common/lib:存放所有web项目都可以访问的公共jar包(使用C...
    SkTj阅读 3,680评论 0 3
  • 昨天停更了,今天也会停更。 想再整理一下。虽然看的人不多。但是想对自己负责,也想对有兴趣读的人负责。 对大家说声抱...
    风止于秋阅读 299评论 0 0