web-dev-qa-db-ja.com

特定のポートのすべてのufwルールを削除するにはどうすればよいですか?

私はansibleを使用してDBサーバーでufwを設定し、特定のサーバーから特定のポートへの接続のみを許可します(_1234_と言います)。

以前アクセスしていたサーバーがプールから削除されると、そのサーバーのアクセスルールを削除するのを忘れることがあります。

私の解決策:ルールを設定するときにポート_1234_のすべてのルールを削除してから、現在のプールからサーバーを使用してルールを再作成します。

残念ながら_ufw delete_では、削除するルール(ポート、プロトコル、SCR IPなど)を正確に指定する必要があります。

私はufw delete $(ufw status numbered | grep 1234 | <get all the numbers of the rules> )のような解決策を試しましたが、それは本当に醜く、本当に速くなりました。

特定のポートのすべてのルールを削除するより良い方法はありますか?

6
dabai

ここで解決する必要がある2つの問題があります。

  1. 目的の文字列に一致するufwルール番号のリストを生成します。
  2. シェルにこのリストを展開させ、一連の「ufw delete [rule number]」コマンドの最後に追加します。

私はbashのこの1つのライナーを介して問題#1の解決策を持っていると思います:

ufw status numbered |(grep '80/tcp'|awk -F"[][]" '{print $2}')

上記の例は、文字列「80/tcp」のファイアウォールルールに一致し、角かっこを除いたルール番号のみを出力します。

私が知ることができる限り、「ufw delete」コマンドには「(y | n)」確認プロンプトを抑止するスイッチがないため、問題2はまだ解決していません。これにより、自動化が失敗します。

ただし、以下のコマンドを実行して、「y」キーを押して確認し、上矢印=> Enterを押してすすぎて繰り返すことにより、各ルールの削除を手動で実行できます。

ufw delete $(ufw status numbered |(grep '80/tcp'|awk -F"[][]" '{print $2}'))
6
Seth

私はこれが非常に古い質問であることを知っていますが、グーグルは私をここに連れてきて、これまでの答えは役に立ちましたので、私の完全な解決策を共有したいと思いました。 @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

これを自動化する鍵は、ルールを逆順で削除することです。最後から削除しても上記の数値は変わりません。

ufw status numberedを実行すると、次のような出力が得られます。

     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は数値を逆の番号順に並べ替えます。
  • 非常に古いufwを持っているので、--forceを使用する代わりにyesをufwにパイプしています。最新バージョンをお持ちの場合は、--forceを使用できます。
2
bradym

特定のポートだけでなく、すべてのルールを一掃する必要がある場合:

ufw --force reset

(-確認を求められたくない場合は強制)

2
lepe

ここでのソリューションのほとんどは、削除後のUFW再番号付けルールのため、誤ったルールを削除します。

削除するたびに新しい番号付けを回避するには、コマンドを再実行して最初の番号を選択し、そのルールを削除して次のようにループする必要があります。

真である間; do n = $(ufw status numbered | grep DENY | head -n 1 | awk -F "[] []" '{print $ 2}'); ["$ n"!= ""] ||ブレーク;はい| ufwは$ nを削除します。完了。

1
Gadelkareem

言うまでもないことですが、番号付きのufw-itemを削除するたびに、そのアイテムに続くすべてのアイテムの番号が付け直されます。したがって、このワンライナーは最初に削除されたアイテムの後に間違ったアイテムを削除します:

#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

確認なしに各アイテムを強制削除することができない限り、私はより良い解決策を見つけていません...まだ...

0
Josh Falken