Конфігурація iptables
У всі ядра Linux, починаючи з 2.0, вбудований засіб для фільтрації мережевих пакетів. В 2.0 це ipfwadm, в 2.2 - ipchains, а в 2.4 і 2.6 - iptables. Ми будемо розглядати останній варіант.
Принцип фільтрації такий: коли через ядро проходить пакет, він перевіряється на збіг із одним або декількома правилами. При цьому залежно від цих правил він може бути пропущений (ACCEPT), відкинутий (DROP) або відхилений (REJECT). Крім того, він може бути відправлений на перевірку в наступний ланцюжок правил. Тут же можна вказати, що факт проходження пакету, що підходить під певне правило, повинен бути відмічений в syslog. Правила можуть включати в себе перевірку адреси / порту джерела / отримувача, протоколу, прапорів TCP і т.д. (Про це нижче).
Для зміни використовуваного набору правил використовується програма, яка так і називається - iptables . Всі правила зберігаються в пам'яті ядра і при перезавантаженні скидаються. Тому необхідно створити файл конфігурації, з якого правила фільтрації будуть зчитуватися при завантаженні машини. Зазвичай це / etc / rc.d / rc.firewall. Це звичайний скрипт оболонки, який викликає / sbin / iptables з певними параметрами, відповідними складеними правилами. Тому в більшості дистрибутивів для зміни конфігурації iptables необхідно відредагувати вказаний файл і запустити його (цей файл, як правило, автоматично виконується при завантаженні машини). Після чого можна подивитися оновлену таблицю правил командою iptables-L.
Тепер більш докладно. Спочатку існують 3 ланцюжки, через які пакети входять на фільтрацію. INPUT - для вхідних пакетів, OUTPUT для вихідних і FORWARD для перехожих через дану машину до іншої. Пакет, який пройшов відповідний ланцюжок, звичайно (окрім зовсім простих конфігурацій) на підставі деяких правил відправляється в іншу (зокрема, ми будемо сортувати пакети по протоколу на 3 ланцюжка: tcp, udp і icmp). "По дорозі" частину пакетів відкидається (на різних етапах з різних причин), частина (знову ж таки лише підходять під певні правила) успішно виходить з фільтра. Решта (не підійшли ні під одне правило) слідують дії за умовчанням для цього ланцюжка. Зазвичай такою дією роблять DROP або REJECT, щоб пропускати лише пакунки підійшовші під цілком певні правила. До речі, REJECT відрізняється тим, що замість простого знищення пакету його відправникові надсилається повідомлення про недоступність комп'ютера одержувача. Це створює додатковий трафік, але у відповідних випадках призводить до того, що відправник перестає посилати нам пакети (DROP виглядає для відправника як таймаут, тобто пакунки просто йдуть і не приходить ніякого підтвердження, а при REJECT він може порахувати, що наш комьютер недоступний або не існує).
Розглянемо синтаксис основних команд. Тут - ACCEPT, DROP або REJECT.
Установка дії за умовчанням для стандартної ланцюжка:
iptables-P
Створення ланцюжка:
iptables-N
Додавання правила в ланцюжок:
iptables-A-j
Умови можуть бути в т.ч. такі:
-P - dport - sport-s-d-i - тільки для INPUT - icmp-type - тільки для icmp
При цьому допустимо між ключем і значенням ставити знак!, Що означає інверсію. В одному правилі може бути відразу декілька умов.
Тепер розберемо, як складаються прості правила, на прикладі моїх налаштувань. Зауважу, що це настройки для самотньої машини без локальної мережі з доступом в Інтернет по діалапу, так що:
а) усі вихідні (тобто створені локальними процесами) пакети будуть виходити назовні безперешкодно, тому що своїх програм я довіряю;
б) абсолютна більшість вхідних з'єднань буде заборонено;
в) буде відкритий лише 21-й TCP-порт, необхідний для FTP.
Отже, розглянемо мій / etc / rc.d / rc.firewall. Зауважте, що вкладені ланцюжка описуються знизу вгору, тобто стандартні INPUT і OUTPUT будуть описані в кінці.