守护云端主机第一道防线:在弹性云服务器(ECS)上配置精细化防火墙与暴力破解自动拦截指南

举报
yd_226592525 发表于 2026/11/09 23:10:20 2026/11/09
【摘要】 引言当一台带有公网能力的弹性云服务器(ECS)刚刚创建并上线时,往往在短短几分钟内就会收到来自全球各地的自动化探测脚本扫描。如果查看系统的 /var/log/auth.log 或 /var/log/secure 认证日志,常能看到成千上万条针对远程管理端口或Web管理后台的字典暴力猜解记录。虽然云平台提供了外层安全组策略,但在操作系统内部构建一套具备“状态感知与动态拉黑”能力的纵深防御体系...

引言

当一台带有公网能力的弹性云服务器(ECS)刚刚创建并上线时,往往在短短几分钟内就会收到来自全球各地的自动化探测脚本扫描。如果查看系统的 /var/log/auth.log 或 /var/log/secure 认证日志,常能看到成千上万条针对远程管理端口或Web管理后台的字典暴力猜解记录。虽然云平台提供了外层安全组策略,但在操作系统内部构建一套具备“状态感知与动态拉黑”能力的纵深防御体系依然至关重要。本文将结合生产环境安全加固经验,分享如何利用 UFW(Uncomplicated Firewall) 与 Fail2ban 协同工作,零成本打造全天候自动封禁恶意请求的铜墙铁壁。

一、 第一层静态收敛:使用 UFW 规范化主机防火墙

在 Linux 系统中,底层的 iptables 或 nftables 语法较为繁琐,极易因一条规则顺序写错导致管理员自己被锁在服务器门外。对于日常云主机运维,使用封装更为友好的 UFW 可以极大降低防火墙配置的心智负担。

在启用防火墙之前,务必遵循“先放行管理端口、再开启全局拦截”的铁律:

# 1. 安装 UFW 防火墙组件
sudo apt update && sudo apt install -y ufw

# 2. 设置默认策略:默认拒绝所有外部入站连接,默认允许所有本机出站连接
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 3. 关键步骤:优先放行自定义的 SSH 远程管理端口(假设为 22022),防止开启瞬间断连
sudo ufw allow 22022/tcp comment 'SSH Custom Port'

# 4. 按需放行 Web 网关的标准服务端口
sudo ufw allow 80/tcp comment 'HTTP Web Traffic'
sudo ufw allow 443/tcp comment 'HTTPS Secure Traffic'

# 5. 正式激活防火墙并设置为开机自启
sudo ufw enable

# 6. 查看带编号的防火墙规则列表及当前生效状态
sudo ufw status numbered

通过上述六步操作,云服务器除了显式声明的三个业务端口外,其余成千上万个高危端口(如数据库端口、内部调试端口)在主机层面均处于完全隐身与拒绝状态。

二、 第二层动态防御:部署 Fail2ban 自动识别与拉黑攻击源

静态防火墙只能管控端口的开关,而对于必须对外开放的 SSH 端口或 Nginx Web 端口,攻击者依然可以源源不断地发送密码尝试或恶意扫描请求。此时,我们需要引入 Fail2ban——它会实时监控系统与服务的日志文件,一旦发现某个来源在短时间内多次触发认证失败或异常状态码,便会自动调用底层防火墙将其彻底封禁。

首先,在云服务器上安装服务并创建本地自定义配置文件:

# 安装 Fail2ban 守护进程
sudo apt install -y fail2ban

# 切忌直接修改默认的 jail.conf(升级时会被覆盖),应当新建专属的 jail.local 覆盖配置
sudo vim /etc/fail2ban/jail.local

在 /etc/fail2ban/jail.local 中写入以下经过生产验证的双重防护配置(同时保护 SSH 终端与 Nginx 网关):

[DEFAULT]
# 设定白名单标识(本地回环地址永不封禁)
ignoreip = localhost

# 统计时间窗口:在最近 10 分钟(600秒)内进行计数
findtime = 600

# 最大容忍失败次数:在统计窗口内累计失败达到 5 次即触发封禁
maxretry = 5

# 初始封禁时长:封禁 24 小时(86400秒),设为 -1 则代表永久封禁
bantime = 86400

# 开启递增惩罚机制:针对解封后再次作恶的顽固节点,封禁时间按倍数翻倍延长
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 5w

# 指定底层联动 UFW 防火墙执行拦截动作
banaction = ufw

# ================= 守护模块 1:SSH 远程登录防爆破 =================
[sshd]
enabled = true
port    = 22022
filter  = sshd
logpath = /var/log/auth.log
maxretry = 3

# ================= 守护模块 2:Nginx 网关敏感目录防扫描 =================
[nginx-http-auth]
enabled = true
port    = http,https
filter  = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5

核心防御机制亮点解析:

  • bantime.increment = true(指数级递增封禁):这是对付自动化僵尸网络最有效的利器。当某个恶意节点第一次触发 3 次密码错误时,会被封禁 24 小时;如果 24 小时解封后它依然继续尝试攻击,第二次封禁时间会自动翻倍至 48 小时,最高可自动延长至 5 周(5w),让持续扫描彻底失去意义。
  • banaction = ufw:将拦截动作直接交给刚才配置好的 UFW 防火墙执行,实现静态规则与动态黑名单的统一管理。

三、 自定义高级过滤规则:拦截恶意 Web 漏洞扫描器

除了拦截密码爆破,线上 Nginx 的 access.log 中经常会出现大量试探后台路径、配置文件或脚本漏洞的恶意请求(通常表现为短时间内触发大量 404 或 403 状态码)。我们可以为 Fail2ban 编写一个自定义过滤器,将这些扫描器一网打尽。

首先,新建过滤器规则文件 /etc/fail2ban/filter.d/nginx-scanner.conf:

[Definition]
# 匹配 Nginx 访问日志中返回 403 或 404 状态码的异常请求行
failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" (403|404) .*$
ignoreregex = .*(robots\.txt|favicon\.ico).*

接着,在 /etc/fail2ban/jail.local 末尾追加启用该规则:

[nginx-scanner]
enabled  = true
port     = http,https
filter   = nginx-scanner
logpath  = /var/log/nginx/access.log
findtime = 60
maxretry = 20
bantime  = 3600

这段配置的含义非常直观:只要有任何外部客户端在 60 秒内连续触发了 20 次以上的 404/403 页面不存在报错(排除了正常的网页图标请求),系统就会立即判定其为自动化目录扫描器,并自动封禁其访问权限 1 小时。

四、 运维巡检与手动解封操作

配置完成后,重启 Fail2ban 服务并掌握以下几个高频管理命令,即可随时审视云服务器的防御战果:

# 1. 重启服务并设置开机自启
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

# 2. 查看当前已激活的所有防护监狱(Jail)列表
sudo fail2ban-client status

# 3. 查看 sshd 防护模块下详细的累计拦截次数与当前被关押的黑名单列表
sudo fail2ban-client status sshd

# 4. 若开发人员因输错密码被误封,可执行以下命令立即手动解封指定标识
sudo fail2ban-client set sshd unbanip target_client_identifier

通过执行 sudo fail2ban-client status sshd,我们可以清晰地看到 Currently banned(当前正在封禁数)与 Total banned(历史累计拦截总数)。往往运行几天后,就能看到数十甚至上百个恶意探测源被成功拒之门外。

五、 总结

安全从来不是单一组件的独角戏。通过在弹性云服务器上将 UFW 的静态端口最小化原则 与 Fail2ban 的日志实时分析及递增惩罚机制 深度结合,我们不仅大幅净化了系统日志中的噪音,更以极低的系统资源开销建立起了一套能够自我进化、主动反击的主机安全免疫系统。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。