Skip to main content

Базова настройка iptables



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

Можна, наприклад, зайнятися скануванням відкритих на сервері портів. На основі цього можливо визначення використовуваних сервісів, їх версії, назви і версії операційної системи. Далі - підбір вразливостей до них. Або деякі icmp - повідомлення можуть видати зайву інформацію.



Загалом, опис того, навіщо потрібно налаштовувати мережевий екран, гідно окремої статті, яких незліченна безліч. І вже якщо ви читаєте цю статтю, то безумовно знаєте, навіщо вам це потрібно. ;)

Як і всі статті на сайті, ця інструкція написана на основі особистого досвіду, а-ля «я роблю так», хтось інший так.



Зміст статті:

Установка необхідних компонентів

І так, в системі вже присутній головний зі списку необхідних інструмент - iptables. Але цього не достатньо. Також знадобляться фільтр tarpit і iptables-persistent, щоб завантажувати правила при старті системи.

  # Aptitude install iptables-persistent xtables-addons-dkms 

Під час установки persistent буде задано два питання про збереження поточних правил. Можна відповісти «Так» і тоді в папці / etc / iptables / rules / будуть створені потрібні файли з правилами, які ми відредагуємо.

Редагування правил для ip версії 4

Відкриваємо файл /etc/iptables/rules.v4 в улюбленому редакторі. Ви побачите рядки, що встановлюють політику за замовчуванням для ланцюжків. У всіх значеннях вона матиме значення accept. Для ланцюжка FORWARD встановлюємо політику DROP. Ми ж не роутер і не комп'ютер, що перенаправляє трафік кудись ще. :) Решта не міняємо.


  * filter
 : INPUT ACCEPT [0: 0]
 : FORWARD DROP [0: 0]
 : OUTPUT ACCEPT [0: 0]
 COMMIT 

Всі інші правила будемо додавати перед рядком COMMIT. І в першу чергу додаємо правило, яке дозволяє локальний трафік.

  -A INPUT -i lo -j ACCEPT 

Далі правило, яке дозволяє все вже встановлені активні сполуки як для tcp, так і для udp протоколів. Це потрібно для правильної роботи мережі, так як без нього відповіді на вихідні з'єднання будуть відхилятися.

  -A INPUT -m state --state RELATED, ESTABLISHED -p all -j ACCEPT 

Тепер необхідно додати правило, яке дозволяє установку нових вхідних з'єднань до певних сервісів. У мене це web-сервер і поштовий, а також ssh.

Важливе зауваження! Завжди додавайте дозволяє правило для ssh, щоб потім не втратити доступ до сервера після застосування правил.

Сюди можна додавати і інші порти, розділяючи комою. Розширення multiport дозволяє вказати кілька портів, щоб не плодити майже однакові правила для кожного окремо. ;)

  -A INPUT -m state --state NEW -p tcp -m multiport --dport 22,25,80,443 -j ACCEPT 

Якщо у вас на сервері тільки один сервіс, для якого потрібно відкрити один порт, то правило буде таким:

  -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT 

Також вам може знадобитися відкрити якісь udp порти. Відмінність від вищенаведених правил буде тільки в тому, що замість -p tcp слід вказати -p udp.

А при додаванні наступного правила знадобиться фільтр tarpit, який ми встановили з пакетом xtables-addon-dkms. Якщо коротко, то він створює пастку для вхідних з'єднань, не посилаючи нічого у відповідь, але утримуючи з'єднання, що витрачає ресурси підключився клієнта, але не сервера. Детальніше про tarpit можна дізнатися на сайті OpenNET. А поки додаємо правило для всіх інших вхідних з'єднань.

  -A INPUT -p tcp -m tcp -j TARPIT 

Важливо мати на увазі, що пастка працює тільки з tcp. Подібним чином можна реалізувати бан по ip на рівні iptables, замість стандартного drop. На жаль, для udp він не придатний. Тому забороняємо всі інші входять udp - пакети, для яких не створили виключення раніше.

  -A INPUT -p udp -j DROP 

І беремося за icmp. Тут в якості типу icmp можна вказати як код, так і еквівалентну йому назву. У мене - код. :)

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

  -A INPUT -p icmp --icmp-type 0 -j ACCEPT 

Потім входять icmp - повідомлення про недоступність адресата.

  -A INPUT -p icmp --icmp-type 3 -j ACCEPT 

І що входять луна-запити, якщо хтось пінг наш сервер.

  -A INPUT -p icmp --icmp-type 8 -j ACCEPT 

А також повідомлення про закінчення часу дії пакета.

  -A INPUT -p icmp --icmp-type 11 -j ACCEPT 

Це необхідний мінімум повідомлень для коректної роботи мережі. Можливо, вам знадобляться інші коди . Як їх вирішити, ви вже знаєте. :)

Тепер беремося за створення правил для вихідних icmp повідомлень. Ці правила виглядають схожими, але ланцюжком буде вже OUTPUT. Тому описувати їх немає сенсу.

  -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
 -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT
 -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
 -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
 -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT 

Крім дванадцятого. Воно дозволяє відправку повідомлення про невірний параметрі (помилка в IP-заголовку або відсутня необхідна опція).

Всі інші вихідні ICMP забороняємо, щоб сервер не бовкнув зайвого.

  -A OUTPUT -p icmp -j DROP 

На цьому все. Зберігаємо файл /etc/iptables/rules.v4, активуємо правила командою:

  cat /etc/iptables/rules.v4 |  iptables-restore -c 


Як ви оціните статтю?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (6 оцінок, середнє: 4,17 з 5)
Завантаження ...

Додати коментар

Ваш e-mail не буде опублікований.