使用iptables、fail2ban和系统加固构建多层防御体系可有效阻止端口扫描。1. 通过iptables的recent模块限制60秒内访问超10个端口的IP并封禁;2. 配置fail2ban监控日志,自动封锁SSH爆破等异常行为;3. 更改默认服务端口、禁用高危服务、隐藏banner信息减少暴露面;4. 启用SYN Cookie、关闭ICMP响应、优化内核参数缓解扫描攻击。结合白名单策略与实时告警,形成动态防护闭环,显著提升Linux主机安全性。

端口扫描是攻击者探测系统开放服务、寻找可利用漏洞的常见手段。在Linux环境中,仅靠防火墙默认配置往往不足以应对复杂的扫描行为。要有效阻止恶意端口扫描,需结合系统级防护策略与网络层控制措施,构建多层防御体系。
使用iptables限制扫描行为
iptables 是 Linux 内核自带的包过滤工具,可通过设置规则主动识别并阻断异常连接尝试。
- 限制单位时间内对多个端口的连接尝试:通过 recent 模块检测短时间内访问超过一定数量端口的IP,自动加入黑名单
- 关闭响应ICMP扫描:禁用不必要的echo-reply可减少被发现的概率
- 默认拒绝未明确允许的入站连接:采用白名单模式,只开放必要端口如22、80、443等
-A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -m recent --name portscan --set -j LOG --log-prefix "PortScan: " -A INPUT -m recent --name portscan --rcheck --seconds 60 --hitcount 10 -j DROP
部署fail2ban监控日志自动封禁
fail2ban 能实时分析系统日志(如sshd、vsftpd),发现频繁失败登录或扫描迹象后自动调用防火墙封锁源IP。
- 配置 jail.local 文件定义触发条件:例如SSH五分钟内失败5次即封禁
- 支持自定义正则匹配日志特征,识别Nmap、Dirb等工具的行为模式
- 可集成ipset提升封禁效率,避免iptables规则过多影响性能
隐藏服务与最小化暴露面
减少对外暴露的信息量能显著降低被针对性攻击的风险。
- 更改常见服务端口(如将SSH从22改为非标准端口)增加探测难度
- 禁用te.net、rpcbind等高风险老旧服务
- 配置banner信息隐藏操作系统和服务版本号
- 使用TCP Wrappers(/etc/hosts.allow 和 /etc/hosts.deny)做额外访问控制
启用SYN Cookie与内核参数优化
调整系统网络栈参数有助于缓解扫描引发的资源消耗问题。
- 开启 net.ipv4.tcp_syncookies=1 防止SYN Flood导致服务不可用
- 减小 net.ipv4.tcp_max_syn_backlog 和 net.core.netdev_max_backlog 缓冲队列长度
- 设置 net.ipv4.icmp_echo_ignore_all=1 禁止响应ping请求(按需启用)
基本上就这些。综合运用防火墙规则、入侵检测机制和系统加固手段,能够大幅提高Linux主机抵御端口扫描的能力。关键在于持续监控日志、及时更新策略,形成动态防护闭环。不复杂但容易忽略。










