UFW中文网

如何在Linux上安装和使用UFW防火墙

介绍

UFW 也称为简单防火墙,是 iptables 的接口,特别适合基于主机的防火墙。 UFW 为不熟悉防火墙概念的初学者用户提供了易于使用的界面。它是源自 Ubuntu 的最流行的防火墙工具。它同时支持 IPv4 和 IPv6。

在本教程中,我们将学习如何在 Linux 上安装和使用 UFW 防火墙。

要求

您的系统上安装的任何基于 Linux 的发行版

系统上的 root 权限设置

安装UFW

Ubuntu

默认情况下,UFW 在大多数基于 Ubuntu 的发行版中可用。如果被删除,您可以通过运行以下linux命令来安装它。

# apt-get install ufw -y 

Debian

您可以通过运行以下 Linux 命令在 Debian 中安装 UFW:

# apt-get install ufw -y

CentOS

默认情况下,UFW 在 CentOS 存储库中不可用。因此,您需要将 EPEL 存储库安装到您的系统中。您可以通过运行以下 linux 命令来完成此操作:

# yum install epel-release -y

安装 EPEL 存储库后,您只需运行以下 Linux 命令即可安装 UFW:

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

安装 UFW 后,启动 UFW 服务并通过运行以下 linux 命令使其在引导时启动。

# ufw enable 

接下来,使用以下 linux 命令检查 UFW 的状态。您应该看到以下输出:

# ufw status 
Status: active 

您还可以通过运行以下 linux 命令来禁用 UFW 防火墙:

# ufw disable 

设置 UFW 默认策略

默认情况下,UFW 默认策略设置为阻止所有传入流量并允许所有传出流量。

您可以使用以下 linux 命令设置自己的默认策略。

ufw default allow outgoing 
ufw default deny incoming 

添加和删除防火墙规则

您可以使用端口号或使用服务名称两种方式添加允许传入和传出流量的规则。

例如,如果您想要允许 HTTP 服务的传入和传出连接。然后使用服务名称运行以下 linux 命令。

ufw allow http 

或者,使用端口号运行以下命令:

ufw allow 80 

如果要基于 TCP 或 UDP 过滤数据包,请运行以下命令:

ufw allow 80/tcp 
ufw allow 21/udp 

您可以使用以下 linux 命令检查添加的规则的状态。

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 允许的规则,只需在原始规则前添加删除前缀,如下所示:

# ufw delete allow http 
# ufw delete deny 21 

高级 UFW 规则

您还可以添加特定的 IP 地址以允许和拒绝对所有服务的访问。执行以下命令,允许IP 192.168.0.200访问服务器上的所有服务:

# ufw allow from 192.168.0.200 

拒绝IP 192.168.0.200访问服务器上的所有服务:

# ufw deny from 192.168.0.200 

您可以在 UFW 中允许 IP 地址范围。执行以下命令,允许IP 192.168.1.1到192.168.1.254之间的所有连接:

# ufw allow from 192.168.1.0/24 

要允许 IP 地址 192.168.1.200 使用 TCP 访问端口 80,请运行以下 linux 命令:

# ufw allow from 192.168.1.200 to any port 80 proto tcp 

要允许访问 2000 到 3000 范围内的 tcp 和 udp 端口,请运行以下 linux 命令:

# ufw allow 2000:3000/tcp 
# ufw allow 2000:3000/udp 

如果您想阻止IP 192.168.0.4和192.168.0.10访问22端口,但允许所有其他IP访问22端口,请运行以下命令:

# 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 

要允许网络接口 eth0 上的 HTTP 流量,请运行以下 linux 命令:

# ufw allow in on eth0 to any port 80 

默认情况下,UFW 允许 ping 请求。如果你想拒绝 ping 请求,你需要编辑 /etc/ufw/before.rules 文件:

# nano /etc/ufw/before.rules 

删除以下行:

-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT 
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT 
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT 
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT 
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT 

完成后保存文件。

如果您需要重置 UFW,删除所有规则,您可以通过以下 Linux 命令来执行此操作。

# ufw reset 

使用 UFW 配置 NAT

如果您想使用 UFW 对从外部接口到内部接口的连接进行 NAT。然后,您可以通过编辑 /etc/default/ufw 和 /etc/ufw/before.rules 文件来完成此操作。 首先,使用 nano 编辑器打开 /etc/default/ufw 文件:

# nano /etc/default/ufw

更改以下行:

DEFAULT_FORWARD_POLICY="ACCEPT"

接下来,您还需要允许 ipv4 转发。您可以通过编辑 /etc/ufw/sysctl.conf 文件来完成此操作:

# nano /etc/ufw/sysctl.conf

更改以下行:

net/ipv4/ip_forward=1 

接下来,您需要将 NAT 添加到 ufw 的配置文件中。您可以通过编辑 /etc/ufw/before.rules 文件来完成此操作:

# nano /etc/ufw/before.rules

在过滤规则之前添加以下行:

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through eth0 - Change to match you out-interface
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these nat table rules won't
# be processed
COMMIT
Save the file when you are finished. Then restart UFW with the following linux command:
ufw disable
ufw enable

使用 UFW 配置端口转发

如果您想转发来自公共 IP 的流量,例如。 150.129.148.155 端口 80 和 443 到另一台 IP 地址为 192.168.1.120 的内部服务器。然后你可以通过编辑 /etc/default/before.rules 来做到这一点:

# nano /etc/default/before.rules

更改文件如下所示:

:PREROUTING ACCEPT [0:0] 
-A PREROUTING -i eth0 -d 150.129.148.155   -p tcp --dport 80 -j  DNAT --to-destination 192.168.1.120:80 
-A PREROUTING -i eth0 -d 150.129.148.155   -p tcp --dport 443 -j  DNAT --to-destination 192.168.1.120:443 
-A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE 

接下来,使用以下命令重新启动 UFW:

# ufw disable
# ufw enable

接下来,您还需要允许端口 80 和 443。您可以通过运行以下命令来完成此操作:

# ufw allow proto tcp from any to 150.129.148.155 port 80
# ufw allow proto tcp from any to 150.129.148.155 port 443