Допустим есть система на базе Ubuntu 18.04 Server и нужно посредством firewall-cmd настроить базовую защиту по сетевой части для нее. Кратко разобранные примеры использования firewall-cmd можно посмотреть здесь.

Итак, система Ubuntu 18.04 Server развернута либо в локальной сети, либо куплена как VPS на CloudLite

Устанавливаем пакет firewalld, активируем его на загрузку после перезагрузки и стартуем:

ekzorchik@srv-bionic:~$ sudo apt-get install -y firewalld

ekzorchik@srv-bionic:~$ sudo systemctl enable firewalld

ekzorchik@srv-bionic:~$ sudo systemctl start firewalld

ekzorchik@srv-bionic:~$ sudo firewall-cmd --state

running

Дефолтная настройка от установщика подразумевает одну зону, зона public и разрешенные сервисы:

ekzorchik@srv-bionic:~$ sudo firewall-cmd --zone=public --list-all

public

  target: default

  icmp-block-inversion: no

  interfaces:

  sources:

  services: ssh dhcpv6-client

  ports:

  protocols:

  masquerade: no

  forward-ports:

  source-ports:

  icmp-blocks:

  rich rules:

Шаг №1: Изменяю зону, где зона home это из списка дефолтных, в ней доступ ограничивается только прописанными настройками.

ekzorchik@srv-bionic:~$ ip r | awk '{print $5}' | head -n 1

ens18

ekzorchik@srv-bionic:~$ sudo firewall-cmd --zone home --change-interface=ens18 --permanent

ekzorchik@srv-bionic:~$ sudo firewall-cmd –reload

Шаг №2: Ограничиваем подключение к этой системе только из доверенной локальной сети (если система, как VPS, но можно пропустить или добавить ту с которой Вы будете подключаться к ней)

Если данная система в локальной сети, то я бы рекомендовал предопределить сеть или определенные компьютеры в ней с которых можно к ней подключаться:

ekzorchik@srv-bionic:~$ sudo firewall-cmd --add-rich-rule 'rule family="ipv4" service name="ssh" source address="172.35.35.0/24" accept' --permanent

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

ekzorchik@srv-bionic:~$ sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.33.33.0/24" port port=22222 protocol=tcp accept' --permanent

ekzorchik@srv-bionic:~$ sudo firewall-cmd –reload

ekzorchik@srv-bionic:~$ sudo firewall-cmd --list-rich-rules

rule family="ipv4" source address="172.33.33.0/24" port port="22222" protocol="tcp" accept

Шаг №3: Изменяем номер порта для службы SSH, чтобы подключиться к этой системе можно было через отличный от дефолтного порта (Default: 22/tcp), но до этого добавляем его в брандмауэр, см. предыдущий пункт. Иначе если действия выполняются удаленно на системе вы потеряете доступ к ней.

ekzorchik@srv-bionic:~$ sudo apt-get install -y openssh-server

ekzorchik@srv-bionic:~$ sudo nano /etc/ssh/sshd_config

#Port 22

Port 22222

ekzorchik@srv-bionic:~$ sudo systemctl restart ssh

ekzorchik@srv-bionic:~$ sudo ss -ltp | grep sshd

LISTEN   0         128                 0.0.0.0:22222             0.0.0.0:*       users:(("sshd",pid=1470,fd=3))                                                

LISTEN   0         128                    [::]:22222                [::]:*       users:(("sshd",pid=1470,fd=4))

Переподключась к системе, но уже на указанный выше порт (порт может быть любым кроме зарегистрированных сервисов и в промежутке от 1 до 65535)

root@srv-debian:~# ssh -l ekzorchik 172.33.33.2 -p 22222

ekzorchik@172.33.33.2's password:

Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-60-generic x86_64)

 * Documentation:  https://help.ubuntu.com

 * Management:     https://landscape.canonical.com

 * Support:        https://ubuntu.com/advantage

Last login: Mon Sep 23 10:46:58 2019 from 127.0.0.1

ekzorchik@srv-bionic:~$

Шаг №4: Удаляем из настроек брандмауэра сервис ssh и те которые предопределены в зоне home:

ekzorchik@srv-bionic:~$ sudo firewall-cmd --zone=home --remove-service={ssh,mdns,samba-client,dhcpv6-client} --permanent

success

Шаг №5: Запретим проверку системы через ICMPзапрос к ней, делается через утилиту ping:

ekzorchik@srv-bionic:~$ sudo firewall-cmd --query-icmp-block-inversion

no

ekzorchik@srv-bionic:~$ sudo firewall-cmd --add-icmp-block-inversion --permanent

success

ekzorchik@srv-bionic:~$ sudo firewall-cmd --reload

success

ekzorchik@srv-bionic:~$ sudo firewall-cmd --query-icmp-block-inversion

yes

Проверяем:

ekzorchik@srv-bionic:~$ exit

logout

Connection to 172.33.33.2 closed.

root@srv-debian:~#

root@srv-debian:~# ping 172.33.33.2 -c 2

PING 172.33.33.2 (172.33.33.2) 56(84) bytes of data.

From 172.33.33.2 icmp_seq=1 Destination Host Prohibited

From 172.33.33.2 icmp_seq=2 Destination Host Prohibited

--- 172.33.33.2 ping statistics ---

2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 12ms

root@srv-debian:~#

Destination Host Prohibited – хост назначения запрещен.

И проверяем с другой системы из отличной от сети 172.33.33.0/24 что могу подключиться к ней – ответ не могу, как и задумано:

ekzorchik@srv-nas:~$ hostname -I

172.35.35.4

ekzorchik@srv-nas:~$ ssh -l ekzorchik 172.33.33.2 -p 22222

ssh: connect to host 172.33.33.2 port 22222: No route to host

Доступ только из сети 172.33.33.0/24

Отлично, я закрыл хост от возможности (базовой возможности) проверить жив ли они или нет.

Итак, это базовая настройка, уже используя ее я буду наращивать функционал и переводить свои сервисы использующие ufw на firewall-cmd. Работы предстоит много, а пока на этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.