DigitalOcean Droplet服务器遭恶意请求,寻求网络级IP封禁及安全加固方案
DigitalOcean Droplet服务器遭恶意请求,寻求网络级IP封禁及安全加固方案
嗨,我来帮你梳理下解决方案,你遇到的这种恶意扫描是服务器运维里很常见的情况,先别慌——目前所有请求都返回404,说明敏感信息暂时没泄露,但确实得把防护措施做扎实。
一、先搞定网络级IP封禁(Ubuntu 20.04 + UFW)
你之前用ufw insert 1 reject from IP_ADDRESS to any没生效,大概率是这几个原因:
- UFW有没有正确启用?先确认状态:
sudo ufw status verbose,如果显示inactive,得先开启防火墙:sudo ufw enable - 规则优先级问题:如果之前你允许了所有HTTP/HTTPS流量,后来插入的封禁规则可能被覆盖。正确做法是把封禁规则放在最前面,确保优先匹配:
# 封禁单个IPv4地址 sudo ufw insert 1 deny from 192.168.128.6 to any # 如果是IPv6地址,格式为:sudo ufw insert 1 deny from 2001:db8::1 to any - Docker干扰了UFW规则?Docker会自动添加iptables规则,可能绕过UFW的限制。解决办法是安装
ufw-docker工具,它能协调Docker和UFW的兼容性:
安装完成后再添加封禁规则,就能正常生效了。sudo apt-get install ufw-docker sudo ufw-docker install sudo systemctl restart ufw
二、关于DigitalOcean内部IP的请求
你看到的::ffff:192.168.128.6是Droplet所在数据中心的私有IP段,这大概率不是DigitalOcean官方在扫描你,而是同一数据中心内的其他恶意Droplet发起的扫描(很多攻击者会批量租用云服务器搞这类操作)。
处理方式和普通恶意IP一样:直接用UFW封禁这个私有IP就行——如果你的服务不需要和这个内部IP通信,完全可以拒绝所有来自它的请求。
三、Nginx层面的封禁优化(可选的应用层防护)
之前的blocked_ips.conf没生效,可能是配置位置不对。你需要把封禁规则的include语句放在server块的最顶部,确保请求先匹配封禁规则:
server { # 优先加载封禁规则 include /var/www/blocked_ips.conf; listen 443 ssl; listen [::]:443 ssl; server_name api.mydomain-staging.com; server_tokens off; ... rest of the code }
另外,建议把deny指令搭配return 444;使用,Nginx会直接关闭连接,不给攻击者任何响应信息,安全性更高:
# blocked_ips.conf里的配置改成 deny IP_1; return 444; deny IP_2; return 444;
修改完记得重启Nginx生效:sudo systemctl restart nginx
四、额外的安全加固建议
除了封禁IP,这些措施能进一步提升服务器安全性:
- 彻底隔离敏感文件:绝对不要把
.env或配置文件放在Web根目录下。Express/Node项目里,.env应该放在项目根目录(非public目录),Nginx也不要将这些目录映射为可访问路径。 - 启用fail2ban自动封禁:这是一款自动拦截恶意IP的工具,它会监控Nginx日志,发现多次恶意请求的IP后,自动添加UFW封禁规则。安装和配置步骤:
编辑sudo apt-get install fail2ban # 复制默认配置文件进行自定义修改 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local/etc/fail2ban/jail.local,启用Nginx相关的监控模块:
启动并设置开机自启:[nginx-http-auth] enabled = true port = http,https logpath = %(nginx_error_log)s [nginx-botsearch] enabled = true port = http,https logpath = %(nginx_access_log)ssudo systemctl enable --now fail2ban - 添加Nginx请求速率限制:防止攻击者暴力扫描你的路径,在Nginx的
http块里添加规则:
这个规则限制每个IP每秒最多10个请求,突发请求最多20个,超过直接拒绝。http { limit_req_zone $binary_remote_addr zone=scan_limit:10m rate=10r/s; ... server { ... location / { limit_req zone=scan_limit burst=20 nodelay; ... } } } - 定期更新系统和软件:执行
sudo apt update && sudo apt upgrade -y,及时修补系统和软件的安全漏洞。
备注:内容来源于stack exchange,提问作者spatak
相关产品推荐
相关产品推荐

