Налаштування фаервола за допомогою iptables за п’ять хвилин, записки програміста

Я кілька разів стикався з тим, що навіть недурні в общем-то люди роблять зовсім непрощенні помилки. Наприклад, відкривають всьому інтернету порт, на якому крутиться база даних. Часто так буває у початківців DevOps, які все життя писали код, а тепер в їх обов'язки входить ще і настройка серверів. У мережі є хороші туторіали по базовому налаштуванні фаєрвол в Linux і інших * nix, але часто це простирадла на безліч екранів. Так що, сподіваюся, цей більш лаконічний туториал кому-небудь стане в нагоді.

Важливо! Дуже легко помилково так зафаерволіть машину, що ви на неї більше не зайдете. Особливо це стосується хмарних хостингів. Наприклад, якщо в AWS ви закриєте всі порти з 1024 по 65536, у машини після ребута чомусь виявляються закриті взагалі всі порти. Якщо ви хостів в хмарах, налаштовуйте краще фаєрвол через надається хостингом веб-інтерфейс.

Невелике зауваження по термінології. Фаєрвол, вбудований в ядро ​​Linux, називається Netfilter, а iptables - утиліта для управління цим фаєрволом. Багато хто помилково вважає, що фаєрвол називається iptables. Це не так. Говорячи що-небудь на зразок «я фільтрую пакети за допомогою iptables», ви показуєте оточуючим свою безграмотність.

Взагалі, які приблизно завдання можна вирішувати за допомогою Netfilter:

Зазначу, що утиліта iptables мені особисто перший час здавалася виключно незручною в порівнянні з ipfw під FreeBSD. На щастя, попрацювавши з нею якийсь час, все це безліч прапорів на кшталт -A, -D, -j і інших стають звичними, так що, наберіться терпіння. Розглянемо основні команди.

Показати всі правила:

Ви можете помітити, що в Netfilter є якісь «ланцюжка» (chains) - як мінімум INPUT, OUTPUT і FORWARD. У мене особисто на машині є ще й ланцюжок DOCKER. На перших порах можна думати про перших двох, як про все вхідному й вихідному трафіку відповідно, а про решту тимчасово забути. Велика ймовірність, що вони взагалі ніколи вам не знадобляться.

Видалити всі правила:

Змінити політику (поведінка за умовчанням) ланцюжка:

iptables -P INPUT DROP
iptables -P INPUT ACCEPT

iptables-restore

Тепер розглянемо кілька практичних прикладів. Так, наприклад, виглядає емуляція нетспліта в тесті, перевіряє поводження додатка, в якому використовується Akka Cluster:

run # 40; node1, s "iptables -A INPUT -s $ node2 -j DROP" # 41;
run # 40; node1, s "iptables -A INPUT -s $ node3 -j DROP" # 41;
run # 40; node1, s "iptables -A OUTPUT -d $ node2 -j DROP" # 41;
run # 40; node1, s "iptables -A OUTPUT -d $ node3 -j DROP" # 41;

Відновлення відбувається точно так само, тільки прапор -A замінюється на прапор -D.

Інший приклад. Потрібно з'ясувати, які порти прослуховуються на машині, і закрити зайві. Заходимо на машину і говоримо:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID / Prog name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3210 / nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN +1789 / epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 797 / sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 990 / postgres

Nginx і SSHd дивляться в інтернет, це нормально. PostgreSQL слухає тільки локальний інтерфейс, тому з ним теж проблем немає. А ось epmd стирчить назовні (можна перевірити telnet'ом з іншої машини), і це нікуди не годиться. Можна закрити лише порт 4369. Як це зробити, було показано вище. Або можна піти ще далі і заборонити всі з'єднання ззовні на порт 81 і старше:

iptables -A INPUT -m multiport \
-p tcp --dports 81. 65535. -s 127.0.0.0 / 8 -j DROP

Тут використовується розширення multiport, що дозволяє вказувати діапазони портів.

Перевіряємо, що все працює. Якщо ОК, зберігаємо правила:

iptables-save> / etc / iptables.rules

Щоб правила підхоплювалися при завантаженні системи, створюємо новий файл /etc/network/if-pre-up.d/iptables:

iptables-restore exit 0

chmod + x / etc / network / if-pre-up.d / iptables

Перевірено, що цей спосіб працює в Ubuntu 14.04 LTS. В Debian теж має працювати. Опис альтернативного способу відновлення правил фаєрвола при старті системи ви знайдете в уже згаданій замітці про OpenVPN.

Додаткові матеріали для тих, хто хоче знати більше про Netfilter:

А як ви налаштовуєте фаєрволи на своїх серверах?

Сподобався пост? Поділися з іншими: