É de alguma forma possível substituir uma iptables
regra sem fornecer um número de regra ou inserir/anexar uma regra substituindo a regra existente se a regra adicionada for idêntica a uma já na cadeia? A razão pela qual pergunto é que tenho um script que adiciona iptables
regras automaticamente e pode haver um caso em que a regra adicionada seja idêntica a uma já na cadeia.
Aqui está uma maneira próxima o suficiente de fazer o que você está pedindo.
iptables
tem a opção-C/--check
:Então, se por exemplo você tem algum script automático tentando fazer algo assim:
e você não quer poluir suas regras, você pode fazer isso:
que verificará se a regra existe. Se retornar true, nada acontece, se retornar false o shell executará a 2ª
iptables
regra. Se isso sempre foi feito assim, você obtém idempotentemente uma vez e apenas uma vez essa regra (mas veja mais tarde sobre o pedido). Você poderia ter usado,-A
mas-I
é mais provável que ajude.Se a posição da regra importa, mas você não sabe exatamente onde ela está atualmente devido a outras alterações, você deve usar uma cadeia definida pelo usuário para fazer essa operação. Dessa forma a regra sempre será chamada na posição do salto:
Dessa forma, se houve uma exceção inserida antes em algum momento:
seu script não irá reinserir a regra antes desta exceção e cancelá-la.