共计 2614 个字符,预计需要花费 7 分钟才能阅读完成。
tocat 安全优化
以下配置如无特别指明,默认为在 /usr/local/tomcat8/conf/server.xml 文件中配置
- 修改 telnet 管理端口和命令
<Server port="8005" shutdown="SHUTDOWN">
修改默认端口和关闭 web 服务器的指令 该配置项测试后发现只能在本机
telnet 127.0.0.1 8005
使用,在别的机器报错,查了不少文档,不得其所,但还是建议修改
- AJP 连接端口保护
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
该端口作用就是 apache 负载均衡多台 tomcat 时使用,如不使用该环境可以将其整个注释掉 1. 使用该环境时可以修改默认的 8009 端口为其它不容易冲突的端口 2. 通过 iptables 规则限制 ajp 端口访问的权限仅为线上机器;
- 禁用管理端
[root@localhost ~]# rm -rf /usr/local/tomcat8/webapps/* && rm -rf /usr/local/tomcat8/conf/tomcat-users.xml
这些都是系统默认存在的一些安全隐患比较大的文件,很容易被黑客利用
- 降权启动 tomcat
1.tomcat 启动用户权限必须为非 root,避免一旦 tomcat 服务被入侵,获取 root 权限 2. 普通用户只能使用大于 1024 端口,如果要想使用 80 端口,可以使用 iptables 规则进行转发,或者使用代理。一般情况下,tomcat 前方有一个反向代理服务器 nginx 或者 apache 等。
[root@localhost ~]# useradd tomcat
#添加用户
[root@localhost ~]# groupadd tomcathome
#添加相应用户组(方便后续,开发、运维各部门的权限分配)[root@localhost ~]# usermod -g tomcathome tomcat
#用户加入组
[root@localhost ~]# chown -R tomcat.tomcathome /usr/local/tomcat8/*
给 tomcat 重新分配属组和属主
[root@localhost ~]# su - tomcat -c "/usr/local/tomcat8/bin/startup.sh"
#临时使用 tomcat 用户执行该命令
[root@localhost ~]# ps aux| grep tomcat
#查看验证可看到结果
-
文件列表访问控制
默认该项是配置为 false 即关闭,测试时方便调试可以设置为 true,生产环境一定要关闭该项,否则用户端访问一个存在的目录,即可看到该目录下所有的文件
[root@localhost qiao]# vim /usr/local/tomcat8/conf/web.xml
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
-
隐藏版本信息
默认情况下,用户端访问网站页面出错时会跳转到错误页面,该页面现实有版本信息等,不利于安全维护。
[root@localhost ~]# vim /usr/local/tomcat8/conf/web.xml
18 <web-app ......
21
23 <error-page>
24 <error-code>404</error-code>
25 <location>/404.html</location>
26 </error-page>
27 <error-page>
28 <error-code>403</error-code>
29 <location>/403.html</location>
30 </error-page>
31 <error-page>
32 <error-code>500</error-code>
33 <location>/500.html</location>
34 </error-page>
#然后将错误页面的内容保存到相应的文件存放到 /usr/local/tomcat8/webapps/ROOT/ 目录下。
-
脚本权限回收
chmod -R 744 /usr/local/tomcat8/bin/*
去除其他用户对 bin 目录下可执行权限,防止其他用户起停 tomcat
- 访问日志格式规范, 开启 Referer 和 User-Agetn 是为了一旦出现安全问题能够更好的根据日志进行排查
-
Server header 重写(推荐)
当 tomcat HTTP 端口直接提供 web 服务时此配置生效,加入此配置,将会替换 http 响应 Server header 部分的默认配置,默认是 Apache-Coyote/1.1
[root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
Server="join123" />
#加入改行配置
-
性能优化
-
Tomcat Session 过期时间
Tomcat 采用数据库连接池技术,当用户在一定时间不对数据库有操作时间后,就自动关闭这个连接,这是为了更好的利用资源,防止浪费宝贵的数据库连接资源。
两种方法,效果相同
配置只针对于本 web 应用程序生效
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docbase="/web/webapp" path=""defaultSessionTimeOut="200"isWARExpanded="true"isWARValidated="false"isInvokerEnabled="true"isWorkDirPersistent="false">
</Context>
#超时时间为 200 秒
针对于整个 tomcat 服务器的所有 web 应用
[root@localhost ~]# vim /usr/local/tomcat8/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
#超时时间为 30 分钟
: