CentOS 7及以上版本默认使用firewalld作为防火墙管理工具,需先确保其运行正常,再配置Tomcat端口访问规则。
sudo firewall-cmd --state
running表示防火墙正在运行;若未运行,启动防火墙:sudo systemctl start firewalld
Tomcat默认使用8080端口,需将其添加到防火墙的public区域(对外提供服务):
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
--permanent:永久生效(重启防火墙后仍保留);若需临时生效(重启后失效),可省略此参数。添加端口后,需重新加载防火墙以使规则生效:
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --query-port=8080/tcp
yes表示端口已开放;也可通过以下命令查看所有开放端口:sudo firewall-cmd --zone=public --list-ports
若需仅允许特定IP访问Tomcat,可使用富规则(Rich Rule):
# 允许单个IP(如192.168.1.100)
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="8080" accept'
# 禁止单个IP(如192.168.1.200)
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.200" port protocol="tcp" port="8080" reject'
# 重新加载防火墙
sudo firewall-cmd --reload
若需完全关闭防火墙(不安全,仅用于测试环境):
sudo systemctl stop firewalld
sudo systemctl disable firewalld # 禁止开机启动
为进一步提升Tomcat安全性,需调整其自身配置,限制端口监听范围或访问权限。
若默认8080端口易被攻击,可修改为其他端口(如8081):
conf/server.xml文件:sudo vim /usr/local/tomcat/conf/server.xml
<Connector>标签(HTTP端口配置),修改port属性:<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
sudo systemctl restart tomcat # 或使用Tomcat自带的脚本:./bin/shutdown.sh && ./bin/startup.sh
sudo firewall-cmd --permanent --zone=public --remove-port=8080/tcp
sudo firewall-cmd --permanent --zone=public --add-port=8081/tcp
sudo firewall-cmd --reload
若Tomcat仅需本地访问(如作为后端服务),可将端口绑定到127.0.0.1,禁止外部访问:
conf/server.xml文件,修改<Connector>标签的address属性:<Connector port="8080" protocol="HTTP/1.1"
address="127.0.0.1" <!-- 仅绑定本地 -->
connectionTimeout="20000"
redirectPort="8443" />
若需通过浏览器访问Tomcat管理页面(如/manager/html),需在conf/tomcat-users.xml中配置用户角色,并限制访问IP:
conf/tomcat-users.xml:sudo vim /usr/local/tomcat/conf/tomcat-users.xml
manager-gui,允许访问管理页面):<tomcat-users>
<role rolename="manager-gui"/>
<user username="admin" password="your_secure_password" roles="manager-gui"/>
</tomcat-users>
conf/server.xml中的<Host>标签,添加remoteAddr属性:<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
remoteAddr="192.168.1.100"> <!-- 仅允许该IP访问 -->
sudo systemctl status tomcat
sudo netstat -tunlp | grep 8080
sudo setenforce 0
或配置SELinux允许Tomcat网络访问:sudo setsebool -P httpd_can_network_connect 1
--permanent),重启防火墙后会失效。reject)在accept之前。通过以上配置,可实现Tomcat与CentOS防火墙的协同工作,既保证服务可用性,又提升系统安全性。