Как настраивается firewall-cmd on Ubuntu 18.04

Posted by

Мое мнение при выборе брандмауэра для Ubuntu систем:

  • Iptables – это для тех кто более глубоко разбирается в защите, им важен полный контроль над всеми действиями каждого соединения. Порог вхождения сложен, но после вы получаете более глубокие знания, и Вы не зависите от системы Linux на которой делается защита
  • Ufw – настройка над iptables. Конфигурирование не вызывает проблем если делается на одном конкретном сервере, к примеру блоге на WordPress, Asterisk, Fog Project, Samba и т.д. Но если нужно сделать с помощью ufw защиту шлюза, то Вас ожидает неправдоподобность официальной инструкции, разнородностью информации в интернете в качестве справки если Вы будете прибегать к ним. Море убитого времени и не понимания почему оно не работает. Кстати, хорошо дружит с защитником сервисов – я имею ввиду Fail2ban.
  • firewalld – тоже надстройка над iptables, но позволяющая делать чуть более чем ufw в плане, защита сервисов, настройка системы в качестве шлюза и т.д. Как и второе настройка правил через синтаксис объектов, Вы не оперируете голыми правилами iptables. А это важно.

Об последнем инструменте firewalld я сейчас и узнаю, сформировав пошаговую заметку по его внедрению на Ubuntu 18.04 Server.

Достоинства, которые выделил я для себя:

  • Принцип работы firewalld основан над управлением зонами.
  • За работу firewalld отвечает демон и правила применяется без его перезапуска, т.к. он работает динамически.

Шаг №1: Устанавливаю firewalld в систему Ubuntu 18.04 Server:

Т.к. по умолчанию он выставляется, как не запущен, включаю его и запускаю:

Проверяю текущий статус работы:

Т.к. в один момент времени может/желательно чтобы работала только одна надстройка над iptables, то следует выключить ufw:

или можно проще, просто его деактивировать:

Шаг №2: Отобразить текущую политику работы установленного firewalld:

из вывода видно, что дефолтная зона работы именуется public, сервисы на защите ssh & dhcp6-client

Шаг №3: Отобразить список всех сервисов которые могут быть поставлены на защиту:

Шаг №4: Допустим Вам нужно включить в правило брандмауэера возможность удаленного взаимодействия с текущей системой, только для доступа через https, к примеру у Вас здесь блог, а значит нужно правило разрешающее 443/tcp:

именование сервиса я получил из Шаг №3.

Параметр “--permanent” обозначает что следует применять данное правила после перезагрузки, т.е. делает его постоянным. Я так себе это вижу.

Шаг №5: А если нужно включить несколько правил, можно конечно указать их каждая отдельной командой или же объединить все в одну:

из вывода видно, что одно из добавляемых правил уже есть, а другого нет и оно добавилось.

Шаг №6: А если Вы не хотите довольствоваться шаблонами правил, а добавляете свое, точно зная какой порт и тип соединения, то можно так чтобы контролировать:

Шаг №7: Можно создать новую зону и уже в нее добавлять Ваши правила:

Шаг №8: Отобразить какие зоны есть сейчас по дефолту:

Описание предустановленных зон:

  • drop - Все входящие сетевые пакеты сбрасываются, ответ на них недопустим. Возможны только исходящие сетевые соединения.
  • block - Все входящие сетевые соединения отклоняются с сообщениями icmp-host-prohibited (для IPv4) и icmp6-adm-prohibited (для IPv6). Возможны только инициированные в рамках данной системы сетевые соединения.
  • public - Предназначено для использования в общественных местах. Остальные компьютеры сети считаются ненадёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.
  • external - Предназначено для использования во "внешних" сетях с активированным режимом маскарадинга, особенно с применением роутеров. Остальные компьютеры сети считаются ненадёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.
  • internal - Предназначено для использования во "внутренних" сетях. Остальные компьютеры сети, по большей части, считаются надёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.
  • dmz - Предназначено для компьютеров в личной "безоружной" зоне с ограниченным общественным доступом к внутренней сети. Разрешены лишь отдельные входящие соединения.
  • work - Предназначено для использования в рабочем пространстве. Остальные компьютеры сети, по большей части, считаются надёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.
  • home - Предназначено для использования в домашних сетях. Остальные компьютеры сети, по большей части, считаются надёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.
  • trusted - Разрешены все сетевые соединения.

А зона – это уровень доверия для сетевых соединений.

Шаг №9: В зону можно предопределить интерфейс:

Шаг №10: Правило разрешающее взаимодействие с сервисом этой системы из сети 172.35.35.0/24

Шаг №11: Отобразить список правил:

Шаг №12: Если нужны правила определяющие доступ на эту систему по одному а после переход на другую, т.е. организовываем Port Forwarding – к примеру эта система шлюз:

При подключении на 22 порт перенаправление на 2222:

При подключении на 22 порт перенаправление на IP:порт:

Шаг №13: Чтобы удалить порт или сервис, здесь все просто заменяем если при добавлении пишем --add, то наоборот --remove.

Шаг №14: И самое важно, чтобы применить правило(а):

см. какие порты открыты в зоне public:

См. какие действия порты/сервисы/поведение предопределены Вам в текущей зоне:

Что здесь такого интересного? Зона Public активна, в нее включен единственный интерфейс системы Ubuntu 18.04 Server ens18, файервол на сервисы и на указанные порты, включен Masquerade (т.е. система выступает шлюзом, возможно), доступ к системе возможен по SSH из сети 172.35.35.0/24

Шаг №15: Чтобы возможностями firewalld заблокировать определенный IPадрес:

Вот такие вот расширенные правила делаются через Rich rules и позволяют описывать действия: accept (принимать), drop (сбрасывать), reject (отклонять).

Шаг №16: Узнать что же firewall-cmd думает о предопределенных службах, нужно открыть файл xml:

По аналогии можно создать свое описание для собственного сервиса.

Далее изменяем в собственном файле собственного сервиса:

Шаг №17: Если Вы тестируете правила, то добавлять ключ--permanentне нужно, опуская его вы разрешите только в рамках текущего сеанса:

Шаг №18: Т.к. firewall-cmd это надстройка над iptables, то можно отобразить все правила и посмотреть, как они были созданы:

в выводе будет видно, что созданы цепочки (ключ -N) и для данные цепочки правил помещены в типы доступа: INPUT, FORWARD, ACCEPT.

Вот из всего выше разобранного самолично я составил мнение что пора с ufw перейти на данную надстройку, т.к. функционал расширенный и легко настраивается. Пока у меня на этом всё, с уважением автор блога Олло Александр aka ekzorchik.