端口漏洞和DDoS攻击通道在很多情况下是同一枚硬币的两面。攻击者并不总是靠海量流量直接打垮服务器,更常见的是先利用暴露的端口漏洞植入木马、劫持业务进程或反射放大流量,再把服务器变成攻击跳板。所以排查端口漏洞不是简单看防火墙规则,而是要确认每一个对外开放的端口上跑的服务、版本、鉴权方式和异常行为。端口一旦失控,就等于给DDoS攻击预留了现成通道。
先确认资产与端口暴露面排查的第一步是清点资产。很多运维只记得业务端口如80、443、22,但测试阶段开放的8080、8888、9090、3306、6379、27017等端口经常被遗忘。攻击者扫描公网IP段时,这些端口就是最容易得手的目标。建议用nmap做全端口扫描,命令示例:
nmap -sS -p- -T4 -Pn 你的公网IP
扫描结果出来后,把对外开放的端口和内部资产表逐一比对。凡是无法解释用途的端口,先关闭再调查。对于必须开放的端口,记录服务名称、版本号、所属业务和责任人。端口暴露面越小,DDoS攻击可利用的反射和放大通道就越少。
针对常见高危端口的漏洞核查22号SSH端口如果对公网开放,必须禁用密码登录,改用密钥认证,并限制来源IP。很多僵尸网络专门爆破22端口,成功后植入DDoS木马。Redis默认6379端口一旦暴露且无密码,攻击者可以直接写入crontab或SSH公钥,把服务器变成肉鸡。MySQL的3306、MongoDB的27017、Elasticsearch的9200同理,未授权访问漏洞会让攻击者拖库、删库或植入后门。Memcached的11211端口如果对外开放,会被利用做UDP反射放大攻击,放大倍数可达数万倍,这是DDoS攻击里非常常见的利用通道。
检查端口上的服务版本与已知漏洞端口开放只是第一层,服务版本过旧是第二层风险。例如旧版OpenSSL存在心脏滴血漏洞,旧版Apache Struts2存在远程代码执行漏洞,旧版Weblogic存在反序列化漏洞。攻击者通过这些漏洞拿到服务器权限后,可以安装DDoS客户端,把服务器纳入僵尸网络。排查时建议对每个开放端口做服务识别:
nmap -sV -p 端口号 目标IP
识别出的版本信息要和官方安全公告比对。发现存在已知高危漏洞的组件,立即升级或加装虚拟补丁。无法升级的老旧系统,要在网络层限制访问来源,或者用反向代理隔离。
封堵DDoS攻击常用的反射放大通道DDoS攻击者喜欢利用无连接的UDP协议做反射放大。常见被利用的端口包括:DNS的53端口、NTP的123端口、Memcached的11211端口、SSDP的1900端口、CLDAP的389端口、Chargen的19端口。如果服务器不需要对外提供这些UDP服务,直接在防火墙或安全组里封禁对应端口。如果必须提供DNS服务,要关闭递归查询,只允许授权域名的解析请求,并限制响应速率。对于NTP服务,升级到4.2.7p26以上版本,关闭monlist查询功能。Memcached服务务必绑定内网IP,禁止监听0.0.0.0。
利用防火墙和内核参数封堵攻击流量端口漏洞修补后,还要在网络层设置主动防御。Linux服务器可以用iptables限制单IP并发连接数和新建连接速率,防止CC攻击消耗端口资源。示例规则:
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP iptables -A INPUT -p tcp --dport 80 -m limit --limit 30/s --limit-burst 50 -j ACCEPT
同时调整内核参数,加快TIME_WAIT状态回收,扩大本地端口范围,防止连接表被占满:
sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w net.ipv4.tcp_fin_timeout=15 sysctl -w net.ipv4.ip_local_port_range="1024 65535" sysctl -w net.core.somaxconn=4096
对于SYN Flood攻击,开启SYN Cookie机制:
sysctl -w net.ipv4.tcp_syncookies=1 sysctl -w net.ipv4.tcp_max_syn_backlog=8192
这些参数能显著提升服务器在DDoS攻击初期的抗压能力,为后续流量清洗争取时间。
检测服务器是否已被植入DDoS木马很多服务器被攻击者控制后,会对外发起DDoS攻击,导致出方向流量异常。排查时要检查是否存在异常进程、异常网络连接和异常定时任务。用以下命令查看对外连接:
netstat -antp | grep ESTABLISHED
重点观察连接到陌生IP且进程名可疑的连接。再检查crontab:
crontab -l ls -la /etc/cron.d/ ls -la /var/spool/cron/
攻击者常把DDoS客户端藏在/tmp、/dev/shm、/var/tmp等可写目录,文件名伪装成系统进程名。用find命令查找最近修改的可执行文件:
find /tmp /dev/shm /var/tmp -type f -mtime -7 -exec file {} \;
发现可疑文件后,先隔离再分析,不要直接删除,保留样本用于溯源。
建立端口级访问控制和监控告警端口漏洞排查不是一次性工作。建议在防火墙或安全组里默认拒绝所有入站流量,只放行业务必须的端口。每个开放端口都要有访问日志记录。对于Web端口,在Nginx或Apache里开启访问日志和错误日志,并配置日志轮转。对于SSH端口,记录登录成功和失败日志,失败次数超过阈值就触发告警。对于数据库端口,禁止公网直接访问,只允许内网或跳板机访问。监控方面,用Zabbix或Prometheus监控每台服务器的端口连接数、流量包速率、CPU负载和出方向流量。一旦出方向流量异常升高,可能意味着服务器被利用发起DDoS攻击,要立即断网排查。
利用云防护和高防IP作为兜底即使本地端口漏洞全部封堵,面对大流量DDoS攻击,单台服务器的带宽仍然可能被打满。此时需要在网络入口部署高防IP或云清洗服务。高防IP会把流量先牵引到清洗中心,过滤掉攻击流量后再回源到真实服务器。配置高防IP时,要把真实服务器IP隐藏起来,只对外公布高防IP。同时在高防IP上做端口转发规则,只开放业务端口,其他端口一律拒绝。这样攻击者即使扫描到高防IP,也无法直接触达源站端口。
端口漏洞排查与DDoS防护的联动策略端口漏洞和DDoS攻击通道的关联性决定了防护必须联动。一次完整的排查流程应该是:先扫描端口暴露面,关闭无用端口;再核查开放端口的服务版本和漏洞,修补已知漏洞;然后检查服务器是否已被植入恶意程序,清理后门;接着配置防火墙规则和内核参数,限制异常流量;最后接入高防IP或云清洗,兜底大流量攻击。这个流程要定期执行,因为业务变更会引入新的端口,新漏洞也会不断出现。建议每月做一次全端口扫描,每季度做一次漏洞复查,重大漏洞公告发布后24小时内完成影响面评估。
端口是服务器对外的门,漏洞是门上的锁,DDoS攻击通道就是门被撬开后留下的暗道。把门看好,把锁换结实,把暗道堵死,服务器才不会变成攻击者的工具。日常运维中把端口排查和DDoS防护当成同一件事来做,安全水位才能稳定在一个较高的水平。
