标签:lte 数据 独立 web 监控 cal use connect log
[root@iZzm446eh1ux98Z packages]# curl https://downloads.apache.org/tomcat/tomcat-8/v8.5.57/bin/apache-tomcat-8.5.57.tar.gz.sha512 720de36bb3e40a4c67bdf0137b12ae0fd733aef772d81a4b8dab00f29924ddd17ecb2a7217b9551fc0ca51bd81d1da13ad63b6694c445e5c0e42dfa7f279ede1 *apache-tomcat-8.5.57.tar.gz [root@iZzm446eh1ux98Z packages]# sha512sum apache-tomcat-8.5.57.tar.gz 720de36bb3e40a4c67bdf0137b12ae0fd733aef772d81a4b8dab00f29924ddd17ecb2a7217b9551fc0ca51bd81d1da13ad63b6694c445e5c0e42dfa7f279ede1 apache-tomcat-8.5.57.tar.gz
8.5版本之前,这两个应用都是需要手动开启本地访问的。而8.5版本之后,已经是配置好的了
[root@iZzm446eh1ux98Z META-INF]# vim webapps/host-manager/META-INF/context.xml <Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\ .filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context>
[root@iZzm446eh1ux98Z webapps]# vim manager/META-INF/context.xml <Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\ .filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context>
host-manager和manager只有在conf/tomcat-users.xml中添加了用户信息才可以正常访问,但是为了避免被攻击,还应该设置足够健壮的密码。还需要确保conf/server.xml中配置了org.apache.catalina.realm.LockOutRealm,防止攻击者进行暴力破解
[root@iZzm446eh1ux98Z webapps]# useradd -s /sbin/nologin -M tomcat [root@iZzm446eh1ux98Z webapps]# chown -R tomcat.tomcat /opt/softwares/apache-tomcat-8.5.57/
(a)默认情况下server.xml中配置了一个HTTP链接器(8080)和一个AJP链接器(8009),实际中只需要一个链接器即可。如果Tomcat独立启动,不存在前置的web服务器,那么可以只保留HTTP而删除AJP,反之则删除HTTP链接器而保留AJP。不过,一般情况下前端web应用都是Nginx,所以都是删除AJP的,因为Nginx不支持AJP。
(b)如果不使用host-manager和manager管理Tomcat,可以将<Engine>下的<Realm>以及名为"UserDatabase"的Resource删除
[root@iZzm446eh1ux98Z webapps]# vim /opt/softwares/apache-tomcat-8.5.57/conf/server.xml <!--Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /-->
(c)如果精通Tomcat配置,可以将附带的注释删除。不过我没删,因为不精通。可以安装后先备份一个,然后删除自带注释
默认配置shutdown的端口为8005,指令为"SHUTDOWN"。也就是说只要向服务器的8005端口发送SHUTDOWN字符串,tomcat会自动关闭。由于默认情况下8005监听的是localhost,只有本机发送的指令才能接收到,但是如果服务器被入侵的话,依然可以关闭Tomact。所以应该关闭。
tomcat禁用8005端口的时候报错 "SEVERE: No shutdown port configured. Shut down server through OS signal. Server not shut down.",报错原因是因为:
禁用关闭命令端口在tomcat以windows服务或linux等系统的jsvc方式启动时可以生效,在标准shell脚本启动的方式下不会生效,这将阻止shutdown和catalina脚本停止tomcat
jsvc方式启动tomcat可以参考:https://www.cnblogs.com/zh-dream/p/13605029.html
属性 | 描述 | 默认值 |
address | 该属性用于控制连接器监听的IP地址,默认情况下连接器监听服务器配置的所有IP地址 | |
allowTrace | 是否开启HTTP的trace方法,多用于DEBUG,在默写浏览器可能会导致安全问题,默认禁用 | |
maxPostSize |
FROM URL参数转换处理的POST请求的最大字节数,负值或小于0,表示不做限制 注意:tomcat7.0.63之前是0或负值才表示不作限制,否则post请求失败 由于转换参数在请求处理过程中会被缓存,因此设置合适的上限有助于减少DOS攻击 |
2MB |
maxSavePostSize |
FROM或者CLIENT-CERT认证时,保存或者缓冲的POST请求最大字节数。 由于参数在认证过程中会被缓存,因此设置合适的上限有助于减少DOS攻击 |
2MB |
maxParameterCount | 自动转换的参数(GET和Post之和)最大个数,超出该值时将被忽略。负值,不做限制,需要根据实际情况进行设置 注意:FailedRequestFilter过滤器可用于拒绝超出该限制的请求 |
10000 |
xpoweredBy | 设置为true,tomcat会为响应添加X-Powered-By头信息,这会使攻击者很容易识别服务器类型及版本并据此发送针对性攻击。 | false |
server |
控制"Server"HTTP头内容,默认为"Apache-Coyoto/1.1"。 攻击者很容易据此识别服务器类型并发动针对性攻击,建议在生成环境改成其他值 |
默认情况下,server.xml只配置了名为localhost的Host,并且是自动部署的,web应用目录为$CATALINA_BASE/webapps。所以webapps目录下的目录或者WAR包俊辉在Tomcat启动时自动部署,包括被植入的恶意应用。有两种解决办法:
a、修改web应用的部署目录为其他路径,使攻击者找不到正确的部署目录
b、禁用自动部署,将Host的autoDeploy和deployOnStartup属性设置为false,这时只有在<Host>下配置的<Context>子元素才会被部署,而且变更web应用的类文件时,需要手动重启服务。除此之外,可以将Host的deployXML设置为false,此时Tomcat将忽略web应用META-INF目录下的context.xml
属性 | 描述 | 默认值 |
crossContext | 用于控制是否可以访问其他Contex资源,除非是可信任的web应用,否则不要开启 | false |
privileged | 用于控制是否可以使用容器提供的Servlet,除非是可信任的web应用,否则不要开启 | false |
allowLinking | 是否允许使用符号链接,如果在大小写敏感的操作系统开启该属性将会导致禁用一些安全措施,且允许直接访问WEB-INF目录 | false |
sessionCookiePathUsesTrailingSlash |
用于解决IE、Safari、Edge等浏览器的BUG,防止当多个应用共享通用的路径前缀时,会话Cookie跨应用暴露。 开启该属性时,会存在Servlet映射路径为/*的情况。最好的方式是避免供应用共享路径前缀 |
false |
web应用异常有ErrorReportValve处理,这会输出Tomcat版本信息,还会将异常栈显示给用户,导致泄漏系统信息。在生产环境中,应该尽量避免。
首先,可以在web.xml中添加<error-page>,定制化错误页面,也可以提高客户体验。也可以定制化ErrorReportValve(将属性showServerInfo设置为false隐藏服务器的信息,将属性showReport设置false隐藏异常栈信息)
属性 | 影响 | 默认值 |
org.apache.catalina.connector.RECYCLE_FACADES |
控制每次请求是否重建Connector外观类, 设置为true时,每次请求都会重建外观类和请求参数映射; 设置为false,tomcat会复用外观类和请求参数映射,这样会增加由于系统缺陷导致将错误数据继续向后续请求传递 |
false |
org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH | 允许请求URL的非标准转换,解决URL中包含%5C的问题 | false |
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH |
允许请求URL的非标准转换,解决URL中包含%2F的问题 如果这两个参数使用,攻击者可能会绕过前置代理增加的安全约束,导致安全问题 |
false |
org.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_ERITER |
用于控制GET请求响应是否强制编码,不指定时默认为(ISO-8859-1) 许多浏览器在响应使用默认编码会违反RFC2616,尝试猜测响应编码,这时虽然兼容了,但是会导致安全风险(XSS) |
true,强制编码 |
对于DefaultServlet,需要设置readonly为true,否则将允许客户端删除或修改服务器上的静态资源以及上传新的资源。listings参数也需要设置为false,如果设置为true,可能会泄漏应用目录信息,而且容易导致DOS攻击(尤其目录非常多时,会显著增加CPU使用率)。
showServerInfo参数设置为false,避免listings目录时输出Tomcat版本信息
[root@iZzm446eh1ux98Z apache-tomcat-8.5.57]# vim conf/web.xml <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>showServerInfo</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>readonly</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
标签:lte 数据 独立 web 监控 cal use connect log
原文地址:https://www.cnblogs.com/zh-dream/p/13624136.html