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

Вступление

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

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

Предпосылки

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

  • Один сервер Ubuntu 16.04 с пользователем sudo без полномочий root, который можно настроить, выполнив шаги 1-3 в файлеInitial Server Setup with Ubuntu 16.04 tutorial.

UFW по умолчанию устанавливается в Ubuntu. Если по какой-то причине он был удален, вы можете установить его с помощьюsudo apt-get 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 знает, что означают 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.

Брандмауэр теперь активен. Не стесняйтесь запускать команду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

  • FTP через порт 21, который используется для передачи файлов в незашифрованном виде (который вам, вероятно, не следует использовать в любом случае), используяsudo ufw allow ftp илиsudo ufw allow 21/tcp

Есть несколько других способов разрешить другие соединения, кроме указания порта или известной службы.

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

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

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

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

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

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

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

sudo ufw allow from 15.15.15.51

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

sudo ufw allow from 15.15.15.51 to any port 22

Subnets

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

sudo ufw allow from 15.15.15.0/24

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

sudo ufw allow from 15.15.15.0/24 to any port 22

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

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

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

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

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

Итак, если на вашем сервере есть общедоступный сетевой интерфейс с именем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

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

sudo ufw deny from 15.15.15.51

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

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

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

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

Если вы используете номер правила для удаления правил брандмауэра, первое, что вам нужно сделать, - это получить список правил брандмауэра. Команда состояния 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