一、前置准备:确认Java应用端口
在配置防火墙前,需先明确Java应用程序监听的端口(如Spring Boot默认的8080端口、Tomcat默认的8005/8080端口)。可通过以下方式获取:
application.properties中的server.port、Tomcat的server.xml);netstat -tuln | grep java或ss -tuln | grep java命令查看Java进程占用的端口。二、安装与启动Firewalld(CentOS默认防火墙工具)
sudo yum install firewalld -y
sudo systemctl start firewalld # 启动服务
sudo systemctl enable firewalld # 设置开机自动启动
sudo firewall-cmd --state # 应返回“running”(运行中)
sudo firewall-cmd --get-active-zones # 查看当前活动的防火墙区域(如“public”)
三、配置Java应用端口规则
若Java应用运行在8080端口(TCP协议),执行以下命令:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
--zone=public:将规则添加到“public”区域(适用于公网或外部访问);--add-port=8080/tcp:允许TCP协议的8080端口通过;--permanent:规则永久生效(重启系统后仍保留)。应用规则:
sudo firewall-cmd --reload # 重新加载配置使新规则生效
若Java应用需要开放多个连续端口(如8080-8090),执行:
sudo firewall-cmd --zone=public --add-port=8080-8090/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
sudo firewall-cmd --zone=public --list-all
curl http://your-server-ip:8080 # 若返回应用响应,说明端口开放成功
四、限制访问源(可选,提升安全性)
若仅需允许特定IP地址访问Java应用(如公司内网IP192.168.1.100),可使用富规则(Rich Rule):
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="8080" accept' --permanent
sudo firewall-cmd --reload
family="ipv4":针对IPv4地址;source address="192.168.1.100":允许的源IP;port protocol="tcp" port="8080":目标端口及协议;accept:允许访问。删除富规则:
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="8080" accept' --permanent
sudo firewall-cmd --reload
五、配置SELinux(若启用)
若系统启用了SELinux(sestatus返回“Enforcing”),需调整SELinux策略以允许Java应用使用指定端口:
查看SELinux状态:
sestatus
允许端口通过SELinux:
若Java应用使用8080端口(非默认的HTTP端口80),需将其添加到http_port_t类型:
sudo semanage port -a -t http_port_t -p tcp 8080
semanage:SELinux管理工具;-a:添加端口;-t http_port_t:指定端口类型为HTTP服务;-p tcp:协议类型;8080:端口号。验证SELinux端口配置:
sudo semanage port -l | grep http_port_t
输出应包含8080/tcp。
六、常见问题排查
systemctl start firewalld已执行,且状态为“running”;firewall-cmd --list-all是否包含目标端口,或netstat -tuln是否显示Java应用在监听该端口;sudo setenforce 0),测试是否解决问题,再调整SELinux策略。