HOWTO Основи роботи з iptables - LINUX для користувачів

howto

Сьогодні я на якийсь час повернуся до витоків мого проекту. Адже спочатку, коли це був не стільки блог, скільки стаціонарний сайт «чисто на HTML», головна його мета була збирати статті, книги, HOWTO і навіть сторінки manpages. Згодом від суто архівного пакет перейшов до більш новинного. Але я не забув про необхідність накопичувати інформацію.

Тому не зміг пройти повз прекрасний HOWTO написаний шановним Ite — «Основи роботи з iptables». Я думаю, що це керівництво буде дуже корисним як системним адміністраторам, так і просто просунутим користувачам, які не бояться командного рядка. Погодьтеся, що купівля квартири без посередників завжди вигідніше, як і оренда житла. Те саме стосується самостійного виконання основних системних завдань. А це потребує певних знань. Ось тому пропоную почитати заховане під катом керівництво. Натисніть на Далі…

Основи роботи з iptables.

Думаю багато адміністраторів Linux стикалися хоча б раз з такою утилітою як iptables, не важливо, що це було: обмеження доступу ззовні, порт-форвардинг або маскарад. Але знайшовши керівництво для конкретного завдання було розчаровано, приклади просто не працювали. У цій статті я спробую розповісти суть роботи цієї утиліти та основи для її успішного застосування.

Таблиці та ланцюжки. У iptables існують 3 таблиці:

filter - Використовується для фільтрації вхідного, транзитного та вихідного трафіку, має 3 ланцюжки INPUT - сюди потрапляє всі вхідні пакети FORWARD - сюди потрапляють пакети призначені іншій машині в мережі OUTPUT - всі вихідні пакети Над пакетами проходять у таблиці filter можна виконувати такі дії: DROP — блокувати пакет ACCEPT —дозволити (пропустити далі) пакет. Це ланцюжок використовується за замовчуванням.

mangle — Таблиця, щоб змінити заголовки пакетів. Має ланцюжки: PREROUTING, FORWARD, OUTPUT, POSTROUTING. У всіх ланцюжків одна роль — вносити зміни в заголовок пакета на різних стадіях руху цього пакета через ланцюжки iptables. Над цими пакетами можна проводити дії TOS, TTL, MARK.

З точки зору iptables трафік буває 3х типів: Вхідний Транзитний Вихідний Рух пакету відбувається в наступному наслідок:

Після проходження nat(PREROUTING), ґрунтуючись на записах mangle(PREROUTING) і nat(PREROUTING), ядро ​​приймає рішення який буде трафік, що входить або транзитним. Якщо трафік виявився транзитним, то йдемо в ланцюжок mangle(FORWARD), якщо вхідним, то в mangle(INPUT). 1. Вхідний трафік — дані, які приймає програма, запущена на комп'ютері 2. Вихідний трафік — трафік, який передає програму через мережу 3. Транзитний трафік - трафік, який проходить через наш комп'ютер іншим (якщо наш комп'ютер працює як маршрутизатор)

Робота з iptables. Тепер після того, як ми маємо уявлення як тече через нас трафік, ми можемо щось з ним зробити.

Основні ключі iptables: -t (-table) - правило вказує таблицю, в яку будуть вноситись зміни, без зазначення цього ключа використовується таблиця filter -A (-append) - додавання нового запису до кінця ланцюжка -D (-delete) - видалення правила -I (-insert) - вставляє правило над ланцюжком із зазначеним номером -R (-replace) - замінює певні критерії ланцюжка з номером -L (-list ) - листинг правил ланцюжка -F (-flush) - видалення всіх правил з ланцюжка -P (-policy) - задати дію за умовчанням, дія будевиконуватися на всі пакети, які не підійшли за будь-якими параметрами до інших правил.

iptables -A -p tcp -s 192.168.1.7/32 -dport 80 -j DROP

iptables -A -p tcp -s 192.168.1.7/32 -dport !80 -j DROP

Будуємо свої правила iptables.

З теорією покінчено, переходимо до практики. Спробуємо налаштувати фаєрвол(ланцюжок filter) Насамперед, коли ви налаштовуєте фаєрвол з нуля, необхідно переконатися, що всі правила порожні, зробити це можна командою: Якщо картина приблизно наступна, то можна приступати до написання своїх правил фільтрації:

# iptables -L Chain INPUT (policy ACCEPT) target prot opt ​​source destination

Chain FORWARD (policy ACCEPT) target prot opt ​​source destination

Chain OUTPUT (policy ACCEPT) target prot opt ​​source destination debian:

Якщо в якомусь із ланцюжків є правило, видалимо їх по одній або скористаємося ключем -F і очистимо ланцюжок повністю приклад:

iptables -F INPUT

Тепер правила порожні, але перш ніж писати нові необхідно встановити політики, як було написано, політики це правила, які обробляють пакет невідповідні не під одне з описаних правил у таблицях.

Яка дія (ACCEPT або DROP) повинна виконуватися над цими пакетами вирішувати вам, проте хочу застерегти, якщо ви налаштовуєте фаєрволл віддалено по ssh, то перш ніж поставити політику DROP на ланцюжок INPUT, напишіть правило, що дозволяє з'єднання до 22 порту TCP:

iptables -A INPUT -p tcp -dport 22 -j ACCEPT

Після чого можна сміливо застосовувати політику DROP на ланцюжок INPUT:

iptables -P INPUT DROP

Після наших маніпуляцій, ланцюжок INPUT має виглядати так:

# iptables -L INPUT Chain INPUT (policy DROP) target prot opt ​​source destination ACCEPT tcp — anywhere anywhere tcp dpt:ssh debian:

iptables -A INPUT -p tcp -dport 80 -s 192.168.1.170 -j ACCEPT

Сервер IMAP працює на 143 TCP-порту, отже правило виглядатиме так:

iptables -A INPUT -p tcp -dport 143 -j ACCEPT

Правило обробки SMTP вхідних пакетів виглядає так:

iptables -A INPUT -p tcp -dport 25 -s 192.168.1.0/32 -j ACCEPT

З поставленим завданням ми розібралися, тепер наш вхідний трафік фільтрується і сервер цілком безпечний, єдине, чого б я змінив, це вхідні з'єднання SSH. Якщо ви не плануєте заходити на ваш сервер з будь-якої точки планети, то я змінив би правило наступним чином:

iptables -R INPUT 1 -p tcp -dport 22 -s 34.1.63.169 -j ACCEPT

Таким чином наш ланцюжок INPUT таблиці filter виглядає так:

# iptables -t filtr -L INPUT Chain INPUT (policy DROP) target prot opt ​​source destination ACCEPT tcp - 34.1.63.169 anywhere tcp dpt:ssh ACCEPT tcp - 192.168. dpt:www ACCEPT tcp — anywhere anywhere tcp dpt:imap2 ACCEPT tcp — 192.168.1.0 anywhere tcp dpt:smtp debian:

Як бачимо прості правила фільтрації, писати дуже легко маючи невелику теоретичну основу.

Насамперед встановимо політику за умовчанням для ланцюжка FORWARD в DROP:

iptables -P FORWARD DROP

Потім нам необхідно, щоб пакети проходять через ланцюжок FORWARD таблиці filter фільтрувалися таким, щоб усі користувачі мережі 192.168.1.0/24 мали доступ до 80 та 110 портів tcp:

iptables -A FORWARD -s 192.168.1.0/24 -p tcp -m multiport -dports 80,110 -i eth0 -j ACCEPT

тут -m multiport -dports вказує, що ми будемо перераховувати портичерез кому, а -i eth0, що трафік буде йти з інтерфейсу локальної мережі. Наступне правило дозволяє ходіння у зворотний бік, коли клієнти локальної мережі отримуватимуть дані з інтернету:

iptables -A FORWARD -d 192.168.1.0/24 -p tcp -m multiport -sports 80,110 -i eth1 -j ACCEPT

Тепер правила для хоста 192.168.1.2:

І тепер додаємо найчарівніше правило, правило маскараду в ланцюжок POSTROUTING таблиці nat: iptables -t nat -A POSTROUTING -o eth1 -j

Під кінець опублікую таблиці filter і nat:

# iptables -t filtr -L Chain INPUT (policy DROP) target prot opt ​​source destination ACCEPT tcp - 34.1.63.169 anywhere tcp dpt:ssh ACCEPT tcp - 192.168.1.1.1. :www ACCEPT tcp — anywhere anywhere tcp dpt:imap2 ACCEPT tcp — 192.168.1.0 anywhere tcp dpt:smtp

Chain FORWARD (політика DROP) target prot opt ​​source destination ACCEPT tcp - 192.168.1.0/24 anywhere multiport dports www,pop3 ACCEPT tcp - anywhere 192.168.1.0/24 multiport sports>ACCEPT all - 192.168.1.2 anywhere ACCEPT all - anywhere 192.168.1.2

Chain OUTPUT (policy ACCEPT) target prot opt ​​source destination debian:

# iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt ​​source destination

Chain POSTROUTING (policy ACCEPT) target prot opt ​​source destination MASQUERADE all — anywhere anywhere

Chain OUTPUT (policy ACCEPT) target prot opt ​​source destination debian:

.end Тепер користувачі задовольняються інтернетом, а ми заслуженою банкою пива У статті звичайно описані далеко не всі можливості програми iptables, мабуть тільки "найпопулярніші", у статті не описано як працювати зі станамипакета(NEW, RELATED, ESTABLISHED), не описана роботи з таблицею mangle та ще багато всього, я залишаю вивчення цього на вас, на додаток кину пару посилань:

1. http://www.opennet.ru/docs/RUS/iptables/#NATTABLE - дуже корисний ресурс, описи повної роботи iptables 2. http://iptables.ru/ - покрокове керівництво для лінивих 3. http://posix.ru/network/iptables/ - теж непогане керівництво