java应用外部无法访问主因是linux防火墙拦截,需按firewalld或iptables类型配置:firewalld用户执行sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload;iptables用户执行sudo iptables -i input -p tcp --dport 8080 -j accept并保存规则。

Java 应用在 Linux 上部署后无法被外部访问,绝大多数情况不是代码或配置问题,而是系统防火墙默认拦截了入站流量。关键在于让防火墙明确放行你的服务端口(比如 8080),并按需限制访问来源。下面分场景说明实操要点。
先确认你用的是 firewalld 还是 iptables
不同发行版默认防火墙不同,不能混用命令:
- CentOS 7+/RHEL 8+、Fedora:默认 firewalld,运行
sudo firewall-cmd --state返回running即生效 - Ubuntu/Debian:默认用 ufw(底层仍是 iptables),可查
sudo ufw status;若直接启用了 iptables 服务,运行sudo systemctl status iptables看是否 active - 老版本 CentOS 6 或手动关闭 firewalld 的环境:可能直跑 iptables,执行
sudo iptables -L -n能看到规则即为启用
用 firewall-cmd 开放端口(推荐用于 firewalld 环境)
以 Spring Boot 默认端口 8080 为例,操作需三步且顺序不能错:
- 确保服务已监听:先用
netstat -ntlp | grep 8080或ss -tuln | grep 8080确认 Java 进程确实在监听 - 永久添加规则:
sudo firewall-cmd --permanent --add-port=8080/tcp - 重载生效:
sudo firewall-cmd --reload - 验证结果:
sudo firewall-cmd --list-ports应输出8080/tcp
如需只允许某 IP 访问(例如运维机 203.0.113.10),改用富规则:
再 reload 即可。注意:添加前务必先放行 SSH 端口(如 22),避免锁死远程连接。
用 iptables 开放端口(适用于 Ubuntu/Debian 或 iptables 直管环境)
iptables 规则默认不持久,重启即失效,必须显式保存:
- 插入允许规则:
sudo iptables -I INPUT -p tcp --dport 8080 -j ACCEPT(-I插入头部,优先级高) - 检查是否生效:
sudo iptables -L INPUT -n | grep 8080 - 保存规则(系统不同命令不同):
- Ubuntu/Debian:
sudo iptables-save > /etc/iptables/rules.v4 - CentOS/RHEL 6/7:
sudo service iptables save或sudo /usr/libexec/iptables/iptables.init save - 若无保存命令,可写入
/etc/sysconfig/iptables后重启服务:sudo systemctl restart iptables
- Ubuntu/Debian:
安全增强:最小化开放原则
生产环境切忌“全开”,应遵循“只放行必需端口+限定来源”原则:
- 关闭非必要端口:如不用 MySQL 远程访问,就别开 3306;不用 Redis 外网,就别开 6379
- 限制 IP 段访问:比如只允公司出口 IP(如
192.168.10.0/24)访问管理端口 - 禁用 ping(可选):避免暴露服务器存活状态,firewalld 中注释掉
-A INPUT -p icmp -j ACCEPT或 iptables 中加-A INPUT -p icmp -j DROP - 云服务器额外注意:阿里云/腾讯云的安全组是独立于系统防火墙的第二道屏障,必须同步配置对应端口和授权 IP
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











