Вопрос: Разница между вариантами iptables -A и -I


Я пытался (в течение нескольких часов) настраивать iptables, чтобы разрешить DNS-запросы на моем DNS-сервере, и только что узнал, что мой iptables сохранил блокирующий доступ из-за опции добавления правила, которую я использовал. Большинство форумов предлагают правило, подобное следующему:

iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT

Однако в моем случае мне пришлось изменить правило на insert типа, чтобы он работал:

iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT

Я знаю, что одно правило для добавления, а другое для вставки, а также то, что означают оба термина, но может ли кто-нибудь объяснить разницу между ними, а также когда использовать какой вариант? Я искал iptables Ubuntu, но не вижу там много информации.


15
2018-01-25 02:13


Источник




Ответы:


iptables -A добавляет правила в конце набора правил, тогда как iptables -I вставляет правило в определенное положение в наборе правил, как вы указали.

Взгляд на запись человека для iptables показывает это:

-I, --insert chain [rulenum] rule-specification Вставить одно или несколько правил в выбранной цепочке в качестве данного номера правила. Итак, если правило   число равно 1, правило или правила вставляются в начало цепочки.   Это также значение по умолчанию, если не указан номер правила.

И вот почему -I работал на вас и -A не делает. Если вы не даете никакого руля, ваше правило вставляется в первую позицию. Это означает, что в вашем случае, что где-то в вашем наборе правил должно существовать правило, запрещающее пакеты DNS (возможно, правило, которое запрещает UDP в целом?), Поскольку iptables обрабатывает все правила с первого по последний, применяет первое соответствие и останавливает.
Кстати, это также причина, по которой вы должны ставить правила, которые должны соответствовать большинству пакетов в верхней части: если вы поместите наиболее часто используемое правило в поле и, пакет проверяется на каждое правило, которое может потреблять много ресурсов.

И для использования: вы можете использовать -A когда вы хотите добавить правило в конце или когда не имеет значения, где будет ваше правило. Если вы хотите, чтобы ваше правило находилось в определенной позиции, используйте -I например, например: iptables -I INPUT 6 -p tcp -j DROP (это добавит инструкцию DROP для всех tcp-пакетов, адресованных самому хосту в позиции 6 в наборе правил INPUT.)


20
2018-01-25 02:24