一、使用防火墙关闭端口(推荐)
1. iptables方式
# 禁止所有IP访问33306端口(添加中文注释)
iptables -A INPUT -p tcp --dport 33306 -j DROP
# 允许特定IP访问(可选,将123.123.123.123替换为实际IP)
iptables -I INPUT -p tcp -s 123.123.123.123 --dport 33306 -j ACCEPT
# 保存规则(CentOS 6及以下)
service iptables save
# 查看已添加规则
iptables -L -n | grep 33306
2. firewalld方式(CentOS 7+)
# 永久移除33306端口
firewall-cmd --permanent --remove-port=33306/tcp
# 重新加载防火墙配置
firewall-cmd --reload
# 检查是否生效
firewall-cmd --list-ports | grep 33306
二、停止监听该端口的服务
1. 查找占用端口的进程
# 查看哪个进程在使用33306端口
netstat -tulnp | grep 33306
# 或
lsof -i :33306
# 输出示例:
# mysqld 1234 mysql 10u IPv6 0xffffff TCP *:33306 (LISTEN)
2. 停止相关服务
# 如果是MySQL(根据实际情况修改服务名)
systemctl stop mysqld
# 如果是其他服务,使用对应的服务名
systemctl stop 服务名称
三、彻底禁用端口(可选)
1. 修改服务配置
# 例如MySQL修改my.cnf
[mysqld]
port = 3306 # 改为默认端口或其他端口
# skip-networking = 1 # 也可以完全禁用TCP/IP连接
2. 使用内核参数禁用
# 临时禁用
echo 1 > /proc/sys/net/ipv4/tcp_drop_port_33306
# 永久生效(添加到/etc/sysctl.conf)
echo "net.ipv4.tcp_drop_port_33306 = 1" >> /etc/sysctl.conf
sysctl -p
四、验证端口已关闭
# 检查端口是否仍在监听
ss -tuln | grep 33306
# 从外部测试(另一台机器执行)
telnet 你的服务器IP 33306 # 应显示连接失败