Как настроить брандмауэр с UFW в Ubuntu 18.04

Предыдущая версия этого руководства была написанаHazel Virdó

Вступление

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

Из этого туториала вы узнаете, как настроить брандмауэр с UFW в Ubuntu 18.04.

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

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

[[step-1 -—- using-ipv6-with-ufw-optional]] == Шаг 1. Использование IPv6 с UFW (необязательно)

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

sudo nano /etc/default/ufw

Затем убедитесь, что значениеIPV6 равноyes. Это должно выглядеть так:

/etc/default/ufw excerpt

IPV6=yes

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

[[step-2 -—- setting-up-default-policies]] == Шаг 2. Настройка политик по умолчанию

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

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

sudo ufw default deny incoming
sudo ufw default allow outgoing

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

[[step-3 -—- Allow-ssh-connections]] == Шаг 3. Разрешение SSH-подключений

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

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

sudo ufw allow ssh

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

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

sudo ufw allow 22

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

sudo ufw allow 2222

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

[[step-4 -—- enable-ufw]] == Шаг 4. Включение UFW

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

sudo ufw enable

Вы получите предупреждение о том, что команда может нарушить существующие соединения SSH. Мы уже настроили правило брандмауэра, которое разрешает SSH-соединения, поэтому нормально продолжать. Ответьте на приглашение с помощьюy и нажмитеENTER.

Брандмауэр теперь активен. Запустите командуsudo ufw status verbose, чтобы увидеть установленные правила. В оставшейся части этого учебника рассматривается, как использовать UFW более подробно, например, разрешать или запрещать различные виды соединений.

[[step-5 -—- Allow-other-connections]] == Шаг 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, используйте следующие команды:

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

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

sudo ufw allow from 203.0.113.4 to any port 22

Subnets

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

sudo ufw allow from 203.0.113.0/24

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

sudo ufw allow from 203.0.113.0/24 to any port 22

Соединения с определенным сетевым интерфейсом

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

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

ip addr
Output Excerpt2: eth0:  mtu 1500 qdisc pfifo_fast state
. . .
3: eth1:  mtu 1500 qdisc noop state DOWN group default
. . .

Выделенный вывод указывает имена сетевых интерфейсов. Обычно они называются что-то вродеeth0 илиenp3s2.

Итак, если на вашем сервере есть общедоступный сетевой интерфейс с именемeth0, вы можете разрешить ему HTTP-трафик (порт80) с помощью этой команды:

sudo ufw allow in on eth0 to any port 80

Это позволит вашему серверу получать HTTP-запросы из общедоступного Интернета.

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

sudo ufw allow in on eth1 to any port 3306

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

[[step-6 -—- denying-connections]] == Шаг 6 - Запрещение подключений

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

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

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

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

sudo ufw deny http

Или, если вы хотите запретить все соединения от203.0.113.4, вы можете использовать эту команду:

sudo ufw deny from 203.0.113.4

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

[[step-7 -—- deleting-rules]] == Шаг 7 - Удаление правил

Знать, как удалять правила брандмауэра, так же важно, как знать, как их создавать. Есть два разных способа указать, какие правила удалять: по номеру правила или по фактическому правилу (аналогично тому, как правила были указаны при их создании). Мы начнем с методаdelete by rule number, потому что он проще.

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

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

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, например так:

sudo ufw delete 2

Это покажет запрос подтверждения и затем удалит правило 2, разрешающее HTTP-соединения. Обратите внимание, что если у вас включен IPv6, вы также можете удалить соответствующее правило IPv6.

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

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

sudo ufw delete allow http

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

sudo ufw delete allow 80

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

[[step-8 -—- verify-ufw-status-and-rules]] == Шаг 8. Проверка статуса и правил UFW

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

sudo ufw status verbose

Если UFW отключен, что по умолчанию, вы увидите что-то вроде этого:

OutputStatus: inactive

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

OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

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

[[step-9 -—- dishibited-or-resetting-ufw-optional]] == Шаг 9 - Отключение или сброс UFW (необязательно)

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

sudo ufw disable

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

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

sudo ufw reset

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

Заключение

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

Чтобы узнать о более распространенных конфигурациях UFW, ознакомьтесь с руководствомUFW Essentials: Common Firewall Rules and Commands.

Related