A Межсетевой экран — один из ключевых компонентов обеспечения безопасности системы. Он отвечает за управление входящими и исходящими соединениями в сети. Это основная линия обороны для ваших серверов и данных. Вот почему крайне важно иметь правильно настроенный межсетевой экран. В этом руководстве мы проведем вас по шагам настройки межсетевого экрана с помощью UFW на Ubuntu 18.04.
UFW на Ubuntu
Термин UFW означает «Uncomplicated Firewall» (простой межсетевой экран). Это программа межсетевого экрана по умолчанию, которая поставляется предустановленной в Ubuntu. UFW на самом деле является интерфейсом для iptables. Цель UFW — упростить настройку и управление межсетевым экраном. Хотя iptables сам по себе является надежным и гибким инструментом, он не очень дружелюбен к новичкам. UFW облегчает работу как новичкам, так и опытным пользователям.
Сначала ознакомьтесь с нашим всеобъемлющим руководством, которое поможет вам ознакомиться с базовыми функциями UFW. Вы также можете воспользоваться этим руководством для установки вашего сервера Ubuntu. А теперь начнем!
Для начала, если по какой-то причине UFW у вас не установлен, установите его прямо сейчас:
|
1 |
$ sudo apt install ufw |
Настройка UFW
-
Использование IPv6
На данный момент IPv4 все еще доминирует. Учитывая это, большая часть этого руководства также ориентирована на IPv4. К счастью, UFW также поддерживает IPv6. Все, что вам нужно сделать, это включить эту функцию в конфигурационном файле UFW.
Сначала откройте конфигурационный файл UFW в текстовом редакторе. Чтобы сохранить изменения, текстовый редактор должен быть запущен с привилегиями sudo:
|
1 |
$ sudo vim /etc/default/ufw |
Найдите параметр «IPV6» и убедитесь, что для него установлено значение «yes».
-
Политика по умолчанию
Если вы впервые работаете с межсетевым экраном, рекомендуется сначала определить политики по умолчанию. Эти правила определяют, как контролируется трафик, который не соответствует ни одному явному правилу. По умолчанию UFW настроен на отклонение всех входящих соединений, но разрешение всех исходящих соединений. Это означает, что никто не может подключиться к серверу, в то время как приложение, запущенное на сервере, может обращаться вовне.
Следующие команды просто переопределят поведение UFW по умолчанию. Обратите внимание, что это изменит поведение UFW, если оно было изменено ранее:
|
1 2 |
$ sudo ufw default deny incoming $ sudo ufw default allow outgoing |
Для персонального компьютера одних этих правил межсетевого экрана было бы достаточно. Однако серверам требуется больше настроек для надлежащего обеспечения безопасности.
Разрешение SSH-соединений
При текущей настройке UFW будет отклонять все входящие соединения. Для удаленного сервера это недопустимо. Без доступа к серверу ничего сделать нельзя. Чтобы избежать этой проблемы, UFW можно настроить на разрешение входящих SSH или HTTP соединений.
Чтобы разрешить SSH-соединения с сервером, выполните следующую команду. По сути, она укажет UFW разрешить все соединения на порту 22. Это порт, который демон SSH слушает по умолчанию:
|
1 |
$ sudo ufw allow ssh |
Вместо этой команды можно напрямую настроить разрешение подключений к порту 22. Этот порт определен в файле /etc/services:
|
1 |
$ sudo ufw allow 22 |
Поскольку порт 22 является портом по умолчанию для демона SSH, он также может быть подвержен атакам. Что если SSH-сервер настроен на прослушивание другого порта? В такой ситуации UFW должен разрешать подключение к этому порту. Предположим, что SSH-сервер слушает порт 1234, тогда используйте следующую команду:
|
1 |
$ sudo ufw allow 1234 |
Включение UFW
Хотя правила UFW установлены, они ничего не будут делать, пока UFW не будет активирован. По умолчанию UFW отключен, то есть, несмотря на объявление правил, он не будет их применять. Чтобы включить UFW, выполните следующую команду:
|
1 |
$ sudo ufw enable |
UFW может показать предупреждение о возможном разрыве существующих SSH-соединений. Поскольку SSH-соединения были настроены как разрешенные, включение UFW не вызовет никаких сбоев. Чтобы увидеть, какие правила установлены, выполните следующую команду:
|
1 |
$ sudo ufw status verbose |
Разрешение различных соединений
На данном этапе UFW должен быть настроен с другими правилами для стабильной работы. Разрешаемые соединения зависят от ваших конкретных потребностей. Ранее уже было показано, как указать UFW разрешать соединения на основе имени службы или номера порта.
Вот некоторые другие порты, которые очень часто бывают открыты:
- SSH (
порт 22): это порт по умолчанию, настроенный для SSH-соединений. - HTTP (
порт 80): это порт по умолчанию, который используют незашифрованные веб-серверы. - HTTPS (
порт 443): это порт по умолчанию, который используют зашифрованные веб-серверы.
Чтобы разрешить SSH-соединения, выполните одну из следующих команд:
|
1 2 |
$ sudo ufw allow ssh $ sudo ufw allow 22 |
Затем, чтобы разрешить HTTP-соединения, выполните одну из следующих команд:
|
1 2 |
$ sudo ufw allow http $ sudo ufw allow 80 |
Чтобы разрешить HTTPS-соединения, выполните одну из следующих команд:
|
1 2 |
$ sudo ufw allow https $ sudo ufw allow 443 |
Port Range
До сих пор мы демонстрировали, как разрешить определенный порт. Что делать, если требуется диапазон портов? Объявление каждого порта в UFW довольно неэффективно. Некоторые приложения используют несколько портов. К счастью, UFW позволяет объявлять диапазон портов. Для этого используйте следующую структуру команды:
|
1 |
$ sudo ufw allow <start>:<end>/<protocol> |
Следующий пример разрешает соединения X11, использующие порты 6000 по 6007:
|
1 2 |
$ sudo ufw allow 6000:6007/tcp $ sudo ufw allow 6000:6007/udp |
Рекомендуется по возможности указывать протоколы. Однако в большинстве случаев это не обязательно, и все будет работать нормально.
Specific IP Addresses
При использовании UFW также можно фильтровать соединения по конкретным IP-адресам. По умолчанию UFW блокирует соединения с любых IP-адресов. Можно разрешить соединения с определенных IP-адресов. Чтобы разрешить соединение с IP-адреса, используйте следующую структуру команды:
|
1 |
$ sudo ufw allow from <ip_address> |
Вы также можете указать конкретные порты, к которым разрешено подключаться этому IP-адресу. Для этого добавьте to any port, а затем номер порта к команде:
|
1 |
$ sudo ufw allow from <ip_address> to any port <port> |
Subnets
Если вам необходимо разрешить подсеть IP-адресов, это можно сделать с помощью нотации CIDR. В этом примере UFW разрешит соединения с IP-адресов в диапазоне от 203.0.113.1 по 203.0.113.254:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 |
Аналогично предыдущему шагу, также можно указать порт, к которому могут подключаться эти IP-адреса:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 to any port <port> |
Connecting to a Specific Network Interface
В серверной среде к системе может быть подключено несколько сетевых интерфейсов. С помощью UFW можно указать, что определенное правило применяется только к конкретному сетевому интерфейсу. Сначала проверьте все сетевые интерфейсы, подключенные к серверу. Основное внимание уделяется имени целевого сетевого интерфейса:
|
1 |
$ ip addr |
В нашем случае есть только один сетевой интерфейс ens3, который подключается к публичному интернету. Чтобы разрешить входящие соединения с этого сетевого интерфейса, используйте следующую структуру команды:
|
1 |
$ sudo ufw allow in on <network_interface> |
Также можно определить порт, на который может поступать трафик с этого сетевого интерфейса:
|
1 |
$ sudo ufw allow in on <network_interface> to any port <port> |
Denying Connection
По умолчанию UFW будет отклонять подключения из любого источника (за исключением объявленных исключений). Это рекомендуемый способ использования UFW. Однако может потребоваться заблокировать определенные подключения с определенного исходного IP-адреса или подсети. Возможно, по умолчанию в UFW настроено разрешение всех подключений (не рекомендуется).
Чтобы запретить подключение с определенных IP-адресов, для UFW требуются правила запрета. Написание правил запрета довольно просто. Возьмите любое разрешающее правило, замените термин «allow» на «deny» — и вуаля! Оно становится правилом запрета.
Посмотрите на следующий пример. Чтобы запретить любое HTTP-подключение, используйте следующее правило запрета:
|
1 2 |
$ sudo ufw deny http $ sudo ufw deny 80 |
Чтобы запретить подключение от 203.0.113.1, используйте следующее правило запрета:
|
1 |
$ sudo ufw deny from 203.0.113.1 |
Удаление правил
Все, что мы узнали до сих пор, — это как создавать правила. Точно так же, как правила создаются, их можно и удалять. В случае с UFW есть два конкретных способа удаления правила.
-
Удаление правила по номеру
Это самый простой способ удаления правила UFW. Каждое правило в UFW имеет свой номер. Следующая команда выведет все правила UFW вместе с их номерами:
|
1 |
$ sudo ufw status numbered |
Следующая команда удалит правило, указанное по его номеру:
|
1 |
$ sudo ufw delete <номер_правила> |
-
Удаление правила по самому правилу
Это более сложный метод удаления правила. Он требует ручного указания самого правила для его удаления. В следующем примере UFW удалит правило, указанное как allow http:
|
1 |
$ sudo ufw delete allow http |
Правило также могло быть указано как allow 80. В этом случае следующая команда удалит его:
|
1 |
$ sudo ufw delete allow 80 |
Удаление правила удалит его как для IPv4, так и для IPv6.
Проверка статуса и правил UFW
Важно убедиться, активен ли UFW. Чтобы определить статус UFW, выполните следующую команду:
|
1 |
$ sudo ufw status verbose |
Если статус «inactive», то активируйте его, выполнив шаг Включение UFW выше. Если он активен, то UFW сообщит о статусе «active» и выведет список всех активных правил.
Отключение UFW
Если по какой-то причине вы не будете использовать UFW, отключите его с помощью следующей команды:
|
1 |
$ sudo ufw disable |
Если UFW отключен, все созданные правила больше не активны. Однако правила не удаляются. При повторной активации UFW все правила снова станут активными. Что делать, если текущая конфигурация UFW запутана? Вместо удаления правил по одному можно удалить их все одной командой. Чтобы сбросить UFW, выполните следующую команду:
|
1 |
$ sudo ufw reset |
Обратите внимание, что это не изменит поведение UFW по умолчанию, которое было настроено в самом начале.
Заключение
Правильная настройка межсетевого экрана необходима для обеспечения безопасности и функциональности. Он должен быть настроен так, чтобы разрешать только необходимые входящие подключения, ограничивая при этом ненужные.
Если вы хотите ознакомиться с другими решениями для межсетевого экрана, загляните в наш блог для получения дополнительных ресурсов:
- Настройка межсетевого экрана с помощью FirewallD на CentOS 7
- Просмотр и удаление правил межсетевого экрана Iptables
- Как создать надежные меры безопасности для защиты ваших серверов
Приятной работы!











Комментарии
Комментариев пока нет. Будьте первым.