Tomcat 安全配置与性能优化

Tomcat 安全配置与性能优化

Mr. Neo Chen (netkiller), 陈景峰(BG7NYT)

中国广东省深圳市龙华新区民治街道溪山美地
518131
+86 13113668890
+86 755 29812080
<netkiller@msn.com>

版权 2011, 2012, 2013 http://netkiller.github.com

$Date: 2013-07-23 11:48:13 +0800 (Tue, 23 Jul 2013) $

摘要

我的系列文档

Netkiller Architect 手札 Netkiller Developer 手札 Netkiller PHP 手札 Netkiller Python 手札 Netkiller Testing 手札 Netkiller Cryptography 手札
Netkiller Linux 手札 Netkiller Debian 手札 Netkiller CentOS 手札 Netkiller FreeBSD 手札 Netkiller Security 手札 Netkiller Version 手札
Netkiller Web 手札 Netkiller Monitoring 手札 Netkiller Storage 手札 Netkiller Mail 手札 Netkiller Shell 手札 Netkiller Network 手札
Netkiller Database 手札 Netkiller PostgreSQL 手札 Netkiller MySQL 手札 Netkiller NoSQL 手札 Netkiller LDAP 手札 Netkiller Cisco IOS 手札
Netkiller Multimedia 手札 Netkiller Docbook 手札 Netkiller 开源软件 手札      

目录

1. JVM 1.1. 使用 Server JRE 替代JDK。 1.2. JAVA_OPTS 2. Tomcat 优化 2.1. maxThreads 连接数限制 2.2. 虚拟主机 2.3. 压错传输 3. Tomcat 安全配置 3.1. 安装后初始化配置 3.2. 启动用户与端口 3.3. 应用程序安全 3.4. JSESSIONID

1. JVM

1.1. 使用 Server JRE 替代JDK。

服务器上不要安装JDK,请使用 Server JRE. 服务器上根本不需要编译器,代码应该在Release服务器上完成编译打包工作。

理由:一旦服务器被控制,可以防止在其服务器上编译其他恶意代码并植入到你的程序中。

1.2. JAVA_OPTS

export JAVA_OPTS="-server -Xms512m -Xmx4096m  -XX:PermSize=64M -XX:MaxPermSize=512m"

-Xms 指定初始化时化的栈内存

-Xmx 指定最大栈内存

2. Tomcat 优化

2.1. maxThreads 连接数限制

maxThreads 是 Tomcat 所能接受最大连接数。一般设置不要超过8000以上,如果你的网站访问量非常大可能使用运行多个Tomcat实例的方法。

即,在一个服务器上启动多个tomcat然后做负载均衡处理。

<Connector port="8080" address="localhost"
	maxThreads="2048" maxHttpHeaderSize="8192"
	emptySessionPath="true" protocol="HTTP/1.1"
	enableLookups="false" redirectPort="8181" acceptCount="100"
	connectionTimeout="20000" disableUploadTimeout="true" />

提示

很多做过php运维的朋友在这里会犯一个大错误,php优化服务器通常怎做法是安装cpu以及内存的情况配置连接数,连接数过万都很正常,但Java不同jvm配置要非常小心,稍有差错就会崩溃。

maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销。

2.2. 虚拟主机

不要使用Tomcat的虚拟主机,每个站点一个实例。即,启动多个tomcat.

这也是PHP运维在这里常犯的错误,PHP的做法是一个Web下面放置多个虚拟主机,而不是每个主机启动一个web服务器。Tomcat 是多线程,共享内存,任何一个虚拟主机中的应用出现崩溃,会影响到所有应用程序。采用多个实例方式虽然开销比较大,但保证了应用程序隔离与安全。

2.3. 压错传输

通常所说的gzip压缩,Tomcat通过在server.xml配置设置压缩的选项。

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               compression="on"
               compressionMinSize1="2048"
               noCompressionUserAgents="gozilla, traviata"
               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"/>

提示

压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。

3. Tomcat 安全配置

3.1. 安装后初始化配置

当Tomcat完成安装后你首先要做的事情如下:

首次安装完成后立即删除webapps下面的所有代码

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

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

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

隐藏Tomcat版本信息

vim $CATALINA_HOME/conf/server.xml

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
				maxThreads="8192"
				minSpareThreads="64"
				maxSpareThreads="128"
				acceptCount="128"
				enableLookups="false"
                server="Neo App Srv 1.0"/>

# curl -I http://localhost:8080/
HTTP/1.1 400 Bad Request
Transfer-Encoding: chunked
Date: Thu, 20 Oct 2011 09:51:55 GMT
Connection: close
Server: Neo App Srv 1.0

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

3.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。这有带来了很多安全问题。

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

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

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

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

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

下面是影射方案,80 跳转 8080

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

取消跳转
iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

查看规则
iptables -t nat -L

另一个就是从80请求去调用8080的方案

这个方案可以在 Tomcat 前段增加反向代理,例如:Nginx,Apache,Squid,Varnish或者F5, Array这类设备等等

3.3. 应用程序安全

关闭war自动部署 unpackWARs="false" autoDeploy="false"。防止被植入木马等恶意程序

应用程序部署与tomcat启动,不能使用同一个用户。

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

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

3.4. JSESSIONID

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

时间: 2024-09-17 04:30:38

Tomcat 安全配置与性能优化的相关文章

Tomcat安全配置与性能优化

omcat 是 Apache软件基金会下的一个免费.开源的WEB应用服务器,它可以运行在 Linux 和 Windows 等多个平台上,由于其性能稳定.扩展性好.免费等特点深受广大用户喜爱. 但是Tomcat的默认的配置,在安全方面还是有所隐患的,还有根据不同环境对Tomcat的性能要求也是不一样的.所以需要我们后期进行配置和优化. 一.版本安全 目前,企业常用的tomcat大版本为6.0和7.0版本,8.0版本虽然已经出了很久了,但是仍然不建议使用. 在升级版本中,需要注意的事情有两点: 1.

Tomcat性能优化

Java性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收) 代码层优化:避免过多循环嵌套.调用和复杂逻辑 调优内容: 1.增加最大连接数 2.调整工作模式 3.启用gzip压缩 4.调整JVM内存大小 5.作为Web服务器时,与Apache整合或Nginx 6.合理选择垃圾回收算法 7.尽量使用较新JDK版本 生产配置实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 <Connectorport="8080"protocol=&

tomcat服务器的性能优化

http://blog.csdn.net/Core__Code/article/details/9669269 Tomcat 生产服务器性能优化 简介 考虑一下这种场景,你开发了一个应用,它有十分优秀的布局设计,最新的特性以及其它的优秀特点.但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝.客户总是期望它们的应用应该有更好的性能.如果你在产品中使用了Tomcat服务器,那么这篇文章就会给你几方面来提升Tomcat服务器的性能.感谢ITWorld article给本文提供资源.经过沉思我已经

服务器-tomcat的内存配置怎么配置可以性能更大化呢

问题描述 tomcat的内存配置怎么配置可以性能更大化呢 tomcat的内存配置怎么配置可以性能更大化呢?服务器是64位的,tomcat是32位,,jdk也是32位的,我想问问下tomcat的最大内存可以设置多大可以更好发挥性能,各位高人看下我tomcat的配置,SET JAVA_OPTS=-server -Xms2048M -Xmx2048M -Xss512k -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m,但是我查看怎么发现

mysql性能优化-慢查询分析、优化索引和配置

目录 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询   2索引及查询优化 三.配置优化 1)      max_connections 2)      back_log 3)      interactive_timeout 4)      key_buffer_size 5)      query_cache_size 6)      record_buffer_size 7)      read_rnd_b

【云和恩墨】性能优化:Linux环境下合理配置大内存页(HugePage)

原创 2016-09-12 熊军  [云和恩墨]性能优化:Linux环境下合理配置大内存页(HugePage) 熊军(老熊) 云和恩墨西区总经理 Oracle ACED,ACOUG核心会员 PC Server发展到今天,在性能方面有着长足的进步.64位的CPU在数年前都已经进入到寻常的家用PC之中,更别说是更高端的PC Server:在Intel和AMD两大处理器巨头的努力下,x86 CPU在处理能力上不断提升:同时随着制造工艺的发展,在PC Server上能够安装的内存容量也越来越大,现在随处

ASP.NET MVC之如何看待内置配置来提高性能优化(四)

前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查找所有的匹配Web Form视图引擎的名称.例如当我们查找一个不存在的视图时,会出现如下错误: 从上面我们可以很明显的知道,如果我们MVC应用程序中没有使用ASPX视图时,当我们在Action方法中通过 return View() 返回视图或者 Html.RenderPartial 等查找视图时每次

淘宝网前台应用性能优化实践

本文曾发表于2013年4月的<程序员>杂志 近年来,随着用户数和PV的增加,淘宝网的后端服务器数量增长很快:并且我们知道,Web页面延迟时间和转化率之间有着直接的关联.出于提升系统吞吐量.降低成本.减少页面延迟.提升用户浏览体验.提高交易转化率的考虑,淘宝网在性能优化领域做了很多尝试.本文将从应用性能分析.基础设施优化.应用自身优化.前端性能优化这四个方面,对淘宝网的优化尝试做一个总结. 应用性能分析 1. 前台应用介绍 淘宝网前台应用是指商品详情.店铺.购物车等买家直接可以看到和使用的应用,

Spring Boot 性能优化

Spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题.但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代.Spring Boot 让我们创建和运行项目变得更为迅速,现在已经有越来越多的人使用它.我们已经在几个项目中使用了 Spring Boot ,今天我们就来一起讨论一下如何改进 Spring Boot 应用的性能. 首先,从之前我在开发中遇到的一个问题说起.在一次查看项目运行日志的时候,我偶然发现了一个问题,日志