我正在使用 ansible 在我的数据库服务器上配置 ufw 以只接受从某些服务器连接到特定端口的连接(可以说1234
)。
当曾经有访问权限的服务器从池中取出时,可能会忘记删除该服务器的访问规则。
我的解决方案:设置规则时,我想删除 port 的所有规则1234
,然后使用当前池中的服务器重新创建它们。
不幸的是,ufw delete
需要精确指定要删除的规则(端口、协议、scr IP,...)。
我尝试了类似 的解决方案ufw delete $(ufw status numbered | grep 1234 | <get all the numbers of the rules> )
,但它变得非常丑陋,速度非常快。
有没有更好的方法来删除某个端口的所有规则?
这里有两个问题需要解决:
我想我可以通过 bash 中的这一行来解决问题 #1:
ufw status numbered |(grep '80/tcp'|awk -F"[][]" '{print $2}')
Run Code Online (Sandbox Code Playgroud)
上面的示例匹配字符串 '80/tcp' 的任何防火墙规则,并仅打印去掉括号的规则编号。
我还没有解决问题 #2,因为据我所知,'ufw delete' 命令没有抑制 '(y|n)' 确认提示的开关,从而阻碍自动化。
但是,您可以运行下面的命令并通过按“y”键确认然后向上箭头 => 输入以冲洗和重复来手动敲出每个规则删除
ufw delete $(ufw status numbered |(grep '80/tcp'|awk -F"[][]" '{print $2}'))
Run Code Online (Sandbox Code Playgroud)
我知道这是一个非常老的问题,但谷歌把我带到了这里,到目前为止的答案很有帮助,所以我想分享我的完整解决方案。@Seth 的回答让我明白了大部分内容。
我的目标是删除所有允许在端口 3306 上连接到本地 MySQL 服务器的 UFW 规则。这是我使用的:
for NUM in $(ufw status numbered | grep 3306 | awk -F"[][]" '{print $2}' | tr --delete [:blank:] | sort -rn); do
yes | ufw delete $NUM
done
Run Code Online (Sandbox Code Playgroud)
自动执行此操作的关键是以相反的顺序删除规则。当您从末尾删除时,上面的数字不会改变。
当你运行时,ufw status numbered
你会得到如下输出:
Run Code Online (Sandbox Code Playgroud)To Action From -- ------ ---- [ 1] 22 ALLOW IN 10.181.225.123 [ 2] 3306/tcp ALLOW IN 10.181.225.123 [ 3] 3306/tcp ALLOW IN 10.181.226.45 [ 4] 3306/tcp ALLOW IN 10.181.226.77 [ 5] 3306/tcp ALLOW IN 10.181.225.196 [ 6] 3306/tcp ALLOW IN 10.181.226.3 [ 7] Anywhere ALLOW IN 10.181.226.45 [ 8] 3306/tcp ALLOW IN 10.181.224.55 [ 9] 3306/tcp ALLOW IN 10.181.224.80 [10] 3306/tcp ALLOW IN 10.208.6.136 [11] 3306/tcp ALLOW IN 10.178.128.13
有几件事需要知道:
awk -F"[][]" '{print $2}'
将包含 10 以下数字的前导空格,tr --delete [:blank:]
将删除它sort -rn
将以相反的数字顺序对数字进行排序。yes
到 ufw 而不是使用,--force
因为我有一个非常旧的 ufw。如果您有现代版本,则可以使用--force
. 归档时间: |
|
查看次数: |
11777 次 |
最近记录: |