UFW в Ubuntu

UFW несложный брандмауэр представляет собой серьезное упрощение iptables и за те годы, что он был доступен, стал брандмауэром по умолчанию в таких системах, как Ubuntu и Debian. И, да, ufw на удивление несложен для новичков, которым, возможно, придется потратить много времени, чтобы быстро освоить управление брандмауэром.

Графические интерфейсы доступны для ufw (например, gufw), но команды ufw обычно запускаются в командной строке. Рассмотрим некоторые команды ufw и их работу.

Во-первых, самый быстрый способ узнать как сконфигурирован ufw — это посмотреть его файл конфигурации — /etc/default/ufw. В приведенной ниже команде мы отображаем настройки, используя grep для исключения отображения пустых строк и комментариев.

$ grep -v '^#\|^$' /etc/default/ufw
IPV6=yes
DEFAULT_INPUT_POLICY="DROP"
DEFAULT_OUTPUT_POLICY="ACCEPT"
DEFAULT_FORWARD_POLICY="DROP"
DEFAULT_APPLICATION_POLICY="SKIP"
MANAGE_BUILTINS=no
IPT_SYSCTL=/etc/ufw/sysctl.conf
IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns"

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

$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing

Для восстановления настроек по умолчанию для UFW необходимо использовать следующие команды:

Базовый синтаксис ufw выглядит так:

ufw [--dry-run] [options] [rule syntax]

Опция —dry-run означает, что ufw не будет выполнять команду, но покажет результаты, если бы она это сделала. Однако ufw будет отображать весь набор правил в том виде, в котором они существовали бы, если бы были внесены изменения.

Чтобы проверить состояние ufw, выполним следующую команду(данная команда требует использования sudo или использования учетной записи root):

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       192.168.0.0/24
9090                       ALLOW       Anywhere
9090 (v6)                  ALLOW       Anywhere (v6)

В противном случае увидим:

$ ufw status
ERROR: You need to be root to run this script

Добавление «verbose» выведет дополнительную информацию:

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    192.168.0.0/24
9090                       ALLOW IN    Anywhere
9090 (v6)                  ALLOW IN    Anywhere (v6)

Можем разрешить и запретить соединения по номеру порта с помощью таких команд:

$ sudo ufw allow 80		<== разрешить http доступ
$ sudo ufw deny 25		<== запретить smtp доступ

Чтобы найти связь между номерами портов и именами служб посмотрим файл /etc/services.

$ grep 80/ /etc/services
http            80/tcp          www             # WorldWideWeb HTTP
socks           1080/tcp                        # socks proxy server
socks           1080/udp
http-alt        8080/tcp        webcache        # WWW caching service
http-alt        8080/udp
amanda          10080/tcp                       # amanda backup services
amanda          10080/udp
canna           5680/tcp                        # cannaserver 

Кроме того, в командах ufw можно использовать имена сервисов.

$ sudo ufw allow http
Rule added
Rule added (v6)
$ sudo ufw allow https
Rule added
Rule added (v6)

После внесения изменений проверим статус еще раз, чтобы увидеть, что эти изменения были применены:

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       192.168.0.0/24
9090                       ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere		<==
443/tcp                    ALLOW       Anywhere		<==
9090 (v6)                  ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)	<==
443/tcp (v6)               ALLOW       Anywhere (v6)	<==

Правила, которым следует ufw, хранятся в каталоге /etc/ufw. Для просмотра этих файлов требуется root-доступ , и каждый из них файлов содержит большое количество правил.

$ ls -ltr /etc/ufw
total 48
-rw-r--r-- 1 root root 1391 Aug 15  2017 sysctl.conf
-rw-r----- 1 root root 1004 Aug 17  2017 after.rules
-rw-r----- 1 root root  915 Aug 17  2017 after6.rules
-rw-r----- 1 root root 1130 Jan  5  2018 before.init
-rw-r----- 1 root root 1126 Jan  5  2018 after.init
-rw-r----- 1 root root 2537 Mar 25  2019 before.rules
-rw-r----- 1 root root 6700 Mar 25  2019 before6.rules
drwxr-xr-x 3 root root 4096 Nov 12 08:21 applications.d
-rw-r--r-- 1 root root  313 Mar 18 17:30 ufw.conf
-rw-r----- 1 root root 1711 Mar 19 10:42 user.rules
-rw-r----- 1 root root 1530 Mar 19 10:42 user6.rules

Изменения, сделанные ранее в этом посте (добавление порта 80 для доступа http и 443 для доступа https (зашифрованный http), будут выглядеть следующим образом в файлах user.rules и user6.rules:

# grep " 80 " user*.rules
user6.rules:### tuple ### allow tcp 80 ::/0 any ::/0 in
user6.rules:-A ufw6-user-input -p tcp --dport 80 -j ACCEPT
user.rules:### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 in
user.rules:-A ufw-user-input -p tcp --dport 80 -j ACCEPT
You have new mail in /var/mail/root

# grep 443 user*.rules
user6.rules:### tuple ### allow tcp 443 ::/0 any ::/0 in
user6.rules:-A ufw6-user-input -p tcp --dport 443 -j ACCEPT
user.rules:### tuple ### allow tcp 443 0.0.0.0/0 any 0.0.0.0/0 in
user.rules:-A ufw-user-input -p tcp --dport 443 -j ACCEPT

С помощью ufw можно выборочно заблокировать соединения, используя следующую команду:

$ sudo ufw deny from 201.176.0.71
Rule added

Команда запроса статуса покажет изменение:

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    192.168.0.0/24
9090                       ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
Anywhere                   DENY IN     201.176.0.71		<== new
9090 (v6)                  ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Удаление правил ufw

По номеру
Отображаем номера рядом с каждым правилом:

sudo ufw status numbered

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere


sudo ufw delete 2

По имени правила

sudo ufw delete allow http
или
sudo ufw delete allow 80

Как видим, в целом, ufw прост в настройке и понимании.