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

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


Введение

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

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

Предпосылки

Прежде чем вы начнете использовать это руководство, у вас должна быть отдельная учетная запись суперпользователя без полномочий root — пользователь с привилегиями sudo — настроенный на вашем сервере Ubuntu. Вы можете узнать, как это сделать, выполнив как минимум шаги 1-3 в учебнике Initial Server Setup with Ubuntu 14.04.

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

  1. sudo apt-get install ufw

Использование IPv6 с UFW

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

  1. sudo nano /etc/default/ufw

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

...
IPV6=yes
...

Сохранить и выйти. Нажмите Ctrl-X, чтобы выйти из файла, затем Y, чтобы сохранить внесенные изменения, затем ENTER, чтобы подтвердить имя файла.

Когда UFW включен, он будет настроен на запись правил брандмауэра IPv4 и IPv6.

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

Проверьте статус и правила UFW

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

  1. sudo ufw status verbose

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

Output:
Status: inactive

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

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

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

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

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

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

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

Разрешить SSH-соединения

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

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

  1. sudo ufw allow ssh

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

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

  1. sudo ufw allow 22

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

  1. sudo ufw allow 2222

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

Включить UFW

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

  1. sudo ufw enable

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

Теперь брандмауэр активен. Не стесняйтесь запускать команду sudo ufw status verbose, чтобы увидеть установленные правила.

Разрешить другие подключения

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

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

HTTP — порт 80

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

  1. sudo ufw allow http

Если вы предпочитаете использовать номер порта 80, используйте эту команду:

  1. sudo ufw allow 80

HTTPS — порт 443

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

  1. sudo ufw allow https

Если вы предпочитаете использовать номер порта 443, используйте эту команду:

  1. sudo ufw allow 443

FTP — порт 21

FTP-подключения, которые используются для незашифрованной передачи файлов (которые вам, вероятно, все равно не следует использовать), можно разрешить с помощью этой команды:

  1. sudo ufw allow ftp

Если вы предпочитаете использовать номер порта 21, используйте эту команду:

  1. 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, вам нужно указать «от», а затем IP-адрес:

  1. sudo ufw allow from 15.15.15.51

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

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) в качестве примера:

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.

Запретить соединения

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

Чтобы написать запрещающие правила, вы можете использовать команды, которые мы описали выше, за исключением того, что вам нужно заменить «разрешить» на «запретить».

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

  1. sudo ufw deny http

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

sudo ufw deny from 15.15.15.51

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

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

Удалить правила

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

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

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

  1. sudo ufw delete allow http

Вы также можете указать правило с помощью «разрешить 80» вместо имени службы:

  1. sudo ufw delete allow 80

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

Как отключить UFW (необязательно)

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

  1. sudo ufw disable

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

Сбросить правила UFW (необязательно)

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

  1. sudo ufw reset

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

Заключение

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

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

Удачи!