温馨提示×

怎样防止CentOS Tomcat被攻击

小樊
47
2025-10-24 00:13:07
栏目: 网络安全

一、初始化配置:消除默认风险

  • 删除默认应用与目录:首次安装Tomcat后,删除webapps目录下的所有默认应用(如docsexampleshost-managermanagerROOT),避免恶意代码通过默认应用部署。同时删除conf/tomcat-users.xml中的所有用户权限,防止未授权访问管理界面。
  • 隐藏版本信息:修改server.xml中的Connector节点,添加server属性(如server="MyAppServer/1.0"),隐藏Tomcat版本号,减少攻击者针对性利用漏洞的概率。

二、用户与权限管理:最小化访问权限

  • 使用非root用户启动Tomcat:创建专用用户(如tomcat),赋予Tomcat目录所有权(chown -R tomcat:tomcat /opt/tomcat),并以该用户启动Tomcat(./startup.sh),避免以root权限运行导致系统被完全控制。
  • 配置管理界面访问控制
    • 限制IP访问:在managerhost-manager应用的META-INF/context.xml中添加RemoteAddrValve,仅允许特定IP(如管理员IP)访问(如<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+" />)。
    • 定义角色与用户:在tomcat-users.xml中仅为必要用户分配最小角色(如manager-gui用于管理界面、admin-gui用于管理员),避免过度授权。

三、网络与端口安全:限制非法访问

  • 配置防火墙规则:使用firewalld限制Tomcat端口(默认8080)的访问,仅允许信任IP(如公司IP、管理员IP)访问,拒绝其他IP。例如:
    firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="8080" accept' firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" port protocol="tcp" port="8080" reject' firewall-cmd --reload 
    同时开启HTTP(80)/HTTPS(443)服务以支持加密访问。
  • 禁用不必要的端口:关闭Tomcat的AJP端口(默认8009),在server.xml中注释或删除AJP Connector配置,避免通过AJP协议发起的攻击。
  • 限制端口绑定:修改server.xml中的Connector节点,添加address="127.0.0.1"属性,强制Tomcat仅监听本地回环接口,外部网络无法直接访问。例如:
    <Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1" connectionTimeout="20000" redirectPort="8443" /> 
    若需对外提供服务,可通过Nginx反向代理转发请求。

四、应用与数据安全:防范业务层攻击

  • 关闭自动部署:在server.xmlHost节点中设置autoDeploy="false"unpackWARs="false",禁止Tomcat自动部署上传的WAR文件,防止恶意WAR包植入后门。
  • 配置HTTPS加密:申请可信SSL证书(如Let’s Encrypt),修改server.xml添加HTTPS Connector,启用TLS加密(如sslProtocol="TLS"),确保数据传输过程中不被窃取或篡改。例如:
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/etc/pki/tls/certs/tomcat.crt" keystorePass="your_password" /> 
    并通过web.xml配置<transport-guarantee>CONFIDENTIAL</transport-guarantee>,强制敏感页面(如登录页)使用HTTPS。
  • 强化会话安全:修改context.xml或在应用中配置会话Cookie属性,设置HttpOnly="true"(防止XSS窃取Cookie)、Secure="true"(仅通过HTTPS传输)、sessionCookiePath="/app"(限制Cookie作用域),降低会话劫持风险。

五、系统级安全:提升整体防护

  • 配置SELinux:若系统启用SELinux,设置httpd_can_network_connect=1允许Tomcat访问网络,或通过audit2allow生成自定义策略解决SELinux拦截问题。同时调整Tomcat文件和目录的安全上下文(如chcon -Rt httpd_sys_content_t /opt/tomcat/webappschcon -Rt httpd_sys_rw_content_t /opt/tomcat/logs),确保Tomcat能正常读写必要文件。
  • 定期更新与补丁管理:定期检查Tomcat官网(apache.org)发布的安全补丁,升级至最新稳定版本(如Tomcat 10.1.x),修复已知漏洞(如CVE-2025-xxxx系列)。同时更新CentOS系统内核及依赖组件(如OpenSSL),避免因系统漏洞导致Tomcat被攻击。
  • 日志审计与监控:启用Tomcat详细访问日志(在server.xmlHost节点中配置AccessLogValve),记录请求IP、方法、URL、状态码等信息。定期分析日志(如使用grepawk或ELK Stack),监控异常活动(如大量404请求、频繁登录失败),及时发现并响应攻击行为。

六、额外安全措施:多层防御

  • 使用反向代理:通过Nginx作为反向代理,隐藏Tomcat端口(如将Nginx绑定到80/443端口,Tomcat运行在8080端口),并配置Nginx的limit_req模块限制请求速率(如每秒最多10个请求),防止DDoS攻击。例如:
    server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; limit_req zone=req_per_ip burst=10 nodelay; } } 
    同时开启Nginx的gzip压缩、缓存等功能,提升性能。
  • 禁用目录列表:在web.xml中配置<directory-listing>["否", "web.xml disable directory listing", "Tomcat disable directory listing"]</directory-listing>,防止攻击者通过目录列表查看敏感文件(如WEB-INF/config.properties`)。

0