如何使用 UFW 配置 Ubuntu 防火墙并设置防火墙规则?

本文涉及的产品
云防火墙,500元 1000GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【10月更文挑战第8天】

防火墙是计算机网络安全中不可或缺的一部分,它通过监控和控制进出网络流量来保护系统免受未经授权的访问。Ubuntu 系统内置了一款名为 UFW(Uncomplicated Firewall)的防火墙工具,它是一种用户友好且功能强大的防火墙管理工具。本文将详细介绍如何使用 UFW 配置 Ubuntu 防火墙并设置防火墙规则,以保护你的系统免受潜在的威胁。

一、什么是 UFW?

UFW,全称为 Uncomplicated Firewall,顾名思义,它是一种简单易用的防火墙管理工具。与传统的防火墙配置工具相比,UFW 以其简洁明了的命令行界面而闻名。虽然它主要为普通用户设计,但它也具备了足够的灵活性来处理更复杂的防火墙规则配置。

1.1 UFW 的特点

  • 简单易用:UFW 通过简化的命令行接口,让用户可以轻松配置防火墙规则。
  • 高效:UFW 基于 iptables,这使得它能够以较低的系统资源消耗提供强大的防火墙功能。
  • 灵活性:虽然 UFW 的命令行简化了操作,但它仍然支持高级用户定义复杂的防火墙规则。

1.2 为什么选择 UFW?

选择 UFW 的原因在于它的易用性和功能性。对于没有深厚技术背景的用户来说,UFW 是配置防火墙的理想工具。而对于高级用户,UFW 也提供了足够的灵活性来满足复杂的防火墙需求。

二、UFW 的安装与基本配置

2.1 UFW 的安装

在大多数现代的 Ubuntu 发行版中,UFW 通常默认已经安装。如果你的系统中尚未安装 UFW,可以通过以下命令进行安装:

sudo apt update
sudo apt install ufw
AI 代码解读

安装完成后,你可以使用以下命令来检查 UFW 是否已经正确安装:

sudo ufw status
AI 代码解读

如果返回结果显示 Status: inactive,说明 UFW 已经安装,但尚未启用。

2.2 启用与禁用 UFW

启用 UFW 是启动防火墙保护的第一步。你可以通过以下命令来启用 UFW:

sudo ufw enable
AI 代码解读

此时系统会提示你确认启用操作,一旦确认,UFW 将立即开始运行并应用你设置的规则。

如果你需要临时禁用 UFW,可以使用以下命令:

sudo ufw disable
AI 代码解读

禁用 UFW 后,所有 UFW 规则将不再生效,直到你再次启用它。

2.3 重置 UFW 配置

在某些情况下,你可能需要重置 UFW 的配置。这将清除所有已设置的规则,并将 UFW 恢复到初始状态。你可以使用以下命令来执行此操作:

sudo ufw reset
AI 代码解读

注意:执行此操作后,所有现有的防火墙规则将被删除。

三、配置 UFW 的基本防火墙规则

在启用 UFW 之前,建议首先配置一些基本的防火墙规则,以确保在启用 UFW 后不会意外阻止必要的流量。

3.1 默认策略设置

默认情况下,UFW 的策略是拒绝所有传入的连接,并允许所有传出的连接。这种默认策略可以有效阻止外部对系统的访问,同时允许系统自由地进行外部通信。你可以使用以下命令查看当前的默认策略:

sudo ufw default deny incoming
sudo ufw default allow outgoing
AI 代码解读

如果你希望改变默认策略,例如允许所有传入连接,你可以使用以下命令:

sudo ufw default allow incoming
AI 代码解读

然而,默认拒绝传入连接是一个更为安全的选择,建议大多数用户保持此设置。

3.2 允许 SSH 连接

在启用 UFW 之前,确保你已允许 SSH 连接。这对于远程管理服务器尤其重要。如果启用防火墙后没有允许 SSH 访问,你可能会被锁定在系统之外。你可以使用以下命令允许 SSH 连接:

sudo ufw allow ssh
AI 代码解读

或者,你也可以通过指定端口号来允许 SSH 连接(默认端口为22):

sudo ufw allow 22
AI 代码解读

3.3 允许其他服务

根据系统的具体需求,你可能还需要允许其他服务的连接。例如,如果你运行的是一个 Web 服务器,你需要允许 HTTP(端口80)和 HTTPS(端口443)的流量:

sudo ufw allow http
sudo ufw allow https
AI 代码解读

同样,你可以通过指定端口号来允许特定的服务,例如允许 MySQL 数据库的连接(默认端口为3306):

sudo ufw allow 3306
AI 代码解读

3.4 禁止指定端口的连接

在某些情况下,你可能希望显式禁止某些端口的连接。例如,如果你想阻止所有通过端口 23 的 Telnet 连接,可以使用以下命令:

sudo ufw deny 23
AI 代码解读

3.5 查看已配置的规则

配置好防火墙规则后,你可以使用以下命令查看所有已配置的规则:

sudo ufw status verbose
AI 代码解读

此命令将显示当前 UFW 的状态以及所有已配置的规则,包括每个规则是允许(ALLOW)还是拒绝(DENY)。

四、高级防火墙规则配置

在基础规则配置的基础上,UFW 还支持更加复杂和高级的规则配置。这些功能可以帮助你根据网络环境的需求来精确控制网络流量。

4.1 允许特定 IP 地址的访问

在某些情况下,你可能希望仅允许特定的 IP 地址访问某个服务。例如,允许 IP 地址 192.168.1.100 访问 SSH,可以使用以下命令:

sudo ufw allow from 192.168.1.100 to any port 22
AI 代码解读

这个规则仅允许来自 192.168.1.100 的 SSH 连接,其他 IP 的 SSH 连接将被拒绝。

4.2 限制特定 IP 地址的连接

如果你发现某个 IP 地址频繁尝试连接你的系统并可能构成威胁,你可以使用以下命令限制该 IP 地址的连接:

sudo ufw limit from 192.168.1.101
AI 代码解读

这个规则将限制来自 192.168.1.101 的连接速率,以防止暴力破解等攻击行为。

4.3 配置特定的端口范围

在某些情况下,你可能需要配置一组连续端口的规则。例如,如果你希望允许 1000-2000 端口范围内的所有连接,可以使用以下命令:

sudo ufw allow 1000:2000/tcp
AI 代码解读

这个规则允许 10002000 端口范围内的所有 TCP 连接。同样地,如果你希望允许 UDP 连接,可以将 tcp 替换为 udp

4.4 配置特定的网络接口

如果你的系统有多个网络接口(例如 eth0eth1),你可以将规则应用到特定的网络接口上。以下命令允许从 eth0 接口的所有传入连接:

sudo ufw allow in on eth0
AI 代码解读

这个规则将只允许通过 eth0 接口的传入流量,其他接口的流量不会受到影响。

4.5 通过 UFW 进行日志记录

UFW 提供了日志功能,用于记录防火墙的活动。启用日志记录后,系统将记录所有符合已设置规则的连接尝试。你可以使用以下命令启用日志记录:

sudo ufw logging on
AI 代码解读

日志记录的详细程度可以通过设置日志级别来调整,例如 lowmediumhighfull

sudo ufw logging high
AI 代码解读

日志文件通常位于 /var/log/ufw.log,你可以通过该文件查看防火墙的活动记录。

五、使用 UFW 配置 IPv6

在现代网络中,IPv6 已经越来越普及。UFW 支持同时配置 IPv4 和 IPv6 规则。在启用 UFW 时,如果你的系统支持 IPv6,UFW 将自动检测并同时启用 IPv6。

5.1 确认 IPv6 是否启用

你可以通过编辑 UFW 的配置文件来确保 IPv6 已被启用。打开 UFW 的主配置文件:

sudo nano /etc/default/ufw
AI 代码解读

在文件中找到以下行:

IPV6=yes
AI 代码解读

确保 IPV6 设置为 yes。如果没有这一行或被注释掉了,请添加或取消注释并设置为 yes。保存并退出编辑器。

5.2 为 IPv6 配置规则

UFW 默认情况下会同时应用 IPv4 和 IPv6 的规则。然而,如果你需要为 IPv6 单独配置规则,可以使用以下方法。

5.2.1 允许特定 IPv6 地址访问服务

例如,允许特定 IPv6 地址 2001:0db8::1 访问 SSH 服务:

sudo ufw allow from 2001:0db8::1 to any port 22
AI 代码解读

5.2.2 禁止特定 IPv6 地址访问服务

例如,禁止 IPv6 地址 2001:0db8::2 访问 HTTP 服务:

sudo ufw deny from 2001:0db8::2 to any port 80
AI 代码解读

5.2.3 配置 IPv6 端口范围

允许 IPv6 的 1000-2000 端口范围内的所有 TCP 连接:

sudo ufw allow proto tcp from any to any port 1000:2000
AI 代码解读

5.3 验证 IPv6 规则

在配置完 IPv6 规则后,你可以通过以下命令验证规则是否正确应用:

sudo ufw status verbose
AI 代码解读

输出中应包含 IPv6 的规则信息,确保它们按预期工作。

六、UFW 的应用与删除规则

在日常使用中,你可能需要频繁添加、修改或删除防火墙规则。UFW 提供了简便的命令来管理这些操作。

6.1 添加规则

添加规则是最常见的操作之一。以下是几种常见的添加规则的方法:

  • 允许特定端口的连接

    允许 HTTP(端口80)连接:

    sudo ufw allow http
    
    AI 代码解读
  • 允许特定协议的连接

    允许 UDP 协议的 DNS(端口53)连接:

    sudo ufw allow proto udp to any port 53
    
    AI 代码解读
  • 允许特定 IP 地址的连接

    允许来自 IP 地址 192.168.1.50 的所有连接:

    sudo ufw allow from 192.168.1.50
    
    AI 代码解读

6.2 删除规则

如果某条规则不再需要,可以将其删除。有两种方法可以删除规则:按规则编号删除或按规则描述删除。

6.2.1 按规则编号删除

首先,列出当前的规则并显示编号:

sudo ufw status numbered
AI 代码解读

输出示例:

Status: active

     To                         Action      From
     --                         ------      ----
[1] OpenSSH                    ALLOW       Anywhere
[2] 80                         ALLOW       Anywhere
[3] OpenSSH (v6)               ALLOW       Anywhere (v6)
[4] 80 (v6)                    ALLOW       Anywhere (v6)
AI 代码解读

假设你想删除规则编号 [2],执行:

sudo ufw delete 2
AI 代码解读

系统会提示你确认删除,输入 y 即可。

6.2.2 按规则描述删除

如果你知道要删除的规则的具体描述,也可以直接使用描述删除。例如,删除允许 HTTP 的规则:

sudo ufw delete allow http
AI 代码解读

系统同样会要求确认,输入 y 进行确认。

6.3 修改规则

UFW 本身不直接支持修改现有规则,但你可以通过删除旧规则并添加新规则来实现修改。例如,要将允许的 SSH 端口从22更改为2222:

  1. 删除旧的 SSH 规则:

    sudo ufw delete allow ssh
    
    AI 代码解读
  2. 添加新的 SSH 规则:

    sudo ufw allow 2222/tcp
    
    AI 代码解读

七、UFW 高级功能

除了基本的规则配置外,UFW 还提供了一些高级功能,以满足更复杂的网络安全需求。

7.1 限速连接(Rate Limiting)

防止暴力破解攻击的一种有效方法是限制连接速率。UFW 提供了 limit 选项,可以限制特定服务的连接速率。

例如,限制 SSH 连接的速率:

sudo ufw limit ssh
AI 代码解读

这个规则允许每个 IP 地址在特定时间内最多进行六次连接尝试,超过则暂时阻止该 IP 的连接请求。

7.2 使用应用配置文件

UFW 支持通过应用配置文件来管理一组相关的规则。这对于配置复杂的服务(如 Web 服务器、数据库服务器等)非常有用。

7.2.1 查看可用的应用配置文件

UFW 的应用配置文件通常位于 /etc/ufw/applications.d/ 目录下。你可以使用以下命令查看可用的应用:

sudo ufw app list
AI 代码解读

输出示例:

Available applications:
  OpenSSH
  Apache
  Apache Full
  Apache Secure
  Nginx
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
AI 代码解读

7.2.2 使用应用配置文件添加规则

例如,允许完整的 Apache 服务(包括 HTTP 和 HTTPS):

sudo ufw allow 'Apache Full'
AI 代码解读

7.2.3 添加自定义应用配置文件

如果需要为特定应用创建自定义配置文件,可以在 /etc/ufw/applications.d/ 目录下创建一个新的 .rules 文件。

例如,为自定义应用 myapp 创建配置文件:

  1. 创建配置文件:

    sudo nano /etc/ufw/applications.d/myapp.rules
    
    AI 代码解读
  2. 添加以下内容:

    [MyApp]
    title=My Custom Application
    description=Custom application for specific purposes
    ports=8080/tcp
    
    AI 代码解读
  3. 保存并退出编辑器。

  4. 重新加载 UFW 应用列表:

    sudo ufw app update myapp
    
    AI 代码解读
  5. 允许 MyApp

    sudo ufw allow 'MyApp'
    
    AI 代码解读

7.3 使用 UFW 脚本

对于需要复杂配置的情况,可以编写 UFW 脚本来自动化防火墙规则的配置。这对于需要在多台服务器上部署相同规则的场景非常有用。

7.3.1 创建 UFW 脚本

创建一个名为 setup_firewall.sh 的脚本文件:

nano setup_firewall.sh
AI 代码解读

添加以下内容:

#!/bin/bash

# 重置 UFW
sudo ufw reset

# 设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允许 SSH
sudo ufw allow ssh

# 允许 HTTP 和 HTTPS
sudo ufw allow http
sudo ufw allow https

# 启用 UFW
sudo ufw enable
AI 代码解读

7.3.2 赋予脚本执行权限

chmod +x setup_firewall.sh
AI 代码解读

7.3.3 运行脚本

./setup_firewall.sh
AI 代码解读

这个脚本将自动配置防火墙的基本规则,适用于快速部署场景。

7.4 集成 Fail2Ban

虽然 UFW 本身提供了一定的安全功能,但结合 Fail2Ban 使用可以进一步增强系统的安全性。Fail2Ban 可以监控日志文件,自动封禁多次尝试失败的 IP 地址,从而防止暴力破解攻击。

7.4.1 安装 Fail2Ban

sudo apt install fail2ban
AI 代码解读

7.4.2 配置 Fail2Ban

编辑 Fail2Ban 的主配置文件:

sudo nano /etc/fail2ban/jail.local
AI 代码解读

添加以下内容以配置 SSH 监控:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600
AI 代码解读

这个配置将监控 SSH 登录尝试,如果某个 IP 地址在10分钟内失败了5次登录尝试,将被暂时封禁。

7.4.3 启动并启用 Fail2Ban

sudo systemctl start fail2ban
sudo systemctl enable fail2ban
AI 代码解读

7.5 使用 UFW 与 Docker

Docker 默认会修改 iptables 规则,这可能与 UFW 产生冲突。为了确保 Docker 容器的网络流量能够正确通过 UFW 进行管理,可以采取以下措施。

7.5.1 修改 UFW 配置以允许 Docker

编辑 UFW 配置文件:

sudo nano /etc/default/ufw
AI 代码解读

找到以下行:

DEFAULT_FORWARD_POLICY="DROP"
AI 代码解读

将其修改为:

DEFAULT_FORWARD_POLICY="ACCEPT"
AI 代码解读

保存并退出。

7.5.2 编辑 UFW before.rules 文件

sudo nano /etc/ufw/before.rules
AI 代码解读

在文件顶部添加以下内容,以确保 Docker 的 NAT 规则被正确应用:

# BEGIN UFW AND DOCKER
*nat
:POSTROUTING ACCEPT [0:0]
# Allow Docker containers to access the outside network
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
COMMIT
# END UFW AND DOCKER
AI 代码解读

保存并退出编辑器。

7.5.3 重启 UFW 和 Docker 服务

sudo ufw disable
sudo ufw enable
sudo systemctl restart docker
AI 代码解读

通过以上配置,Docker 容器的网络流量将能够正确通过 UFW 进行管理,不会导致意外的网络访问问题。

八、UFW 的日志管理

UFW 提供了详细的日志功能,可以帮助你监控和分析网络流量,识别潜在的安全威胁。合理管理日志对于维护系统安全至关重要。

8.1 启用日志记录

默认情况下,UFW 的日志记录是关闭的。要启用日志记录,可以使用以下命令:

sudo ufw logging on
AI 代码解读

8.2 设置日志级别

UFW 提供了多种日志级别,允许用户根据需求调整日志的详细程度。日志级别包括:

  • off:关闭日志记录
  • low:记录所有阻止的连接尝试
  • medium:记录 low 级别的所有内容,并记录一些额外的信息
  • high:记录所有的连接尝试,包括被允许的连接
  • full:记录详细的连接信息

例如,要将日志级别设置为 high

sudo ufw logging high
AI 代码解读

8.3 查看日志

UFW 的日志通常保存在 /var/log/ufw.log 文件中。你可以使用以下命令查看日志内容:

sudo less /var/log/ufw.log
AI 代码解读

为了实时监控日志,可以使用 tail 命令:

sudo tail -f /var/log/ufw.log
AI 代码解读

8.4 管理日志文件

随着时间的推移,日志文件可能会变得非常庞大。为了管理日志文件,可以设置日志轮换(log rotation)。Ubuntu 默认使用 logrotate 工具来管理日志文件。

编辑或创建一个 UFW 的 logrotate 配置文件:

sudo nano /etc/logrotate.d/ufw
AI 代码解读

添加以下内容:

/var/log/ufw.log {
    rotate 7
    daily
    missingok
    notifempty
    compress
    delaycompress
    postrotate
        /usr/sbin/invoke-rc.d rsyslog rotate > /dev/null
    endscript
}
AI 代码解读

这个配置将每天轮换一次 UFW 日志,保留最近7天的日志,并对旧日志进行压缩。

目录
打赏
0
2
1
0
2690
分享
相关文章
在Ubuntu系统下使用vsftpd配置FTP服务器的步骤
以上就是在Ubuntu系统下使用vsftpd配置FTP服务器的步骤。这些步骤都是基础的,但足够让你建立一个简单的FTP服务器。如果你需要更高级的功能,例如SSL加密、虚拟用户等,你可能需要进一步研究vsftpd的配置选项。
34 13
在Ubuntu 18.04服务器上配置双网口以接入互联网
总结一下,配置双网口在Ubuntu 18.04服务器就像一场冒险游戏,你小心翼翼地从查看网络布局开始,铺设新线路,最后得到了通往互联网的双重通道。祝你在网络世界的冒险旅程中更上一层楼!
47 11
|
29天前
|
ubuntu中设置开机自动运行的(sudo)指令
通过合理选择和配置上述方法,您可以确保在系统启动时自动执行所需的命令,并具备sudo权限,从而提高系统自动化管理的能力。
133 8
在 Ubuntu 20.04 上安装和配置 Redis
在 Ubuntu 20.04 上安装和配置 Redis 的步骤如下:首先更新系统包,然后通过 `apt` 安装 Redis。安装后,启用并启动 Redis 服务,检查其运行状态。可选配置包括修改绑定 IP、端口等,并确保防火墙设置允许外部访问。最后,使用 `redis-cli` 测试 Redis 功能,如设置和获取键值对。
48 1
【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出
通过设置内存守护进程,可以有效监控和管理系统内存使用情况,防止内存溢出带来的系统崩溃和服务中断。本文介绍了如何在Ubuntu中编写和配置内存守护脚本,并将其设置为systemd服务。通过这种方式,可以在内存使用超过设定阈值时自动采取措施,确保系统稳定运行。
156 4
全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
207 12
ubuntu22.04防火墙策略
在Ubuntu 22.04中,配置防火墙策略是保障系统安全的关键。UFW提供了简便的界面,适合大多数用户,而iptables则提供了更为强大的功能,适合高级用户和复杂环境。通过合理设计防火墙策略,可以有效防止未经授权的访问,提升系统的安全性和稳定性。无论是通过UFW还是iptables,定期审查和更新防火墙规则都是必不可少的,以应对不断变化的安全威胁。
226 3
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
200 2
在Ubuntu上安装MEAN Stack的4个步骤
本指南介绍了在Ubuntu上安装MEAN Stack的四个步骤。MEAN Stack是一种基于JavaScript的开发堆栈,包含MongoDB、ExpressJS、AngularJS和NodeJS。步骤包括:1. 更新系统并准备安装MEAN;2. 从官方源安装最新版MongoDB;3. 安装NodeJS、Git和NPM;4. 克隆mean.io仓库并使用NPM安装剩余依赖项。通过这些步骤,您可以快速搭建基于MEAN Stack的应用开发环境。
44 2
在Ubuntu系统的Docker上安装MySQL的方法
以上的步骤就是在Ubuntu系统的Docker上安装MySQL的详细方法,希望对你有所帮助!
70 12
目录
目录
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等