Linux禁止未授权端口监听的关键在于服务管理、内核绑定限制和访问控制三重协同,而非仅依赖防火墙DROP规则;需通过ss/lsof查真实监听状态,systemctl禁用非必要自启服务,修改配置收紧监听地址,并以firewalld补位监控。

Linux 禁止未授权端口监听,核心不是“封端口”,而是从源头控制谁有资格监听——关键在服务管理、内核绑定限制和访问控制三重协同。只靠防火墙 DROP 规则,服务仍在后台监听,本地和内网流量照常通行,漏洞仍可被利用。
查清真实监听状态,避免凭空猜测
先确认哪些端口真正在监听,以及由哪个进程启动:
- 运行 sudo ss -tuln:重点关注
0.0.0.0:*(监听所有IPv4地址)和[::]:*(监听所有IPv6地址),这类绑定最危险 - 查某端口归属:sudo ss -tulnp | grep :3306 或 sudo lsof -i :22(需安装 lsof)
- 看哪些服务开机自启:systemctl list-unit-files --type=service | grep enabled,重点筛查 telnet、ftp、rpcbind、avahi-daemon、cups、bluetooth 等非必需项
停掉服务本身,而非仅拦流量
关服务比封端口更彻底,且能释放资源、减少攻击面:
- 常规服务(如 vsftpd):sudo systemctl stop vsftpd && sudo systemctl disable vsftpd
- 防被其他服务间接拉起(如 avahi):sudo systemctl mask avahi-daemon.service
- 托管类服务(如 telnet):编辑
/etc/xinetd.d/telnet,设disable = yes,再 sudo systemctl restart xinetd - 内核协议级禁用(如 SMBv1):写入
/etc/modprobe.d/cifs.conf,添加options cifs disable_legacy_dialects=1,然后 sudo modprobe -r cifs && sudo modprobe cifs
收紧监听范围,强制绑定到安全地址
很多服务默认监听 0.0.0.0,但实际只需本机或特定网段访问。修改配置让其“缩回安全区”:
- SSH:编辑
/etc/ssh/sshd_config,添加ListenAddress 192.168.1.100或ListenAddress 127.0.0.1,避免暴露到公网 - MySQL:修改
my.cnf中的bind-address = 127.0.0.1(默认可能为 0.0.0.0) - Redis:确认
redis.conf中bind 127.0.0.1且protected-mode yes - 应用服务:检查代码或配置中是否硬编码
INADDR_ANY或0.0.0.0,改为明确指定内网IP或 127.0.0.1
防火墙补位 + 持续监控,形成闭环
防火墙不替代服务关停,但作为最后一道防线和行为审计入口:
- firewalld 默认拒绝:sudo firewall-cmd --set-default-zone=drop,再显式放行必要端口(如
sudo firewall-cmd --permanent --add-port=22/tcp) - 按源IP限制关键服务:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.2.0/24" port port="22" protocol="tcp" accept'
- 启用连接日志:sudo firewall-cmd --set-log-denied=all,日志落于
/var/log/firewalld - 定期巡检:watch -n 5 'ss -tuln | grep ":.*LISTEN"' 或写脚本每日输出对比基线


















