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 прост в настройке и понимании.