Посібник для початківців для iptables, брандмауер Linux
Iptables - це надзвичайно гнучка утиліта брандмауера, створена для операційних систем Linux. Якщо ви новачок у Linux або системний адміністратор, то, мабуть, якийсь спосіб, який iptables може бути дуже корисним для вас. Читайте далі, як ми покажемо вам, як налаштувати найбільш універсальний брандмауер Linux.
Фото: ezioman.
Про iptables
iptables - це утиліта брандмауера командного рядка, яка використовує ланцюжки політики для дозволу або блокування трафіку. Коли з'єднання намагається встановити себе у вашій системі, iptables шукає правило у списку, з яким він відповідає. Якщо вона не знайдена, вона використовує дію за умовчанням.
iptables майже завжди поставляється на будь-якому дистрибутиві Linux. Щоб оновити / встановити його, просто знайдіть пакунок iptables:
sudo apt-get встановити iptables
Існують альтернативи графічного інтерфейсу для iptables, як Firestarter, але iptables не так вже й важко, як тільки у вас є кілька команд вниз. Ви хочете бути надзвичайно обережними під час налаштування правил iptables, особливо якщо ви SSH запустили на сервер, оскільки одна неправильна команда може назавжди закрити вас, поки вона не буде вручну виправлена на фізичній машині.
Типи ланцюгів
iptables використовує три різні ланцюги: вхідний, прямий і вихідний.
Вхідні дані - Цей ланцюжок використовується для керування поведінкою вхідних з'єднань. Наприклад, якщо користувач намагається SSH на ваш ПК / сервер, iptables намагатиметься зрівняти IP-адресу та порт із правилом у ланцюжку введення.
Вперед - Цей ланцюжок використовується для вхідних з'єднань, які фактично не доставляються локально. Подумайте про маршрутизатор - дані завжди надсилаються до нього, але рідко фактично призначені для самого маршрутизатора; дані просто пересилаються на ціль. Якщо ви не виконуєте маршрутизацію, NATing або щось інше у вашій системі, що вимагає переадресації, ви навіть не використовуватимете цей ланцюжок.
Є один надійний спосіб перевірити, чи ваша система використовує / потребує ланцюга вперед.
iptables -L -v
Знімок екрана наведений на сервері, який працює протягом декількох тижнів і не має обмежень на вхідні або вихідні з'єднання. Як бачите, вхідний ланцюжок обробив 11 Гб пакетів, а вихідний ланцюжок обробив 17 Гб. З іншого боку, ланцюг вперед не потребує обробки одного пакета. Це пояснюється тим, що сервер не виконує жодного пересилання або використовується як прохідний пристрій.
Вихідні дані - Цей ланцюжок використовується для вихідних з'єднань. Наприклад, якщо ви спробуєте скористатися послугами howtogeek..
Застереження
Незважаючи на те, що pinging зовнішнього хосту здається, що щось, що буде потрібно тільки пройти вихідний ланцюжок, майте на увазі, що для повернення даних, ланцюжок введення буде використовуватися також. При використанні iptables, щоб заблокувати вашу систему, пам'ятайте, що багато протоколів вимагатимуть двостороннього зв'язку, тому і вхідні, і вихідні ланцюги повинні бути правильно налаштовані. SSH - це загальний протокол, який люди забувають на обох ланцюгах.
Поведінка за замовчуванням за умовчанням
Перш ніж входити і конфігурувати конкретні правила, потрібно вирішити, яким буде типова поведінка трьох ланцюжків. Іншими словами, що ви хочете зробити iptables, якщо з'єднання не відповідає існуючим правилам?
Щоб дізнатися, що ваші ланцюги політики наразі налаштовані для виконання неперевершеного трафіку, запустіть iptables -L
команду.
Як ви бачите, ми також використовували команду grep, щоб дати нам чистіший висновок. На цьому скріншоті, наші ланцюги в даний час вважається прийняти трафік.
Більше разів, ніж не, ви хочете, щоб ваша система приймала з'єднання за замовчуванням. Якщо ви раніше не змінили правила ланцюжка політики, це налаштування вже має бути налаштовано. У будь-якому випадку, ось команда для прийому з'єднань за замовчуванням:
iptables - policy INPUT ACCEPT
iptables - policy OUTPUT ACCEPT
iptables --політика FORWARD ACCEPT
За умовчанням для правила прийняття, ви можете використовувати iptables для заборони конкретних IP-адрес або номерів портів, продовжуючи приймати всі інші з'єднання. Ми отримаємо ці команди за хвилину.
Якщо ви бажаєте заперечувати всі з'єднання та вручну вказувати, які з них ви хочете дозволити підключення, ви повинні змінити політику за замовчуванням ваших ланцюжків для падіння. Можливо, це буде корисним лише для серверів, які містять конфіденційну інформацію, і тільки коли вони мають однакові IP-адреси.
iptables - policy INPUT DROP
iptables - policy OUTPUT DROP
iptables - policy FORWARD DROP
Відповіді на конкретні підключення
З налаштованою ланцюговою політикою за замовчуванням, ви можете почати додавати правила до iptables, щоб він знав, що робити, коли він стикається з з'єднанням з або з певним IP-адресою або портом. У цьому посібнику ми розглянемо три найосновніші та найчастіше використовувані "відповіді".
Прийняти - Дозволити з'єднання.
Падіння - Відкиньте зв'язок, діяйте так, як ніколи не бувало. Це найкраще, якщо ви не хочете, щоб джерело реалізувало вашу систему.
Відхилити - Не дозволяйте з'єднання, але відправте повідомлення про помилку. Це найкраще, якщо ви не хочете, щоб певне джерело підключалося до вашої системи, але ви хочете, щоб вони знали, що ваш брандмауер заблокував їх.
Найкращий спосіб показати різницю між цими трьома правилами - показати, як він виглядає, коли комп'ютер намагається переписати машину Linux з iptables, налаштованим для кожного з цих параметрів..
Дозволити підключення:
Видалення з'єднання:
Відхилення з'єднання:
Дозвіл або блокування певних з'єднань
З налаштованими ланцюжками політики тепер ви можете налаштувати iptables, щоб дозволяти або блокувати конкретні адреси, діапазони адрес і порти. У цих прикладах ми встановимо підключення до DROP
, але ви можете перемкнути їх Прийняти
або REJECT
, залежно від ваших потреб і способів налаштування ланцюжків політики.
Примітка: У цих прикладах ми будемо використовувати iptables -A
додати правила до існуючого ланцюжка. iptables запускається у верхній частині списку і проходить через кожне правило, поки не знайде відповідник. Якщо потрібно вставити правило над іншим, можна скористатися iptables -I [ланцюг] [номер]
щоб вказати номер, який він повинен бути в списку.
З'єднання з однієї IP-адреси
Цей приклад показує, як блокувати всі з'єднання з IP-адреси 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
З'єднання з діапазону IP-адрес
Цей приклад показує, як блокувати всі IP-адреси в діапазоні мереж 10.10.10.0/24. Для визначення діапазону IP-адрес можна використовувати мережеву маску або стандартну нотку.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
або
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Підключення до конкретного порту
Цей приклад показує, як блокувати SSH-з'єднання від 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Ви можете замінити "ssh" на будь-який номер протоколу або порту. The -p tcp
частина коду повідомляє iptables, який тип з'єднання використовує протокол. Якщо ви блокували протокол, який використовує UDP, а не TCP, то -p удп
замість цього.
Цей приклад показує, як блокувати з'єднання SSH з будь-якої IP-адреси.
iptables -A INPUT -p tcp -dport ssh -j DROP
Стани з'єднання
Як ми вже згадували раніше, багато протоколів вимагатимуть двостороннього зв'язку. Наприклад, якщо ви хочете дозволити SSH підключення до вашої системи, вхідні та вихідні ланцюги потребуватимуть правила до них. Але що, якщо ви бажаєте, щоб у вашу систему було допущено лише SSH? Не додавати правило до вихідного ланцюга також дозволить вихідні SSH спроби?
Ось тут приходять стани з'єднання, які дають вам можливість дозволити двосторонній зв'язок, але дозволяють встановлювати лише один спосіб з'єднання. Погляньте на цей приклад, де дозволено SSH-з'єднання від 10.10.10.10, але SSH-з'єднання до 10.10.10.10 не є. Однак системі дозволяється відправляти назад інформацію по SSH, поки сеанс вже встановлений, що робить можливим SSH-зв'язок між цими двома хостами.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW, ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m стан - стан ESTABLISHED -j ACCEPT
Збереження змін
Зміни, внесені до ваших правил iptables, будуть списані наступного разу, коли служба iptables буде перезапущено, якщо ви не виконаєте команду, щоб зберегти зміни. Ця команда може відрізнятися залежно від вашого розповсюдження:
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service iptables збереження
Or
/etc/init.d/iptables зберегти
Інші команди
Перерахуйте поточні налаштовані правила iptables:
iptables -L
Додавання -v
дасть вам інформацію про пакет і байт, а також додасть -n
перерахує все числово. Іншими словами - імена хостів, протоколи та мережі вказані як числа.
Щоб очистити всі поточні налаштовані правила, можна виконати команду flush.
iptables -F