java应用需分层设防:系统防火墙(如ufw)严守入口端口,仅放行80/443、禁止8080等后端端口及icmp;nginx做路径级ip白名单(如/actuator/限内网)、隐藏server/x-powered-by头;并定期校验规则与日志。

Java 应用通过 Nginx 反向代理对外提供服务时,安全不能只靠 Nginx 配置“拦一拦”,而要从系统层到应用层分层设防。系统防火墙(如 iptables 或 ufw)是第一道硬隔离屏障,它在流量触达 Nginx 进程前就完成粗粒度过滤,能有效减少攻击面、缓解 DDoS 和扫描探测压力。
用系统防火墙守住入口端口
Java 应用通常不直接暴露端口,而是由 Nginx 代理到后端(如 Tomcat 的 8080)。这意味着——除 Nginx 监听的 80/443 外,其他端口(包括 Tomcat 端口)必须禁止外部访问。
- 仅放行 Nginx 对外端口:
sudo ufw allow 80/tcp、sudo ufw allow 443/tcp - 明确拒绝 Tomcat 等后端端口被公网访问:
sudo ufw deny 8080/tcp(若 Tomcat 仅本机调用,还可加from 127.0.0.1限定来源) - 关闭 ICMP 响应(禁 ping):
sudo ufw deny icmp,避免网络拓扑暴露 - 默认拒绝入站:
sudo ufw default deny incoming(注意保留出站和已建立连接)
结合 Nginx 的 IP 段访问控制做二次校验
系统防火墙负责“守大门”,Nginx 的 allow/deny 则适合做“门禁登记”——对高敏感路径(如 Java 管理后台、Actuator 接口、健康检查端点)实施白名单制访问。
- 示例:限制 Spring Boot Actuator 仅内网运维段可访问
location /actuator/ {<br> allow 192.168.10.0/24;<br> deny all;<br>} - 禁止非业务 IP 访问管理后台路径(如
/admin、/console)
避免因 Nginx 配置疏漏或路径泄露导致越权访问 - 注意:不要在 Nginx 中做全站 IP 黑白名单——这应由系统防火墙承担;Nginx 的 access 模块更适合细粒度路径级控制
隐藏后端信息,切断攻击链路
Java 应用常通过 Nginx 暴露版本线索(如响应头中的 Server: nginx/1.20.1、X-Powered-By: Spring Boot),这些信息会帮助攻击者精准定位漏洞。系统防火墙虽不处理 HTTP 头,但配合 Nginx 配置可切断信息泄露路径:
- 在
http块中关闭 Nginx 版本标识:server_tokens off; - 清除后端返回的敏感头:
proxy_hide_header X-Powered-By;、proxy_hide_header Server; - 统一错误页,避免 500 页面泄露 Tomcat 或 Spring 异常堆栈
关键配套动作不能少
再严密的规则,不验证、不留痕、不更新,就形同虚设:
- 每次修改防火墙规则后,执行
sudo ufw status verbose确认生效 - Nginx 配置变更后务必运行
nginx -t校验语法,再nginx -s reload - 开启并集中收集 Nginx 访问日志与错误日志,重点关注 403/405/502 等异常状态码
- 定期审查防火墙规则和 Nginx 的
allow/deny配置,及时清理过期 IP 段
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











