заменить правило iptables без указания номера правила

Так и должно быть

sudo rpm --import linux_signing_key.pub

Обратите внимание на эти два тире.

1
13.12.2019, 18:17
1 ответ

Вот достаточно близкий способ сделать то, что вы просите. iptablesимеет опцию-C/--check:

-C, --check chain rule-specification

Check whether a rule matching the specification does exist in the selected chain. This command uses the same logic as -D to find a matching entry, but does not alter the existing iptables configuration and uses its exit code to indicate success or failure.

Итак, если, например, у вас есть какой-то автоматический скрипт, пытающийся сделать что-то подобное:

iptables -I FORWARD -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT

и вы не хотите нарушать свои правила, вы можете сделать это вместо этого:

iptables -C FORWARD -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT || \
    iptables -I FORWARD -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT

, который проверит, существует ли правило. Если он возвращает true, ничего не происходит, если он возвращает false, оболочка выполнит второе правило iptables. Если бы это всегда делалось так, вы идемпотентно получаете один и только один раз это правило (, но см. позже о порядке ). Вы могли бы использовать -A, но -I, скорее всего, поможет.

Если положение правила имеет значение, но вы не знаете точно, где оно сейчас находится из-за других изменений, для выполнения этой операции следует использовать заданную пользователем цепочку. Таким образом, правило всегда будет вызываться в месте перехода :

.
iptables -N mychain
iptables -A FORWARD -m comment --comment first_rule
iptables -A FORWARD -m comment --comment initially_second -j mychain

iptables -C mychain -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT || \
    iptables -A mychain -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT

Таким образом, если раньше было вставлено исключение:

iptables -I FORWARD 2 -s 10.0.3.10 -d 10.0.4.20 -m comment --comment now_second -j DROP

ваш скрипт не будет повторно вставлять правило перед этим исключением и отменит его.

1
27.01.2020, 23:40

Теги

Похожие вопросы