Основи iptables загальні правила і команди брандмауера

Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!

Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив

- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I

Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!

Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!

Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!

Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.

Задайте питання в службу підтримки 24/7/365

Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями

Як користуватися цією настановою

Для початку потрібно встановити iptables на свій сервер.

Більшість описаних в керівництві правил скидають вхідний трафік згідно з політикою за замовчуванням (DROP). Ви можете вибірково розблокувати вхідний трафік самостійно.

Вам необов'язково виконувати все керівництво по порядку. Знайдіть розділ, який містить необхідні вам інструкції, і використовуйте запропоновані в ньому правила. В основному, розділи керівництва ніяк не пов'язані один з одним.

При необхідності ви можете просто скопіювати і вставити запропоновані тут приклади правил, попередньо скоригувавши їх.

Запам'ятайте: порядок правил у файлі має величезне значення! Кожна команда iptables використовує прапор -A, щоб вставити правило в кінець ланцюжка. Якщо ви хочете вибрати місце, яке буде займати правило в ланцюжку, використовуйте прапор -I. Щоб помістити правило в початок ланцюжка, просто не вказуйте в команді його номер.

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

Щоб перевірити поточний набір правил iptables, використовуйте команди:

sudo iptables -S
sudo iptables -L

збереження правил

Правила Iptables скидаються після перезавантаження сервера. Щоб вони використовувалися на постійній основі, їх потрібно зберегти вручну.

Збереження правил в Ubuntu

В Ubuntu правила зберігаються за допомогою пакета iptables-persistent. Встановіть цей пакет:

sudo apt-get install iptables-persistent

Під час установки буде запропоновано зберегти поточний набір правил.

Якщо ви оновили правила і хочете зберегти їх, введіть команду: е

sudo invoke-rc.d iptables-persistent save

Збереження правил в CentOS 6 і старіших версіях

Примітка. CentOS 7 за умовчанням використовує FirewallD.

У CentOS 6 і старіших версіях можна використовувати скрипт ініціалізації iptables, щоб зберегти файл:

sudo service iptables save

Поточний набір правил iptables буде збережений в / etc / sysconfig / iptables.

Ця тема докладно розглянута в керівництві Висновок і видалення правил IPTables.

Загальні правила IPTables

В даному розділі ви знайдете найпоширеніші правила і команди IPTables.

Підтримка інтерфейсу зворотного петлі

Інтерфейс зворотного петлі (також називається lo) - це інтерфейс, який комп'ютер використовує для підключення до мережі до самого себе.

Щоб дозволити трафік на інтерфейс зворотнього петлі, виконайте наступні команди:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Дозвіл існуючих і пов'язаних з ними вхідних підключень

Мережевий трафік в цілому повинен бути двостороннім (вхідний і вихідний). Потрібно додати правило брандмауера, яке дозволяє існуючі з'єднання і пов'язаний з ними вхідний трафік, щоб сервер підтримував зворотний трафік вихідних з'єднань, ініційованих самим сервером.

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT

Дозвіл існуючих вихідних з'єднань

Щоб дозволити серверу підтримувати вихідний трафік існуючих з'єднань, використовуйте команду:

sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Зовнішня і внутрішня мережа

З огляду на, що eth0 - зовнішня мережа, а eth1 - внутрішня мережа, наступне правило налаштує їх взаємодія:

sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Скидання недійсних пакетів

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

sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

sudo iptables -A INPUT -s 15.15.15.51 -j DROP

У даній команді -s ​​15.15.15.51 вказує джерело з'єднань, який потрібно заблокувати.

Примітка. Вказати IP джерела можна в будь-якому правилі брандмауера, включаючи allow.

sudo iptables -A INPUT -s 15.15.15.51 -j REJECT

Обмеження з'єднань по інтерфейсу

Брандмауер може заблокувати з'єднання, що надходять від IP (наприклад, 15.15.15.51) на певний інтерфейс (наприклад, eth0).

iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP

Ця команда відрізняється від попередньої тільки опцією -i eth0. Ви можете вказати мережевий інтерфейс в будь-якому правилі брандмауера.

сервіс SSH

Щоб працювати з хмарним сервером, потрібно дозволити вхідні з'єднання SSH (порт 22).

Дозвіл всього вхідного трафіку

Для цього використовуйте команди:

sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих SSH-з'єднань, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 22 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих SSH-з'єднань, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Дозвіл вихідного трафіку

Якщо політика OUTPUT - НЕ ACCEPT, але вам потрібно дозволити вихідні SSH-з'єднання, використовуйте:

sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вхідні з'єднання rsync

Rsync використовує порт 873 і дозволяє передавати файли з одного комп'ютера на інший.

sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 873 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань rsync, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Веб-сервери

Веб-сервери (наприклад Apache і Nginx) зазвичай прослуховують HTTP і HTTPS з'єднання на портах 80 та 443 відповідно. Якщо політика брандмауера блокує або відхиляє з'єднання, вам потрібно створити правила-виключення з цієї політики, щоб веб-сервери могли обслуговувати запити.

Дозвіл вхідного трафіку HTTP

Щоб дозволити весь вхідний HTTP-трафік (порт 80), використовуйте:

sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих HTTP-з'єднань, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Дозвіл вхідного трафіку HTTPS

Щоб дозволити весь вхідний HTTPS -трафік (порт 443), введіть:

sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих HTTPS-з'єднань, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Дозвіл вхідного трафіку HTTP і HTTPS

Щоб дозволити трафік HTTP і HTTPS, використовуйте модуль multiport. Створіть правило, яке відкриває обидва порту для вхідного трафіку:

sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих HTTP і HTTPS-з'єднань, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Система управління базами даних MySQL

MySQL прослуховує клієнтські з'єднання на порту 3306. Якщо сервер бази даних MySQL використовується клієнтом на віддаленому сервері, ви повинні обов'язково вирішити цей трафік.

sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 3306 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань MySQL, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Мережеві інтерфейси MySQL

Щоб дозволити доступ до MySQL за допомогою певного мережевого інтерфейсу (наприклад, eth1), використовуйте наступні команди:

sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань MySQL, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Система управління базами даних PostgreSQL

PostgreSQL прослуховує клієнтські з'єднання на порту 5432. Якщо сервер PostgreSQL використовується клієнтом на віддаленому сервері, ви повинні обов'язково вирішити цей трафік.

sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 5432 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

де 15.15.15.0/24 - підмережа, яка зможе отримати доступ до PostgreSQL.

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань PostgreSQL, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Мережеві інтерфейси PostgreSQL

Щоб дозволити доступ до PostgreSQL за допомогою певного мережевого інтерфейсу (наприклад, eth1), використовуйте наступні команди:

sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань PostgreSQL, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

поштові сервіси

Блокування вихідної пошти SMTP

Якщо сервер не повинен відправляти вихідну пошту, ви можете заблокувати цей вид трафіку. SMTP використовує порт 25. Щоб заблокувати вихідний трафік, виконайте наступну команду:

sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

Тепер iptables буде відхиляти весь вихідний трафік на порт 25. Щоб скинути трафік іншого порту, просто вкажіть в команді його номер.

Дозвіл трафіку SMTP

Щоб відкрити весь SMTP-трафік на порт 25, запустіть:

sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань SMTP, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Примітка. Зазвичай SMTP-сервери використовують порт 587 для вихідної пошти.

Дозвіл вхідного трафіку IMAP

Щоб сервер міг відповідати на IMAP-з'єднання на порту 143, запустіть:

sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань IMAP, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Дозвіл вхідного трафіку IMAPS

Щоб сервер міг відповідати на IMAPS -соєдіненія на порте 993, запустіть команди:

sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань IMAPS, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Дозвіл вхідного трафіку POP3

Щоб сервер міг відповідати на POP3-з'єднання на порту 110, введіть такі команди:

sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань POP3, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

Дозвіл вхідного трафіку POP3S

Щоб сервер міг відповідати на POP3S -соєдіненія на порте 995, введіть:

sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Друга команда, яка дозволяє вихідний трафік існуючих з'єднань POP3S, потрібна тільки в тому випадку, якщо політика OUTPUT - НЕ ACCEPT.

висновок

Даний посібник охоплює більшість найпоширеніших команд і правил брандмауера iptables. Звичайно, iptables дуже гнучкий інструмент; щоб підібрати найбільш оптимальні правила, поекспериментуйте з настройками брандмауера самостійно.

Схожі статті