Firewalld - установка, настройка, команды

Firewalld

В данной статье предлагаю Вам познакомиться с брандмауэром Firewalld. Возможно многие его давно используют. Я впервые столкнулся с новым брандмауэром во время первой установки CentOS 7. Конечно, его можно отключить и заменить на хорошо знакомый и понятный IPTables (как вернуть IPTables в CentOS 7 – рассмотрено ниже), но осваивать что-то новое и повышать уровень своих знаний – это всегда хорошо, если нет прямой необходимости в использовании IPTables. Проще говоря, Firewalld – это не Файрвол, разработанный с нуля – это другая надстройка над IPTables. Также, как и IPTables, новый Firewalld использует для работы IPTables tool и управляет сетевым фильтром ядра, если Вы обладаете опытом работы с IPTables, Вам не составит особого труда начать пользоваться Firewalld. С приходом Firewalld мы получили ряд новых возможностей, но, в тоже время, потеряли некоторые старые. Но, обо всем по порядку, как всегда, для удобства восприятия материал разбит на смысловые блоки. В этой статье Вы найдете решения следующих задач:

  • Установка Firewalld
  • Обзор возможностей и новых функций Firewalld
  • Список параметров и команд Firewalld
  • Настройка и примеры использования Firewalld
  • Замена Firewalld на IPTables

 

Установка и настройка брандмауэра Firewalld будет происходить в ОС CentOS 7.

Все команды в этой статье выполняются от имени пользователя root!
Установка Firewalld

Выполните для установки Firewalld:

yum -y install firewalld

Запустите:

systemctl start firewalld

Включите службу в автозагрузку:

systemctl enable firewalld

Проверим:

systemctl status firewalld

Посмотрим, что разрешено по умолчанию:

firewall-cmd --permanent --list-all

Вывод команды:

public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:

На постоянной основе разрешен ssh, а также клиент dhcp v6.

Выполните перезагрузку сервера после установки firewalld.

Обзор возможностей и новых функций Firewalld

В firewalld авторы подготовили набор предопределенных зон.

Список всех допустимых зон firewalld можно вывести командой:

firewall-cmd --get-zones

Вывод команды:

work  drop  internal  external  trusted  home  dmz  public  block

Описание назначений зон firewalld:

  • DROP

Входящие сетевые пакеты отбрасываются без ответа (drop). Разрешены только исходящие соединения.


  • BLOCK

Входящие сетевые соединения отклоняются (rejected) с сообщением icmp-host-prohibited для Ipv4 и icmp6-adm-prohibited для IPv6. Разрешены только инициированные сетевые соединения внутри нашей системы.


  • PUBLIC

Зона по умолчанию. Нацелена на работу в общественных сетях с не доверенными компьютерами, разрешается устанавливать только определенные входящие соединения.


  • EXTERNAL

Зона для внешнего интерфейса, особенно подходит для использования во внешних сетях с разрешенным маскарадингом, для роутеров. Разрешены только конкретные входящие соединения.


  • DMZ

Зона DMZ, для сетей с собственной демилитаризованной зоной с ограниченным доступом к вашей внутренней сети. Разрешены только определенные входящие соединения.


  • WORK

Зона рабочей сети. Доверия к окружению нет, разрешены только определенные входящие соединения.


  • HOME

Домашняя зона. Доверяем окружению, разрешены только определенные входящие соединения.


  • INTERNAL

Внутренняя зона. Доверяем окружению, разрешены только определенные входящие соединения.


  • TRUSTED

Все сетевые соединения разрешены.


Добавив сетевое соединение к определенной зоне мы получаем некий предустановленный набор правил.

Вывести список всех активных зон firewalld можно командой:

firewall-cmd --get-active-zones

Вывод команды:

public
interfaces: enp0s3

Где enp0s3 сетевой интерфейс сервера и сопоставлен он с зоной public

Для управления firewalld существует два основных инструмента:

1. firewall-config с графическим интерфейсом.

2. firewall-cmd утилита командной строки, именно с ней мы и будем работать в данной статье.

Что именилось с приходом firewalld? Нам теперь недоступно:

1. Нет /etc/sysconfig/iptables. Настроек iptables в обычном ранее для них месте нет, firewalld хранит свои настройки в XML файлах раскидав их по /usr/lib/firewalld/ и /etc/firewalld/

2. Добавлять правила привычными командами вроде iptables -A INPUT -p ICMP -j ACCEPT  уже не получится, и вообще на попытку обратиться к iptables, мы получим отказ. Собственно, просто придется настраивать его другими командами.

В то-же время му получили ряд полезных функций:

1. Возможность изменения правил без перезагрузки службы: Firewalld запускается как служба и при конфигурации учитывает и применяет только различия в правилах. Другими словами нам предоставили возможность изменять правила, не разрывая существующие соединения (на лету).

2. Концепция зон: Firewalld оперирует понятиями сетевой зоны. Сетевая зона определяет уровень доверия сетевому подключению. Другими словами это можно понять, как предустановленный набор правил, который можно назначить сетевому подключению. Во избежание конфликтов правил, одно подключение может находиться только в одной из зон, а вот в зону можно добавлять сколько угодно подключений.

Настройка и примеры использования Firewalld

Запуск firewalld:

systemctl start firewalld

Остановка:

systemctl stop firewalld

Включите службу в автозагрузку:

systemctl enable firewalld

Отключение автостарта службы:

systemctl disable firewalld

Проверить статус (Вам будет предоставлена расширенная информация о работе службы):

systemctl status firewalld

Проверить статус (кратко):

firewall-cmd --state

Вывести список всех допустимых зон:

firewall-cmd --get-zones

Вывести список всех активных зон:

firewall-cmd --get-active-zones

Пример вывода команды:

public
interfaces: enp0s3

Где enp0s3 сетевой интерфейс сервера и сопоставлен он с зоной public

Узнать к какой зоне принадлежит конкретный (в нашем случае enp0s3) сетевой интерфейс:

firewall-cmd --get-zone-of-interface=enp0s3

Список активных сетевых интерфейсов можно получить с помощью команды:

ip a

Вывести список сетевых интерфейсов принадлежащих конкретной зоне:

firewall-cmd --zone=public --list-interfaces

Проверим, что разрешено по умолчанию:

firewall-cmd --permanent --list-all

Вывод команды:

public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

На постоянной основе разрешен ssh, а также клиент dhcp v6. Я не использую на сервере ip v6, поэтому уберу соответствующее правило:

firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client

Разрешить доступ по протоколу ssh вручную:

firewall-cmd --permanent --zone=public --add-service=ssh

Для работы веб сервера необходимо разрешить сервис http (80 порт):

firewall-cmd --permanent --zone=public --add-service=http

Если Вы планируете использовать https на Вашем сайте, необходимо разрешить https сервис (443 порт):

firewall-cmd --permanent --zone=public --add-service=https

Для работы FTP сервера необходимо открыть 21 порт, а также порты 30000-35000 для использования пассивного режима в FTP клиентах:

firewall-cmd --permanent --zone=public --add-port=21/tcp
firewall-cmd --permanent --zone=public --add-port=30000-35000/tcp

Для применения изменений перезагрузите правила:

firewall-cmd --reload

Мне хочется предложить Вам выполнить еще несколько шагов по повышению уровня безопасности Вашего сервера. Есть довольно подробно написанный мануал по повышению уровня безопасности при использовании ssh. Одним из этапов настройки является изменение стандартного порта, рассмотрим более подробно настройки Firewalld при смене порта ssh.

Разрешим входящие соединения на порт 2220/tcp (на него повесим sshd):

firewall-cmd --permanent --zone=public --add-port=2220/tcp

Перезагрузим правила:

firewall-cmd --reload

Проверим:

firewall-cmd --zone=public --list-ports

Вывод команды:

2220/tcp

Порт открыт. Редактируем конфиг sshd:

nano /etc/ssh/sshd_config

Вносим изменения:

***

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
# В файле необходимо только указать порт
Port 2220
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

***

Перезапустим ssh:

systemctl restart sshd.service

Также в случае использования SELinux (надеюсь, Вы его не отключили) необходимо выполнить дополнительные настройки. Это связано с тем, что SELinux не даст подключиться к ssh на нестандартном порте (2220):

semanage port -a -t ssh_port_t -p tcp 2220

После проверки подключения к ssh на новом порту, закройте доступ к порту 22:

firewall-cmd --permanent --zone=public --remove-service=ssh

Перезагрузите правила:

firewall-cmd --reload
Замена Firewalld на IPTables

Для использования IPTables на Вашем сервере с CentOS 7, выполните следующие шаги.

Выключим Firewalld службу:

systemctl mask firewalld

Остановим Firewalld Service:

systemctl stop firewalld

Установим iptables.

yum -y install iptables-services

Включим запуск IPtables при загрузке системы, а также разрешим доступ к серверу по протоколам ssh и http:

systemctl enable iptables
iptables -P INPUT ACCEPT &&
iptables -F &&
service iptables save &&
iptables -A INPUT -i lo -j ACCEPT &&
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT &&
iptables -A INPUT -p tcp --dport 22 -j ACCEPT &&
iptables -A INPUT -p tcp --dport 80 -j ACCEPT &&
iptables -P INPUT DROP &&
iptables -P FORWARD DROP &&
iptables -P OUTPUT ACCEPT &&
service iptables save

Проверим:

iptables -L

Вы должны получить следующий вывод:

iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

 

Раздел: Unix сервера
Top
0 комментариев
Добавить комментарий