- Зміст статті Налаштування брандмауера за допомогою iptables в Linux присвячена не одна стаття, і,...
- можливості firewalld
- Продовження доступно тільки учасникам
- Варіант 2. Відкрий один матеріал
Зміст статті
Налаштування брандмауера за допомогою iptables в Linux присвячена не одна стаття, і, так як тема популярна, ймовірно, буде написано безліч інших. Для простих конфігурацій все досить легко, але от якщо мережі складні, а комп'ютерів багато, то справа вже не здається таким простим. А перенесення правил в інші системи не завжди прозорий.
Iptables і інші
Проект iptables, розроблений Рости Расселом (Rusty Russell) в 1999 році для управління netfilter і замінив в ядрі 2.4 ipchains і ряд інших інструментів на кшталт ipnatctl, пропонує більш розширюваний спосіб фільтрації пакетів, що забезпечує сисадміну більший контроль при спрощення самих правил. Так, в ipchains потрібно було створювати правило в кожної ланцюжку, простежуючи весь маршрут пакета, тепер достатньо одного. Поява модулів дозволяло дуже просто розширювати можливості. У процесі розвитку проекту iptables був портований для IPv6 (в 2011 році, ip6tables), додавалися додаткові модулі (ULOG, nf_conntrack), він навчився виробляти різні маніпуляції з пакетами, класифікувати трафік (до сьомого рівня OSI), балансувати навантаження і багато іншого. З ростом кількості функцій ускладнилися і настройки. При цьому, навіть незважаючи на деяку уніфікацію, кожне розширення має свій синтаксис, одні підтримують діапазони, заперечення, префікси, інші - ні. Спочатку кожна зміна правил вимагало повного перезапуску брандмауера, включаючи вивантаження модулів, що призводило до розриву встановлених з'єднань. Зараз такої проблеми немає.
Для простих випадків настройка за допомогою iptables - справа нехитра, але в складних мережах керувати великою кількістю правил стає важко; щоб вивчити всі настройки і зрозуміти, як воно працює, потрібно витратити час. Важко з ходу розібратися, що роблять все ланцюжка, правила починають повторюватися, їх стає складно обслуговувати, оновлювати і переносити на інші системи.
Не дивно, що для вирішення цих проблем були придумані різні надбудови. Так, в Ubuntu для простого налаштування правил використовується ufw (Uncomplicated Firewall - нескладний файрвол). Наприклад, щоб відкрити доступ до SSH-порту, досить ввести
$ Sudo ufw allow 22
Розробники додатків можуть створювати готові профілі, які активуються при установці пакету, позбавляючи користувача від вигадування і введення правил.
Ще один відомий проект, що дозволяє легко підтримувати складні правила, - FERM ( for Easy Rule Making ). У FERM все правила зберігаються в одному файлі, який легко читається, редагується і завантажується однією командою. Такий файл просто переносити між комп'ютерами. Самі правила групуються в блоки, містять змінні, списки, що дозволяє задати ті ж настройки в більш короткому і зрозумілому вигляді. Підсумковий розмір правил FERM рази в три менше аналогічних для iptables. Наприклад, забороняємо всі з'єднання, крім HTTP, SSH і FTP.
chain INPUT {policy DROP; mod state state (RELATED ESTABLISHED) ACCEPT; proto tcp dport (http ssh ftp) ACCEPT; }
Під капотом FERM знаходиться звичайний Perl-скрипт, який конвертує конфігураційні файли в правила iptables.
У Fedora 18 був анонсований демон firewalld , Що став офіційним додатком для управління настройками netfilter в RHEL 7 / CentOS 7. Останні стають дедалі популярнішими на VDS, а значить, доведеться зіткнутися з їх особливостями.
можливості firewalld
Firewalld запускається як демон, нові правила додаються без перезапуску і без скидання встановленого файрволу. Зміни в конфігурації можуть бути зроблені в будь-який час і застосовуються миттєво: зберігати або застосовувати зміни не потрібно. Підтримується IPv4, IPv6, автоматичне завантаження модулів ядра і мережеві зони, що визначають рівень довіри з'єднань. Надається простий інтерфейс додавання правил для служб і додатків, білий список додатків, які мають право змінювати правила. В даний час таку можливість підтримує libvirt, Docker, fail2ban, Puppet, скрипт установки Virtuozzo і багато інших проектів. У репозиторії YUM вже є пакети fail2ban-firewalld і puppet-firewalld, тому підключити їх можна однією командою.
Firewalld надає інформацію про поточні настройки брандмауера через D-Bus API, а також приймає зміни через D-Bus з використанням методів аутентифікації PolicyKit. Як бекенд використовуються iptables, ip6tables, ebtables, ipset і планується nftables . Але самі правила, створені безпосередньо цими утилітами, firewalld не може розібрати, тому обидва методи використовувати не можна.
Управління проводиться за допомогою утиліт командного рядка firewall-cmd або графічної firewall-config, що дозволяє налаштувати всі правила в зручній середовищі. Для допомоги в міграції поточних правил iptables на firewalld використовується утиліта firewall-offline-cmd, за замовчуванням зчитує / etc / sysconfig / system-config-firewall. В останніх релізах з'явилася утиліта firewallctl, що має простий синтаксис і дозволяє отримувати інформацію про стан служби, конфігурації брандмауера і змінювати правила.
Графічна firewall-config підтримує firewalld
Параметри firewall-cmd
Дивимося статус:
# Systemctl status firewalld # firewall-cmd --state running
Дозволити з'єднання на певний порт дуже просто:
# Firewall-cmd --permanent --add-port = 22 / tcp
Щоб будь-які зміни вступили в силу, завжди після правок повинна бути запущена команда
# Firewall-cmd --reload
Для видалення порту з правил використовується параметр --remove-port:
# Firewall-cmd --remove-port = 22 / tcp
Взагалі, багато команд --add- * мають значення для перевірки статусу --query- *, --list- * - список, зміни --change- * або видалення --remove відповідного значення. Для стислості на цьому не будемо далі загострювати увагу. Після релоад правил перевіряємо:
# Firewall-cmd --list-ports
У firewalld передбачений режим, що дозволяє однією командою заблокувати всі з'єднання:
# Firewall-cmd --panic-on
Для перевірки, в якому режимі знаходиться файрвол, є спеціальний ключ:
# Firewall-cmd --query-panic
Відключається panic mode:
# Firewall-cmd --panic-off
У firewalld необов'язково знати, який порт прив'язаний до сервісу, достатньо вказати назву сервісу. Все інше утиліта візьме на себе.
Після установки firewalld знає настройки більше 50 сервісів, отримуємо їх список.
# Firewall-cmd --get-services
Дозволимо підключення до HTTP:
# Firewall-cmd --add-service = http
Використовуючи фігурні дужки, можна задавати відразу декілька сервісів. Інформація з налагодження сервісів доступна за допомогою
# Firewall-cmd --info-service = http
Firewalld зберігає всі настройки в XML-файлах в каталогах в / usr / lib / firewalld. Зокрема, сервіси лежать в services. Всередині файлу опис: назва, протокол і порт.
<? Xml version = "1.0" encoding = "utf-8"?> <Service> <short> MySQL </ short> <description> MySQL Database Server </ description> <port protocol = "tcp" port = "3600" /> </ service>
Це каталог системний, і міняти там нічого не можна. Якщо потрібно перевизначити налаштування або створити свій сервіс, то копіюємо будь-який файл як шаблон в / etc / firewalld / services, правимо під свої умови і застосовуємо налаштування.
Для настройки ICMP використовується окремий набір правил. Отримуємо список підтримуваних типів ICMP:
# Firewall-cmd --get-icmptypes
Перевіряємо статус:
# Firewall-cmd --zone = public --query-icmp-block = echo-reply # firewall-cmd --zone = public --add-icmp-block = echo-reply
Продовження доступно тільки учасникам
Варіант 1. Приєднайся до товариства «Xakep.ru», щоб читати всі матеріали на сайті
Членство в співтоваристві протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалами «Хакера», збільшить особисту накопичувальну знижку і дозволить накопичувати професійний рейтинг Xakep Score! Детальніше
Варіант 2. Відкрий один матеріал
Зацікавила стаття, але немає можливості стати членом клубу «Xakep.ru»? Тоді цей варіант для тебе! Зверни увагу: цей спосіб підходить тільки для статей, опублікованих більше двох місяців тому.
Lt;?
Encoding = "utf-8"?
Ru»?