Использование утилиты UFW на Ubuntu 18.04 LTS
Во всех дистрибутивах Linux для обеспечения сетевой безопасности и изоляции внутренних процессов от внешней среды используется брандмауэр iptables
. Но его настройка довольно сложная, поэтому многие дистрибутивы создают собственные оболочки, которые упрощают процесс настройки. В Ubuntu используется оболочка под названием UFW или Uncomplicated FireWall.
Синтаксис команды ufw
Для управления возможностями брандмауэра используется одноимённая команда — ufw
:
$ ufw опции действие параметры
Опции:
--version
— показывает текущую версию брандмауэра;--dry-run
— тестовый запуск, без реальных действий.
Действия:
enable
— включить фаервол и добавить его в автозагрузку;disable
— отключить фаервол и удалить его из автозагрузки;reload
— перезагрузить файервол;default
— задать политику по умолчанию;logging
— включить журналирование или изменить уровень подробности;reset
— сбросить все настройки до состояния по умолчанию;status
— посмотреть состояние фаервола;show
— посмотреть один из отчётов о работе;allow
— добавить разрешающее правило;deny
— добавить запрещающее правило;reject
— добавить отбрасывающее правило;limit
— добавить лимитирующее правило;delete
— удалить правило;insert
— вставить правило.
Настройка UFW
Сначала смотрим состояние фаервола:
$ sudo ufw status Status: inactive
Если он еще не включен — включаем:
$ sudo ufw enable
Снова смотрим состояние фаервола:
$ sudo ufw status Состояние: активен
Получить более подробную информацию:
$ sudo ufw status verbose Состояние: активен Журналирование: on (low) По умолчанию: deny (входящие), allow (исходящие), disabled (маршрутизированные) Новые профили: skip
Если вы работаете по SSH, то перед тем, как включать брандмауэр, нужно добавить правило, разрешающее работу по SSH, иначе у вас не будет доступа к серверу:
$ sudo ufw allow OpenSSH
Политика по умолчанию
Перед тем, как перейти к добавлению правил, необходимо указать политику по умолчанию. Какие действия будут применяться к пакетам, если они не подпадают под созданные правила фаервола. Все входящие пакеты будем отклонять:
$ sudo ufw default deny incoming Правило по умолчанию incoming изменено на «deny» (не забудьте соответственно обновить правила)
А все исходящие — разрешим:
$ sudo ufw default allow outgoing Правило по умолчанию outgoing изменено на «allow» (не забудьте соответственно обновить правила)
Смотрим текущую политику фаервола:
$ sudo ufw status verbose Состояние: активен Журналирование: on (low) По умолчанию: deny (входящие), allow (исходящие), disabled (маршрутизированные) Новые профили: skip
Добавление правил
Чтобы создать разрешающее правило, используется команда allow
. Чтобы создать запрещающее правило — используются команды deny
и reject
. Они отличаются тем, что для deny
отправителю отсылается пакет с уведомлением об ошибке, а для reject
входящий пакет просто отбрасывается.
$ ufw allow служба $ ufw allow порт $ ufw allow порт/протокол
Посмотреть доступные имена приложений можно с помощью команды:
$ sudo ufw app list Доступные приложения: Apache Apache Full Apache Secure CUPS OpenSSH
Правило для OpenSSH
Чтобы открыть порт 22 для SSH, нужно добавить правило:
$ sudo ufw allow OpenSSH
$ sudo ufw allow 22/tcp
После выполнения одной из этих команд:
$ sudo ufw status verbose Состояние: активен Журналирование: on (low) По умолчанию: deny (входящие), allow (исходящие), disabled (маршрутизированные) Новые профили: skip В Действие Из ---------------------------------------------------- 22/tcp ALLOW IN Anywhere 22/tcp (v6) ALLOW IN Anywhere (v6)
Правило для Apache
Чтобы открыть порт 80 для Apache, нужно выполнить одну из этих команд:
$ sudo ufw allow Apache
$ sudo ufw allow 80/tcp
Чтобы открыть порт 443 для Apache, нужно выполнить одну из этих команд:
$ sudo ufw allow 'Apache Secure'
$ sudo ufw allow 443/tcp
Состояние после выполнения этих команд:
$ sudo ufw status verbose Состояние: активен Журналирование: on (low) По умолчанию: deny (входящие), allow (исходящие), disabled (маршрутизированные) Новые профили: skip В Действие Из ------------------------------------------------------- 80/tcp (Apache) ALLOW IN Anywhere 443/tcp (Apache Secure) ALLOW IN Anywhere 80/tcp (Apache (v6)) ALLOW IN Anywhere (v6) 443/tcp (Apache Secure (v6)) ALLOW IN Anywhere (v6)
Направление трафика
Можно указать направление следования трафика с помощью слов out
— для исходящего и in
— для входящего.
$ ufw allow направление порт
Например, разрешим только исходящий трафик на порт 80, а входящий запретим:
$ sudo ufw allow out 80/tcp $ sudo ufw deny in 80/tcp
Полный синтаксис
Также можно использовать более полный синтаксис добавления правил:
$ ufw allow направление on интерфейс proto протокол \ > from ip-адрес port порт to ip-адрес port порт
Разрешить все входящие соединения HTTP и HTTPS с любого хоста на любом сетевом интерфейсе:
$ sudo ufw allow in proto tcp from any to any port 80,443
Разрешить все входящие соединения к серверу MySQL (порт 3306) на сетевом интерфейсе eth0
:
$ sudo ufw allow in on eth0 proto tcp to any port 3306
В качестве ip-адреса
источника может использоваться также и адрес подсети. Например, разрешим доступ со всех IP-адресов подсети по протоколу TCP
к нашему IP-адресу 192.168.110.2
на порту 5901
:
$ sudo ufw allow in proto tcp from 192.168.110.0/24 to 192.168.110.2 port 5901
Больше примеров можно найти в документации
$ man ufw NAME ufw - program for managing a netfilter firewall DESCRIPTION This program is for managing a Linux firewall and aims to provide an easy to use interface for the user. USAGE ufw [--dry-run] enable|disable|reload ufw [--dry-run] default allow|deny|reject [incoming|outgoing|routed] ufw [--dry-run] logging on|off|LEVEL ufw [--dry-run] reset ufw [--dry-run] status [verbose|numbered] ufw [--dry-run] show REPORT ufw [--dry-run] [delete] [insert NUM] [prepend] allow|deny|reject|limit [in|out] [log|log-all] [ PORT[/PROTOCOL] | APPNAME ] [comment COMMENT] ufw [--dry-run] [rule] [delete] [insert NUM] [prepend] allow|deny|reject|limit [in|out [on INTERFACE]] [log|log-all] [proto PROTOCOL] [from ADDRESS [port PORT | app APPNAME ]] [to ADDRESS [port PORT | app APPNAME ]] [comment COMMENT] ufw [--dry-run] route [delete] [insert NUM] [prepend] allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto PROTOCOL] [from ADDRESS [port PORT | app APPNAME]] [to ADDRESS [port PORT | app APPNAME]] [comment COMMENT] ufw [--dry-run] [--force] delete NUM ufw [--dry-run] app list|info|default|update ..........
Правило limit
С помощью правила limit
можно ограничить количество подключений к определённому порту с одного IP-адреса, это может быть полезно для защиты от атак перебора паролей. По умолчанию подключения блокируются, если пользователь пытается создать шесть и больше подключений за 30 секунд:
$ sudo ufw limit ssh/tcp
Удаление правил
Чтобы удалить правило, используется команда delete
. Например, мы создали два правила для порта 80:
$ sudo ufw allow out 80/tcp $ sudo ufw deny in 80/tcp
Теперь удалим эти два правила:
$ sudo ufw delete allow out 80/tcp $ sudo ufw delete deny in 80/tcp
Более удобный способ — удалять правила по номеру
$ sudo ufw status numbered Состояние: активен В Действие Из -------------------------------------------------------- [ 1] OpenSSH ALLOW IN Anywhere [ 2] Apache Full ALLOW IN Anywhere [ 3] OpenSSH (v6) ALLOW IN Anywhere (v6) [ 4] Apache Full (v6) ALLOW IN Anywhere (v6)
$ sudo ufw delete 2 Удаление: allow 'Apache Full' Продолжить операцию (y|n)? y Правило удалено
Логирование UFW
Чтобы отлаживать работу UFW, могут понадобится журналы работы брандмауэра. Для включения журналирования используется команда logging
:
$ sudo ufw logging on
Также этой командой можно изменить уровень логирования (low
, medium
, high
):
$ sudo ufw logging medium
Лог сохраняется в директории /var/log/ufw
.
Отключение UFW
Чтобы полностью отключить UFW — достаточно использовать команду disable
:
$ sudo ufw disable
Если что-то пошло не так, можно использовать команду reset
для сброса настроек до состояния по умолчанию:
$ sudo ufw reset
Файлы конфигурации
Файлы конфигурации расположены в файле /etc/default/ufw
и директории /etc/ufw
/etc/default/ufw
— основная конфигурация для политик по умолчанию, поддержки IPv6 и модулей ядра/etc/ufw/before[6].rules
— правила в этих файлах выполняются до добавления каких-либо правил с помощью командыufw
/etc/ufw/after[6].rules
— правила в этих файлах выполняются после любых правил, добавленных с помощью командыufw
/etc/ufw/sysctl.conf
— параметры сети ядра/etc/ufw/ufw.conf
— устанавливает, включен лиufw
при загрузке, и устанавливаетLOGLEVEL
Файл /etc/default/ufw
# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback # accepted). You will need to 'disable' and then 'enable' the firewall for # the changes to take affect. IPV6=yes # Set the default input policy to ACCEPT, DROP, or REJECT. Please note that if # you change this you will most likely want to adjust your rules. DEFAULT_INPUT_POLICY="DROP" # Set the default output policy to ACCEPT, DROP, or REJECT. Please note that if # you change this you will most likely want to adjust your rules. DEFAULT_OUTPUT_POLICY="ACCEPT" # Set the default forward policy to ACCEPT, DROP or REJECT. Please note that # if you change this you will most likely want to adjust your rules DEFAULT_FORWARD_POLICY="DROP" # Set the default application policy to ACCEPT, DROP, REJECT or SKIP. Please # note that setting this to ACCEPT may be a security risk. See 'man ufw' for # details DEFAULT_APPLICATION_POLICY="SKIP" # By default, ufw only touches its own chains. Set this to 'yes' to have ufw # manage the built-in chains too. Warning: setting this to 'yes' will break # non-ufw managed firewall rules MANAGE_BUILTINS=no # # IPT backend # # only enable if using iptables backend IPT_SYSCTL=/etc/ufw/sysctl.conf # Extra connection tracking modules to load. IPT_MODULES should typically be # empty for new installations and modules added only as needed. See # 'CONNECTION HELPERS' from 'man ufw-framework' for details. Complete list can # be found in net/netfilter/Kconfig of your kernel source. Some common modules: # nf_conntrack_irc, nf_nat_irc: DCC (Direct Client to Client) support # nf_conntrack_netbios_ns: NetBIOS (samba) client support # nf_conntrack_pptp, nf_nat_pptp: PPTP over stateful firewall/NAT # nf_conntrack_ftp, nf_nat_ftp: active FTP support # nf_conntrack_tftp, nf_nat_tftp: TFTP support (server side) # nf_conntrack_sane: sane support IPT_MODULES=""
По умолчанию ufw
изменяет только цепочки, которые сам и создает. Базовые цепочки (INPUT
, FORWARD
, OUTPUT
и т.д.) остаются без изменений. Это можно изменить с помощью опции MANAGE_BUILTINS
— но это может сломать правила, которые были добавлены не ufw
.
Файл /etc/ufw/sysctl.conf
# Configuration file for setting network variables. Please note these settings # override /etc/sysctl.conf and /etc/sysctl.d. If you prefer to use # /etc/sysctl.conf, please adjust IPT_SYSCTL in /etc/default/ufw. See # Documentation/networking/ip-sysctl.txt in the kernel source code for more # information. # Uncomment this to allow this host to route packets between interfaces #net/ipv4/ip_forward=1 #net/ipv6/conf/default/forwarding=1 #net/ipv6/conf/all/forwarding=1 # Disable ICMP redirects. ICMP redirects are rarely used but can be used in # MITM (man-in-the-middle) attacks. Disabling ICMP may disrupt legitimate # traffic to those sites. net/ipv4/conf/all/accept_redirects=0 net/ipv4/conf/default/accept_redirects=0 net/ipv6/conf/all/accept_redirects=0 net/ipv6/conf/default/accept_redirects=0 # Ignore bogus ICMP errors net/ipv4/icmp_echo_ignore_broadcasts=1 net/ipv4/icmp_ignore_bogus_error_responses=1 net/ipv4/icmp_echo_ignore_all=0 # Don't log Martian Packets (impossible addresses) # packets net/ipv4/conf/all/log_martians=0 net/ipv4/conf/default/log_martians=0 #net/ipv4/tcp_fin_timeout=30 #net/ipv4/tcp_keepalive_intvl=1800 # Uncomment this to turn off ipv6 autoconfiguration #net/ipv6/conf/default/autoconf=1 #net/ipv6/conf/all/autoconf=1 # Uncomment this to enable ipv6 privacy addressing #net/ipv6/conf/default/use_tempaddr=2 #net/ipv6/conf/all/use_tempaddr=2
Добавленные пользователем правила сохраняются в файлах /etc/ufw/user[6].rules
. Например, после выполнения команды
$ sudo ufw allow OpenSSH
В эти два файла будут добавлены строки, разрешающие подключение по протоколу tcp на 22-ом порту
*filter .......... ### RULES ### ### tuple ### allow tcp 22 0.0.0.0/0 any 0.0.0.0/0 OpenSSH - in -A ufw-user-input -p tcp --dport 22 -j ACCEPT -m comment --comment 'app_OpenSSH' ### END RULES ### ..........
*filter .......... ### RULES ### ### tuple ### allow tcp 22 ::/0 any ::/0 OpenSSH - in -A ufw6-user-input -p tcp --dport 22 -j ACCEPT -m comment --comment 'app_OpenSSH' ### END RULES ### ..........
Настройка иаршрутизации
Допустим, есть локальная сеть 172.16.220.0/24
и сервер с двумя сетевыми интерфейсами. Интерфейс eth0
смотрит в интернет и имеет ip-адрес 123.123.123.123
, интерфейс eth1
смотрит во внутреннюю сеть. Сервер должен обеспечивать выход в интернет для всех компьютеров сети.
Включить ufw
и разрешить запуск при загрузке системы
$ sudo ufw allow OpenSSH $ sudo ufw enable
Разрешить пересылку (forward) пакетов между интерфейсами
$ sudo nano /etc/ufw/sysctl.conf
# Uncomment this to allow this host to route packets between interfaces net/ipv4/ip_forward=1 #net/ipv6/conf/default/forwarding=1 #net/ipv6/conf/all/forwarding=1
$ sudo ufw disable $ sudo ufw enable
Политика по умолчанию для цепочек INPUT
, FORWARD
, OUTPUT
$ sudo nano /etc/default/ufw
DEFAULT_INPUT_POLICY="DROP" DEFAULT_OUTPUT_POLICY="ACCEPT" DEFAULT_FORWARD_POLICY="DROP"
Подмена ip-адреса источника на ip-адрес 123.123.123.123
$ sudo nano /etc/ufw/before.rules
# добавляем правило для цепочки POSTROUTING таблицы nat *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 172.16.220.0/24 -o eth0 -j MASQUERADE COMMIT # Don't delete these required lines, otherwise there will be errors *filter :ufw-before-input - [0:0] :ufw-before-output - [0:0] :ufw-before-forward - [0:0] :ufw-not-local - [0:0] # End required lines .......... # разрешить пересылку (forward) пакетов между интерфейсами -A ufw-before-forward -i eth1 -o etho -s 172.16.220.0/24 -j ACCEPT -A ufw-before-forward -i eth0 -o eth1 -d 172.16.220.0/24 -j ACCEPT .......... COMMIT
Перезагружаем ufw
, чтобы применить новые правила
$ sudo ufw reload
Дополнительно
- Настройка брандмауэра с UFW в Ubuntu 18.04
- Использование утилиты UFW на Linux
- How to Set Up a Firewall with UFW on Ubuntu
Поиск: CLI • Linux • Ubuntu • Команда • UFW • iptables • Фаервол • Брандмауэр • TCP • UDP • Порт