前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。
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`为要阻止的端口号。