zoukankan      html  css  js  c++  java
  • Tomcat学习总结(11)——Linux下的Tomcat安全优化

    1、web.xml配置及修改:

    站点默认主页:

    <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

    404及500设置

    <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>

    默认会话超时时间:

    <session-config>

    <session-timeout>60</session-timeout>

    </session-config>

    禁止列表目录结构:

    <init-param>

    <param-name>listings</param-name>

    <param-value>false</param-value>

    </init-param>

    2、server.xml配置安全修改

    <Server port="8005" shutdown="SHUTDOWN">

    把SHUTDOWN改成forevernotdown,端口也可自行修改

    3、修改或隐藏默认Tomcat的版本信息

    类似于nginx的server_tokens off ,tomcat也可以隐藏版本号,具体步骤如下:

    cd apache-tomcat-7.0.59/lib

    mkdir test

    cd test

    jar xf ../catalina.jar

    cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#'

    server.info=Apache Tomcat/7.0.59

    server.number=7.0.59.0

    vi org/apache/catalina/util/ServerInfo.properties

    server.info=Tomcat

    server.number=6

    server.built=Jan 18 2013 14:51:10 UTC

    jar cf ../catalina.jar ./*

    rm -rf test

    curl -I http://127.0.0.1:8080

    4、删除$CATALINA_HOME/webapps下的不必要的目录

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

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

    5、tomcat-users.xml该文件含有用户名、角色以及密码的清单文件,如果不需要web部署,生产环境需要注释掉:

    # cat conf/tomcat-users.xml

    <!--

    <role rolename="tomcat"/>

    <role rolename="role1"/>

    <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>

    <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>

    <user username="role1" password="<must-be-changed>" roles="role1"/>

    -->

    6、server.xml线程数修改/热部署修改/

    1)maxThreads 为Tomcat的最大线程数,minSpareThreads 初始化时创建的Socket线程数。如果连接过多,组建tomcat集群负载均衡处理

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

    <Host name="localhost" appBase="webapps"

    unpackWARs="false" autoDeploy="false">

    7、多虚拟主机

    强烈建议不要使用Tomcat的虚拟主机,每个站点一个实例。即,启动多个tomcat,虽然开销比较大,但保证了应用程序隔离与安全。

    8、Tomacat虽然可以启用压缩通过compression="on" 来配置,但最好把它前置通过apache和nginx来统一处理

    9、应用程序安全,Tomcat目录与应用程序部署分离

    不建议用root启动,建议单独设置独立用户启动,把Tomcat目录的属主设置为指定用户,比如tomcat。

    10、生产环境部署

    apache+tomcat/nginx+tomcat,站点的默认主页和自定义错误页面,可在前端的apache或者nginx中做。

    优化

    Tomcat的运行模式有3种

    1、bio

    默认的模式,效率性能非常低。

    2、nio

    使用NIO在服务器端会有更好的性能,加强服务器端对并发处理的性能。 Tomcat8默认以nio模式运行,想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为

    <Connector port="8080″

    protocol="org.apache.coyote.http11.Http11NioProtocol"

    connectionTimeout="20000"

    URIEncoding="UTF-8"

    useBodyEncodingForURI="true"

    enableLookups="false"

    redirectPort="8443">

    重启tomcat ,就可以生效。

    3、apr安装及优化

    从操作系统级别来解决异步的IO问题,大幅度的提高性能。必须要安装apr和native,直接启动就支持apr修改protocol为org.apache.coyote.http11.Http11AprProtocol

    安装apr

    yum -y install apr apr-util apr-devel openssl-devel

    安装native 进入tomcat/bin目录,比如:

    cd /usr/local/tomcat/bin/

    tar xzfv tomcat-native.tar.gz

    cd tomcat-native-1.1.20-src/jni/native/

    ./configure --with-apr=/usr/bin/apr-1-config

    make && make install

    安装完成之后 会出现如下提示信息

    Libraries have been installed in: /usr/local/apr/lib

    安装成功后还需要对tomcat设置环境变量,方法是在setenv.sh文件中增加1行:

    CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"

    或者:

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

    source /etc/profile

    修改8080端对应的conf/server.xml

    protocol="org.apache.coyote.http11.Http11AprProtocol"

    启动tomcat之后,查看日志会有这一行信息,说明已经是APR模式启动了。INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].

    4、内存参数优化

    并发优化 1.JVM调优 新增文件TOMCAT_HOME/bin/setenv.sh如下语句,具体数值视情况而定。

    JAVA_OPTS="-Xms1024m -Xmx1024m -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=128m"

    参数详解

    -Xms JVM初始化堆内存大小 -Xmx JVM堆的最大内存 -Xss 线程栈大小 -XX:PermSize JVM非堆区初始内存分配大小 -XX:MaxPermSize JVM非堆区最大内存 建议和注意事项: -Xms和-Xmx选项设置为相同堆内存分配,以避免在每次GC 后调整堆的大小,堆内存建议占内存的60%~80%;非堆内存是不可回收内存,大小视项目而定;线程栈大小推荐256k.

    32G内存配置如下:

    JAVA_OPTS="-Xms20480m -Xmx20480m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m"

    5、.关闭DNS反向查询 在<Connector port=”8080″中加入如下参数

    <Connector port="8081" protocol="HTTP/1.1"

    connectionTimeout="6000" enableLookups="false" acceptCount="800"

    redirectPort="8443" />

    6、优化tomcat参数(使用APR)参考:

    <Listener className="org.apache.catalina.core.AprLifecycleListener" />

    ...

    <Connector port="8080"

    protocol="org.apache.coyote.http11.Http11AprProtocol"

    connectionTimeout="20000" //链接超时时长

    redirectPort="8443"

    maxThreads="500"

    minSpareThreads="20"

    acceptCount="1000"

    enableLookups="false"

    compression="on" //压缩传输,取值on|off|force,默认值off。

    noCompressionUserAgents="gozilla, traviata"

    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"="2048"

    URIEncoding="UTF-8"

    server="office" />

    升级版本一般将当前老版本 tomcat 的server.xml、catalina.sh、web.xml和tomcat-users.xml文件进行备份,然后部署完新版本的 tomcat 之后,将这些配置文件覆盖过去即可,然后停掉旧版本,启动新版本即可完成升级操作

  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/dengyungao/p/7542502.html
Copyright © 2011-2022 走看看