直接说结论:CentOS里没有“禁用443端口”这个按钮,禁用你要做的端口是让监听443的服务停掉,或者用防火墙规则把流量挡在外面。禁用很多人一上来就搜“怎么禁用端口”,端口其实是禁用把概念搞混了——端口本身是系统资源,没有“禁用”一说,端口只有“谁在用它”和“让不让你连它”。禁用
先看看谁占了443。端口执行ss -tlnp | grep 443,禁用你会看到类似LISTEN 0 128 *:443 *:* users:(("nginx",端口pid=1234,fd=8))的输出。这行字告诉你,禁用nginx这个进程,端口PID是禁用1234,正蹲在443端口上等连接。端口如果压根没输出,禁用说明没服务监听,那443端口本来就是“空”的,外部根本连不进来,你也不用折腾。但多数情况是nginx或Apache占着,那就得对症下药。
最干脆的办法是直接停服务。比如systemctl stop nginx,再systemctl disable nginx防止开机自启。这就好比把饭店大门锁了,菜单还挂着但没人接待。不过有个坑——如果机器上跑着Docker,有些容器会以host网络模式直接绑443,systemctl管不到它。这时候你得docker ps找到容器,再docker stop 容器名。我见过有人停完nginx发现443还开着,查了半天才发现是容器里那个旧版Apache在作祟。
要是你不想动服务,只想临时挡一下外部访问,那就用firewalld。CentOS 7以上默认带这玩意儿,命令也直白:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="443" protocol="tcp" reject',然后firewall-cmd --reload。注意这里用了reject而不是drop,区别在于reject会礼貌地回一个“连接被拒”的包,客户端立刻报错;drop则假装没听见,客户端得等到超时。内网测试用reject方便排错,对外生产环境建议drop——少暴露信息,省得扫描器发现你443端口有反应。
还有个野路子,用iptables直接干。但CentOS 7后firewalld是老大,你手动加iptables规则重启后大概率被覆盖。除非你systemctl mask firewalld彻底废掉它,再装iptables-services自己管。这么干适合老手,新手容易把自己锁在门外——我同事就干过这事,本想封443结果把22端口SSH也顺手挡了,最后只能去机房物理重启。
最后提醒一句:禁用443前先确认有没有别的服务依赖它。比如你有个支付回调接口写在443上,停了nginx等于告诉客户“别付钱了”。更稳妥的做法是改端口号,把nginx的listen改成8443,再在防火墙放行新端口。但有些第三方回调地址写死了443,你改了对方就不认账——这种场景就别禁,改用防火墙白名单限制来源IP,比一刀切禁用靠谱得多。
实际操作时,永远先备份配置,再动手。改完测一下curl -I https://你的域名,看返回什么。如果curl卡住不动,八成是端口挡了但服务还在等连接;如果秒回connection refused,那才是真禁干净了。别信“禁用端口”这种说法,搞清楚你挡的是谁、放行的是谁,服务器才不会跟你闹脾气。
