Допустим есть система на базе 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.