ufw 删除

ufw 删除

如何一次性删除多条 ufw 规则?使用

$ ufw status numbered

Status: Aktiv

         Zu                         Aktion      Von
         --                         ------      ---
    [ 1] 80/tcp                     ALLOW IN    Anywhere
    [ 2] 53                         ALLOW IN    Anywhere
    [ 3] 53                         ALLOW OUT   Anywhere                   (out)
    [ 4] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
    [ 5] 53 (v6)                    ALLOW IN    Anywhere (v6)
    [ 6] 53 (v6)                    ALLOW OUT   Anywhere (v6)              (out)

我得到了规则的编号,并且可以使用例如删除单个规则

$ ufw delete 2

但有没有办法一次性删除多条规则?比如

ufw delete 2 3 5 6

会很好(但是不起作用)。

答案1

我有三种不同的方法可以一次删除多个规则。

ufw 删除

没有一次性删除多个数字的功能,但您可以使用规则语法成对delete删除 v4 和 v6 的规则:

ufw delete allow 53
ufw delete deny out 53

(巴)什

你也可以在 shell 中使用简单的 for 循环(但是确保数字向下,因为规则索引会随着删除规则而改变):

for i in 6 5 3 2; do ufw delete $i; done

每次删除规则时,您都会收到确认信息。如果您想跳过确认,请使用以下-f选项:

for i in 6 5 3 2; do ufw delete -f $i; done

答案2

接受的答案对我来说不起作用,因为ufw删除规则后会重置数字。我很幸运,因为我想删除第一n行,所以我将一行代码调整为以下内容

for n in {1..n}; do echo $n; yes | sudo ufw delete 1; done

答案3

如果你想删除一个范围,例如:从 100 到 200,你可以这样做:

for i in {200..100};do yes|sudo ufw delete $i;done

您从 200 条规则开始到 100 条规则,如果您使用 {100..200} 规则将重新排列,并且由于重新排列,您只会删除一半的范围

答案4

删除特定端口号的所有 UFW 规则


如果要删除基于特定端口号的规则,请使用以下方法(例如,本例中为端口 3000):

while true; do \
    rule_number=$(\
        ufw status numbered \
        | awk '/(ALLOW|DENY) IN/ && $0 ~ /\<(3000)\>/{gsub(/[\[\]]/, "");\
            print $1; \
            exit}'\
    ); \
    if [ -z "$rule_number" ]; then \
        break; \
    else \
        sudo yes \
        | ufw delete $rule_number --force; \
    fi; \
done

考虑到规则编号会发生变化,每次都会重新列出并检索规则编号。

说明

while true; do启动无限循环,因为条件“ true”始终得到满足。

rule_number=$(ufw status numbered | awk '/(ALLOW|DENY) IN/ && $0 ~ /\<(3000)\>/{gsub(/[\[\]]/, ""); print $1; exit}'):此命令启动一个子 shell,从 ufw(简单防火墙)状态输出中检索符合特定条件的第一个规则编号。

(ALLOW|DENY) IN:匹配包含“ALLOW IN”或“DENY IN”的行。$0 ~ /\<(3000)\>/:匹配数字“3000”作为单独单词出现的行。

{gsub(/[\[\]]/, ""); print $1; exit}:执行字符串操作以从行中删除方括号(如果存在),并打印第一个字段(规则编号)。该exit语句确保只捕获第一个匹配项。检索到的规则编号存储在变量中rule_number

if [ -z "$rule_number" ]; then break;:此条件语句检查rule_number变量是否为空。如果变量为空(即未找到规则编号),则脚本中断循环并结束。如果变量不为空,则脚本继续下一步。

else sudo yes | ufw delete $rule_number --force; fi;:此命令使用 ufw 删除由捕获的 rule_number 指定的规则。标志--force用于避免交互式确认提示。sudo yes 命令用于对可能出现的任何提示自动回答“是”。

循环从头开始继续,重复该过程以查找下一个匹配的规则编号并将其删除。 这会一直持续到没有更多匹配的规则,此时循环中断并且脚本结束。

希望有帮助!

相关内容