Iptables ubuntu server, for skill

Для початку визначимося з термінологією:
iptables - утиліта командного рядка, інтерфейс управління брандмауером.
Правило - складається з критерію, дії і лічильника.
Ланцюжок - упорядкована послідовність правил.
Таблиця - сукупність базових і призначених для користувача ланцюжків.
Більш докладний висновок
Робота з правилами
* Номер правила можна подивитися в докладному виведенні
Очистити таблицю від правил
Поміняти стан політики
Включення пересилання пакетів між мережевими інтерфейсами
Для цього потрібно раскоментіровать відповідні рядки в файлі /etc/sysctl.conf
І застосувати зміни командою
Маємо сервер з Ubuntu server 16.04.01 і двома мережевими інтерфейсами:
ens32 IP 192.168.1.51/24 - дивиться в зовнішню мережу.
ens33 IP 192.168.100.2/24 - дивиться у внутрішню мережу.
У внутрішній мережі є клієнтська машина з Windows 10, що має один мережевий інтерфейс з IP 192.168.100.11/24
За замовчуванням у всіх ланцюжках використовується роздільна політика.
Змінимо політику на забороняє для ланцюжків INPUT і FORWARD
Таким чином ми заборонили будь-які вхідні з'єднання до маршрутизатора (INPUT DROP), а також вхідні і витікаючі з'єднання для внутрішньої мережі (FORWARD DROP) у зовнішнє.
Важливо! Утиліта iptables використовується для роботи з протоколом IPv4. Для роботи з протоколом IPv6 потрібно використовувати утиліту ip6tables. Так як в мережі не планується використання протоколу IPv6, заборонимо по ньому будь-які сполуки
Дозволимо будь-який вхідний трафік на петлевом інтерфейсі
Правила для зовнішньої мережі
Коли маршрутизатор посилає будь-якої пакет із запитом на з'єднання з зовнішнього інтерфейсу, спрацьовує роздільна політика ланцюжка OUTPUT, пакет благополучно проходить. Потім хост, з яким ініціюється з'єднання, посилає у відповідь пакет, який потрапляє під дію забороняє політики в ланцюжку INPUT. З'єднання не проходить. Для того щоб з'єднання проходили робимо наступне:
Дозволимо підтримку встановлених раніше з'єднань
Дозволимо перевірку зв'язку (ping) на зовнішньому інтерфейсі
Правила для внутрішньої мережі
Додамо правило NAT, для маскування пакетів йдуть з внутрішньої мережі в зовнішню
Або так для динамічного IP на зовнішньому інтерфейсі
Дозволимо підтримку встановлених раніше з'єднань
Дозволимо перевірку зв'язку (ping) з внутрішньо мережі в зовнішню
Дозволимо dns запити до сервера з IP 192.168.1.1
Дозволимо web трафік з внутрішньо мережі в зовнішню
Публікація внутрішніх ресурсів в зовнішню мережу
Опублікуємо на зовнішньому інтерфейсі порт 33899, на внутрішній ресурс з IP 192.168.100.11 порт 3389
Опублікуємо на зовнішньому інтерфейсі порт 8080, на локальний web сервер, що працює на маршрутизаторі, на внутрішньому інтерфейсі з IP 192.168.100.2 порт 80. Також цей веб сервер повинен бути доступний хостам з внутрішньо мережі по порту 80.
Збереження правил в файл
Все вище зазначені правила зберігаються в ОЗУ і працюють до перезавантаження. Для збереження правил в файл використовується утиліта iptables-save.
Активація правил при завантаженні
Для відновлення правил з файлу використовується утиліта iptables-restore.
Додаємо скрипт /etc/network/if-pre-up.d/iptables
Додаємо можливість виконання
Правила описані вище мають детальний вид для того, щоб більш наочно показати роботу брандмауера. Запис може бути спрощена шляхом вказівки тільки обов'язкових параметрів.