前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。
UFW 要点:常见防火墙规则和命令
介绍
UFW(uncomplicated fire wall )是一个运行在iptables
之上的防火墙配置工具,默认包含在 Ubuntu 发行版中。它提供了一个简化的界面,用于通过命令行配置常见的防火墙用例。
下来将说明常见 UFW 使用案例和命令的快速参考,包括如何按端口、网络接口和源 IP 地址允许和阻止服务的示例。
验证 UFW 状态
要检查是否ufw
已启用,请运行:
bash
sudo ufw status
makefile
OutputStatus: inactive
输出将展示防火墙是否处于活动状态。
启用UFW
如果ufw status
在运行时显示Status: inactive
,则表示系统上尚未启用防火墙。需要运行命令才能启用它。
默认情况下,启用 UFW 后将阻止对服务器上所有端口的外部访问。实际上,如果通过 SSH 连接到服务器并在允许通过 SSH 端口访问之前启用ufw
,SSH连接将被断开。
要在系统上启用 UFW,请运行:
bash
sudo ufw enable
将看到如下输出:
csharp
OutputFirewall is active and enabled on system startup
要查看当前阻止或允许的内容,可以ufw status
在运行时使用verbose
参数,如下所示:
bash
sudo ufw status
vbnet
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
禁用 UFW
如果由于某种原因需要禁用 UFW,可以使用以下命令来执行此操作:
bash
sudo ufw disable
请注意,此命令将完全禁用系统上的防火墙服务。
阻止 IP 地址
要阻止源自特定 IP 地址的所有网络连接,请运行以下命令,将下面的 IP 地址替换为要阻止的 IP 地址:
bash
sudo ufw deny from 203.0.113.100
OutputRule added
在此示例中,from 203.0.113.100
指定源IP 地址"203.0.113.100"。
如果现在运行sudo ufw status
,将看到指定的 IP 地址被列为拒绝:
vbnet
OutputStatus: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
指定 IP 地址的所有传入或传出连接都会被阻止。
阻止子网
如果需要阻止整个子网,可以使用子网地址作为命令from
的参数。这将阻止示例子网中的所有 IP 地址203.0.113.0/24
:
bash
sudo ufw deny from 203.0.113.0/24
OutputRule added
阻止网络接口的传入连接
要阻止从特定 IP 地址到特定网络接口的传入连接,请运行以下命令,将突出显示的 IP 地址替换为要阻止的 IP 地址:
bash
sudo ufw deny in on eth0 from 203.0.113.100
OutputRule added
in
参数指示ufw
仅将规则应用于传入 连接,并且该on eth0
参数指定该规则仅应用于接口eth0
。如果系统具有多个网络接口(包括虚拟接口)并且需要阻止对其中某些接口(但不是全部)的外部访问,这可能会有用。
允许 IP 地址
要允许源自特定 IP 地址的所有网络连接,请运行以下命令,将下面的 IP 地址替换为要允许访问的 IP 地址:
bash
sudo ufw allow from 203.0.113.101
OutputRule added
将看到与此类似的输出:
vbnet
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
还可以通过为主机提供相应的子网掩码来允许来自整个子网的连接,例如203.0.113.0/24
。
允许网络接口的传入连接
要允许从特定 IP 地址到特定网络接口的传入连接,请运行以下命令,将下面的 IP 地址替换为要允许的 IP 地址:
bash
sudo ufw allow in on eth0 from 203.0.113.102
OutputRule added
该in
参数指示ufw
仅将规则应用于传入 连接,并且该on eth0
参数指定该规则仅应用于接口eth0
。
现在运行sudo ufw status
,将看到类似于以下内容的输出:
vbnet
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
删除 UFW 规则
要删除之前在 UFW 中设置的规则,请使用ufw delete
后跟规则(allow
或deny
)和目标规范。以下示例将删除之前设置的允许来自 IP 地址 203.0.113.101
的所有连接的规则:
bash
sudo ufw delete allow from 203.0.113.101
OutputRule deleted
指定要删除的规则的另一种方法是提供规则 ID。可以使用以下命令获取此信息:
bash
sudo ufw status numbered
vbnet
OutputStatus: active
To Action From
-- ------ ----
[ 1] Anywhere DENY IN 203.0.113.100
[ 2] Anywhere on eth0 ALLOW IN 203.0.113.102
从输出中,可以看到有两个活动规则。第一条规则具有突出显示的值,拒绝来自该 IP 地址的所有连接。第二条规则允许eth0
接口上来自 IP 地址的连接。
因为默认情况下 UFW 已经阻止所有外部访问,除非明确允许,所以第一条规则是多余的,因此可以将其删除。要按 ID 删除规则,请运行:
bash
sudo ufw delete 1
系统将提示确认操作并确保提供的 ID 引用了您要删除的正确规则。
vbnet
OutputDeleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
如果使用sudo ufw status
再次列出规则,将看到该规则已被删除。
列出可用的应用程序配置文件
安装后,依赖网络通信的应用程序通常会设置 UFW 配置文件,可以使用该配置文件允许来自外部地址的连接。这通常与运行相同ufw allow from
,优点是提供一种快捷方式,可以抽象服务使用的特定端口号,并为引用的服务提供用户友好的命名法。
要列出当前可用的配置文件,请运行以下命令:
bash
sudo ufw app list
如果安装了 Web 服务器或其他依赖于网络的软件等服务,并且配置文件在 UFW 中不可用,请首先确保该服务已启用。对于远程服务器,通常可以随时使用 OpenSSH:
yaml
OutputAvailable applications:
OpenSSH
启用应用程序配置文件
要启用 UFW 应用程序配置文件,请运行ufw allow
,后跟要启用的应用程序配置文件的名称,可以通过命令sudo ufw app list
获取该名称。在以下示例中,我们将启用 OpenSSH 配置文件,该配置文件将允许默认 SSH 端口上的所有传入 SSH 连接。
bash
sudo ufw allow "OpenSSH"
java
OutputRule added
Rule added (v6)
请记住引用由多个单词组成的配置文件名称,例如Nginx HTTPS
.
禁用应用程序配置文件
要禁用之前在 UFW 中设置的应用程序配置文件,需要删除其相应的规则。例如:
bash
sudo ufw status
java
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
此输出表明Nginx Full
应用程序配置文件当前已启用,允许通过 HTTP 和 HTTPS 与 Web 服务器进行任何和所有连接。如果只想允许来自和发往 Web 服务器的 HTTPS 请求,则必须首先启用最严格的规则(在本例中为Nginx HTTPS
),然后禁用当前活动的Nginx Full
规则:
bash
sudo ufw allow "Nginx HTTPS"
sudo ufw delete allow "Nginx Full"
请记住,可以使用sudo ufw app list
列出所有可用的应用程序配置文件。
允许 SSH
使用远程服务器时,需要确保 SSH 端口对连接开放,以便能够远程登录到服务器。
以下命令将启用 OpenSSH UFW 应用程序配置文件并允许到服务器上默认 SSH 端口的所有连接:
bash
sudo ufw allow OpenSSH
java
OutputRule added
Rule added (v6)
另一种语法是指定 SSH 服务的确切端口号,通常默认设置为22
:
bash
sudo ufw allow 22
java
OutputRule added
Rule added (v6)
允许来自特定 IP 地址或子网的传入 SSH
要允许来自特定 IP 地址或子网的传入连接,将包含一个from
指令来定义连接源。这将要求使用to
参数指定目标地址。要将此规则仅锁定到 SSH,需要将proto
(协议)限制为tcp
,然后使用该port
参数并将其设置为22
的默认端口。
以下命令将仅允许来自该 IP 地址的 SSH 连接203.0.113.103
:
bash
sudo ufw allow from 203.0.113.103 proto tcp to any port 22
OutputRule added
还可以使用子网地址作为from
参数来允许来自整个网络的传入 SSH 连接:
bash
sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
OutputRule added
允许来自特定 IP 地址或子网的传入 Rsync
[Rsync]程序在端口873
上运行,可用于将文件从一台计算机传输到另一台计算机。
要允许rsync
来自特定 IP 地址或子网的传入连接,请使用from
参数指定源 IP 地址,并使用port
参数设置目标端口873
。以下命令将仅允许来自该 IP 地址的 Rsync 连接203.0.113.103
:
bash
sudo ufw allow from 203.0.113.103 to any port 873
OutputRule added
要允许整个203.0.113.0/24
子网能够使用rsync
访问我们的服务器,请运行:
bash
sudo ufw allow from 203.0.113.0/24 to any port 873
OutputRule added
允许 Nginx HTTP/HTTPS
Nginx Web 服务器会在服务器内设置一些不同的 UFW 配置文件。安装 Nginx 并将其作为服务启用后,请运行以下命令来确定哪些配置文件可用:
bash
sudo ufw app list | grep Nginx
sql
Output Nginx Full
Nginx HTTP
Nginx HTTPS
要同时启用 HTTP 和 HTTPS 流量,请选择Nginx Full
。如果选择Nginx HTTP
仅允许 HTTP 或Nginx HTTPS
仅允许 HTTPS。
以下命令将允许服务器上的 HTTP 和 HTTPS 流量(端口80
和443
):
bash
sudo ufw allow "Nginx Full"
java
OutputRule added
Rule added (v6)
允许 Apache HTTP/HTTPS
Apache Web 服务器会在服务器内设置一些不同的 UFW 配置文件。安装 Apache 并将其作为服务启用后,请运行以下命令来确定哪些配置文件可用:
bash
sudo ufw app list | grep Apache
sql
Output Apache
Apache Full
Apache Secure
要同时启用 HTTP 和 HTTPS 流量,请选择Apache Full
。
以下命令将允许服务器上的 HTTP 和 HTTPS 流量(端口80
和443
):
bash
sudo ufw allow "Nginx Full"
java
OutputRule added
Rule added (v6)
允许所有传入 HTTP(端口80
)
Web 服务器(例如 Apache 和 Nginx)通常侦听端口 80
上的 HTTP 请求。如果传入流量的默认策略设置为丢弃或拒绝,则需要创建 UFW 规则以允许端口80
上的外部访问。我们可以使用端口号或服务名称作为此命令的参数。
要允许所有传入 HTTP(端口80
)连接,请运行:
bash
sudo ufw allow http
java
OutputRule added
Rule added (v6)
另一种语法是指定 HTTP 服务的端口号:
bash
sudo ufw allow 80
java
OutputRule added
Rule added (v6)
允许所有传入 HTTPS(端口443
HTTPS 通常在端口 443
上运行。如果传入流量的默认策略设置为丢弃或拒绝,则需要创建 UFW 规则以允许端口443
上的外部访问。可以使用端口号或服务名称作为此命令的参数。
要允许所有传入 HTTPS(端口443
)连接,请运行:
bash
sudo ufw allow https
java
OutputRule added
Rule added (v6)
另一种语法是指定 HTTPS 服务的端口号:
bash
sudo ufw allow 443
java
OutputRule added
Rule added (v6)
允许所有传入 HTTP 和 HTTPS
如果想要同时允许 HTTP 和 HTTPS 流量,可以创建一条允许这两个端口的规则。此用法还要求使用参数proto
定义协议,在本例中将其设置为tcp
。
要允许所有传入 HTTP 和 HTTPS(端口80
和443
)连接,请运行:
bash
sudo ufw allow proto tcp from any to any port 80,443
java
OutputRule added
Rule added (v6)
允许来自特定 IP 地址或子网的 MySQL 连接
MySQL 监听端口 3306
上的客户端连接。如果远程服务器上的客户端正在使用 MySQL 数据库服务器,需要创建 UFW 规则以允许该访问。
要允许来自特定 IP 地址或子网的传入 MySQL 连接,请使用from
参数指定源 IP 地址,并使用port
参数设置目标端口3306
。
以下命令将允许 IP 地址203.0.113.103
连接到服务器的 MySQL 端口:
bash
sudo ufw allow from 203.0.113.103 to any port 3306
OutputRule added
要允许整个203.0.113.0/24
子网能够连接到 MySQL 服务器,请运行:
bash
sudo ufw allow from 203.0.113.0/24 to any port 3306
OutputRule added
允许来自特定 IP 地址或子网的 PostgreSQL 连接
PostgreSQL 侦听端口5432
上的客户端连接。如果远程服务器上的客户端正在使用 PostgreSQL 数据库服务器,则需要确保允许该流量。
要允许来自特定 IP 地址或子网的传入 PostgreSQL 连接,请使用参数指定源from
,并将端口设置为5432
:
bash
sudo ufw allow from 203.0.113.103 to any port 5432
OutputRule added
要允许整个203.0.113.0/24
子网能够连接到 PostgreSQL 服务器,请运行:
bash
sudo ufw allow from 203.0.113.0/24 to any port 5432
OutputRule added
阻止传出 SMTP 邮件
邮件服务器(例如 Sendmail 和 Postfix)通常使用SMTP 流量的端口25
。如果服务器不想发送外发邮件,需要阻止此类流量。要阻止传出 SMTP 连接,请运行:
bash
sudo ufw deny out 25
java
OutputRule added
Rule added (v6)
这会将防火墙配置为丢弃 端口 25
上的所有传出流量。如果需要拒绝不同端口号上的传出连接,可以重复此命令并替换25
为要阻止的端口号。