Налаштування firewalld centos 7 з прикладами команд

Centos 7, на відміну від CentOS 6, в базі йде з новим брандмауером - firewalld. Його можна відключити і замінити на старий добрий iptables, але якщо до цього немає прямих передумов, то краще звикати до чогось нового, а не впиратися в старе. Це не означає, що Windows 10 краще Windows 7, а Windows XP краще Windows 7;) Хороший приклад на цю тему - selinux. Якщо спочатку майже всі (і я теж) його відключали і навіть трохи лаяли, то тепер майже ніхто це не радить, тільки якщо є впевненість, що так треба. Навпаки, багато хто вже звик (або звикають) користуватися semanage. Не будемо і ми відразу відключати firewalld, а спробуємо, як він на смак.

Firewalld - це не принципово інший брандмауер. Це інша надбудова над netfilter, тому якщо ви маєте досвід роботи з iptables, то помучитися трохи ви спокійно почнете користуватися новим інструментом.

Налаштування firewalld centos 7 з прикладами команд

Запуск і зупинка firewalld

Перевіримо, чи запущений firewalld:

# Systemctl status firewalld

Тут буде розширена інформація. Щоб коротко, так (працює) чи ні можна так:

# Firewall-cmd --state
running

# Systemctl stop firewalld

# Systemctl disable firewalld

# Systemctl start firewalld

# Systemctl enable firewalld

зони firewalld

У firewalld широко використовується поняття зони. Список всіх допустимих зон за замовчуванням:

# Firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Призначення зон (умовно, звичайно):

  • drop - всі вхідні пакети відкидаються (drop) без відповіді. Дозволені лише вихідні з'єднання.
  • block - вхідні з'єднання відхиляються (rejected) з відповіддю icmp-host-prohibited (або icmp6-adm-prohibited). Дозволені лише ініційовані системою з'єднання.
  • public - зона по-замовчуванню. З назви зрозуміло, що ця зона націлена на роботу в соціальних мережах. Ми не довіряємо цій мережі і дозволяємо тільки певні вхідні з'єднання.
  • external - зона для зовнішнього інтерфейсу роутера (т.зв. маськарадінг). Дозволені тільки певні нами вхідні з'єднання.
  • dmz - зона DMZ, дозволені тільки певні вхідні з'єднання.
  • work - зона робочої мережі. Ми все ще не довіряємо нікому, але вже не так сильно, як раніше :) Дозволені тільки певні вхідні з'єднання.
  • home - домашня зона. Ми довіряємо оточенню, але дозволені тільки певні вхідні з'єднання
  • internal - внутрішня зона. Ми довіряємо оточенню, але дозволені тільки певні вхідні з'єднання
  • trusted - дозволено все.

Список всіх активних зон:

# Firewall-cmd --get-active-zones
public
interfaces: enp1s0

Ага, зона public, до якої приєднано мережевий інтерфейс enp1so. Далі в зону public додамо новий порт, на якому буде висіти sshd.

Знаючи ім'я мережевого інтерфейсу (наприклад, enp1s0), можна дізнатися, до якої зони він належить:

# Firewall-cmd --get-zone-of-interface = enp1s0
public

А можна дізнатися, які інтерфейси належать конкретній зоні:

# Firewall-cmd --zone = public --list-interfaces
enp1s0

Приклад: дозволяємо ssh на нестандартному порту

Давайте дозволимо доступ до сервера по ssh на порте 2234 / tcp, а не на 22 / tcp, як по-замовчуванню. Попутно трохи торкнемося selinux.

Спочатку подивимося, що взагалі дозволено постійно на нашому сервері:

# Firewall-cmd --permanent --list-all
public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Я не використовую поки ipv6, тому відразу приберу соотв. правило з firewalld:

# Firewall-cmd --permanent --zone = public --remove-service = dhcpv6-client

Дозволимо на постійній основі (щоб після перезавантаження НЕ потерлася) з'єднання на порт 2234 / tcp (на нього повісимо sshd):

# Firewall-cmd --permanent --zone = public --add-port = 2234 / tcp

# Firewall-cmd --zone = public --list-ports
2234 / tcp

Ок, порт відкритий. Редагуємо конфиг sshd:

# Nano / etc / ssh / sshd_config
.
port 2234
.

# Systemctl restart sshd.service

Але SELinux, яку ви, сподіваюся, не відключали, не дасть підключитися до ssh на нестандартному порту (порт 2234 / tcp для sshd - нестандартний). Ви можете цей крок пропустити і перевірити, як сработатет захист SELinux, а можете відразу все налаштувати:

# Yum provides semanage
# Yum install policycoreutils-python
# Semanage port -a -t ssh_port_t -p tcp 2234

Ось тепер все ок. Перевіряємо підключення по ssh на новому порте. Якщо все ок, закриваємо доступ до порту 22:

# Firewall-cmd --permanent --zone = public --remove-service = ssh
# Firewall-cmd --reload

Дивимося, що вийшло:

# Firewall-cmd --list-all
public (default, active)
interfaces:
sources:
services:
ports: 2234 / tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Різні корисні команди:

Включити режим блокування всіх вихідних і вхідних пакетів:

Вимкнути режим блокування всіх вихідних і вхідних пакетів:

Дізнатися, чи включений режим блокування всіх вихідних і вхідних пакетів:

Перезавантажити правила firewalld без втрати поточних з'єднань:

Перезавантажити правила firewalld і скинути поточні з'єднання (рекомендується тільки в разі проблем):

Додати до зони мережевий інтерфейс:

# Firewall-cmd --zone = public --add-interface = em1

Додати до зони мережевий інтерфейс (збережеться після перезавантаження firewall):

# Firewall-cmd --zone = public --permanent --add-interface = em1

Можна в конфіги ifcfg-enp1s0 вказати, якої зони належить цей інтерфейс. Для цього додамо ZONE = work в файл / etc / sysconfig / network-scripts / ifcfg-enp1s0. Якщо параметр ZONE не вказано, буде призначена зона по-замовчуванню (параметр DefaultZone в файлі /etc/firewalld/firewalld.conf.

Дозволити діапазон портів:

# Firewall-cmd --zone = public --add-port = 5059-5061 / udp

Маскарад (masquerade, він же nat, він же.):

# Firewall-cmd --zone = external --query-masquerade

# Firewall-cmd --zone = external --add-masquerade

Тут треба зазначити, що ви можете включити masquerade і для зони public, наприклад.

Перенаправити входять на 22 порт на інший хост:

# Firewall-cmd --zone = external --add-forward-port = port = 22: proto = tcp: toaddr = 192.168.1.23

Перенаправити входять на 22 порт на інший хост зі зміною порту призначення (з 22 на 192.168.1.23:2055):

# Firewall-cmd --zone = external /
--add-forward-port = port = 22: proto = tcp: toport = 2055: toaddr = 192.168.1.23

На цьому закінчу, тому що прикладів може бути нескінченно багато. Додам тільки, що особисто я не склав остаточно свою думку з приводу нововведення firewalld, тому що до синтаксису звикаєш довго і якщо в вашому зоопарку зустрічаються різні OS Linux, то по первости можуть бути проблеми саме зі звичкою. Але освоївши firewalld, ви розширите кругозір - найчастіше, це коштує витрачених зусиль.

Не хочу firewalld! Поверніть мені старий iptables!

Якщо все ж ви хочете повернути минуле і замінити firewalld на iptables, то зробити це зовсім не важко:

Новачкам тут не місце:

# Systemctl disable firewalld
# Systemctl stop firewalld

Ставимо старий добрий iptables:

# Yum install iptables-services

# Systemctl start iptables
# Systemctl start ip6tables

Автозапуск при включенні:

# Systemctl enable iptables
# Systemctl enable ip6tables

Для збереження правил iptables після перезавантаження:

# / Sbin / iptables-save> / etc / sysconfig / iptables
# / Sbin / ip6tables-save> / etc / sysconfig / ip6tables

# Service iptables save

Поточні правила знаходяться в файлах:
/ Etc / sysconfig / iptables
/ Etc / sysconfig / ip6tables

Перезапуск iptables (наприклад, після здійснення яких-небудь змін):

# Systemctl restart iptables.service