Файрвол представляет из себя группу правил, регулирующих тот или иной трафик. Вы можете создать на аккаунте до 50 групп правил — то есть до 50 файрволов.
Группы правил двух типов: разрешающие трафик (whitelist) и запрещающие трафик (blacklist). Сервис может быть добавлен только в группы одного типа: только разрешающие или только запрещающие.
При этом, сервис может быть добавлен в две, три и более группы правил одного типа (например, в пять групп правил, разрешающих трафик). В этом случае для сервиса будут применены все заданные правила.
Управлять файрволом можно из раздела «Сети» — «Firewall» или из сетевых настроек конкретного сервиса.
При использовании файрвола важно учитывать следующее:
ping
сервера. Мы рекомендуем не создавать правила для исходящего трафика, если для этого нет серьезной необходимости.При настройке правил файрвола для сервисов в приватных сетях необходимо корректно настроить правила для работы DHCP — службы, через которую сервисы получают свой приватный IP-адрес. Если этого не сделать, сервис может потерять IP после истечения срока аренды, что приведет к нарушению работы NAT и недоступности сервиса в интернете.
Эти настройки необходимо выполнять, если у вас установлены разрешающие правила файрвола для сервисов, добавленных в приватные сети.
Пример настройки:
Вместо 192.168.0.1
подставьте адрес шлюза вашей приватной сети либо разрешите всю серую подсеть (в этом примере 192.168.0.0/24
) или любые адреса (0.0.0.0/0
).
Если в одну группу файрвола добавлены сервисы из разных приватных сетей с разными адресами шлюзов, нужно таким же образом создать разрешающее правило для каждого шлюза.
255.255.255.255
по порту 67/UDP.Пример настройки:
Вместо 255.255.255.255
можно также указывать 0.0.0.0/0
, чтобы разрешить все адреса.
Панель управления
Вы также можете перейти к созданию файрвола со страницы сервиса.
В блоке «Firewall» кликните «Настроить» — «Создать новый». Вы будете переадресованы в раздел «Firewall» на форму создания новой группы правил, где сможете задать правила, добавить сервисы и сохранить новый файрвол.
Terraform
Дальнейшее описание предполагает, что у вас уже установлен Terraform, настроен провайдер Timeweb Cloud и инициализирован проект (шаги 1–4 этой инструкции).
Создание файрвола начинается с ресурса twc_firewall
, который задает сам файрвол, указав его имя и описание:
resource "twc_firewall" "example-firewall" {
name = "example-firewall"
description = "Example firewall description"
}
Этот код создает файрвол с именем «example-firewall» и описанием «Example firewall description».
Полный пример включает создание двух серверов, создание файрвола, привязку серверов к файрволу и настройку популярных портов:
terraform {
required_providers {
twc = {
source = "tf.timeweb.cloud/timeweb-cloud/timeweb-cloud"
}
}
required_version = ">= 1.5.3"
}
provider "twc" {
token = "<ваш токен>"
}
# Запрос данных о системе Ubuntu 22.04
data "twc_os" "os" {
family = "linux"
name = "ubuntu"
version = "22.04"
}
# Запрос данных о пресете (конфигурации сервера)
data "twc_presets" "preset" {
description_short = "Cloud-15"
}
# Создание серверов
resource "twc_server" "vds-with-preset" {
name = "Server 1"
os_id = data.twc_os.os.id
preset_id = data.twc_presets.preset.id
}
resource "twc_server" "vds-with-preset-2" {
name = "Server 2"
os_id = data.twc_os.os.id
preset_id = data.twc_presets.preset.id
}
# Добавление IPv4 для созданных серверов
resource "twc_floating_ip" "floating-ip1" {
availability_zone = "spb-3"
resource {
type = "server"
id = twc_server.vds-with-preset.id
}
}
resource "twc_floating_ip" "floating-ip2" {
availability_zone = "spb-3"
resource {
type = "server"
id = twc_server.vds-with-preset-2.id
}
}
# Создание файрвола и привязка серверов
resource "twc_firewall" "example-firewall" {
name = "example-firewall"
description = "Example firewall with multiple port rules"
link {
id = twc_server.vds-with-preset.id
type = "server"
}
link {
id = twc_server.vds-with-preset-2.id
type = "server"
}
}
# Создание правил для популярных портов
resource "twc_firewall_rule" "example-firewall-rules" {
firewall_id = twc_firewall.example-firewall.id
description = "Правила для популярных портов
"
for_each = toset([for port in [22, 80, 443, 8080] : format("%d", port)])
direction = "ingress"
port = each.value
protocol = "tcp"
}
Перед запуском не забудьте указать токен. Чтобы выполнить этот код, сохраните его в файл с расширением .tf
и выполните команды:
terraform init
terraform plan
terraform apply
Это инициализирует Terraform и применит конфигурацию для создания необходимых ресурсов.
Вы можете создавать новые правила при создании нового файрвола, добавлять новые правила к уже существующим файрволам, редактировать заданные правила и удалять их.
Панель управления
Если выбрана опция «Разрешить трафик», будет разрешен только трафик, соответствующий созданному правилу. Весь остальной трафик будет заблокирован.
Если выбрана опция «Запретить трафик», будет разрешен весь трафик, кроме заданного правилами.
Чтобы создать новое правило при создании нового файрвола:
0.0.0.0/0
, чтобы разрешить/запретить все адреса и подсети, — либо можно выбрать Для всех адресов. В настоящий момент опция «Для всех адресов» работает для IPv4; для аналогичной настройки для IPv6-адресов потребуется создать отдельное правило, указав адрес ::/0
.Вы также можете добавлять новые правила к уже существующим файрволам. Для этого:
Чтобы внести изменения в уже созданное правило:
Чтобы удалить правило:
Terraform
Чтобы добавить правило, разрешающее входящий трафик (ingress
) на определенный порт (например, порт 80
для HTTP
), используйте ресурс twc_firewall_rule
:
resource "twc_firewall_rule" "example-firewall-rule" {
firewall_id = twc_firewall.example-firewall.id
description = "Allow HTTP traffic"
direction = "ingress"
port = 80
protocol = "tcp"
cidr = "0.0.0.0/0"
}
Этот пример показывает, как разрешить трафик на порт 80
из любого источника (CIDR 0.0.0.0/0
).
Если необходимо создать правила для диапазона портов, это можно сделать с помощью цикла for_each
и функции range
:
resource "twc_firewall_rule" "example-firewall-rules" {
firewall_id = twc_firewall.example-firewall.id
description = "Правила для диапазона портов 8000-8010"
for_each = toset([for port in range(8000, 8010) : format("%d", port)])
direction = "ingress"
port = each.value
protocol = "tcp"
}
В этом примере функция range(8000, 8010)
создает список чисел от 8000
до 8010
включительно, который затем передается в toset()
для создания уникального набора. Для каждого порта в этом диапазоне создается отдельное правило в файрволе. Поскольку for_each
требует для работы с коллекциями данные, состоящие из строк, порты преобразуются в строки с помощью функции format()
, где %d
— это формат для целого числа. В переменную port
подставляется результат цикла each.value
.
Для настройки доступа к нескольким конкретным портам также можно использовать цикл. Например, чтобы открыть порты 22
, 80
, 443
и 8080
:
resource "twc_firewall_rule" "example-firewall-rules" {
firewall_id = twc_firewall.example-firewall.id
description = "Правила для популярных портов"
for_each = toset([for port in [22, 80, 443, 8080] : format("%d", port)])
direction = "ingress"
port = each.value
protocol = "tcp"
}
Мы создаем список портов [22, 80, 443, 8080]
и используем цикл for
для преобразования каждого порта в строку с помощью функции format("%d", port)
. В результате для каждого порта создается отдельное правило в файрволе.
Вы можете добавлять сервисы в файрвол как при его создании, так и в дальнейшем, когда файрвол уже существует.
Добавить сервис в разрешающую группу правил можно только при условии, что он не добавлен в запрещающую группу правил, и наоборот.
Сервис может быть одновременно добавлен в несколько групп правил одного типа (разрешающих или запрещающих).
Панель управления
При создании файрвола кликните «Выбрать сервис» в блоке «Подключить к сервисам» и выберите нужные:
Чтобы добавить сервисы в уже существующий файрвол:
Вы можете добавить сервис в файрвол со страницы самого сервиса. Как и при создании нового файрвола, это можно сделать:
После перехода на нужную вкладку:
Сервис может быть одновременно добавлен в несколько разных групп правил.
Terraform
Чтобы привязать серверы к файрволу, необходимо использовать ссылки. Создадим два сервера через Terraform и привяжем их к файрволу:
# Запрос данных о системе Ubuntu 22.04
data "twc_os" "os" {
family = "linux"
name = "ubuntu"
version = "22.04"
}
# Запрос данных о пресете (конфигурации сервера)
data "twc_presets" "preset" {
description_short = "Cloud-15"
}
# Создание первого сервера
resource "twc_server" "vds-with-preset" {
name = "Server 1"
os_id = data.twc_os.os.id
preset_id = data.twc_presets.preset.id
}
# Создание второго сервера
resource "twc_server" "vds-with-preset-2" {
name = "Server 2"
os_id = data.twc_os.os.id
preset_id = data.twc_presets.preset.id
}
# Добавление IPv4 для созданных серверов
resource "twc_floating_ip" "floating-ip1" {
availability_zone = "spb-3"
resource {
type = "server"
id = twc_server.vds-with-preset.id
}
}
resource "twc_floating_ip" "floating-ip2" {
availability_zone = "spb-3"
resource {
type = "server"
id = twc_server.vds-with-preset-2.id
}
}
# Создание файрвола и привязка серверов
resource "twc_firewall" "example-firewall" {
name = "example-firewall"
description = "Example firewall with multiple port rules"
link {
id = twc_server.vds-with-preset.id
type = "server"
}
link {
id = twc_server.vds-with-preset-2.id
type = "server"
}
}
С помощью директивы link
мы привязали оба сервера к файрволу.
Исключить сервис из файрвола можно:
После перехода на нужную вкладку:
Чтобы безвозвратно удалить файрвол:
Файрвол и созданные в нем правила будут удалены и больше не будут применяться к добавленным сервисам.
У меня с файрволлом squid работает очень странно. Некоторые сайты открывает, а некоторые нет. Файрволл отключаю - все открывается.
Вообщем несколько дней тестов - с включенным файрволлом время отклика сервера от 3х секунд. Без него - 0.2с, пока проще настроить iptables, потом еще посмотрим может наладят.....
Не ясно работает ли правила для всех адресов с ipv6. Или нужно отдельно создавать для ipv6 тоже?
Здравствуйте, Дмитрий!
Сейчас опция «Для всех адресов» включает только IPv4-адреса.
В перспективе доработаем и добавим IPv6, но пока что для аналогичной настройки для IPv6 нужно создать отдельное правило, указав адрес
::/0
.А как узнать Подсеть?
Получить базовые знания по подсетям можно на всеми известном ресурсе: https://tweb.link/mhrwc
Помочь посчитать корректную маску подсети для диапазона могут онлайн калькуляторы.
Если возникнут вопросы, всегда готовы помочь, можете написать тут или в поддержку.