我是否可以在使用ufw配置文件时在单个接口(tun0)上打开端口

所以,我知道我可以ufw allow from tun0 to tun0 port 36892但是在为多个端口使用ufw配置文件时可以做类似的操作,例如ports=tun0;36892|tun0;23976|tun0;19827

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

一般的答案

我担心将网络接口添加到应用程序配置文件中是不可能的,因为在UFW手册页的“应用程序集成”部分中写入了语法:

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

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

并且没有接口指令预设。

手动创建规则

根据问题有两种方法可以同时允许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 
  • 更多示例: UFW Essentials:通用防火墙规则和命令 。

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

让我们创建一个名为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