我正在使用可以在我的数据库服务器上configurationufw,只允许接受从某些服务器连接到特定端口的连接(可以说1234 )。
当一个曾经拥有访问权的服务器被移出池时,可能会忘记删除该服务器的访问规则。
我的解决scheme:设置规则时, 我想删除端口1234所有规则 ,然后使用当前池中的服务器重新创build它们。
不幸的是, ufw delete需要精确指定要删除的规则(端口,协议,scr IP,…)。
我尝试了一个解决scheme,如ufw delete $(ufw status numbered | grep 1234 | <get all the numbers of the rules> ) ,但它变得非常难看,非常快。
有没有更好的方法来删除某个端口的所有规则?
这里有两个问题需要解决:
我认为我有一个解决scheme,通过在bash中的这一个class轮问题#1:
ufw status numbered |(grep '80/tcp'|awk -F"[][]" '{print $2}')
上面的例子匹配string“80 / tcp”的任何防火墙规则,只打印带括号的规则号码。
我还没有解决问题2,因为尽我所知,'ufw delete'命令没有禁止'(y | n)'确认提示的开关,从而阻止了自动化。
你可以运行下面的命令,然后按下'y'键确认,然后向上箭头=>input冲洗并重复
ufw delete $(ufw status numbered |(grep '80/tcp'|awk -F"[][]" '{print $2}'))
如果您需要清除所有规则(不只是特定的端口):
ufw --force reset
( – 如果你不想被提示确认)
也许不必多说:在每次移除一个编号的ufw项目后,该项目后的所有项目都重新编号。 因此,该首字母删除项目后删除错误的项目:
#Wrong use of deleting multiple ufw-items: for numb in $(ufw status numbered | grep DENY | cut -d" " -f1 | grep -o [[:digit:]]*); do ufw delete $numb; done
只要不能强制删除每个项目而没有确认,我还没有find更好的解决scheme…但….