Поиск по сайту:

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


Введение

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

В этом руководстве показано, как настроить брандмауэр с помощью UFW в Ubuntu 16.04.

Предпосылки

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

  • Один сервер Ubuntu 16.04 с пользователем без полномочий root, который можно настроить, выполнив шаги 1–3 в руководстве по начальной настройке сервера с Ubuntu 16.04.

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

Шаг 1. Использование IPv6 с UFW (необязательно)

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

  1. sudo nano /etc/default/ufw

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

...
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 знает, что означают имена 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.

Теперь брандмауэр активен. Не стесняйтесь запускать команду 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
  • FTP через порт 21, который используется для незашифрованной передачи файлов (которую вам, вероятно, все равно не следует использовать), используя sudo ufw allow ftp или sudo ufw allow 21/tcp

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

Конкретные диапазоны портов

Вы можете указать диапазоны портов с помощью 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-адреса, такого как рабочий или домашний IP-адрес 15.15.15.51, вам нужно указать from, тогда Айпи адрес:

  1. sudo ufw allow from 15.15.15.51

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

  1. sudo ufw allow from 15.15.15.51 to any port 22

Подсети

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

  1. sudo ufw allow from 15.15.15.0/24

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

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

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

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

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

  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 или eth1.

Итак, если ваш сервер имеет общедоступный сетевой интерфейс с именем 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-адреса или подсети, возможно, потому, что вы знаете, что ваш сервер атакуется оттуда. Кроме того, если вы хотите изменить политику входящих подключений по умолчанию, чтобы разрешить (что не рекомендуется в интересах безопасности), вам необходимо создать запрещающие правила для любых служб или IP-адресов, для которых вы не хотите разрешать подключения.

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

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

  1. sudo ufw deny http

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

  1. sudo ufw deny from 15.15.15.51

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

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

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

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

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

  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 следующим образом:

  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, больше не будут активны. Вы всегда можете запустить sudo ufw enable, если вам нужно активировать его позже.

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

  1. sudo ufw reset

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

Заключение

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

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