Tomcat 的安全
生产环境 tomcat 规范
-
更改服务监听端口
若 Tomcat 都是放在内网的,则针对 Tomcat 服务的监听地址都是内网地址标准配置:
<Connector port="10000" server="webserver"/>
-
telnet 管理端口保护
修改默认的 8005 管理端口不易猜测(大于 1024),但要求端口配置在 8000~8999 之间修改 SHUTDOWN 命令为其他字符串
标准配置:<Server port="8578" shutdown="dangerous">
-
AJP 连接端口的保护
修改默认的 ajp 8009 端口为不易冲突(大于 1024),但要求端口配置在 8000~8999 之间通过 iptables 规则限制 ajp 端口访问的权限仅为线上机器,目的在于防止线下测试流量被 apache 的 mod_jk 转发至线上 tomcat 服务器
标准配置:
<Connector port="8349" protocol="AJP/1.3"/>
-
禁用管理端
删除默认 $CATALINA_HOME/conf/tomcat-users.xml 文件,重启 tomcat 将会自动生成新的文件删除 $CATALINA_HOME/webapps 下载默认的所有目录和文件
将 tomcat 应用根目录配置为 tomcat 安装目录以外的目录
标准配置:
- server.xml 配置
一种直接修改 Host 节点信息,表示全局配置
<Host name="localhost" appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false"></Host>
另一种直接在 Host 节点中新增 Context 节点,指定具体的项目
<Context path="" docBase="/usr/local/tomcat/webapps/jenkins" debug="0" reloadable="false" crossContext="true"> </Context>
- 在 $CATALINA_HOME/conf/Catalina/locathost 目录下新增文件 test##20160506172651.xml
<Context displayName="test" docBase="/data/www/tomcat_webapps/test##20160506172651.war" reloadable="false" />
-
隐藏 Tomcat 的版本信息
针对该信息的显示是由一个 jar 包控制的,该 jar 包存放在 $CATALINA_HOME/lib 目录下,名称为 catalina.jar,通过 jar xf 命令解压这个 jar 包会得到两个目录 META-INF 和 org ,修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段来实现来更改我们 tomcat 的版本信息$ cd $CATALINA_HOME/lib $ jar xf catalina.jar $ cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#' $ mkdir -p org/apache/catalina/util $ vim ServerInfo.properties server.info=nolinux # 把这个值改成其它值就行了
自定义错误页面:修改 $CATALINA_HOME/conf/web.xml 重定向 403/404/500 等错误到指定的错误页面
-
降权启动
Tomcat 启动用户权限必须非 root 权限,尽量降低 tomcat 启动用户的目录访问权限,如需直接对外使用 80 端口,可通过普通账号启动后,配置 iptables 规则进行转发,为了防止 Tomcat 被植入 web shell 程序后,可以修改项目文件。要将 Tomcat 和项目的属主做分离,即便被破坏也无法创建和编辑项目文件 -
文件列表访问控制
$CATALINA_HOME/conf/web.xml 文件中的 default 部分的 listings 的配置必须为 false(默认),表示不列出文件列表 -
访问限制
通过配置,限定访问的 IP 来源全局设置限定 IP 和域名访问:
<Host name="localhost" appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30,192.168.2.*" deny=""/> <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="www.test.com,*.test.com" deny=""/> </Host>
-
脚本权限回收
控制 CATALINAHOME/bin 目录下的 start.sh、catalina.sh、shutdown.sh 的可执行权限,chmod−R744CATALINAHOME/bin 目录下的 start.sh、catalina.sh、shutdown.sh 的可执行权限,chmod−R744CATALINA_HOME/bin/* -
访问日志格式规范
开启 tomcat 默认访问日志中 Referer 和 User-Agent 记录标准配置:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false" />
-
Server header 重写
在 HTTP Connector 配置中加入 server 的配置,server=”chuck-server”
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于