• 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 之后,将这些配置文件覆盖过去即可,然后停掉旧版本,启动新版本即可完成升级操作

  • 相关阅读:
    业务逻辑安全之登陆认证模块
    linux下的tcpdump
    wirshark使用(二)
    wirshark 使用(一)
    MVC框架的代码审计小教程
    记一次发卡网代码审计
    HTML知识点(一)
    jQuery基础、效果和事件
    Ajax知识(二)
    jQueryHTML和插件、display和overflow和visibility的区别
  • 原文地址:https://www.cnblogs.com/dengyungao/p/7542502.html
Copyright © 2020-2023  润新知