Назад | Перейти на главную страницу

В чем обратная сторона удаления правила iptables как попытки проверить, существует ли оно?

Я хочу добавить правило, используя iptables, но только если его еще нет.

Есть вариант -C что позволит нам проверить, существует ли уже спецификация правила. Опция описана в этот вопрос и ответ также.

Из этих вопросов и ответов, этот конкретный ответ говорит, как можно использовать -D (удалить), который удалит правило, если он существует, или выйдет с кодом 1, если его нет. (Что именно -C работает, если правила не существует, поэтому проблем не возникнет).

И мне удобнее делать

ip6tables -D OUTPUT -p icmpv6 --icmpv6-type destination-unreachable -j DROP
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type destination-unreachable -j DROP

Вместо того, чтобы проверять, существует ли, удалить его, если он есть, и только затем добавить новое правило.

Однако кто-то в комментарии упомянул, что это открывает дыру в брандмауэре, и я не вижу, как это сделать.

Итог: почему я не должен слепо удалять и добавлять правило, а не проверять его перед удалением и добавлением?

Проблема с этим подходом (удалить, затем добавить) заключается в том, что эти две операции не выполняются одновременно, между ними есть некоторое время, и в это время ваша система подвергается воздействию нежелательного трафика, который предотвращает ваше правило DROP. Это может показаться безобидным в вашем случае с недостижимым ipv6, но учтите, что вы попадаете под удар трафика, из-за которого некоторые приложения или устройства перестают отвечать на запросы - по моему опыту, иногда даже мгновенное снижение правила брандмауэра, которое препятствовало этому, могло иметь некоторое долгое- длительные последствия.

Тот факт, что правило блокировки можно удалить и открыть что-то для нежелательного трафика, может быть меньшей проблемой, чем удаление правила, которое фактически позволяет вам войти. В этом случае у вас может не быть возможности восстановить его.