ufw – это утилита для конфигурирования межсетевого экрана Netfilter. Она использует интерфейс командной строки, состоящий из небольшого числа простых команд.
ufw установлен по-умолчанию на Ubuntu. Если у Вас его нет, установить с помощью apt-get:
# apt-get install ufw
Использование IPv6 с ufw
Если на сервере Ubuntu включен протокол IPv6, убедитесь, что ufw настроен на поддержку протокола IPv6, чтобы управлять правилами брандмауэра для протокола IPv6 в дополнение к протоколу IPv4. Для этого откройте конфигурацию ufw в любимом редакторе. Мы будем использовать vim:
# vim /etc/default/ufw
Затем убедитесь, что значение “IPV6” равно “yes”. Это должно выглядеть так:
...
IPV6=yes
...
Сохранить и выйти (Написать :х и нажать Enter)
Когда ufw включен, он будет настроен для записи правил брандмауэра IPv4 и IPv6.
Этот учебник написан с IPv4 в виду, но будет работать нормально для IPv6 до тех пор, как вы включите его.
Проверка состояния и правил ufw
В любое время можно проверить состояние ufw с помощью этой команды:
# ufw status verbose
По умолчанию ufw отключен, поэтому вы должны увидеть что-то вроде этого:
Status: inactive
Если ufw активен, выходные данные скажут, что он активен, и это перечислит любые правила, которые установлены. Например, если брандмауэр настроен на разрешение подключений SSH (порт 22) из любого места, выходные данные могут выглядеть примерно так:
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 настроил брандмауэр.
Прежде чем включить ufw, мы должны убедиться, что брандмауэр настроен на подключение по SSH. Начнем с установки политик по умолчанию.
Настройка политик по-умолчанию
Если вы только начинаете работу с брандмауэром, первые правила, которые необходимо определить – это политики по-умолчанию. Эти правила управляют обработкой трафика, который явно не соответствует никаким другим правилам. По умолчанию ufw запрещает все входящие подключения и разрешает все исходящие. Это означает, что любой, кто пытается достичь вашего сервера, не сможет подключиться, в то время как любое приложение на сервере сможет достичь внешнего мира.
Чтобы задать значения по умолчанию, используемые ufw, используйте следующие команды:
# ufw default deny incoming
# ufw default allow outgoing
Как вы уже могли догадаться, эти команды по умолчанию запрещают входящие и разрешают исходящие подключения. Эти значения брандмауэра по умолчанию сами по себе могут быть достаточными для персонального компьютера, но серверы обычно должны отвечать на входящие запросы от внешних пользователей.
Разрешить SSH-подключения
Если бы мы включили наш брандмауэр ufw сейчас, он бы запретил все входящие соединения. Это означает, что нам нужно будет создать правила, которые явно разрешают законные входящие соединения—SSH или HTTP-соединения, например, если мы хотим, чтобы наш сервер отвечал на эти типы запросов. Если вы используете облачный сервер, вы, вероятно, захотите разрешить входящие ssh-соединения, чтобы вы могли подключаться к серверу и управлять им.
Чтобы настроить сервер на разрешение входящих SSH-подключений, можно использовать эту команду ufw:
# ufw allow ssh
Это создаст правила брандмауэра, которые разрешат все подключения на порту 22, который является портом, который прослушивает демон SSH. ufw знает, что такое “ssh” и множество других имен служб, потому что он указан как служба, использующая порт 22 в файле /etc/services.
Мы можем написать эквивалентное правило, указав порт вместо имени службы. Например, эта команда работает так же, как и выше:
# ufw allow 22
Если демон SSH настроен на использование другого порта, необходимо указать соответствующий порт. Например, если SSH-сервер прослушивает порт 2222, можно использовать эту команду для разрешения подключений к этому порту:
# ufw allow 2222
Теперь, когда ваш брандмауэр настроен на разрешение входящих SSH-подключений, мы можем включить его.
Включить ufw
Чтобы включить ufw, используйте эту команду:
# ufw enable
Вы получите предупреждение, которое говорит, что “команда может нарушить существующие соединения ssh” (“command may disrupt existing ssh connections”) Мы уже настроили правило брандмауэра, которое разрешает SSH-соединения, поэтому его можно продолжить. Ответьте на приглашение y.
Брандмауэр теперь активен. Не стесняйтесь выполнять команду ufw status verbose, чтобы просмотреть установленные правила.
Разрешить другие подключения
Теперь вы должны разрешить все другие соединения, на которые должен отвечать ваш сервер. Соединения, которые вы должны разрешить, зависят от ваших конкретных потребностей. К счастью, вы уже знаете, как писать правила, разрешающие подключения на основе имени службы или порта — мы уже сделали это для SSH на порту 22.
Мы покажем несколько примеров очень распространенных служб, которые вам, возможно, потребуется разрешить. Если у вас есть другие службы, для которых вы хотите разрешить все входящие подключения, следуйте этому формату.
HTTP—порт 80
С помощью этой команды можно разрешить HTTP-соединения, которые используются незашифрованными веб-серверами:
# ufw allow http
Если вы предпочитаете использовать номер порта 80, используйте эту команду:
# ufw allow 80
HTTPS—порт 443
С помощью этой команды можно разрешить HTTPS-соединения, используемые зашифрованными веб-серверами:
# ufw allow https
Если вы не хотите использовать номер порта 443, используйте эту команду:
# ufw allow 443
FTP—порт 21
С помощью этой команды можно разрешить FTP-соединения, которые используются для незашифрованных передач файлов (которые вы, вероятно, не должны использовать в любом случае):
# ufw allow ftp
Если вы предпочитаете использовать номер порта, 21, используйте эту команду:
# ufw allow 21/tcp
Разрешить определенные диапазоны портов
Диапазоны портов можно указать с помощью ufw. Некоторые приложения используют несколько портов вместо одного.
Например, чтобы разрешить подключения X11, использующие порты 6000-6007, используйте следующие команды:
# ufw allow 6000:6007/tcp
# ufw allow 6000:6007/udp
При указании диапазонов портов в ufw необходимо указать протокол (tcp или udp), к которому должны применяться правила. Мы не упоминали об этом раньше, потому что не указание протокола просто позволяет использовать оба протокола, что в большинстве случаев нормально.
Разрешить определенные IP-адреса
При работе с ufw можно также указать IP-адреса. Например, если вы хотите разрешить подключения с конкретного IP-адреса, такие как рабочий или домашний адрес 11.11.11.11, нужно указать “from”, затем IP-адрес:
# ufw allow from 11.11.11.11
Вы также можете указать конкретный порт, к которому IP-адрес может подключаться, добавив “to any port”, а затем номер порта. Например, если вы хотите разрешить 11.11.11.11 подключаться к порту 22 (SSH), используйте следующую команду:
# ufw allow from 11.11.11.11 to any port 22
Разрешить подсети
Если требуется разрешить подсеть IP-адресов, это можно сделать с помощью нотации CIDR для указания маски сети. Например, если необходимо разрешить все IP-адреса в диапазоне от 11.11.11.1 до 11.11.11.254, можно использовать следующую команду:
# ufw allow from 11.11.11.0/24
Кроме того, можно также указать порт назначения, к которому подсети 11.11.11.0/24 разрешено подключаться. Опять же, мы будем использовать порт 22 (SSH) в пример:
# ufw allow from 11.11.11.0/24 to any port 22
Разрешить подключения к определенному сетевому интерфейсу
Если вы хотите создать правило брандмауэра, которое применяется только к определенному сетевому интерфейсу, вы можете сделать это, указав “allow in on”, а затем имя сетевого интерфейса.
Перед продолжением может потребоваться поиск сетевых интерфейсов. Для этого используйте следующую команду:
# ip addr
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) с помощью этой команды:
# ufw allow in on eth0 to any port 80
Это позволит серверу получать HTTP-запросы из интернета.
Или, если вы хотите, чтобы ваш сервер баз данных MySQL (порт 3306) прослушивал соединения на интерфейсе частной сети eth1, например, можно использовать эту команду:
# ufw allow in on eth1 to any port 3306
Это позволит другим серверам в частной сети подключаться к вашей базе данных MySQL.
Запретить соединения
Если вы не изменили политику по умолчанию для входящих подключений, ufw настроен на запрет всех входящих подключений. Как правило, это упрощает процесс создания политики безопасного брандмауэра, требуя создания правил, явно разрешающих определенные порты и IP-адреса. Однако иногда необходимо запретить определенные подключения на основе IP-адреса источника или подсети, возможно, потому, что вы знаете, что ваш сервер подвергается атаке оттуда. Кроме того, если вы хотите изменить политику входящих подключений по умолчанию на Разрешить (что не рекомендуется в интересах безопасности), необходимо создать правила запрета для всех служб или IP-адресов, для которых не требуется разрешать подключения.
Для написания запрещающих правил можно использовать команды, описанные выше, но заменить “allow” на “deny”.
Например, чтобы запретить HTTP-соединения, можно использовать следующую команду:
# ufw deny http
Или, если вы хотите запретить все соединения с 11.11.11.11, вы можете использовать эту команду:
# ufw deny from 11.11.11.11
Если вам нужна помощь в написании любых других запрещающих правил, просто посмотрите на предыдущие разрешающие правила и напишите их соответствующим образом.
Удалить правила
Умение удалять правила брандмауэра так же важно, как и умение их создавать. Существует два способа указать, какие правила следует удалить: по номеру правила или по фактическому правилу (аналогично тому, как правила были заданы при их создании). Мы начнем с метода удалить по номеру правила, потому что это проще, по сравнению с написанием фактических правил для удаления, если вы новичок в ufw.
Удалить по номеру правила
Если вы используете номер правила для удаления правил брандмауэра, первое, что вам нужно сделать, это получить список правил брандмауэра. Команда ufw status имеет возможность отображать номера рядом с каждым правилом, как показано здесь:
# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Если мы решим, что хотим удалить Правило 2, которое разрешает подключения через порт 80 (HTTP), мы можем указать его в команде ufw delete следующим образом:
# ufw delete 2
Будет показано приглашение подтверждения на удаление Правила 2, которое позволяет соединения HTTP. Обратите внимание, что если IPv6 включен, необходимо удалить соответствующее правило IPv6.
По фактическому правилу
Например, если вы хотите удалить правило “allow http”, вы можете написать его следующим образом:
# ufw delete allow http
Можно также указать правило “allow 80”, а не по имени службы:
# ufw delete allow 80
Этот метод удаляет правила IPv4 и IPv6, если они существуют.
Как отключить ufw
Если вы не хотите использовать ufw по любой причине, вы можете отключить его с помощью этой команды:
# ufw disable
Все правила, созданные с помощью ufw, больше не будут активны. Вы всегда можете запустить ufw enable, если вам нужно активировать его снова.
Сброс правил ufw
Если у вас уже настроены правила ufw, но вы решили, что хотите начать все сначала, можно использовать команду reset:
# ufw reset
Это отключит ufw и удалит все правила, которые были определены ранее. Имейте в виду, что политики по умолчанию не изменятся на исходные параметры, если вы измените их в любой момент. Это позволит вам начать заново с ufw.
Вывод
Теперь брандмауэр должен быть настроен на разрешение (по крайней мере) подключений SSH. Обязательно разрешите любые другие входящие соединения, которые должен принимать ваш сервер, ограничивая любые ненужные соединения, чтобы ваш сервер был функциональным и безопасным.
Чтобы узнать о более распространенных конфигурациях ufw, ознакомьтесь с этим руководством.
Удачи!