Во всех дистрибутивах Linux для обеспечения сетевой безопасности и изоляции внутренних процессов от внешней среды используется брандмауэр iptables. Но его настройка может показаться очень сложной для новых пользователей, поэтому многие дистрибутивы создают собственные оболочки, которые упрощают процесс настройки.
В Ubuntu используется оболочка под названием UFW или Uncomplicated FireWall. В этой статье мы разберём, как выполняется настройка UFW Ubuntu, а также как пользоваться основными возможностями этой программы.
Содержание статьи
Команда UFW Ubuntu
1. Синтаксис ufw
Для управления возможностями брандмауэра используется одноимённая команда - ufw. Давайте сначала рассмотрим её опции и параметры, а потом перейдём к настройке. Синтаксис команды такой:
$ ufw опции действие параметры
Опции определяют общие настройки поведения утилиты, действие указывает, что нужно сделать, а параметры - дополнительные сведения для действия, например, IP-адрес или номер порта.
Сначала разберём опции утилиты:
- --version - вывести версию брандмауэра;
- --dry-run - тестовый запуск, никакие реальные действия не выполняются.
2. Команды UFW
Для выполнения действий с утилитой доступны такие команды:
- enable - включить фаерволл и добавить его в автозагрузку;
- disable - отключить фаерволл и удалить его из автозагрузки;
- reload - перезагрузить файервол;
- default - задать политику по умолчанию, доступно allow, deny и reject, а также три вида трафика - incoming, outgoing или routed;
- logging - включить журналирование или изменить уровень подробности;
- reset - сбросить все настройки до состояния по умолчанию;
- status - посмотреть состояние фаервола;
- show - посмотреть один из отчётов о работе;
- allow - добавить разрешающее правило;
- deny - добавить запрещающее правило;
- reject - добавить отбрасывающее правило;
- limit - добавить лимитирующее правило;
- delete - удалить правило;
- insert - вставить правило.
Это были все опции и команды, которые вы можете использовать в ufw. Как видите, их намного меньше, чем в iptables и всё выглядит намного проще, а теперь давайте рассмотрим несколько примеров настройки.
Настройка UFW Ubuntu
1. Как включить UFW
Сначала нужно отметить, что в серверной версии Ubuntu UFW по умолчанию включён, а в версии для рабочего стола он отключён. Поэтому сначала смотрим состояние фаервола:
sudo ufw status
Если он не включён, то его необходимо включить:
sudo ufw enable
Затем вы можете снова посмотреть состояние:
sudo ufw status
Обратите внимание, что если вы работаете по SSH, то перед тем, как включать брандмауэр, нужно добавить правило, разрешающее работу по SSH, иначе у вас не будет доступа к серверу. Подождите с включением до пункта 3.
2. Политика по умолчанию
Перед тем, как мы перейдём к добавлению правил, необходимо указать политику по умолчанию. Какие действия будут применяться к пакетам, если они не подпадают под созданные правила ufw. Все входящие пакеты будем отклонять:
sudo ufw default deny incoming
А все исходящие разрешим:
sudo ufw default allow outgoing
3. Добавление правил UFW
Чтобы создать разрешающее правило, используется команда allow. Вместо allow могут использоваться и запрещающие правила ufw - deny и reject. Они отличаются тем, что для deny компьютер отсылает отправителю пакет с уведомлением об ошибке, а для reject просто отбрасывает пакет и ничего не отсылает. Для добавления правил можно использовать простой синтаксис:
$ ufw allow имя_службы
$ ufw allow порт
$ ufw allow порт/протокол
Например, чтобы открыть порт ufw для SSH, можно добавить одно из этих правил:
sudo ufw allow OpenSSH
sudo ufw allow 22
sudo ufw allow 22/tcp
Первое и второе правила разрешают входящие и исходящие подключения к порту 22 для любого протокола, третье правило разрешает входящие и исходящие подключения для порта 22 только по протоколу tcp.
Посмотреть доступные имена приложений можно с помощью команды:
sudo ufw app list
Можно также указать направление следования трафика с помощью слов out для исходящего и in для входящего.
$ ufw allow направление порт
Например, разрешим только исходящий трафик на порт 80, а входящий запретим:
sudo ufw allow out 80/tcp
sudo ufw deny in 80/tcp
Также можно использовать более полный синтаксис добавления правил:
$ ufw allow proto протокол from ip_источника to ip_назначения port порт_назначения
В качестве ip_источника может использоваться также и адрес подсети. Например, разрешим доступ со всех IP-адресов для интерфейса eth0 по протоколу tcp к нашему IP-адресу и порту 3318:
sudo ufw allow proto tcp from 0.0.0.0/24 to 192.168.1.5 port 3318
4. Правила limit ufw
С помощью правил limit можно ограничить количество подключений к определённому порту с одного IP-адреса, это может быть полезно для защиты от атак перебора паролей. По умолчанию подключения блокируются, если пользователь пытается создать шесть и больше подключений за 30 секунд:
sudo ufw limit ssh/tcp
К сожалению, настроить время и количество запросов можно только через iptables.
5. Просмотр состояния UFW
Посмотреть состояние и действующие на данный момент правила можно командой status:
sudo ufw status
Чтобы получить более подробную информацию, используйте параметр verbose:
sudo ufw status verbose
С помощью команды show можно посмотреть разные отчеты:
- raw - все активные правила в формате iptables;
- builtins - правила, добавленные по умолчанию;
- before-rules - правила, которые выполняются перед принятием пакета;
- user-rules - правила, добавленные пользователем;
- after-rules - правила, которые выполняются после принятия пакета;
- logging-rules - правила логгирования пакетов;
- listening - отображает все прослушиваемые порты и правила для них;
- added - недавно добавленные правила;
Например, посмотрим список всех правил iptables:
sudo ufw show raw
Посмотрим все прослушиваемые порты:
sudo ufw show listening
Или недавно добавленные правила:
sudo ufw show added
6. Удаление правил ufw
Чтобы удалить правило ufw, используется команда delete. Например, удалим ранее созданные правила для порта 80:
sudo ufw delete allow out 80/tcp
sudo ufw delete deny in 80/tcp
7. Логгирование в ufw
Чтобы отлаживать работу ufw, могут понадобится журналы работы брандмауэра. Для включения журналирования используется команда logging:
sudo ufw logging on
sudo ufw logging medium
Также этой командой можно изменить уровень логгирования:
- low - минимальный, только заблокированные пакеты;
- medium - средний, заблокированные и разрешённые пакеты;
- high - высокий.
Лог сохраняется в папке /var/log/ufw. Каждая строчка лога имеет такой синтаксис:
В качестве действия приводится то, что UFW сделал с пакетом, например ALLOW, BLOCK или AUDIT. Благодаря анализу лога настройка UFW Ubuntu станет гораздо проще.
8. Отключение UFW
Если вы хотите полностью отключить UFW, для этого достаточно использовать команду disable:
sudo ufw disable
Также, если вы что-то испортили в настройках и не знаете как исправить, можно использовать команду reset для сброса настроек до состояния по умолчанию:
sudo ufw reset
Выводы
В этой небольшой статье мы разобрали, как настроить UFW Ubuntu для защиты вашего компьютера от угроз из сети. Это особенно актуально для серверов, потому что они постоянно доступны из интернета.
Какой смысл учить синтакс UFW, если проще раз и на все системы выучить синтаксис iptables? Чтоб, как в Windows: занять процессор лишними процессами, чтоб не простаивал впустую?
А лучше поставить Gufw Firewall и неморочить голову.
iptables наше все 🙂
iptables - это не брандмаэр.
iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter ...
14.789s ufw.service
Как уменьшить время? Или отложить старт? Или брандмаэр роутера вкл?
Если нужно разрешить сразу 2 порта для работы, их перечислять через запятую? sudo ufw allow 22, 80
> Они отличаются тем, что для deny компьютер отсылает отправителю пакет с уведомлением об ошибке, а для reject просто отбрасывает пакет и ничего не отсылает.
Перепутано.
У меня в журнале ядра вижу записи UFW BLOCK каждые 2-4 минуты:А
kernel [UFW BLOCK] IN=enp1s0 OUT= MAC=***(я стёр) SRC=192.168.0.1 DST=224.0.0.1 LEN=32 TOS=0x10 PREC=0x40 TTL=1 ID=41743 PROTO=2
Не знаю, как это понимать и что делать?
192.168.0.1 - это же адрес маршрутизатора
224.0.0.1 - адрес, предназначен для обращения ко всем группам (все узлы и серверы, вовлечённые в данный момент в Мультивещание-обмен, например, участвующие в видеоконференции).
IPTV и Multicast отключены у меня в настройках маршрутизатора.
Про то, работает ли ufw постоянно:
https://askubuntu.com/a/737915
Как тут описано, и на 20 убунту это успешно проверилось, ufw не работает на постоянке. У меня, например,
service ufw status
показывает, что сервис активен, но закончил работу примерно при запуске компьютера. Может ошибаюсь, конечно.
По теме "проще раз и на все системы выучить синтаксис iptables?"
У вас, коллега, извините - очень упрощенное мировоззрение. Если вы работаете в одной системе, которую сами обслуживаете и настраиваете, то - нет проблем, вы можете выбрать один наиболее удобный для вас инструмент, изучить его и пользоваться. И - на здоровье.
Однако, когда вам приходится обслуживать и сопровождать распределенную систему, где на каждом объекте - свой хозяин и свой набор удобных ему инструментов, волей-неволей - приходится понимать и уметь настраивать работу разных инструментов.
Спасибо за статью.
А вот можно как-то с помощью ufw разрешить доступ, например не с ip адреса, а с доменного имени?
Есть динамический белый адрес, к нему прикручен duckdns.org, и есть vps. Раз в месяц адрес меняется и лезть каждый раз в консоль vps, чтобы поменять правило не очень удобно.
Нет. Сетевое взаимодействие осуществляется с использованием IP-адресов. Доменные адреса служат только для преобразования человекопонятного (доменного) имени в IP-адрес. Когда вы взаимодействуете с каким-то сервисом по доменному имени, сначала оно преобразуется в IP-адрес и взаимодействие осуществляется уже по нему.
Включил ufw, перезагрузил комп и он при включении мониторов повис на минуты 3 и потом включился. После отключения ufw комп включился нормально. Некоторое время поковырявшись в сети отыскал причину, ufw блочит каким то образом видео драйвер, из за чего выскакивает ошибка [drm:nv_drm_master_set [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000700] Failed to grab modeset ownership. Может кто знает какое правило надо прописать чтоб его отпустило?))))
Нет слова логгирование. Есть слово журналирование.
Молодежь нынче русских слов не разумеет.
А "журнал" это типо русское слово? =). Оно очевидно французское. А ежели (надеюсь "ежели" русское) вы используете англоязычную программу, настойки которой на английском и которая пишет данные в файл log, то вполне удобно называть это словом "логирование" (уж сколько тут букв Г не знаю, сами решайте). Слово "журналирование" слышал редко, звучит как-то излишне неуклюже.
ахаха)) бывают же умники, логирование им не нравится - этот глагол уже как родной в обиходе у всех постоянно
Интересно слово комментарий может тоже не использовать?
Впервые столкнулся с такой ошибкой:
:~# sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ERROR: problem running ufw-init
/lib/ufw/ufw-init: 48: /etc/default/ufw: Syntax error: EOF in backquote substitution
Что это такое и что с этим делать, чтобы запустить UFW?