如何一次性删除多条 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 命令用于对可能出现的任何提示自动回答“是”。
循环从头开始继续,重复该过程以查找下一个匹配的规则编号并将其删除。 这会一直持续到没有更多匹配的规则,此时循环中断并且脚本结束。
希望有帮助!