Введение
UFW (Uncomplicated Firewall) — это интерфейс для iptables, разработанный для упрощения процесса настройки брандмауэра. Несмотря на то, что iptables — мощный и гибкий инструмент, освоение его для правильной настройки брандмауэра может быть сложным для новичков. Если вы хотите начать защищать свою сеть и не знаете, какой инструмент использовать, UFW может стать для вас хорошим выбором.
Предпосылки
Если вы используете Ubuntu 16.04 или более раннюю версию, рекомендуем обновиться до более новой версии, так как Ubuntu больше не поддерживает эти версии. Эти инструкции помогут вам обновить вашу версию Ubuntu.
Шаг 1 — Убедитесь, что IPv6 включен
В последних версиях Ubuntu IPv6 включён по умолчанию. На практике это означает, что большинство правил брандмауэра, добавленных на сервер, будут включать как IPv4, так и IPv6, причём последний будет обозначен как v6 в выводе команды UFW status. Чтобы убедиться, что IPv6 включён, можно проверить файл конфигурации UFW по адресу /etc/default/ufw. Откройте этот файл с помощью nano или вашего любимого редактора командной строки:
sudo nano /etc/default/ufwЗатем убедитесь, что для параметра IPV6 установлено значение «Да». Это должно выглядеть примерно так:
IPV6=yesСохраните и закройте файл. Если вы используете nano, нажмите CTRL+X, затем Y и ENTER для подтверждения.
При включении UFW на следующем этапе этого руководства он будет настроен на запись правил брандмауэра как IPv4, так и IPv6.
Шаг 2 — Установка политик по умолчанию
Если вы только начинаете работать с UFW, хорошим первым шагом будет проверка политик брандмауэра по умолчанию. Эти правила определяют, как обрабатывается трафик, явно не соответствующий другим правилам.
По умолчанию UFW настроен на запрет всех входящих и разрешение всех исходящих соединений. Это означает, что любой, кто попытается получить доступ к вашему серверу, не сможет подключиться, в то время как любое приложение на сервере сможет получить доступ к внешнему миру. Включены дополнительные правила, разрешающие определённые службы и порты в качестве исключений из этой общей политики.
Чтобы убедиться, что вы сможете усвоить остальную часть этого руководства, теперь вам нужно настроить политики UFW по умолчанию для входящего и исходящего трафика.
Чтобы запретить входящую политику UFW по умолчанию, выполните следующую команду:
sudo ufw default deny incomingOutput
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)Чтобы установить разрешительную политику исходящего трафика UFW по умолчанию, выполните следующую команду:
Эти команды устанавливают настройки по умолчанию, запрещающие входящие соединения и разрешающие исходящие. Для персонального компьютера одних этих настроек брандмауэра по умолчанию может быть достаточно, но серверам часто требуется отвечать на входящие запросы от внешних пользователей. Мы рассмотрим это позже.
Шаг 3 — Разрешите SSH-подключения
Если вы сейчас включите брандмауэр UFW, он будет блокировать все входящие соединения. Это означает, что если вы хотите, чтобы ваш сервер отвечал на подобные запросы, вам потребуется создать правила, которые явно разрешают легитимные входящие соединения, например, SSH или HTTP. Если вы используете облачный сервер, вам, вероятно, потребуется разрешить входящие SSH-соединения, чтобы иметь возможность подключаться к нему и управлять им.
Разрешить профиль приложения OpenSSH UFW
После установки большинство приложений, использующих сетевые подключения, регистрируют профиль приложения в UFW, что позволяет пользователям быстро разрешать или запрещать внешний доступ к службе. Вы можете проверить, какие профили в данный момент зарегистрированы в UFW, с помощью следующей команды:
sudo ufw app listOutput
Available applications:
OpenSSHЧтобы включить профиль приложения OpenSSH, выполните следующую команду:
Разрешить SSH на основе имени сервиса
Другой способ настройки UFW для разрешения входящих SSH-подключений — указать имя его службы:
Включение SSH на основе номера порта
В качестве альтернативы вы можете написать эквивалентное правило, указав порт вместо имени профиля приложения или службы. Например, эта команда работает так же, как и предыдущие примеры:
sudo ufw allow 22Output
Rule added
Rule added (v6)Если вы настроили службу SSH на использование другого порта, вам потребуется указать соответствующий порт. Например, если ваш SSH-сервер прослушивает порт 2222, вы можете использовать эту команду, чтобы разрешить подключения по этому порту:
sudo ufw allow 2222Output
Rule added
Rule added (v6)Теперь, когда ваш брандмауэр настроен на разрешение входящих SSH-подключений, вы можете включить его.
Шаг 4 — Включение UFW
Теперь ваш брандмауэр должен быть настроен на разрешение SSH-подключений. Чтобы проверить, какие правила были добавлены, даже если брандмауэр всё ещё отключён, выполните следующую команду:
sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSHУбедившись, что у вас есть правило, разрешающее входящие SSH-подключения, вы можете включить брандмауэр с помощью следующей команды:
sudo ufw enable
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Вы получите предупреждение о том, что эта команда может нарушить существующие SSH-подключения. Вы уже настроили правило брандмауэра, разрешающее SSH-подключения, поэтому можете продолжить. В ответ на запрос введите y и нажмите ENTER.
Теперь брандмауэр включён. Выполните команду sudo ufw status verbose, чтобы просмотреть настроенные правила. В оставшейся части этого руководства более подробно рассматривается использование UFW, например, разрешение или запрет различных типов подключений.
Шаг 5 — Разрешите другие подключения
На этом этапе вам следует разрешить все остальные соединения, необходимые вашему серверу. Набор разрешенных соединений зависит от ваших конкретных потребностей. Вы уже знаете, как писать правила, разрешающие соединения на основе профиля приложения, имени службы или порта. Вы уже сделали это для SSH на порту 22. Вы также можете сделать это для:
- HTTP на порту 80, который является тем же портом, который используется незашифрованными веб-серверами, с использованием sudo ufw allow http или sudo ufw allow 80
- HTTPS на порту 443, который является тем же портом, который используют зашифрованные веб-серверы, используя sudo ufw allow https или sudo ufw allow 443
- Apache с HTTP и HTTPS, использование sudo ufw allow 'Apache Full'‘
- Nginx с HTTP и HTTPS, используя sudo ufw allow 'Nginx Full'‘
Не забудьте проверить, какие профили приложений доступны для вашего сервера, с помощью команды sudo ufw app list.
Помимо указания порта или известного имени сервиса, существует несколько других способов разрешить подключения. Некоторые из них мы рассмотрим ниже.
Конкретные диапазоны портов
С помощью UFW можно указать диапазон портов. Некоторые приложения используют несколько портов вместо одного.
Например, чтобы разрешить соединения X11 с использованием портов 6000-6007, используйте следующие команды:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
При указании диапазонов портов с помощью UFW необходимо указать протокол (TCP или UDP), к которому должны применяться правила. Мы не упоминали об этом ранее, поскольку отсутствие указания протокола автоматически разрешает оба протокола, что в большинстве случаев приемлемо.
Конкретные IP-адреса
При работе с UFW вы также можете указывать IP-адреса в правилах. Например, если вы хотите разрешить подключения с определённого IP-адреса, например, с вашего рабочего или домашнего IP-адреса 203.0.113.4, используйте параметр from и введите нужный IP-адрес:
sudo ufw allow from 203.0.113.4Output
Rule addedВы также можете указать порт, к которому IP-адресу разрешено подключаться, добавив к каждому порту номер порта. Например, если вы хотите разрешить 203.0.113.4 подключаться к порту 22 (SSH), используйте следующую команду:
sudo ufw allow from 203.0.113.4 to any port 22
OutputRule added
Подсети
Если вы хотите разрешить доступ к подсети IP-адресов, вы можете указать маску сети, используя нотацию CIDR. Например, если вы хотите разрешить доступ ко всем IP-адресам в диапазоне от 203.0.113.1 до 203.0.113.254, вы можете использовать следующую команду:
sudo ufw allow from 203.0.113.0/24
Output
Rule addedАналогичным образом вы можете указать порт назначения, к которому разрешено подключаться подсети 203.0.113.0/24. В качестве примера мы снова используем порт 22 (SSH):
sudo ufw allow from 203.0.113.0/24 to any port 22Output
Rule addedПодключение к определенному сетевому интерфейсу
Если вы хотите создать правило брандмауэра, которое будет применяться только к определенному сетевому интерфейсу, вы можете сделать это, указав «Разрешить ведение журнала», а затем имя сетевого интерфейса.
Прежде чем продолжить, выполните поиск сетевых интерфейсов. Для этого используйте следующую команду:
ip addrOutput Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .Выделенный вывод показывает имена сетевых интерфейсов. Обычно они называются, например, eth0 или enp3s2.
Итак, если на вашем сервере имеется публичный сетевой интерфейс eth0, вы можете разрешить ему HTTP-трафик (порт 80) с помощью этой команды:
sudo ufw allow in on eth0 to any port 80Output
Rule added
Rule added (v6)Это позволит вашему серверу принимать HTTP-запросы из общедоступного Интернета.
Или, например, если вы хотите, чтобы ваш сервер базы данных MySQL (порт 3306) прослушивал соединения на частном сетевом интерфейсе eth1, вы можете использовать следующую команду:
sudo ufw allow in on eth1 to any port 3306Output
Rule added
Rule added (v6)Это позволяет другим серверам в вашей частной сети подключаться к вашей базе данных MySQL.
Шаг 6 — Отменить соединения
Если вы не изменили политику по умолчанию для входящих подключений, UFW настроен на запрет всех входящих подключений. В целом, это упрощает процесс создания безопасной политики брандмауэра, требуя от вас создания правил, явно разрешающих прохождение определенных портов и IP-адресов.
Однако иногда требуется запретить определённые соединения на основе исходного IP-адреса или подсети, например, если вы знаете, что ваш сервер подвергается атаке оттуда. Кроме того, если вы хотите изменить политику входящего трафика по умолчанию на разрешённую (что не рекомендуется), вам потребуется создать запрещающие правила для каждой службы или IP-адреса, с которых вы не хотите разрешать соединения.
Чтобы написать запрещающие правила, вы можете использовать команды, описанные ранее, заменив allow на deny.
Например, чтобы отклонить HTTP-соединения, вы можете использовать эту команду:
sudo ufw deny httpOutput
Rule added (v6)Или, если вы хотите запретить все соединения с 203.0.113.4, вы можете использовать эту команду:
sudo ufw deny from 203.0.113.4Output
Rule addedВ некоторых случаях может потребоваться заблокировать исходящие соединения с сервера. Чтобы запретить всем пользователям использовать порт на сервере, например, порт 25 для SMTP-трафика, можно использовать команду deny out с указанием номера порта:
sudo ufw deny out 25Output
Rule added
Rule added (v6)Это заблокирует весь исходящий SMTP-трафик на сервере.
Шаг 7 — Удаление правил
Умение удалять правила брандмауэра так же важно, как и умение их создавать. Существует два способа указать, какие правила нужно удалить: по номеру правила или по понятному имени (аналогично тому, как правила указываются при их создании).
Удалить правило UFW по номеру
Чтобы удалить правило UFW по его номеру, сначала необходимо получить пронумерованный список всех правил брандмауэра. Команда UFW status позволяет отображать номера рядом с каждым правилом, как показано здесь:
sudo ufw status numberedNumbered Output:
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN AnywhereЕсли вы решили удалить правило №2, разрешающее соединения через порт 80 (HTTP), вы можете указать его в команде удаления UFW следующим образом:
sudo ufw delete 2Output
Deleting:
allow 80
Proceed with operation (y|n)? y
Rule deletedПосле этого вам будет предложено подтвердить своё решение, а затем будет удалено правило 2, разрешающее HTTP-подключение. Обратите внимание: если у вас включён IPv6, вам также потребуется удалить соответствующее правило IPv6.
Удалить правило UFW по имени
Вместо использования номеров правил вы также можете ссылаться на правило с понятным для человека именем, которое определяется типом правила (обычно разрешающее или запрещающее) и именем службы или номером порта, на которые распространяется правило, или именем профиля приложения, если оно используется. Например, если вы хотите удалить разрешающее правило для профиля приложения Apache Full, который был ранее включён, вы можете использовать следующую команду:
sudo ufw delete allow "Apache Full"Output
Rule deleted
Rule deleted (v6)
Команда удаления работает таким же образом для правил, созданных путём ссылки на службу по имени или порту. Например, если вы ранее создали правило, разрешающее HTTP-подключения sudo ufw разрешить http Удалить правило можно следующим образом:
sudo ufw delete allow httpOutput
Rule deleted
Rule deleted (v6)Поскольку имена служб взаимозаменяемы с номерами портов при указании правил, вы также можете сослаться на то же правило allow 80 вместо allow http:
sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)Поскольку имена служб взаимозаменяемы с номерами портов при указании правил, вы также можете сослаться на то же правило allow 80 вместо allow http:
sudo ufw delete allow 80Output
Rule deleted
Rule deleted (v6)При удалении правил UFW по имени удаляются как правила IPv4, так и правила IPv6, если таковые имеются.
Шаг 8 — Проверьте статус и правила UFW
В любой момент вы можете проверить статус UFW с помощью этой команды:
sudo ufw status verboseЕсли UFW отключен, что установлено по умолчанию, вы увидите что-то вроде этого:
Output
Status: inactiveЕсли UFW включён (что и должно быть, если вы выполнили шаг 3), в выводе будет указано, что он включён, и перечислены все установленные правила. Например, если брандмауэр настроен на разрешение SSH-подключений (порт 22) из любой точки мира, вывод может выглядеть примерно так:
Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhereاگر میخواهید بررسی کنید که UFW چگونه فایروال را پیکربندی کرده است، از دستور status استفاده کنید.
مرحله ۹ – غیرفعال کردن یا تنظیم مجدد فایروال
اگر تصمیم دارید که از فایروال UFW استفاده نکنید، میتوانید آن را با این دستور غیرفعال کنید:
sudo ufw disableOutput
Firewall stopped and disabled on system startupВсе правила, созданные вами с помощью UFW, больше не будут активны. Если вам понадобится включить их позже, вы всегда сможете sudo ufw enable Бегать.
Если вы уже настроили правила UFW, но решили начать заново, вы можете использовать команду сброса:
sudo ufw resetOutput
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'Это отключит UFW и удалит все ранее заданные правила. Это позволит вам начать работу с UFW заново. Имейте в виду, что если вы измените политики по умолчанию, они не вернутся к своим исходным настройкам.
Заключение
Ваш брандмауэр теперь настроен на разрешение (как минимум) SSH-подключений. Не забудьте разрешить все остальные входящие соединения, необходимые вашему серверу, и одновременно ограничить все ненужные соединения, чтобы обеспечить работоспособность и безопасность сервера.
Более подробную информацию о распространенных конфигурациях UFW см. в руководстве.
Основы UFW: общие правила и команды брандмауэра для безопасности Linux
Проверьте сами.









