必须先停服务再封流量,不能只靠防火墙丢包应付;执行sudo ss -tuln | grep -E ':21|:23|:111|:6379|:27017'识别监听端口,用sudo lsof -i :6379等查归属进程,确认后按序停止服务、禁用自启、验证关闭。

Linux服务器暴露21、23、111、6379等高危端口,若未绑定127.0.0.1或未启用认证,极易被扫描利用、写入SSH公钥甚至清空数据库;必须先停服务再封流量,不能只靠防火墙丢包应付。
确认哪些高危端口正在监听并归属哪个服务
别直接删规则——先用系统命令交叉验证端口是否真在跑、跑的是谁、是否对外暴露:
执行 sudo ss -tuln | grep -E ':21|:23|:111|:6379|:27017',重点看 0.0.0.0:* 或 [::]:* 这类通配绑定行;
对每个可疑端口,补查进程归属:例如查6379,运行 sudo lsof -i :6379,若输出显示 redis-server 且 bind 0.0.0.0,就属高危;
【关键前提】 若 lsof 查不到进程但 ss 显示监听,可能是 xinetd 托管或内核模块服务(如 telnet.socket),需额外检查 systemctl list-sockets | grep -i telnet。
停用非必要高危服务(优先级最高)
关服务才是根治,防火墙只是补漏。以下操作必须按顺序执行,缺一不可:
第一步:停止服务进程
例如 Telnet:sudo systemctl stop telnet.socket telnet.service;RPCbind:sudo systemctl stop rpcbind;Redis:sudo systemctl stop redis-server(Ubuntu)或 redis(CentOS)。
第二步:禁止开机自启
执行 sudo systemctl disable telnet.socket telnet.service;sudo systemctl disable rpcbind;sudo systemctl disable redis-server。
第三步:验证已停且不复活
重启前执行 sudo ss -tuln | grep ':23',应无输出;再运行 sudo systemctl is-enabled telnet.socket,返回 disabled 才算成功。
注意:若服务由 xinetd 管理(如某些老版 chargen、echo),需编辑 /etc/xinetd.d/chargen,把 disable = no 改为 disable = yes,再 sudo systemctl restart xinetd。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
限制数据库类服务仅本地监听
MySQL、PostgreSQL、Redis、MongoDB 等默认可能绑定 0.0.0.0,关服务太激进,改配置更稳妥:
方法一:Redis 修改 /etc/redis/redis.conf
找到 # bind 127.0.0.1 ::1 行,取消注释并确保末尾无空格;再确认 requirepass 已设强密码;最后 sudo systemctl restart redis-server。
方法二:MongoDB 编辑 /etc/mongod.conf
在 net: 下添加缩进的 bindIp: 127.0.0.1(不是 bind_ip);保存后执行 sudo systemctl restart mongod;
【易错点】 若配置文件里已有 bindIp: 0.0.0.0,必须删掉或注释,否则新行不生效。
方法三:MySQL 检查 /etc/mysql/mysql.conf.d/mysqld.cnf
定位 bind-address 行,改为 bind-address = 127.0.0.1;若该行被注释,取消注释;重启 sudo systemctl restart mysql。
用 firewalld 移除放行规则(仅当服务必须保留时)
这一步只用于“服务不能停,但必须断外网访问”的场景,比如共享主机上共用 nginx,你只管自己反代逻辑:
先确认当前 firewalld 正在运行:sudo systemctl status firewalld,状态为 active (running) 才继续;
查看已开放端口:sudo firewall-cmd --list-ports;
永久移除危险端口规则:例如删 3306,执行 sudo firewall-cmd --permanent --remove-port=3306/tcp;删 139/445,执行 sudo firewall-cmd --permanent --remove-port=139-445/tcp;
【不可逆操作】 必须执行 sudo firewall-cmd --reload,否则规则不生效;
最后验证:sudo firewall-cmd --list-ports 中不应再出现目标端口。

















