在Linux系统中,关闭80端口通常用于安全防护、服务迁移或端口冲突解决,80端口是HTTP服务的默认端口,可能被Apache、Nginx、Tomcat等Web服务占用,或被其他自定义程序监听,关闭端口需分步骤进行,包括确认占用情况、停止相关服务、配置防火墙规则等,以下是详细操作流程。

确认80端口占用情况
在关闭端口前,需先明确80端口被哪个进程或服务占用,避免误操作影响正常业务,常用命令有netstat、ss和lsof,具体如下:
使用netstat命令(传统工具)
netstat -tuln | grep 80
-t:显示TCP端口-u:显示UDP端口-l:仅显示监听端口-n:以数字形式显示地址和端口,避免DNS解析
若输出类似tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN,表示80端口被监听,需查看右侧PID/进程名(结合-p参数:netstat -tulnp | grep 80)。
使用ss命令(推荐,更高效)
ss -tuln | grep 80
ss是netstat的替代工具,在Linux新版本中默认安装,查询速度更快,参数与netstat基本一致。
使用lsof命令(显示详细进程信息)
lsof -i:80
该命令会列出占用80端口的进程ID(PID)、用户、命令等详细信息,nginx 1234 root IPv4 0 0 0.0.0.0:80 0.0.0.0:* LISTEN,明确进程为nginx,PID为1234。
停止占用80端口的服务
确认占用进程后,需根据服务类型停止服务,常见Web服务的停止命令如下:

停止Apache服务
# 停止当前运行的服务 systemctl stop httpd # CentOS/RHEL系统 systemctl stop apache2 # Debian/Ubuntu系统 # 禁止服务开机自启(避免重启后自动监听80端口) systemctl disable httpd systemctl disable apache2
停止Nginx服务
systemctl stop nginx systemctl disable nginx
停止Tomcat服务
Tomcat默认监听8080端口,若配置修改为80端口,需先定位Tomcat安装目录,关闭catalina.sh脚本:
# 假设Tomcat安装目录为/usr/local/tomcat /usr/local/tomcat/bin/shutdown.sh
强制终止进程(若服务无法正常停止)
若服务停止命令无效,可通过PID强制终止进程(谨慎使用,可能导致数据丢失):
kill -9 <PID> # kill -9 1234
配置防火墙规则关闭80端口
即使停止了服务,防火墙可能仍允许80端口入站连接,需进一步配置防火墙规则,不同Linux发行版使用的防火墙工具不同,需区分处理:
CentOS/RHEL(使用firewalld)
# 查看当前是否开放80端口 firewall-cmd --list-ports | grep 80 # 移除80端口规则(永久生效) firewall-cmd --permanent --remove-port=80/tcp # 重新加载防火墙使规则生效 firewall-cmd --reload
Debian/Ubuntu(使用ufw)
# 查看当前规则 ufw status | grep 80 # 拒绝80端口入站连接 ufw deny 80 # 重新加载防火墙 ufw reload
通用方法(iptables)
若系统使用iptables(如老旧版本或自定义配置):

# 删除允许80端口的规则(需匹配原有规则格式) iptables -D INPUT -p tcp --dport 80 -j ACCEPT # 保存规则(CentOS:service iptables save;Ubuntu:iptables-save > /etc/iptables/rules.v4) service iptables save
验证80端口是否关闭
执行以下命令确认80端口已不再监听或被允许:
# 检查端口占用 netstat -tuln | grep 80 ss -tuln | grep 80 # 测试防火墙规则(从外部或本地访问80端口) curl http://localhost:80 # 应返回“Connection refused”或超时
常用命令速查表
| 操作类别 | 命令(示例) | 说明 |
|---|---|---|
| 查看端口占用 | ss -tuln | grep 80 |
查询80端口监听状态 |
| 查看进程详情 | lsof -i:80 |
显示占用80端口的进程信息 |
| 停止Apache | systemctl stop httpd |
停止Apache服务 |
| 停止Nginx | systemctl stop nginx |
停止Nginx服务 |
| 移除firewalld规则 | firewall-cmd --permanent --remove-port=80/tcp |
永久移除80端口规则 |
| 拒绝ufw规则 | ufw deny 80 |
拒绝80端口入站连接 |
相关问答FAQs
Q1: 关闭80端口后,如何确认服务是否完全停止?
A1: 可通过以下方式综合确认:
- 使用
systemctl status <服务名>(如systemctl status nginx)查看服务状态,应显示“inactive (dead)”; - 执行
ps aux | grep <服务名>(如ps aux | grep nginx),确认无相关进程运行; - 通过
netstat -tuln | grep 80再次检查,确保80端口无监听状态。
Q2: 为什么停止服务后,80端口仍显示被占用?
A2: 可能原因包括:
- 服务未完全停止:部分服务可能存在子进程或守护进程未退出,可尝试
kill -9强制终止,或检查服务配置文件中的端口绑定是否彻底; - 其他程序占用:可能有非Web服务(如Python、Java程序)监听80端口,需通过
lsof -i:80确认并停止相关进程; - 防火墙规则未更新:若防火墙仍允许80端口入站,需按本文第三部分重新配置防火墙规则,确保规则已生效(如执行
firewall-cmd --reload)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/37072.html