Різниця між iptables -A та -I варіантом


20

Я годинами намагався налаштувати 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, як це зробити, але там не бачу багато інформації.

Відповіді:


24

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

Дивлячись на запис людини для iptables, видно це:

-I, --встановлення ланцюга [rulenum] специфікація правила Вставте одне або більше правил у вибраний ланцюг як заданий номер правила. Отже, якщо номер правила дорівнює 1, правило або правила вставляються на чолі ланцюга. Це також за замовчуванням, якщо не вказано номер правила.

І ось, чому -Iви працювали, а -Aні. Якщо ви не постачаєте жодної правила, ваше правило вставляється на першій позиції. Це означає, що у вашому випадку десь у вашому наборі правил повинно бути правило, яке забороняє пакети DNS (можливо, правило, яке забороняє UDP взагалі?), Оскільки iptables обробляє всі правила від першого до останнього, застосовує перше узгодження та зупиняє.
Btw, це також причина того, що ви повинні ставити правила, які призначені для відповідності більшості пакетів вгорі: якщо ви ставите найбільш використовуване правило в і, пакет перевіряється проти кожного правила, яке може споживати багато ресурсів.

А щодо використання: Ви можете безпечно використовувати, -Aколи ви хочете додати правило в кінці або коли не має значення, де буде ваше правило. Якщо ви хочете, щоб ваше правило було в певній позиції, скористайтеся -Iтаким чином, наприклад: iptables -I INPUT 6 -p tcp -j DROP(це додасть оператор DROP для всіх пакетів tcp, адресованих самому хосту на позиції 6 в наборі правил INPUT.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.