Терміни, використані у цьому документі

Документ містить кілька термінів, які треба колись пояснити, тому що ви зіштовхнетеся із ними.

DNAT : від анг. Destination Network Address Translation, Зміна Мережевої Адреси Отримувача.
DNAT — це зміна адреси призначення у заголовці пакета. Найчастіше використовують у парі з SNAT. Основне застосування — використання єдиної реальної адреси IP кількома комп'ютерами для виходу до Інтернету та для надання додаткових мережевих послуг зовнішнім клієнтам.

Потік (Stream) : під цим терміном мається на увазі з'єднання, крізь яке передаються і приймаються пакети. Я використав цей термін для позначення з'єднання, якими передається щонайменше мірою 2 пакета в обох напрямах. Коли це стосується TCP, це означатиме з'єднання, крізь яке передається SYN пакет і далі приймається SYN/ACK пакет. Але це також може позначати й передачу SYN пакета і прийом повідомлення ICMP Host unreachable. Інакше кажучи, використовую цей термін у досить широкому діапазоні застосувань.

SNAT : від анг. Source Network Address Translation — Зміна Мережевої Адреси Відправника.
SNAT — це зміна вихідного адресу в заголовку пакета. Основне застосування — використання єдиної реальної адреси IP кількома комп'ютерами для виходу до Інтернету. В теперішній час діапазон реальних адрес IP, за стандартом IPv4, недостатньо широкий, тож не вистачає на всіх (перехід на IPv6 дозволить позбутись цієї проблеми).

Стан (State) : під цим терміном мається на увазі стан, у якому знаходиться пакет, відповідно до RFC 793 (Transmission Control Protocol), і його трактування у netfilter/iptables. Хочу звернути вашу увагу на той факт, що визначення станів пакетів, як внутрішніх, так і зовнішніх станів, що використовуються Netfilter, в повному обсязі відповідають зазначеному вище в RFC 793.

Простір користувача (User space) : під цим терміном маю на увазі усе, що розміщено поза ядром, наприклад: команда iptables -h виконується поза ядром, тоді як команда iptables -A FORWARD -p tcp -j ACCEPT виконується (частково) у просторі ядра, оскільки вона додає нове правило до наявного набору.

Простір ядра (Kernel space) : більшою або меншою мірою є твердженням, зворотним до "Простір користувача". Тобто виконання коду у ядрі.

Userland : див. "Простір користувача".

Вступ

Netfilter/iptables - каркас для побудови потужних мережевих екранів в ОС Лінукс. Їх застосовують для:

  • Побудови мережевих фільтрів, які можуть спиратися (а можуть і ні) на приналежність пакетів до конкретних сеансів зв'язку.
  • Використання трансляції мережевих адрес (NAT) і (masquerading) для реалізації спільного доступу в Інтернет за відсутності достатнього числа реальних адрес ІР та для приховування внутрішньої структури мережі.
  • Використання NAT для реалізації прозорих сервісів проксі.
  • Побудови складних маршрутизаторів з підтримкою якості обслуговування (QoS) і політик за допмогою програм tc та iproute2.
  • Маніпулювання пакетами (mangling), наприклад, зміна бітів TOS/DSCP/ECN заголовків пакетів IP.