禁用任何未使用的端口com_简明教程|Linux中UFW的使用

本文介绍了UFW防火墙的基本安装与配置方法,包括默认策略设置、特定端口和服务规则的添加,以及针对特定IP地址的规则设定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

357d4147d7c676ee19c05d70fd6250f8.png

这几天部署了一些服务,有用到UFW来管理防火墙规则,十分好用,下面大致记录一下其安装及使用方法,方便后续可以快速应用。

UFW,或称Uncomplicated Firewall,是iptables的一个接口,为不熟悉防火墙概念的初学者提供了易于使用的界面,同时支持IPv4和IPv6,广受欢迎。

先决条件

  • 任意一台安装有Linux发行版的主机
  • root权限(以下命令默认在root账户下运行,如果是其他账户,使用sudo也是一样的)

安装

Ubuntu & Debian

# apt-get install ufw -y

CentOS

CentOS默认软件源不提供UFW,所以你需要安装EPEL软件源,运行以下命令:

# yum install epel-release -y

安装完成后使用以下命令安装UFW:

# yum install --enablerepo="epel" ufw -y

UFW安装后,可以通过以下命令来启动UFW服务并使其在启动时启动(一般在完成默认配置后再重启):

# ufw enable

如果运行ufw命令时报Command Not Found错误,可以使用whereis ufw来确定ufw的位置,之后你也可以顺手设置一下alias。
接下来,使用以下命令检查UFW的状态,可以看到以下输出:

# ufw status 
Status: active

还可以通过运行以下命令来禁用UFW防火墙(后面可以通过enable命令随时启用服务):

# ufw disable

如果你决定要重新开始,则可以使用reset命令:

# ufw reset

这将禁用UFW并删除之前定义的任何规则。

使用

最新版的UFW默认启用了IPV6配置,你也可以通过以下命令进行检查,可以看到以下输出:

# cat /etc/default/ufw | grep -i ipv6
IPV6=yes

如果输出为IPV6=no,可以使用vim编辑该文件将其改为yes。

第一步:设置UFW默认策略

默认情况下,UFW默认策略设置为阻止所有传入流量并允许所有传出流量,你可以使用以下命令来设置自己的默认策略:

# ufw default allow outgoing 
# ufw default deny incoming

如果现在重启机器(这会儿不要这么做),UFW配置会在重启后生效,它将拒绝所有传入的连接。因为我们没有允许SSH连接,这意味着,重启过后我们将无法远程连接到服务器。如果我们希望服务器响应这些类型的请求,我们就需要明确指定允许传入连接的规则 (例如SSH或HTTP连接)。

第二步:设置SSH或其他规则

要将防火墙配置为允许传入SSH连接,可以使用以下命令:

# ufw allow ssh

这将创建防火墙规则-允许端口22上的所有连接,这是SSH守护程序默认监听的端口,类似的快捷指令还有 ufw allow httpufw allow https

实际上也可以通过直接指定端口来创建等效规则,下面这条命令将产生相同的结果:

# ufw allow 22

如果你的SSH守护程序配置在其他端口,则需要手动指定相应的端口。

第三步:其他规则的设置

UFW可以基于TCP或UDP协议来过滤数据包,命令如下:

# ufw allow 80/tcp
# ufw allow 21/udp

之后使用以下命令检查已添加规则的状态,应该可以看到如下输出:

# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To                         Action      From
80/tcp                     ALLOW IN    Anywhere
21/udp                     ALLOW IN    Anywhere
80/tcp (v6)                ALLOW IN    Anywhere (v6)
21/udp (v6)                ALLOW IN    Anywhere (v6)

还可以使用以下命令随时拒绝指定端口任何传入和传出的流量:

# ufw deny 80
# ufw deny 21

如果要删除HTTP允许的规则,只需在原始规则前加上delete即可,如下所示:

# ufw delete allow http
# ufw delete deny 21

也可以按编号删除规则,使用以下命令查看规则及其编号:

# ufw status numbered
OutputStatus: active
     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 443/tcp                    ALLOW IN    Anywhere
[ 3] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 4] 443/tcp (v6)               ALLOW IN    Anywhere (v6)

举个例子,要删除允许端口443上的HTTPS连接规则,也就是编号2(注意删除完规则后编号会更新):

# ufw delete 2

在设置完规则后,重启机器即可完成UFW配置。

更进一步

特定端口范围

某些应用程序使用多个端口而不是单个端口,你可能需要使用UFW指定端口范围,指定端口范围时,必须指定规则应适用的协议( tcp或udp )。
例如,要允许使用端口9000-9002范围内的连接,可以使用以下命令:

# ufw allow 9000:9002/tcp
# ufw allow 9000:9002/udp

特定的IP地址

出于某些情况,你可能需要允许/禁用来自特定IP地址的连接,如下:

# ufw allow from 192.168.29.36
# ufw deny from 192.168.29.36

还可以在UFW中允许IP地址范围,以下命令将允许从192.168.1.1到192.168.1.254的所有连接:

# ufw allow from 192.168.1.0/24

要允许IP地址192.168.29.36连接特定的端口80,可以运行以下命令:

# ufw allow from 192.168.29.36 to any port 80

进一步的,可以指定TCP/UDP:

# ufw allow from 192.168.29.36 to any port 80 proto tcp

来个复杂点的例子,

# ufw deny from 192.168.0.4 to any port 22 
# ufw deny from 192.168.0.10 to any port 22 
# ufw allow from 192.168.0.0/24 to any port 22

以上命令将会阻止从192.168.0.4和192.168.0.10访问端口22,但允许所有其他IP访问端口22。

以上大致简述了UFW的基本使用,日常使用基本够用。除此之外,UFW还支持更多的高级特性例如允许与特定网络接口的连接、配置NAT等等,你可以通过查看帮助文档或者搜索引擎了解其他高级命令的使用。

参考文档

1、How to Install and Use UFW Firewall on Linux
2、如何在Debian 10上使用UFW设置防火墙

### 在 Debian 系统中不使用 UFW 开放端口的方法 在 Debian 中,除了 UFW 外还可以直接通过 `iptables` 或者 `/etc/services` 文件配合系统服务的方式实现端口开放。以下是几种常见的替代方案: #### 使用 iptables 手动配置防火墙规则 Iptables 是 Linux 内核自带的一个强大的包过滤工具,它可以用来管理网络流量并控制哪些数据包被允许进入或离开您的计算机。 ##### 添加新规则以接受特定 TCP 端口上的传入连接: ```bash sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT ``` 此命令会告诉 iptables 接受所有针对本机第 80 号端口(通常用于 HTTP 流量)发起的请求[^1]。 对于 UDP 协议则需稍作调整如下所示: ```bash sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT ``` 如果想让这些更改永久生效而不是每次重启后都需要重新执行上述命令的话,则需要保存当前表项到文件里去以便下次启动时加载它们回来。例如,在某些版本下可以用下面这个简单的办法来做这件事儿: ```bash sudo sh -c "iptables-save > /etc/iptables.rules" ``` 接着编辑网卡初始化脚本来确保开机自动恢复刚才存储下来的规则集: ```bash echo "#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.rules" | sudo tee /etc/network/if-pre-up.d/iptables chmod +x /etc/network/if-pre-up.d/iptables ``` #### 修改 /etc/services 文件定义新的服务及其对应端口号 另一种更简便但也相对局限得多的办法就是利用操作系统已经预先准备好的 `/etc/services` 文档来注册我们自己的应用程序所需监听的位置信息。只需找到合适的地方追加一行描述即可完成基本映射工作。像这样添加一个新的条目代表名为 myservice 的程序将在客户端尝试联系位于 localhost 上运行实例的时候占用 7654/TCP 这样的通道资源。 ```plaintext myservice 7654/tcp # My custom service description here. ``` 不过需要注意的是这种方法仅仅适用于那些本身支持查询本地 services 数据库从而决定实际绑定地址的应用软件而已;而对于大多数现代框架而言他们往往倾向于显式指定参数而非依赖环境变量之类的间接手段所以可能并不总是奏效[^2]。 另外一种方式则是依靠专门负责处理这类事务的服务守护进程inetd/xinetd等来动态分配闲置单元给临时调用方使用但鉴于篇幅原因在此不再展开讨论[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值