最有效防御端口扫描和渗透攻击的做法是减少暴露面:只开放必要端口、默认拒绝所有入站连接、逐条添加ip白名单规则;配合修改默认端口、隐藏服务指纹、速率限制、ids/ips联动及日志审计实现纵深防御。

直接封住扫描入口、隐藏真实服务、让攻击者找不到目标,是防火墙防御端口扫描和渗透攻击最有效的做法。关键不在“拦得多”,而在“露得少”——暴露越少,被盯上的概率越低。
只放行真正需要的端口
默认拒绝所有入站连接,再逐个添加白名单规则。比如Web服务只需80和443,邮件系统加25、465、993,其他一律关闭。数据库(3306、5432)、远程管理(22、3389)绝不能对公网开放。若必须远程维护,仅允许公司固定IP访问SSH或RDP端口。
- Linux用firewalld时:执行firewall-cmd --permanent --zone=public --remove-port=22/tcp关掉默认SSH端口,再按需加回带源IP限制的规则
- 云服务器务必启用安全组,把“0.0.0.0/0”这种全放开规则全部替换成精确IP段
- 容器环境(如K8s)中,Nginx反向代理后端服务时,宿主机防火墙应只开80/443,后端Pod间通信走内网,不暴露任何额外端口
改默认端口 + 隐藏服务指纹
把SSH从22改成52022、RDP从3389改成53389,虽不能防高级扫描,但能过滤掉90%以上的自动化脚本攻击。同时关闭服务banner输出,避免泄露OpenSSH、Apache等版本信息。
- OpenSSH配置中设置Banner none和VersionAddendum none
- Nginx在server块里加server_tokens off;
- 数据库监听地址设为127.0.0.1而非0.0.0.0,彻底隔断外部直连可能
用速率限制阻断扫描行为
单个IP在10秒内尝试连接超过10个不同端口,基本就是扫描器。防火墙可直接丢包并临时拉黑该IP。
- iptables示例:-A INPUT -p tcp -m state --state NEW -m recent --name portscan --rcheck --seconds 60 --hitcount 10 -j DROP
- firewalld配合ipset实现更高效黑名单管理,扫描IP自动加入blocklist集合,后续流量直接拒绝
- 结合fail2ban监控sshd、nginx日志,对高频失败登录或异常请求IP做二次封禁
配合IDS/IPS增强识别能力
纯防火墙只能看端口和频率,而IDS(如Suricata)能识别nmap的SYN扫描、NULL扫描、XMAS扫描等特征包,IPS则可实时拦截。
- 部署在出口网关或核心交换机旁路,规则库定期更新,重点关注ET OPEN或Emerging Threats中的端口扫描检测规则
- 开启日志审计,将防火墙+IDS日志统一接入SIEM(如ELK或Splunk),设置告警:同一源IP 5分钟内触发3次以上端口扫描匹配规则
- 对高危扫描行为(如全端口扫描、常见漏洞利用探测)联动防火墙自动封禁24小时











