真正防住服务器扫描与探测的关键是让攻击者找不到入口、测不出状态、扫不出服务,核心动作包括禁Ping隐身、收缩端口暴露面、识别并拦截扫描行为特征。

要真正防住服务器扫描与探测,关键不是“堵所有流量”,而是让攻击者找不到入口、测不出状态、扫不出服务。核心动作就三类:禁Ping隐身、收缩端口暴露面、识别并拦截扫描行为特征。
一、禁Ping让服务器“消失”在扫描雷达上
攻击者常用ping批量探测IP是否存活,再针对性扫描。禁Ping不是封端口,而是屏蔽ICMP回显请求(类型8)。Linux用iptables命令:
- iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
- 若需保留运维人员本地ping权限,可加-s限制来源IP,例如:-s 192.168.1.0/24
- CentOS 7/8使用firewalld时,执行:firewall-cmd --add-icmp-block=echo-request --permanent,再重载规则
二、只开必要端口,关闭一切非必需服务
扫描器最常探测21、22、23、80、443、3306、3389等端口。没用的服务关掉,比单纯封端口更彻底:
- 检查运行中的服务:ss -tuln 或 netstat -tuln
- 停用不用的服务,例如:systemctl stop telnet.socket && systemctl disable telnet.socket
- 防火墙只放行真实需要的端口,如仅开放SSH(22)和HTTPS(443):iptables -A INPUT -p tcp --dport 22 -j ACCEPT,iptables -A INPUT -p tcp --dport 443 -j ACCEPT,最后加一条默认拒绝:iptables -P INPUT DROP
三、识别高频扫描行为,自动封禁可疑IP段
单靠静态规则无法应对动态扫描。建议部署轻量级实时拦截机制:
- 用fail2ban监控web日志,对1分钟内请求超过50次的IP自动封禁1小时(配置filter.d/nginx-bad-request.conf)
- 用iptables + recent模块做简单频率控制,例如:iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --name scan --rcheck --seconds 60 --hitcount 30 -j DROP
- 定期拉取公开威胁情报IP段(如Emerging Threats、FireHOL),用脚本自动导入iptables或firewalld黑名单
四、隐藏服务指纹,降低被精准识别概率
即使开了端口,也不必暴露软件版本信息:
- Nginx中设置:server_tokens off;,Apache中设:ServerSignature Off & ServerTokens Prod
- 数据库服务(如MySQL)禁用远程root登录,改用专用低权限账号+IP白名单
- 后台路径不使用默认名(如/wp-admin/、/admin.php),配合404页面统一返回,避免泄露技术栈

















