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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云防火墙,500元 1000GB
简介: 【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

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

sudo ufw status

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

2.2 启用与禁用 UFW

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

sudo ufw enable

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

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

sudo ufw disable

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

2.3 重置 UFW 配置

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

sudo ufw reset

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

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

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

3.1 默认策略设置

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

sudo ufw default deny incoming
sudo ufw default allow outgoing

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

sudo ufw default allow incoming

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

3.2 允许 SSH 连接

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

sudo ufw allow ssh

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

sudo ufw allow 22

3.3 允许其他服务

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

sudo ufw allow http
sudo ufw allow https

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

sudo ufw allow 3306

3.4 禁止指定端口的连接

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

sudo ufw deny 23

3.5 查看已配置的规则

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

sudo ufw status verbose

此命令将显示当前 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

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

4.2 限制特定 IP 地址的连接

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

sudo ufw limit from 192.168.1.101

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

4.3 配置特定的端口范围

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

sudo ufw allow 1000:2000/tcp

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

4.4 配置特定的网络接口

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

sudo ufw allow in on eth0

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

4.5 通过 UFW 进行日志记录

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

sudo ufw logging on

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

sudo ufw logging high

日志文件通常位于 /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

在文件中找到以下行:

IPV6=yes

确保 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

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

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

sudo ufw deny from 2001:0db8::2 to any port 80

5.2.3 配置 IPv6 端口范围

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

sudo ufw allow proto tcp from any to any port 1000:2000

5.3 验证 IPv6 规则

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

sudo ufw status verbose

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

六、UFW 的应用与删除规则

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

6.1 添加规则

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

  • 允许特定端口的连接

    允许 HTTP(端口80)连接:

    sudo ufw allow http
    
  • 允许特定协议的连接

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

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

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

    sudo ufw allow from 192.168.1.50
    

6.2 删除规则

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

6.2.1 按规则编号删除

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

sudo ufw status numbered

输出示例:

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)

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

sudo ufw delete 2

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

6.2.2 按规则描述删除

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

sudo ufw delete allow http

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

6.3 修改规则

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

  1. 删除旧的 SSH 规则:

    sudo ufw delete allow ssh
    
  2. 添加新的 SSH 规则:

    sudo ufw allow 2222/tcp
    

七、UFW 高级功能

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

7.1 限速连接(Rate Limiting)

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

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

sudo ufw limit ssh

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

7.2 使用应用配置文件

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

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

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

sudo ufw app list

输出示例:

Available applications:
  OpenSSH
  Apache
  Apache Full
  Apache Secure
  Nginx
  Nginx Full
  Nginx HTTP
  Nginx HTTPS

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

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

sudo ufw allow 'Apache Full'

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

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

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

  1. 创建配置文件:

    sudo nano /etc/ufw/applications.d/myapp.rules
    
  2. 添加以下内容:

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

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

    sudo ufw app update myapp
    
  5. 允许 MyApp

    sudo ufw allow 'MyApp'
    

7.3 使用 UFW 脚本

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

7.3.1 创建 UFW 脚本

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

nano setup_firewall.sh

添加以下内容:

#!/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

7.3.2 赋予脚本执行权限

chmod +x setup_firewall.sh

7.3.3 运行脚本

./setup_firewall.sh

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

7.4 集成 Fail2Ban

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

7.4.1 安装 Fail2Ban

sudo apt install fail2ban

7.4.2 配置 Fail2Ban

编辑 Fail2Ban 的主配置文件:

sudo nano /etc/fail2ban/jail.local

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

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600

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

7.4.3 启动并启用 Fail2Ban

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

7.5 使用 UFW 与 Docker

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

7.5.1 修改 UFW 配置以允许 Docker

编辑 UFW 配置文件:

sudo nano /etc/default/ufw

找到以下行:

DEFAULT_FORWARD_POLICY="DROP"

将其修改为:

DEFAULT_FORWARD_POLICY="ACCEPT"

保存并退出。

7.5.2 编辑 UFW before.rules 文件

sudo nano /etc/ufw/before.rules

在文件顶部添加以下内容,以确保 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

保存并退出编辑器。

7.5.3 重启 UFW 和 Docker 服务

sudo ufw disable
sudo ufw enable
sudo systemctl restart docker

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

八、UFW 的日志管理

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

8.1 启用日志记录

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

sudo ufw logging on

8.2 设置日志级别

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

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

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

sudo ufw logging high

8.3 查看日志

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

sudo less /var/log/ufw.log

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

sudo tail -f /var/log/ufw.log

8.4 管理日志文件

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

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

sudo nano /etc/logrotate.d/ufw

添加以下内容:

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

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

目录
相关文章
|
2月前
|
Ubuntu Shell Python
Ubuntu学习笔记(一):pycharm设置快捷启动图标详解
这篇博客详细讲解了如何在Ubuntu 20.04系统中为PyCharm设置快捷启动图标,包括创建.desktop文件、编辑文件内容以及添加到收藏夹的步骤。
387 0
Ubuntu学习笔记(一):pycharm设置快捷启动图标详解
|
27天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
45 2
|
2月前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
92 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
378 3
|
2月前
|
开发框架 缓存 Ubuntu
dotnet开发框架+ubuntu防火墙命令+win11设置自动登录+阿里云短信发送限制
dotnet开发框架+ubuntu防火墙命令+win11设置自动登录+阿里云短信发送限制
41 3
|
2月前
|
Ubuntu 安全 网络协议
Ubuntu设置smb功能
通过以上步骤,您已经在Ubuntu系统上成功设置了SMB共享服务,实现了与不同操作系统间的文件共享。记住,根据实际需求调整配置文件,特别是在安全性方面,比如限制访问权限、使用加密传输等,以确保共享环境既便利又安全。
78 0
|
安全 Ubuntu 网络安全
Ubuntu防火墙设置
 Ubuntu使用的防火墙名为UFW(Uncomplicated Fire Wall),是一个iptable的管理工具。因为iptable是根据系统管理员编写的一系列规则筛选网络数据包,比较复杂,所以UFW对其进行了简化。UFW可以帮助增强服务器安全,但是如果真正对服务器安全感兴趣,还是应该学习如何为 iptable 编写规则来更好的调整服务器的安全级别。
799 0
|
网络协议 Ubuntu 网络安全
ubuntu 14.04/14.10 iptables 防火墙设置
1. 一键批处理设置 呆狐狸.凨#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bin:~/bin export PATH # Check if user is root if [ $UID != 0 ]; then echo "Error: You must be
1865 0
|
2月前
|
并行计算 Ubuntu Linux
Ubuntu学习笔记(五):18.04安装多版本CUDA
这篇博客文章介绍了在Ubuntu 18.04系统上如何安装和切换不同版本的CUDA,以及如何安装不同版本的cuDNN。
230 2
|
2月前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
4461 3