网站首页 > 技术教程 正文
昨天一台在公网的测试Web服务器的CPU突然彪到95%,查了一下发现是有人在做CC攻击,短期内大量的访问我们的正常的URL,然后导致这台测试服务器的资源被占用,CPU达到95%。我们需要找出攻击的IP地址,然后开启防火墙阻止这个黑客的攻击。
1、查找Web日志,发现攻击的IP
使用nginx作为Web服务器的日志一般都放在/var/log/nginx目录下面。
找到这些日志,其中的有很多条相似的日志,短时间内访问量很大,IP是相同的,就可以怀疑不是正实用户的访问,让我们拿其中的一条日志来举例说明:
104.243.40.15 - - [07/May/2024:19:22:11 +0000] "GET /catalogsearch/result/ HTTP/1.1" 302 5 "https://www.google.com/search?hl=en&q=testing" "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)"
日志字段解释
104.243.40.15:
访问者的 IP 地址。
-:
通常用于表示用户的身份验证信息,如果没有身份验证信息就会显示 -。
-:
通常用于表示用户的身份验证用户名,如果没有身份验证用户名就会显示 -。
[07/May/2024:19:22:11 +0000]:
请求的日期和时间,格式为 [日/月/年:时:分:秒 时区]。
在这个例子中是 [07/May/2024:19:22:11 +0000]。
"GET /catalogsearch/result/ HTTP/1.1":
请求行,包含请求方法(GET)、请求的路径(/catalogsearch/result/)和 HTTP 版本(HTTP/1.1)。
302:
HTTP 状态码,表示请求的响应状态。
302 是重定向状态码,表示资源已被临时移动到新的位置。
5:
响应的字节数(响应体大小)。在这个例子中,只有 5 个字节。
"https://www.google.com/search?hl=en&q=testing":
请求的引用来源(Referer),表示用户从哪个页面点击链接访问的当前页面。
在这个例子中,用户从 Google 搜索页面访问。
"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)":
用户代理字符串(User-Agent),表示请求客户端的详细信息。
在这个例子中,用户代理字符串表明客户端是:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)
这通常表示使用 Internet Explorer 7.0 模拟的浏览器(360 安全浏览器)。
综合解释
日志记录显示,在 2024 年 5 月 7 日 19:22:11(UTC 时间),来自 IP 地址 104.243.40.15 的用户使用客户端 "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)" 访问了路径 /catalogsearch/result/。该请求是从 Google 搜索页面 "https://www.google.com/search?hl=en&q=testing" 中点击链接跳转过来的。
服务器返回了 HTTP 状态码 302,表示重定向,并返回了 5 个字节的响应体。由于状态码 302 表示重定向,请求被重定向到另一个页面。
因此我们发现这个IP104.243.40.15是攻击者的IP地址。
2、使用防火墙禁止访问
要使用 UFW 禁止特定 IP 地址的所有访问,可以添加一条 deny 规则。以下是添加规则并验证的步骤:
添加规则
禁止 IP 地址 104.243.40.15 的所有访问:
sudo ufw deny from 104.243.40.15
查看规则状态:
添加规则后,查看防火墙状态以确保规则已生效:
sudo ufw status verbose
输出应包含类似以下内容:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
Anywhere DENY 104.243.40.15
使用编号规则
如果你愿意,可以使用 numbered 规则查看并删除特定规则。
查看规则编号:
sudo ufw status numbered
删除特定规则:
例如,要删除编号为 [5] 的规则:
sudo ufw delete 5
完整示例
以下是完整的防火墙规则配置示例,禁止特定 IP 地址的所有访问,并允许其他常用服务:
# 启用 UFW
sudo ufw enable
# 禁止特定 IP 地址的所有访问
sudo ufw deny from 104.243.40.15
# 允许 SSH
sudo ufw allow 22/tcp
# 允许 HTTP 和 HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 查看 UFW 状态
sudo ufw status verbose
3、规则没起作用怎么办?
设完了以后,发现访问居然没有停止,难道是我们的规则没有起作用吗?这个时候我们需要来排查规则没有起作用的原因。在 UFW 中,规则的顺序很重要,规则是按照它们的添加顺序进行匹配的。为了确保特定的 IP 地址被禁止访问,你需要将 Deny 规则放在其他允许规则之前。
移动规则的方法
列出带编号的规则:
使用 numbered 参数查看当前的所有规则并为每个规则分配一个编号。
sudo ufw status numbered
例如,将看到类似以下输出:
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN Anywhere
[ 2] 80 ALLOW IN Anywhere
[ 3] 443 ALLOW IN Anywhere
[ 4] 56678 ALLOW IN Anywhere
[ 5] 80/tcp ALLOW IN Anywhere
[ 6] 22/tcp ALLOW IN Anywhere
[ 7] 2222/tcp ALLOW IN Anywhere
[ 8] 443/tcp ALLOW IN Anywhere
[ 9] Anywhere DENY IN 104.243.40.15
[10] 22 (v6) ALLOW IN Anywhere (v6)
[11] 80 (v6) ALLOW IN Anywhere (v6)
[12] 443 (v6) ALLOW IN Anywhere (v6)
[13] 56678 (v6) ALLOW IN Anywhere (v6)
[14] 80/tcp (v6) ALLOW IN Anywhere (v6)
[15] 22/tcp (v6) ALLOW IN Anywhere (v6)
[16] 2222/tcp (v6) ALLOW IN Anywhere (v6)
[17] 443/tcp (v6) ALLOW IN Anywhere (v6)
删除旧的 Deny 规则:
删除当前的 Deny 规则(根据编号,例如 [9]):
sudo ufw delete 9
重新添加 Deny 规则:
重新添加禁止特定 IP 地址的规则,以确保它在所有允许规则之前:
sudo ufw insert 1 deny from 104.243.40.15
insert 命令将规则插入到指定的位置。在这里,将 Deny 规则插入第一位,使其优先级最高。
查看最终状态:
确认规则已正确生效并位于首位:
sudo ufw status numbered
例如:
Status: active
To Action From
-- ------ ----
[ 1] Anywhere DENY IN 104.243.40.15
[ 2] 22 ALLOW IN Anywhere
[ 3] 80 ALLOW IN Anywhere
[ 4] 443 ALLOW IN Anywhere
[ 5] 56678 ALLOW IN Anywhere
[ 6] 80/tcp ALLOW IN Anywhere
[ 7] 22/tcp ALLOW IN Anywhere
[ 8] 2222/tcp ALLOW IN Anywhere
[ 9] 443/tcp ALLOW IN Anywhere
[10] 22 (v6) ALLOW IN Anywhere (v6)
[11] 80 (v6) ALLOW IN Anywhere (v6)
[12] 443 (v6) ALLOW IN Anywhere (v6)
[13] 56678 (v6) ALLOW IN Anywhere (v6)
[14] 80/tcp (v6) ALLOW IN Anywhere (v6)
[15] 22/tcp (v6) ALLOW IN Anywhere (v6)
[16] 2222/tcp (v6) ALLOW IN Anywhere (v6)
[17] 443/tcp (v6) ALLOW IN Anywhere (v6)
这样,禁止特定 IP 地址的规则将优先于其他规则,使其生效。
4、查看分析UFW日志
修改完了规则以后,可以去防火墙日志观看生效情况,UFW日志一般在/var/log/ufw.log文件当中。
查看日志可以看到类似于这种拦截日志。我们取其中的一条日志进行分析:
May 8 12:33:23 ip-172-38-3-214 kernel: [56099670.916763] [UFW BLOCK] IN=ens5 OUT= MAC=06:49:e1:69:e5:f3:06:76:1b:bb:15:0f:08:00 SRC=172.39.7.133 DST=172.38.3.214 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=3306 DPT=58636 WINDOW=0 RES=0x00 RST URGP=0
这个日志条目来自一个运行在Linux系统上的服务器,它记录了防火墙(UFW,Uncomplicated Firewall)阻止了一个网络连接尝试。下面是该日志的详细解析:
时间:May 8 12:33:23 表示事件发生的具体时间。
主机名/IP地址:ip-172-38-3-214 是产生日志的服务器的IP地址或主机名。
日志来源:kernel: 指出这条信息是由内核记录的。
事件微秒时间:[56099670.916763] 是事件发生时相对于某个参考点的精确时间(微秒级)。
UFW操作:[UFW BLOCK] 显示这是一个UFW防火墙阻止的操作。
网络接口:
IN=ens5 表示数据包是从网络接口ens5进入的。
OUT= 空表示没有数据包尝试从该服务器外出(即响应包未生成)。
MAC地址:源MAC地址06:49:e1:69:e5:f3和目的MAC地址06:76:1b:bb:15:0f,分别标识了发起连接的设备和目标设备的物理地址。
网络层信息:
SRC=172.39.7.133 指发起连接的源IP地址。
DST=172.38.3.214 是目的IP地址,即这台服务器的IP地址。
LEN=40 表示数据包的总长度为40字节。
TOS=0x00、PREC=0x00 分别是服务类型和优先级,这里都是默认值。
TTL=64 是生存时间(Time to Live),表示数据包在网络中的最大跳数,这里是64。
ID=0 数据包的标识符。
DF 表示"不要分片"标志被设置,意味着数据包不能被路由器分片。
传输层信息:
PROTO=TCP 表明使用的是TCP协议。
SPT=3306 源端口是3306,通常与MySQL数据库服务相关。
DPT=58636 目的端口是58636,这是一个比较随机的高端口,可能是客户端为了建立连接而使用的临时端口。
WINDOW=0、RES=0x00 是TCP头部的窗口大小和保留字段,这里窗口大小为0可能是因为RST标志(下文解释)。
RST 表示这是一个复位(Reset)标志,意在告诉对方连接请求不被接受或连接已异常终止。
URGP=0 无操作,因为这是TCP包,非ICMP包中的相关内容。
综上所述,这条日志说明在2023年5月8日12:33:23,一台IP地址为172.39.7.133的设备尝试通过TCP协议从端口3306(通常为MySQL服务端口)连接到IP地址为172.38.3.214的这台服务器的58636端口。由于防火墙规则,这个连接请求被UFW阻止,并发送了一个RST标志来拒绝该连接。
总结
通过 UFW 防火墙,我们可以轻松地封锁恶意 IP,保护服务器免受攻击。主要步骤包括:
确保 UFW 已启用并设置默认策略。
开放必要的端口并封锁恶意 IP。
启用日志记录,实时监控防火墙活动。
合理使用 UFW 防火墙规则和日志监控,有助于提升服务器的安全性并阻止未经授权的访问。
猜你喜欢
- 2024-10-12 打造自动化DOS攻击防御系统:一键屏蔽恶意IP
- 2024-10-12 禁止使用搜索引擎怎么设置(30秒教会你5个小技巧)
- 2024-10-12 apache(nginx)下控制请求频率防IP恶意请求 「二版」
- 2024-10-12 限制IP某个时间段内访问的次数(限制ip怎么解决)
- 2024-10-12 Nginx配置限流(nginx 限制流量)
- 2024-10-12 利用openresty+lua+redis 实现封杀频繁恶意访问IP地址
- 2024-10-12 如何用 Nginx 代理 MySQL 连接,并限制可访问 IP?
- 2024-10-12 企业网站维护教程:网站如何禁止国外IP访问?
- 2024-10-12 Linux下WEB中间件禁止IP访问配置方法
- 2024-10-12 Nginx IP屏蔽方法详解:从access模块到limit_req_zone指令
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)