Во всех дистрибутивах 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 для защиты вашего компьютера от угроз из сети. Это особенно актуально для серверов, потому что они постоянно доступны из интернета.
Preply - платформа, позволяющая найти репетитора, который поможет вам заговорить на новом языке. На платформе есть репетиторы со всего мира для английского, немецкого, французского и многих других языков. Особенность платформы в том, что у каждого преподавателя есть видео-превью, где вы можете услышать его произношение и акцент, чтобы понять, будет ли вам комфортно работать вместе. Посмотреть детали



















Какой смысл учить синтакс 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 отключены у меня в настройках маршрутизатора.
arp-запрос
Про то, работает ли 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?
проверяй строку 48 в /etc/default/ufw
В статье есть недостаток.
Думаю, стоит добавить, что имена сервисов ufw берёт из файла:
/etc/services
Таким образом, это не будет работать:
sudo ufw allow OpenSSH
Потому что:
grep -i ssh /etc/services
ssh 22/tcp # SSH Remote Login Protocol