Використання iptables: «відкрити порт» у віртуальну розробку

Епоха локальної розробки пішла в історію. Розвиток інтернету зумовило об’єктивну необхідність розподіленої обробки інформації. Віртуалізація призвела до того, що один комп’ютер вже не має значимої перспективи. Розробник повинен мати повноцінний комплект віртуальних машин з будь-якого фізичного пристрою. Налаштування віртуальності і технічної можливості роботи через iptables стала популярним і важливим фактором при створенні сучасних інформаційних систем.

Сучасна розробка інформаційних систем

Високі технології при всіх своїх досягненнях засновані на жорстких синтаксичних конструкціях. Синтаксис мови програмування або конфігураційного файлу – менше зло, ніж жорсткість концепції розвитку комп’ютерного справи в цілому.

Спроба вивести синтаксис і семантику через гіпертекст не привела до якісного стрибка, але зробила необхідним перевести розробку в «розподілений» статус, в хмари і віртуальність.

Робота на одному комп’ютері та/або сервері – це обмеження. Розробник повинен мати арсенал операційних систем, середовище розробки і тестування. Розробник – це розподілена команда фахівців різної кваліфікації.

Ідея iptables пройшла довгий шлях за короткий час. Сьогодні вона надає досить зручний інструментарій для організації технологічних процесів розробки програмного забезпечення та його використання.

За допомогою iptables відкрити порт для конкретного проекту – не проблема. Обмежити (закрити) доступ – просто і зручно. Фаєрвол firewalld – це CentOS і iptables. Відкрити порт тут можна спеціальним інструментом (утиліта). Це зручно, але не так практично як в Debian за допомогою командного рядка.

Вибір операційної системи сімейства линуксоидов в контексті вирішення завдання розподілу портів має значення для системного адміністратора в контексті налаштування, але більш істотним є розуміння суті питання: як через iptables відкрити порт і забезпечити можливість роботи.

Комутатор і сервер

Перш ніж починати роботу з Linux-сервером, потрібно приділити серйозну увагу налаштування комутатора, що забезпечує вихід в інтернет і внутрішню локальну мережу.

Це комутатор локальної мережі для невеликої компанії або домашнього застосування. Великий бізнес використовує більш технологічне устаткування, але в будь-якому випадку: пристрій виходу в інтернет і організації локальної мережі повинне пропускати всі пакети і мати відкритими всі порти, які будуть необхідні.

Linux-сервер – це iptables. Як відкрити певні порти показують правила входу, виходу і транзиту (INPUT, OUTPUT і FORWARD). Правил не так багато, параметрів у них трохи більше, але комбінацій і можливостей вони надають достатню кількість. За допомогою iptables: відкрити порт – не проблема, працювати на вході (PREROUTING) або на виході (POSTROUTING) – теж.

Всі правила Linux-сервера еквівалентні: умова (критерій), опис, дія і лічильник. Зміст правила залежить від його застосування.

Фізичний сервер віртуальних машин

Немає різниці між робочим комп’ютером і сервером, але завжди краще не завантажувати сервер приватними завданнями і робити його робочим комп’ютером конкретного розробника.

В ідеалі сервер повинен мати графічну оболонку і «вести» власний робочий процес, поза адміністративного (файлове сховище, хостинг, веб-ресурс, …). Зокрема, для вирішення задачі: самонавчальний парсинг і пошук інформації, файлове сховище і кілька віртуальних машин хорошим рішенням буде комп’ютер з встановленою системою Debian & Proxmox VE.

Тут потрібно iptables. Відкрити порт для кожної віртуальної машини – це півсправи. Потрібно налаштувати мости, маршрути та організувати роботу самого сервера, як самостійного комп’ютера, керуючого Apache, MySQL, PHP і браузером. Потрібно також налаштувати Proxmox VE, як систему віртуальних машин, доступних в локальній мережі і за її межами.

Це практичний (працюючий) приклад для iptables Debian. Як відкрити порт показано на безлічі прикладів. Це не оптимальний набір правил, але реально працює. Деякі правила дублюють один одного, але їх зіставлення дозволяє зрозуміти, як і що потрібно застосувати в конкретній ситуації.

Примітка. Позиції enp0s31f6, 192.168.100.0, 192.168.100.18 і 192.168.100.1 повинні бути замінені на реальний мережний інтерфейс, реальну мережу, реальні IP-адресу сервера IP-адресу шлюзу.

Порядок і правила роботи з iptables

Якщо потрібно внести зміни в існуючу систему, слід зберегти всі діючі правила і мережеві настройки. У працюючій системі при будь-яких обставин нічого робити не можна. Кращий варіант – вести роботи на новому сервері, а по їх завершенні поміняти машини.

Краще починати з чистого аркуша. Через ключі -F і -X iptables відкрити порт не вийде, але таблиця правил очиститься і можна буде якісно виконати адміністративну роботу. Фаєрвол (ufw) краще відключити відразу. Можна почистити таблиці nat – це теж не буде зайвим.

Далі слід обов’язкове відкриття доступу ssh (через iptables відкрити порт 22). Сервер зобов’язаний бути керований дистанційно. Дозволити пінги і перевірити їх також обов’язково. Адміністратор сервера повинен бути впевнений в тому, що фізично (технічно) обладнання працює справно. А якщо виникає помилка, то вона буде лежати в правилах iptables. Відкрити порти pop, ftp, http, https і інші можна загальним правилом (multiport) або окремими.

Важливо врахувати, що правила мають значення не тільки за змістом, але і по послідовності вказівки. В контексті використання Proxmox VE обов’язково дотримати його вимоги (зокрема, через iptables відкрити порт 8006).

Портів 80 (8080) і 443 слід приділити особливу увагу. Наприклад, iptables (відкрити порти http & https) забезпечує трафік веб-ресурсів. Пошта і FTP доступ не критичні, якщо вони не включені в спектр функціональності сервера.

Правила iptables діють негайно. Ключ «-A» додає правило, а ключ «-D» видаляє його. Зберегти набір створених правил:

  • iptables-save > /etc/iptables.rules.

Відновити, раніше створений набір правил:

  • iptables-restore < /etc/iptables.rules.

Щоб включити iptables і відкрити порти при завантаженні системи, досить записати про це при піднятті основного інтерфейсу в файлі /etc/network/intefaces:

Правила iptables – це не тільки порядок роботи на сервері і його безпеку. Це оптимізація на практиці. Правила iptables визначають конкретний спектр пакетів, який буде обробляти сервер, конкретизує його функціональність і управляє відвідувачами. За допомогою iptables можна налаштувати оптимальний режим адміністрування та користування машиною.