在使用云服务器的过程中,几乎每个运维者都会经历被恶意扫描、爆破登录、攻击网站或端口被频繁探测的情况。随着互联网的开放性与云计算资源的普及,这种现象已成为普遍现状。无论服务器部署在国内还是海外,只要暴露在公网,攻击流量与端口扫描几乎每天都会发生。很多人误以为只有大型企业或高访问量的网站才会成为攻击目标,实际上,大部分扫描都是由自动化脚本或僵尸网络随机执行的。它们的目的不是针对具体业务,而是寻找系统漏洞、弱密码、开放端口或配置错误的主机。一旦被利用,轻则导致 CPU、带宽被占用,重则可能造成数据泄露甚至系统被控。
当服务器被扫描端口或攻击时,首先要明确威胁类型。常见的攻击包括 SSH 或 RDP 登录破解、Web 应用漏洞扫描、DDoS 攻击、开放端口探测、以及中间人劫持尝试。不同类型的攻击需要不同层级的防御措施。从系统底层来说,端口是攻击的入口,因此管理和隐藏端口是防御的第一步。云服务器部署完成后,很多用户习惯保持默认配置,例如 SSH 端口 22、数据库端口 3306、远程桌面端口 3389 等。这些默认端口最容易被扫描工具识别并爆破,因此建议在初始部署阶段立即修改默认端口。以 Linux 系统为例,可以编辑 SSH 配置文件:
vim /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
PasswordAuthentication no
在修改端口号后,重启 SSH 服务:
systemctl restart sshd
同时,应当关闭 root 用户直接登录,改用普通用户+密钥方式连接,彻底杜绝破解密码的可能。
如果是 Windows 云服务器,则应修改 RDP(远程桌面)端口。可通过注册表操作完成:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 23389 /f
修改后重启系统生效。除此之外,云厂商一般提供安全组管理功能,可以从外部层面进一步限制访问。例如仅开放 80、443、22(或新端口)、3389(或新端口)等必要端口,并将其访问来源限制为特定 IP 段。这样,即便扫描脚本检测到端口存在,也无法建立连接,从根本上降低风险。
当服务器已经遭遇大规模端口扫描或攻击时,分析日志是定位问题的关键。Linux 用户可以通过以下命令快速查看 SSH 登录尝试情况:
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head
这能列出破解来源的 IP 及尝试次数。若发现某些 IP 出现频繁,可通过防火墙直接屏蔽。例如使用 iptables:
iptables -A INPUT -s 192.168.1.100 -j DROP
或使用 firewalld:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' drop"
firewall-cmd --reload
若使用 ufw(Ubuntu 默认防火墙),则命令更为简单:
ufw deny from 192.168.1.100
通过这些命令,可以快速封禁异常 IP 段,防止其继续访问。对于大规模扫描,可以借助 Fail2ban 自动化封禁机制。Fail2ban 会监控系统日志,当发现同一 IP 连续尝试失败时,自动将其加入防火墙黑名单。
apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
配置文件位于 /etc/fail2ban/jail.local,可按需调整封禁策略:
[sshd]
enabled = true
port = 2222
filter = sshd
maxretry = 3
findtime = 600
bantime = 3600
这样,当某个 IP 在 10 分钟内连续 3 次密码错误,将被封禁 1 小时,大大减少破解风险。
对于 Web 攻击和端口扫描,更推荐使用防火墙与 WAF(Web 应用防火墙)配合使用。常见的攻击如 SQL 注入、XSS、目录遍历、扫描器请求等,都可通过 WAF 拦截。例如安装 Nginx 的用户可添加简单的防扫描规则:
if ($http_user_agent ~* (acunetix|sqlmap|nikto|nmap|dirbuster)) {
return 403;
}
这条规则能直接阻止常见扫描工具访问。对于更复杂的防御需求,可以使用安全组件。它们不仅能检测异常流量,还能自动识别恶意模式、封禁攻击 IP。
除了应用层防御外,网络层防护同样重要。当发现服务器响应变慢、带宽占用异常时,可能是遭遇 DDoS 攻击。这类攻击通过大量请求淹没带宽或 CPU,导致服务无法访问。应对方式包括启用云厂商的防护服务或在服务器端启用 SYN cookies、限制并发连接数。例如在 Linux 中执行:
sysctl -w net.ipv4.tcp_syncookies=1
iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT
这能缓解 SYN Flood 攻击带来的连接消耗问题。
如果攻击强度过高且持续时间长,可以采取“临时断网”或“更换公网 IP”的方式。部分云服务支持快速更换弹性公网 IP,通过切换 IP 可短期内中断攻击者的扫描进程。但这种方法只是权宜之计,根本防护仍需在系统层加强配置。
对于长期防护,建议部署入侵检测系统(IDS)和安全监控。例如安装 OSSEC、Wazuh 或 AIDE,可定期扫描文件完整性、检测权限变更、识别系统异常。若服务器被攻破,这些工具能帮助快速定位入侵路径。
服务器日志应定期备份,并使用 logrotate 自动轮转,防止日志被覆盖。例如添加配置文件 /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
rotate 14
compress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
}
这样可保持近两周的日志记录,方便后续分析。
除技术措施外,安全策略同样关键。任何云服务器都应遵循“最小开放原则”,仅开放业务所需端口,并设置复杂的密码与多因素认证(MFA)。使用云控制台的 SSH 密钥对登录功能,而非明文密码。对于数据库、管理后台等高风险服务,不应直接暴露在公网,可以通过内网访问或启用跳板机机制。
在安全防御体系中,监控与响应是最后的环节。管理员应设置安全告警机制,例如通过 Fail2ban、UFW、或者云厂商监控系统,当出现异常登录、端口扫描、CPU 异常升高时,立即发送邮件或短信提醒。同时,可以在 crontab 中添加定时任务,定期检测系统端口状态:
netstat -tulnp | grep LISTEN > /root/port_status.log
并通过脚本比对上一次状态,若发现新增端口立即告警。
对于运维团队而言,防护并不是一次性任务,而是持续优化的过程。随着攻击手段的不断升级,仅靠防火墙和封禁规则已不足以保障安全。更高级的策略包括自动化安全编排(SOAR)、实时流量分析、以及结合 AI 的威胁检测。即便对于个人开发者,也可以利用开源工具实现轻量级安全闭环,实现动态联动防御。
最终目标是让服务器在高可用与高安全之间取得平衡。过度防御可能造成服务不可达,而防护不足又会留下隐患。因此,合理分层的安全体系尤为关键:网络层防御负责抵御外部洪水攻击,系统层负责端口和账户安全,应用层则关注网站漏洞与数据安全。只有当三者协同工作,才能在面对复杂攻击时保持稳定。
在全球云计算环境下,攻击频率已成为常态,无法完全避免。我们能做的,是通过日志分析、自动化防御和良好的安全习惯,把损失降到最低。无论是个人项目还是企业服务器,只要接入公网,就必须把安全作为运维的第一要务。预防永远比补救更划算,只有建立起完善的安全体系,服务器才能在漫长的运行周期中稳健可靠地提供服务。