在网络安全防护的实践中,及时识别并封锁恶意攻击的ip地址是至关重要的。本文将指导您如何使用ubuntu系统的防火墙工具有效地封禁那些试图侵入网络的黑客ip。通过详细的步骤和实用的命令,即使是初学者也能轻松掌握如何配置防火墙,增强您的网络安全防护墙。接下来,让我们一起学习如何在ubuntu上实施这些关键的安全措施。
目录
一、ufw防火墙
在 ubuntu 20.04 中,默认的防火墙工具是 ufw
(uncomplicated firewall,简单防火墙)。它提供了一个易于使用的命令行界面来管理防火墙规则。
1、安装 ufw
通常情况下,ufw 已经预装在 ubuntu 上。如果没有,可以手动安装:
sudo apt update
sudo apt install ufw
2、启用 ufw
启用防火墙:
sudo ufw enable
3、禁用 ufw
如果需要临时关闭防火墙:
sudo ufw disable
4、检查 ufw 状态
查看防火墙规则以及当前的活动状态:
sudo ufw status
显示活动状态和详细信息:
sudo ufw status verbose
5、设置默认策略
默认情况下,防火墙默认策略是拒绝所有传入的连接并允许所有传出的连接:
sudo ufw default deny incoming
sudo ufw default allow outgoing
6、添加规则
通过以下命令可以添加允许或拒绝的规则。
允许传入服务或端口
- 允许所有来自特定端口的传入连接,例如 http(端口 80)和 https(端口 443):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
- 允许通过服务名称(如果
/etc/services
中有定义):
sudo ufw allow http
sudo ufw allow https
- 允许特定 ip 地址访问特定端口:
sudo ufw allow from 192.168.1.100 to any port 22
- 允许特定子网访问特定端口:
sudo ufw allow from 192.168.1.0/24 to any port 22
拒绝传入连接
- 拒绝所有来自特定端口的传入连接:
sudo ufw deny 80/tcp
- 拒绝特定 ip 地址访问特定端口:
sudo ufw deny from 192.168.1.100 to any port 22
7、删除规则
使用与添加规则相同的语法来删除规则,但使用 delete
关键字。例如:
sudo ufw delete allow 80/tcp
sudo ufw delete deny from 192.168.1.100 to any port 22
8、启用日志
启用 ufw 日志记录:
sudo ufw logging on
9、其他命令
- 重载防火墙规则:
sudo ufw reload
- 重置防火墙(清除所有规则):
sudo ufw reset
二、怎么封攻击的ip地址
昨天一台在公网的测试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 防火墙规则和日志监控,有助于提升服务器的安全性并阻止未经授权的访问。
发表评论