使用 UFW 配置文件时我可以仅在单个接口(tun0)上打开端口吗?

使用 UFW 配置文件时我可以仅在单个接口(tun0)上打开端口吗?

所以,我知道我可以这样做,ufw allow from tun0 to tun0 port 36892但是在使用 UFW 配置文件对多个端口进行类似操作时是否可以这样做 ports=tun0;36892|tun0;23976|tun0;19827

在这种情况下,假设 tun0 是 10.8.0.1。

答案1

一般答案

恐怕无法将网络接口添加到应用程序配置文件中,因为在“应用程序集成”部分下UFW 的手册页语法如下:

应用程序配置文件的语法是简单的 .INI 格式:

[<name>]
title=<title>
description=<description>
ports=<ports>

并且没有提供接口指令。

手动创建规则

根据问题,有两种方法可以同时允许 TCP 和 UDP:

  1. 为每个端口分别添加规则:

    sudo ufw allow in on tun0 to any port 36892
    sudo ufw allow in on tun0 to any port 23976
    sudo ufw allow in on tun0 to any port 19827
    
  2. 分别为每个协议添加规则:

    sudo ufw allow in on tun0 to any port 36892,23976,19827 proto tcp
    sudo ufw allow in on tun0 to any port 36892,23976,19827 proto udp
    

为了仅允许从特定地址访问,请添加from 10.8.0.xxx声明 - 例如:

sudo ufw allow in on tun0 from 10.8.0.110 to any port 36892,23976,19827 proto tcp

创建应用程序配置文件并基于它创建规则

让我们创建一个新的配置文件,名为custom.ufw.profile,位于/etc/ufw/applications.d/。该文件的内容可能如下所示:

[CustomApp 1 Full]
title=The first Custom Application
description=Custom Application Description
ports=36892|23976|19827

[CustomApp 1 TCP]
title=The first Custom Application - TPC only
description=Custom Application Description
ports=36892,23976,19827/tcp

[CustomApp 1 UDP]
title=The first Custom Application - UDP only
description=Custom Application Description
ports=36892,23976,19827/udp
  • 我们可以通过命令检查语法是否正确ufw app info "app name"

    $ sudo ufw app info "CustomApp 1 Full"
    Profile: CustomApp 1 Full
    Title: The first Custom Application
    Description: Custom Application Description
    Ports:
      36892
      23976
      19827
    

现在我们可以基于此配置文件创建新规则:

sudo ufw allow in on tun0 to any app "CustomApp 1 Full"
  • 检查规则是否正确:

    $ sudo ufw status numbered | grep CustomApp
    [10] CustomApp 1 Full on tun0       ALLOW IN    Anywhere
    [20] CustomApp 1 Full (v6) on tun0  ALLOW IN    Anywhere (v6)
    

创建自定义命令来自动执行规则启用/禁用过程

如果我们想要快速启用或禁用一些 UFW 规则,我们可以为此创建自定义命令。我们可以使用如下所示的函数:

function ufw-custom {
        if ! ufw_loc="$(type -p "ufw")" || [ -z "$ufw_loc" ]; then
                printf "\nUFW is not installed yet.\n\n"
        elif [ "$1" = "enable" ]; then
                sudo ufw allow in on tun0 to any port 36892
                sudo ufw allow in on tun0 to any port 23976
                sudo ufw allow in on tun0 to any port 19827
                echo ""
                sudo ufw reload
                echo ""
                sudo ufw status numbered
        elif [ "$1" = "disable" ]; then
                sudo ufw delete allow in on tun0 to any port 36892
                sudo ufw delete allow in on tun0 to any port 23976
                sudo ufw delete allow in on tun0 to any port 19827
                echo ""
                sudo ufw reload
                echo ""
                sudo ufw status numbered
        else
                echo ""
                sudo ufw status numbered
                printf "Use 'ufw-custom enable' or 'ufw-custom disable'.\n\n"
        fi
}
export -f ufw-custom

将这些行放入文件末尾~/.bashrc,然后source ~/.bashrc。现在我们有一个名为的自定义命令,ufw-custom它可以处理enabledisable作为参数。例如,要启用规则,请使用:

ufw-custom enable

相关内容