Tutorial

Настройка брандмауэра с UFW в Ubuntu 18.04

Published on January 7, 2020
Русский
Настройка брандмауэра с UFW в Ubuntu 18.04

Предыдущая версия настоящего обучающего модуля составлена Хейзел Вирдо

Введение

UFW (Uncomplicated Firewall или «простой брандмауэр») представляет собой интерфейс iptables, предназначенный для упрощения процесса настройки брандмауэра. Хотя iptables — надежный и гибкий инструмент, начинающим бывает сложно научиться использовать его для правильной настройки брандмауэра. Если вы ищете способ защитить вашу сеть и не знаете, какой инструмент для этого использовать, UFW может отлично вам подойти.

В этом обучающем модуле вы научитесь настраивать брандмауэр с помощью UFW в Ubuntu 18.04

Предварительные требования

Для данного обучающего модуля вам потребуется следующее:

UFW устанавливается в Ubuntu по умолчанию. Если вы удалили UFW, вы можете установить его с помощью команды sudo apt install ufw.

Шаг 1 — Использование IPv6 с UFW (опционально)

Этот обучающий модуль предусматривает использование протокола IPv4, но подходит и для IPv6, если вы активировали этот протокол. Если на вашем сервере Ubuntu активирован протокол IPv6, настройте UFW для поддержки IPv6, чтобы UFW управлял правилами брандмауэра и для IPv6, и для IPv4. Для этого откройте конфигурацию UFW с помощью nano или своего предпочитаемого редактора.

  1. sudo nano /etc/default/ufw

Убедитесь, что параметр IPV6 имеет значение yes. Конфигурация должна выглядеть следующим образом:

/etc/default/ufw excerpt
IPV6=yes

Сохраните и закройте файл. После активации UFW будет настроен для записи правил брандмауэра для IPv4 и для IPv6. Однако перед включением UFW нужно убедиться, что ваш брандмауэр настроен для подключения через SSH. Для начала настроим политики по умолчанию.

Шаг 2 — Настройка политик по умолчанию

Если вы только начинаете работать с брандмауэром, прежде всего нужно настроить политики по умолчанию. Эти правила определяют обработку трафика, который явно не соответствует каким-либо другим правилам. По умолчанию UFW настроен так, чтобы запрещать все входящие соединения и разрешать все исходящие соединения. Это означает, что любые попытки связаться с вашим сервером будут заблокированы, но любые приложения на вашем сервере будут иметь связь с внешним миром.

Восстановим правила UFW по умолчанию, чтобы продолжить выполнение этого обучающего модуля. Для восстановления настроек по умолчанию для UFW необходимо использовать следующие команды:

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

Эти команды задают значения по умолчанию, запрещая входящие соединения и разрешая исходящие. Такие параметры брандмауэра по умолчанию достаточны для персонального компьютера, но серверам обычно нужно отвечать на поступающие запросы внешних пользователей. Мы рассмотрим это чуть позже.

Шаг 3 — Разрешение подключений SSH

Если мы сейчас активируем брандмауэр UFW, все входящие соединения будут запрещены. Это означает, что нам нужно создать правила, прямо разрешающие легитимные входящие соединения (например, SSH или HTTP), если мы хотим, чтобы сервер отвечал на такие запросы. Если вы используете облачный сервер, вы наверное хотите разрешить входящие соединения SSH, чтобы можно было подключаться к серверу и управлять им.

Чтобы разрешить на сервере входящие соединения SSH, вы можете использовать следующую команду:

  1. sudo ufw allow ssh

Эта команда создаст правила брандмауэра, которые разрешат все соединения на порту 22, который демон SSH прослушивает по умолчанию. UFW знает, какой порт имеет в виду команда allow ssh, потому что он указан как услуга в файле /etc/services.

Однако мы можем записать эквивалентное правило, указав номер порта вместо имени службы. Например, эта команда работает так же, как показанная выше:

  1. sudo ufw allow 22

Если вы настроили демон SSH для использования другого порта, вам нужно будет указать соответствующий порт. Например, если ваш сервер SSH прослушивает порт 2222, вы можете использовать эту команду, чтобы разрешить соединения с этим портом:

  1. sudo ufw allow 2222

Теперь ваш брандмауэр настроен, чтобы разрешать входящие соединения SSH, и мы можем его активировать.

Шаг 4 — Активация UFW

Чтобы активировать UFW, используйте следующую команду:

  1. sudo ufw enable

Вы получите предупреждение о том, что команда может нарушить существующие соединения 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

Помимо указания порта или службы есть другие способы разрешить другие соединения.

Определенные диапазоны портов

С помощью UFW вы можете указывать диапазоны портов. Некоторые приложения используют для соединений не один порт, а несколько.

Например, чтобы разрешить соединения X11, которые используют порты 6000-6007, нужно использовать следующие команды:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

Когда вы указываете диапазоны портов с помощью UFW, вы должны указать протокол (tcp или udp), к которому должны применяться эти правила. Мы не упоминали этого ранее, поскольку если протокол не указать, оба протокола будут разрешены, что подходит для большинства случаев.

Конкретные IP-адреса

При работе с UFW вы также можете указывать конкретные IP-адреса. Например, если вы хотите разрешить соединения с определенного IP-адреса, например с рабочего или домашнего адреса 203.0.113.4, вам нужно использовать опцию from, а затем указать IP-адрес:

  1. sudo ufw allow from 203.0.113.4

Также вы можете указать определенный порт, к которому IP-адресу разрешено подключаться. Для этого нужно добавить опцию to any port, а затем указать номер порта. Например, если вы хотите разрешить IP-адресу 203.0.113.4 подключаться к порту 22 (SSH), нужно использовать следующую команду:

  1. sudo ufw allow from 203.0.113.4 to any port 22

Подсети

Если вы хотите разрешить подсеть IP-адресов, вы можете указать маску сети с помощью нотации CIDR. Например, если вы хотите разрешить все IP-адреса в диапазоне от 203.0.113.1 до 203.0.113.254, вы можете использовать следующую команду:

  1. sudo ufw allow from 203.0.113.0/24

Также вы можете указывать порт назначения, к которому разрешено подключаться подсети 203.0.113.0/24. В качестве примера мы используем порт 22 (SSH):

  1. sudo ufw allow from 203.0.113.0/24 to any port 22

Подключения к определенному сетевому интерфейсу

Если вы хотите создать правило брандмауэра, применимое только к определенному сетевому интерфейсу, вы можете использовать для этого опцию «allow in on», а затем указать имя сетевого интерфейса.

Прежде чем продолжить, вам может понадобиться просмотреть сетевые интерфейсы. Для этого нужно использовать следующую команду:

  1. ip addr
Output 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) для этого интерфейса с помощью следующей команды:

  1. sudo ufw allow in on eth0 to any port 80

Это позволит вашему серверу принимать запросы HTTP из публичной части интернета.

Если вы хотите использовать сервер базы данных MySQL (порт 3306) для прослушивания соединений на интерфейсе частной сети (например, eth1), вы можете использовать следующую команду:

  1. sudo ufw allow in on eth1 to any port 3306

Это позволит другим серверам в вашей частной сети подключаться к вашей базе данных MySQL.

Шаг 6 — Запрет соединений

Если вы не изменяли политику по умолчанию для входящих соединений, UFW настроен на запрет всех входящих соединений. Это упрощает процесс создания защищенной политики брандмауэра, поскольку вам нужно создавать правила, прямо разрешающие соединения через конкретные порты и IP-адреса.

Однако в некоторых случаях вам может понадобиться запретить определенные соединения по IP-адресу источника или подсети, например, в случае атаки с этого адреса. Если вы захотите изменить политику по умолчанию для входящих соединений на allow (что не рекомендуется), вам нужно будет создать правила deny для любых служб или IP-адресов, которым вы не хотите разрешать подключение.

Для записи правил deny можно использовать описанные выше команды, заменяя allow на deny.

Например, чтобы запретить соединения по протоколу HTTP, вы можете использовать следующую команду:

  1. sudo ufw deny http

Если вы захотите запретить все подключения с IP-адреса 203.0.113.4, вы можете использовать следующую команду:

  1. sudo ufw deny from 203.0.113.4

Теперь посмотрим, как можно удалять правила.

Шаг 7 — Удаление правил

Знать процедуру удаления правил брандмауэра так же важно, как и знать процедуру их создания. Существует два разных способа указывать правила для удаления: по номеру правила или по фактическому правилу (так же, как правила задавались при их создании). Начнем с метода удаления по номеру правила, поскольку этот метод проще.

По номеру правила

Если вы используете номер правила для удаления правил брандмауэра, прежде всего нужно получить список правил брандмауэра. Команда UFW status имеет опцию отображение номеров рядом с каждым правилом, как показано здесь:

  1. sudo ufw status numbered
Numbered Output:
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

Если мы решим удалить правило 2, разрешающее соединения через порт 80 (HTTP), мы можем указать его в команде UFW delete, как показано здесь:

  1. sudo ufw delete 2

После этого откроется диалогового окна подтверждения удаления правила 2, разрешающего соединения HTTP. Если вы включили поддержку IPv6, вы можете также удалить соответствующее правило для IPv6.

По фактическому имени правила

Вместо номеров правил можно указывать фактические имена удаляемых правил. Например, если вы хотите удалить правило allow http, вы можете использовать следующую команду:

  1. sudo ufw delete allow http

Также вы можете указать это правило как allow 80, а не указывать имя службы:

  1. sudo ufw delete allow 80

Этот метод удалит правила IPv4 и IPv6, если они существуют.

Шаг 8 — Проверка состояния и правил UFW

Вы можете проверить состояние UFW в любое время с помощью следующей команды:

  1. 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

Используйте команду status, если хотите проверить настройку брандмауэра UFW.

Шаг 9 — Отключение или сброс UFW (необязательно)

Если вы решите прекратить использовать UFW, вы можете отключить его с помощью следующей команды:

  1. sudo ufw disable

Любые правила, созданные с помощью UFW, больше не будут активными. Если впоследствии вы захотите активировать UWF, вы всегда сможете использовать команду sudo ufw enable.

Если вы уже настроили правила UFW, но решите начать заново, вы можете использовать команду reset:

  1. sudo ufw reset

Эта команда отключит UFW и удалит все ранее заданные правила. Помните, что если вы изменяли политики по умолчанию, их первоначальные настройки не восстановятся. Это позволит заново начать настройку UFW.

Заключение

Теперь ваш брандмауэр настроен так, чтобы разрешать (как минимум) соединения SSH. Обязательно разрешите другие входящие соединения для вашего сервера, но при этом ограничьте все ненужные соединения, чтобы сделать свой сервер функциональным и безопасным.

Чтобы узнать о других распространенных конфигурациях UFW, ознакомьтесь с обучающим модулем Основы UFW: распространенные правила и команды брандмауэра.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar

Developer Advocate

Dev/Ops passionate about open source, PHP, and Linux.



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
2 Comments


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Thanks

Как заблокировать p2p трафик с помощью ufw? Гугл не ответил на этот вопрос.

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more