UFW:常见的防火墙规则和命令

介绍

UFW是一个运行在iptables上的防火墙工具,默认被包含在Ubuntu发行版中。它提供了一个用于通过命令行配置常见防火墙使用情况的现代化接口。

这个备忘单式指南提供一个对常见UFW使用和命令的快速参考,包括如何通过端口,网卡以及源IP地址允许和阻塞服务。

如何使用本指南

1)本指南是包括了自包含命令行代码段的备忘单格式

2)跳到与你正在尝试要完成的任务相关的任何部分

3)当看到本手册命令中粗体部分时,记住此文本应该指向你自己网络中IP地址

记住你可以用sudo ufw status或sudo ufw status检测你当前UFW规则集。

确认UFW状态

要确认ufw是否被启用,运行:

root@blctrl:/home/blctrl# ufw status

输出将表明你的防火墙是否启用了。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

启用UFW

如果在你运行ufw status时,你得到一条Status: inactive消息,它表示防火墙在系统上还未被启用。你将需要运行一条命令来启用它。

默认,当启用时,UFW将阻塞对服务器上所有端口的外部访问。实际中,那表示如果你通过SSH连接了一台服务器,在运行通过SSH端口访问前,启用了ufw,你将被断开连接。

要在你系统上启用UFW,运行:

root@blctrl:/home/blctrl# ufw enable

你将看到像这样的输出:

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

要看到当前什么被阻塞或允许,你可以在运行ufw status时使用verbose参数,如下:

root@blctrl:/home/blctrl# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)

禁用UFW

如果出于某个原因,你需要禁用UFW,你可以用以下命令做这件事:

root@blctrl:/home/blctrl# ufw disable
Firewall stopped and disabled on system startup

注意:此条命令将在你系统上完全禁用这个防火墙服务。

阻塞一个IP地址

要阻塞一个特定IP地址的所有网络连接,运行以下命令,用你想要阻塞的IP地址替代以命令中使用的IP地址:

sudo ufw deny from 192.168.3.2

在本例中,from 192.168.3.2指定了一个"192.168.3.2"的源IP地址。

在IP地址为192.168.3.2的机器上ping本机192.168.3.68,将没有响应:

[root@main-machine adls]# ifconfig enp4s0f2
enp4s0f2: flags=4163  mtu 1500
        inet 192.168.3.2  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::1a60:24ff:fea6:ab0b  prefixlen 64  scopeid 0x20
        ether 18:60:24:a6:ab:0b  txqueuelen 1000  (Ethernet)
        RX packets 3818117  bytes 375973235 (358.5 MiB)
        RX errors 0  dropped 609653  overruns 0  frame 0
        TX packets 2732696  bytes 185964409 (177.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@main-machine adls]# ping 192.168.3.68
PING 192.168.3.68 (192.168.3.68) 56(84) bytes of data.
From 192.168.3.2 icmp_seq=1 Destination Host Unreachable
From 192.168.3.2 icmp_seq=2 Destination Host Unreachable
From 192.168.3.2 icmp_seq=3 Destination Host Unreachable
^C
--- 192.168.3.68 ping statistics ---
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3076ms
pipe 4

如果你现在运行sudo ufw status,你将看到列出的指定IP地址被拒绝:

root@blctrl:/home/blctrl# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Anywhere                   DENY        192.168.3.2
OpenSSH (v6)               ALLOW       Anywhere (v6)     

对于这个指定IP地址,进出的所有连接都被阻塞。

阻塞一个子网

如果你需要阻塞一个完整的子网,你可以使用子网地址用于ufw deny命令上from参数。这会阻塞在示例子网203.0.113.0/24中所有IP地址:

root@blctrl:/home/blctrl# ufw deny from 192.168.3.0/24
Rule added
root@blctrl:/home/blctrl# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Anywhere                   DENY        192.168.3.2
Anywhere                   DENY        192.168.3.0/24
OpenSSH (v6)               ALLOW       Anywhere (v6)

阻塞对一个网卡的入站连接

要阻塞来自一个特定IP地址到一个特定网卡的入站连接,运行以下命令,用你想要阻塞的IP地址替代以下命令中的IP地址:

root@blctrl:/home/blctrl# ufw deny in on eth0 from 192.168.3.2
Rule added
root@blctrl:/home/blctrl# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Anywhere                   DENY        192.168.3.2
Anywhere                   DENY        192.168.3.0/24
Anywhere on eth0           DENY        192.168.3.2
OpenSSH (v6)               ALLOW       Anywhere (v6)

in参数告诉ufw只对入站连接使用这个规则,而on eth0参数指定只对eth0接口使用规则。如果你有一个带若干网卡的系统(包括虚拟网卡)并且你需要阻塞对这些网卡中某些网卡而不是所有网卡的外部访问,这是有用的。

允许一个IP地址

要允许源自一个特定IP地址的所有网络连接,运行以下命令,用你想要允许访问的IP地址替代以下命令中的IP地址:

root@blctrl:/home/blctrl# ufw allow from 192.168.3.2
Rule updated

如果你现在运行sudo ufw status,你将看到类似以下的输出,在你才添加的IP地址边显示了ALLOW。

root@blctrl:/home/blctrl# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Anywhere                   ALLOW       192.168.3.2
Anywhere                   DENY        192.168.3.0/24
Anywhere on eth0           DENY        192.168.3.2
OpenSSH (v6)               ALLOW       Anywhere (v6)

删除UFW规则

要删除在UFW中你先前设置的规则,使用ufw delete后跟规则(alllow或deny)以及目标说明。以下示例会删除一条先前设置成允许来自IP地址192.168.3.2所有连接的规则:

root@blctrl:/home/blctrl# ufw delete allow from 192.168.3.2
Rule deleted

另一种指定你想要删除哪些规则的方法是通过提供规则ID。此信息可以通过以下命令获取:

root@blctrl:/home/blctrl# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere
[ 2] Anywhere                   DENY IN     192.168.3.0/24
[ 3] Anywhere on eth0           DENY IN     192.168.3.2
[ 4] OpenSSH (v6)               ALLOW IN    Anywhere (v6)

从输出,可以看到有两条有效规则。第二条规则拒绝所有来自IP地址192.168.3.0网络的连接。第三条规则拒绝来自指定IP地址的在eth0接口上入站。

因为除非显式地被允许,默认的UFW已经阻塞了所有外部访问,第一条规则是多余地,所以你可以移出它。要通过ID删除一条规则,运行:

root@blctrl:/home/blctrl# ufw delete 2
Deleting:
 deny in on eth0 from 192.168.3.2
Proceed with operation (y|n)? y
Rule deleted
root@blctrl:/home/blctrl# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

列出可用的应用程序概况

安装时,依赖网络通信的应用程序将设置一个UFW概况,你可以使用它运行从外部地址连接。这经常与运行ufw allow from相同,具有以下优势:抽象一个服务使用的特定端口号并且对提到的服务提供用户友好的命名法。

要列出哪些服务可用,运行以下:

root@blctrl:/home/blctrl# ufw app list
Available applications:
  Apache
  Apache Full
  Apache Secure
  CUPS
  OpenSSH

启用应用程序配置

要启用一个UFW应用程序配置,运行ufw allow后跟你想要启用应用程序配置的名称,你可以使用ufw app list获取这些名称。在以下示例中,我们启用了apache配置,它将允许所有在默认http端口上入站的http连接。

root@blctrl:/home/blctrl# ufw allow  "Apache"
Rule added
Rule added (v6)

记住最由多个词组成的配置名加引号,诸如"Nginx HTTPS"。

禁用应用程序配置

要禁用一个你先前在UFW内设置的应用程序配置,你需要移出其对应的规则。例如,考虑来自ufw status的以下输出:

root@blctrl:/home/blctrl# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

这个输出表明Nginx Full应用程序配置当前被启用。

你可能感兴趣的:(Linux笔记,ubuntu,linux,服务器)