Como apagar todas as regras do ufw para uma determinada porta?

4

Estou usando ansible para configurar o ufw em meus servidores de banco de dados para permitir que apenas conexões de conexão de determinados servidores sejam aceitas em uma porta específica (digamos 1234 ).

Quando um servidor que costumava ter acesso é retirado do pool, pode ser esquecido remover a regra de acesso para esse servidor.

Minha solução: ao configurar as regras, desejo excluir todas as regras da porta 1234 e, em seguida, recriá-las com os servidores do conjunto atual.

Infelizmente, ufw delete requer a especificação precisa da regra a ser excluída (porta, protocolo, scr IP, ...).

Eu tentei uma solução como ufw delete $(ufw status numbered | grep 1234 | <get all the numbers of the rules> ) , mas ficou muito feia, muito rápida.

Existe uma maneira melhor de excluir todas as regras de uma determinada porta?

    
por dabai 24.07.2014 / 14:54

4 respostas

4

Existem dois problemas que precisam ser resolvidos aqui:

  1. gera uma lista de números de regras ufw que correspondem a uma string desejada.
  2. faça o shell expandir essa lista e cole-a no final de uma sequência de comandos 'ufw delete [rule number]'.

Acho que tenho uma solução para o problema nº 1 por meio desse único liner no bash:

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

O exemplo acima corresponde a qualquer regra de firewall para a string '80 / tcp 'e imprime apenas o número da regra com os colchetes removidos.

Ainda não resolvi o problema # 2 porque, da melhor maneira que posso dizer, o comando 'ufw delete' não possui um comutador que suprime o prompt de confirmação '(y | n)', impedindo assim a automação.

No entanto, você pode executar o comando abaixo e descobrir manualmente cada exclusão de regra pressionando a tecla 'y' para confirmar e, em seguida, a seta para cima = > entrar para enxaguar e repetir

ufw delete $(ufw status numbered |(grep '80/tcp'|awk -F"[][]" '{print $2}'))
    
por 26.10.2014 / 21:28
2

Se você precisar eliminar todas as suas regras (não apenas portas específicas):

ufw --force reset

(- força se você não quer ser solicitado a confirmar)

    
por 02.02.2017 / 09:54
0

Talvez seja desnecessário dizer: após cada remoção de um item ufw numerado, todos os itens após esse item são renumerados. Portanto, este oneliner excluirá os itens errados após o primeiro item excluído:

#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

Desde que não seja possível excluir com força cada item sem uma confirmação, não encontrei uma solução melhor ... ainda ....

    
por 25.05.2015 / 21:43
0

Eu sei que essa é uma pergunta muito antiga, mas o google me trouxe até aqui e as respostas até o momento foram úteis. Por isso, quis compartilhar minha solução completa. A resposta do @Seth me levou a maior parte do caminho.

Meu objetivo é remover todas as regras do UFW, permitindo conexões com o servidor MySQL local na porta 3306. Aqui está o que eu usei:

for NUM in $(ufw status numbered | grep 3306 | awk -F"[][]" '{print $2}' | tr --delete [:blank:] | sort -rn); do
    yes | ufw delete $NUM
done

A chave para automatizar isso é excluir regras em ordem reversa . Quando você exclui do final, os números acima não mudam.

Quando você executar ufw status numbered , receberá uma saída assim:

     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

Algumas coisas para saber:

  • A saída de awk -F"[][]" '{print $2}' incluirá um espaço inicial para números abaixo de 10, tr --delete [:blank:] excluirá
  • Quando os espaços iniciais forem excluídos, sort -rn classificará os números em ordem numérica reversa.
  • Estou usando o yes no ufw em vez de usar --force porque tenho um ufw muito antigo. Se você tem uma versão moderna, você pode usar --force .
por 14.09.2018 / 01:01