Модуль 3.4: iptables та netfilter
Основи мереж | Складність:
[COMPLEX]| Час: 35–40 хв
Передумови
Розділ «Передумови»Перед початком цього модуля:
- Обов’язково: Модуль 3.1: Основи TCP/IP
- Обов’язково: Модуль 3.3: Мережеві простори імен
- Бажано: Розуміння того, як працюють файрволи.
Що ви зможете робити після цього модуля
Розділ «Що ви зможете робити після цього модуля»Після завершення цього модуля ви зможете:
- Пояснити точки перехоплення netfilter та як правила iptables обробляються (таблиці, ланцюжки, цілі)
- Відстежити, як Kubernetes Services використовують правила iptables для балансування навантаження (режим iptables kube-proxy)
- Написати правила iptables для базової фільтрації пакетів, NAT та перенаправлення портів
- Дебажити проблеми з мережевим з’єднанням, читаючи лічильники iptables та ланцюжки правил
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»iptables — це основний інструмент Linux для фільтрації та зміни пакетів. В Kubernetes він виконує колосальний обсяг роботи:
- Kubernetes Services — ClusterIP та NodePort працюють через правила iptables.
- Network Policies — фільтрація трафіку між подами.
- NAT — завдяки йому контейнери мають доступ до Інтернету.
- Балансування навантаження — стандартний режим роботи kube-proxy.
Якщо сервіси не працюють, поди не бачать один одного або трафік загадково зникає — знання iptables критично необхідне для вирішення проблем.
Архітектура Netfilter
Розділ «Архітектура Netfilter»Netfilter — це підсистема ядра Linux, яка обробляє пакети. iptables — це програма, якою ви налаштовуєте netfilter.
Шлях пакета через ланцюжки (Chains)
Розділ «Шлях пакета через ланцюжки (Chains)» Вхідний пакет │ ▼ ┌──────────────┐ │ PREROUTING │ (Зміна адреси призначення - DNAT) └──────┬───────┘ │ ┌────────────▼────────────┐ │ Рішення про шлях │ └────────────┬────────────┘ ┌───────┴───────┐ ▼ ▼ ┌─────────────────────┐ ┌─────────────────────┐ │ INPUT │ │ FORWARD │ │ (для цього хоста) │ │ (для іншого хоста) │ └──────────┬──────────┘ └──────────┬──────────┘ │ │ ▼ │ Процес на сервері │ │ │ ▼ │ ┌─────────────────────┐ │ │ OUTPUT │ │ │(від цього хоста) │ │ └──────────┬──────────┘ │ │ │ └────────────┬───────────┘ ▼ ┌──────────────┐ │ POSTROUTING │ (Зміна адреси джерела - SNAT/Masquerade) └──────┬───────┘ │ ▼ Вихідний пакетРобота з iptables
Розділ «Робота з iptables»Структура правила
Розділ «Структура правила»iptables -t <таблиця> -A <ланцюжок> <критерій> -j <дія>
Приклад: дозволити вхідний SSH (порт 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Основні дії (Targets)
Розділ «Основні дії (Targets)»- ACCEPT — пропустити пакет.
- DROP — тихо видалити пакет (відправник не отримає відповіді).
- REJECT — видалити пакет і повідомити відправника помилкою.
- LOG — записати інформацію про пакет у лог і передати наступному правилу.
- DNAT/SNAT — зміна IP-адрес.
iptables в Kubernetes
Розділ «iptables в Kubernetes»Kubernetes створює тисячі власних правил. Головна точка входу — ланцюжок KUBE-SERVICES.
Коли ви звертаєтеся до ClusterIP сервісу:
- Пакет потрапляє в
KUBE-SERVICES. - Знаходиться правило для конкретного сервісу.
- Правило перенаправляє пакет на випадковий живий под (використовуючи модуль
statisticдля випадкового вибору). - Відбувається DNAT — адреса сервісу замінюється на реальну адресу пода.
# Подивитися правила Kubernetes (їх буде ДУЖЕ багато)sudo iptables -t nat -L KUBE-SERVICES -n | head -n 20Тест
Розділ «Тест»-
Яка таблиця в iptables відповідає за зміну адрес (NAT)?
Відповідь
Таблиця `nat`. -
Чим відрізняється дія DROP від REJECT?
Відповідь
DROP просто ігнорує пакет, і відправник чекає до тайм-ауту. REJECT відправляє назад повідомлення про те, що доступ заборонено, тому відправник дізнається про це миттєво. -
Який ланцюжок (chain) обробляє пакети, що просто проходять крізь сервер (наприклад, від контейнера до Інтернету)?
Відповідь
Ланцюжок `FORWARD`. -
Яка команда дозволяє зберегти всі поточні правила iptables у файл?
Відповідь
`sudo iptables-save`.
Практична вправа
Розділ «Практична вправа»Завдання: Побачити правила фільтрації в дії.
- Подивіться поточні правила (за замовчуванням їх може не бути):
Terminal window sudo iptables -L -n -v - Тимчасово заблокуйте пінг до самого себе:
Terminal window sudo iptables -A INPUT -p icmp -j DROPping -c 2 127.0.0.1 # Має зависнути - Видаліть це правило:
Terminal window sudo iptables -D INPUT -p icmp -j DROPping -c 2 127.0.0.1 # Має запрацювати - Подивіться на лічильники пакетів (колонки
pktsтаbytes):Terminal window sudo iptables -L -n -v
Критерії успіху: Ви розумієте, як правила впливають на проходження трафіку.
Підсумок
Розділ «Підсумок»- netfilter — двигун у ядрі, iptables — пульт керування.
- 5 ланцюжків покривають весь шлях пакета крізь систему.
- Kubernetes майже повністю покладається на iptables для роботи мережі.
- Порядок правил має значення — пакет перевіряється зверху вниз до першого збігу.
Трек «Мережі» завершено! Тепер ви розумієте, як дані подорожують від вашого браузера до контейнера всередині кластера Kubernetes.
Далі: Розділ 4: Безпека та зміцнення системи (Security/Hardening) — дізнайтеся, як захистити Linux від зламу.