课程表

网络安全课程

工具箱
速查手册

Tomcat 安全配置

当前位置:免费教程 » 其他 » 网络安全

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器,所以一般让Apache专门处理HTML,而Tomcat专门负责逻辑部分。


一、安全配置

1、安装后初始化配置

当Tomcat完成安装后你首先要做的事情如下,首次安装完成后立即删除webapps下面的所有代码:

  1. rm -rf /srv/apache-tomcat/webapps/*

注释或删除 tomcat-users.xml 所有用户权限,看上去如下:

  1. # cat conf/tomcat-users.xml
  2. <?xml version='1.0' encoding='utf-8'?>
  3. <tomcat-users>
  4. </tomcat-users>

隐藏Tomcat版本信息:

  1. vim $CATALINA_HOME/conf/server.xml
  2.  
  3. <Connector port="80" protocol="HTTP/1.1"
  4. connectionTimeout="20000"
  5. redirectPort="8443"
  6. maxThreads="8192"
  7. minSpareThreads="64"
  8. maxSpareThreads="128"
  9. acceptCount="128"
  10. enableLookups="false"
  11. server="Neo App Srv 1.0"/>
  12.  
  13.  
  14.  
  15. # curl -I http://localhost:8080/
  16. HTTP/1.1 400 Bad Request
  17. Transfer-Encoding: chunked
  18. Date: Thu, 20 Oct 2011 09:51:55 GMT
  19. Connection: close
  20. Server: Neo App Srv 1.0

服务器信息已经被改为 Server: Neo App Srv 1.0。

2、启动用户与端口

不要使用root用户启动tomcat,Java程序与C程序不同。nginx,httpd 使用root用户启动守护80端口,子进程/线程会通过setuid(),setgid()两个函数切换到普通用户。即父进程所有者是root用户,子进程与多线程所有者是一个非root用户,这个用户没有shell,无法通过ssh与控制台登陆系统,Java 的JVM 是与系统无关的,是建立在OS之上的,你使用什么用户启动Tomcat,那麽Tomcat 就会继承该所有者的权限。

这造成了一个问题,Linux系统小于1024的端口只有root可以使用,这也是为什么Tomcat默认端口是8080。如果你想使用80端口只能使用root启动Tomcat。这有带来了很多安全问题。

解决方案是创建一个不同用户,如:

  1. groupadd -g 80 daemon
  2. adduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon

注意 /sbin/nologin , 意味着该用户不能登录,同时我也没有给它指定密码,这个用户只能用于启动tomcat。

  1. chown daemon:daemon -R /srv/*
  2. su - daemon -c "/srv/apache-tomcat/bin/startup.sh"

接下来解决80端口问题, 思路就是80去调用8080,或者映射端口。下面是影射方案,80 跳转 8080

  1. iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

取消跳转:

  1. iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

查看规则:

  1. iptables -t nat -L

另一个就是从80请求去调用8080的方案,这个方案可以在 Tomcat 前段增加反向代理,例如:Nginx,Apache,Squid,Varnish或者F5, Array这类设备等等

3、应用程序安全

关闭war自动部署 unpackWARs="false" autoDeploy="false"。防止被植入木马等恶意程序,应用程序部署与tomcat启动,不能使用同一个用户。

例如tomcat 安装在 /srv目录下,Tomcat启动用户为daemon; 应用程序放在/www目录下www所有者是www用户。这样的目的是一旦tomcat被植入web shell程序,它将不能创建或编辑/www目录下面的任何内容。

  1. adduser --home /www -c "Web Application" www

JSESSIONID

修改 Cookie 变量 JSESSIONID, 这个cookie 是用于维持Session关系。建议你改为PHPSESSID。

查看tomcat配置文件server.xml是否有设置connectionTimeout值。

检查tomcat/conf/web.xml配置文件,查看是否含有如下配置:

  1. <security-constraint>
  2. <web-resource-collection>
  3. <url-pattern>/*</url-pattern>
  4. <http-method>PUT</http-method>
  5. <http-method>DELETE</http-method>
  6. <http-method>HEAD</http-method>
  7. <http-method>OPTIONS</http-method>
  8. <http-method>TRACE</http-method>
  9. </web-resource-collection>
  10. <auth-constraint>
  11. </auth-constraint>
  12. </security-constraint>
  13. <login-config>
  14. <auth-method>BASIC</auth-method>

二、Tomcat安全规范

位于生产环境的tomcat,应该有严格的安全规范,以免服务器和数据遭受损失:

1、更改服务监听端口

若 Tomcat 都是放在内网的,则针对 Tomcat 服务的监听地址都是内网地址。标准配置:

  1. <Connector port="10000" server="webserver"/>

2、telnet管理端口保护

修改默认的 8005 管理端口不易猜测(大于1024),但要求端口配置在8000~8999之间。修改SHUTDOWN命令为其他字符串。标准配置:

  1. <Server port="8578" shutdown="dangerous">

3、AJP连接端口的保护

修改默认的ajp 8009端口为不易冲突(大于1024),但要求端口配置在8000~8999之间。通过iptables规则限制ajp端口访问的权限仅为线上机器,目的在于防止线下测试流量被apache的mod_jk转发至线上tomcat服务器。标准配置:

  1. <Connector port="8349" protocol="AJP/1.3"/>

4、禁用管理端

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

a.server.xml配置

一种直接修改Host节点信息,表示全局配置:

  1. <Host name="localhost" appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false"></Host>

另一种直接在Host节点中新增Context节点,指定具体的项目:

  1. <Context path="" docBase="/usr/local/tomcat/webapps/jenkins" debug="0" reloadable="false" crossContext="true">
  2. </Context>

b.在$CATALINA_HOME/conf/Catalina/locathost目录下新增文件 test##20160506172651.xml

  1. <Context displayName="test" docBase="/data/www/tomcat_webapps/test##20160506172651.war" reloadable="false" />

5、隐藏Tomcat的版本信息

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

  1. $ cd $CATALINA_HOME/lib
  2. $ jar xf catalina.jar
  3. $ cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#'
  4. $ mkdir -p org/apache/catalina/util
  5. $ vim ServerInfo.properties
  6. server.info=nolinux # 把这个值改成其它值就行了

自定义错误页面:修改$CATALINA_HOME/conf/web.xml重定向 403/404/500等错误到指定的错误页面。

6、降权启动

Tomcat启动用户权限必须非root权限,尽量降低tomcat启动用户的目录访问权限,如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发,为了防止 Tomcat 被植入 web shell 程序后,可以修改项目文件。要将 Tomcat 和项目的属主做分离,即便被破坏也无法创建和编辑项目文件。

7、文件列表访问控制

$CATALINA_HOME/conf/web.xml文件中的default部分的listings的配置必须为false(默认),表示不列出文件列表。

8、访问限制

通过配置,限定访问的IP来源。全局设置限定IP和域名访问:

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

9、脚本权限回收

CATALINAHOME/bin目录下的start.sh、catalina.sh、shutdown.sh的可执行权限,chmod-R744CATALINA_HOME/bin/*

10、访问日志格式规范

开启tomcat默认访问日志中Referer和User-Agent记录。标准配置:

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

11、Server header重写

在HTTP Connector配置中加入server的配置,server=”chuck-server”。

来源:https://www.cnblogs.com/meetrice/p/5695127.html

http://blog.csdn.net/wenzhucjy/article/details/51487338

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号