Бесплатная миграция IT-инфраструктуры в облако

Управление Firewall

Файрвол представляет из себя группу правил, регулирующих тот или иной трафик. Вы можете создать на аккаунте до 50 групп правил — то есть до 50 файрволов.

Image 138

Группы правил двух типов: разрешающие трафик (whitelist) и запрещающие трафик (blacklist). Сервис может быть добавлен только в группы одного типа: только разрешающие или только запрещающие. 

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

Управлять файрволом можно из раздела «Сети» — «Firewall» или из сетевых настроек конкретного сервиса.

Принципы работы файрвола

При использовании файрвола важно учитывать следующее:

  • Если не создано ни одного правила, разрешен весь трафик.
  • Сервис может быть одновременно добавлен или только к разрешающим правилам, или только к запрещающим.
  • Запрещающие правила работают по принципу «черного списка»: будет запрещен только трафик, заданный правилами; весь остальной трафик будет разрешен.
  • Разрешающие правила работают по принципу «белого списка»: будет разрешен только трафик, заданный правилами. Весь остальной трафик будет запрещен. Если, допустим, вы разрешаете правило для определенного порта TCP, то будет заблокирован трафик не только на все остальные порты TCP, но и все соединения по другим протоколам.
  • Будьте внимательны при создании правил для исходящего трафика. Большинство сервисов требуют возможности исходящих подключений — даже простой ping сервера. Мы рекомендуем не создавать правила для исходящего трафика, если для этого нет серьезной необходимости.

Файрвол и сервисы в приватных сетях

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

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

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

Пример настройки:

7ed4a282 B875 47cb Bf0a 6a1f56ce1c7a

Вместо 192.168.0.1 подставьте адрес шлюза вашей приватной сети либо разрешите всю серую подсеть (в этом примере 192.168.0.0/24) или любые адреса (0.0.0.0/0).

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

  • Если созданы правила только для исходящего трафика, необходимо разрешить исходящий трафик на адрес 255.255.255.255 по порту 67/UDP.

Пример настройки:

20dd95fc 2dfe 4dfe B8f5 2b2f3b3aeb6d

Вместо 255.255.255.255 можно также указывать 0.0.0.0/0, чтобы разрешить все адреса.

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

Создание файрвола

Панель управления

Из раздела Firewall

  1. Перейдите в раздел «Сети» — «Firewall» и нажмите «Добавить».
  2. Выберите, что нужно сделать: разрешить трафик или запретить трафик.
  3. Задайте правила файрвола для входящего и/или исходящего трафика. В дальнейшем вы сможете отредактировать заданные правила или удалить их, а также добавить новые правила в файрвол.
  4. Выберите, к каким сервисам должны применяться указанные правила. В дальнейшем вы сможете добавить/удалить сервисы из файрвола.
  5. Укажите свое имя файрвола при необходимости и нажмите «Создать».

4d07d815 5842 4dfe 892c 055f69b8651a

Со страницы сервиса

Вы также можете перейти к созданию файрвола со страницы сервиса. 

  • Для DBaaS — на вкладке «Настройки»:

A78bc8e1 D448 4811 83bc Fea91f44f72c

  • Для балансировщиков нагрузки — на вкладке «Дашборд»:

19929786 4d44 4f88 8308 9ae384c5f594

  • Для VDS — на вкладке «Сеть»:

85464780 B898 4164 Bae8 79d8cb2e2db4

В блоке «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 и применит конфигурацию для создания необходимых ресурсов.

Настройка правил

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

Панель управления

Создание новых правил

Если выбрана опция «Разрешить трафик», будет разрешен только трафик, соответствующий созданному правилу. Весь остальной трафик будет заблокирован.

 

Если выбрана опция «Запретить трафик», будет разрешен весь трафик, кроме заданного правилами.

Чтобы создать новое правило при создании нового файрвола:

  1. Выберите, что нужно сделать: разрешить определенный трафик или запретить.
  2. Кликните «Добавить правило» в блоке «Входящий трафик» или «Исходящий трафик».

Caaf237a D3b4 4795 817e C96676ed141b

  1. Укажите параметры правила:
  • Подсеть или адрес. Можно указать конкретный IP, подсеть или значение 0.0.0.0/0, чтобы разрешить/запретить все адреса и подсети, — либо можно выбрать Для всех адресов. В настоящий момент опция «Для всех адресов» работает для IPv4; для аналогичной настройки для IPv6-адресов потребуется создать отдельное правило, указав адрес ::/0.
  • Тип. Можно задать собственное правило или выбрать один из готовых типов. В этом случае протокол и порт заполнятся автоматически.
  • Протокол. Можно выбрать TCP, UDP или ICMP.
  • Порт. Можно указать порт или диапазон портов.

D26d83d4 78fb 4148 Acb7 4a5ba1914659

  1. Нажмите «Добавить».

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

  1. Перейдите в раздел «Сети» — «Firewall».
  2. Кликните на нужную группу правил.
  3. Нажмите «Добавить» в нужном блоке.

83944a42 0eb5 4d6c 9ce3 D60b342813e5

  1. Задайте параметры правила и сохраните изменения.

Редактирование правил

Чтобы внести изменения в уже созданное правило:

  1. Перейдите в раздел «Сети» — «Firewall»
  2. Кликните на нужную группу правил.
  3. Кликните на нужное правило.

15b461ca D2bc 4340 Ac02 35c26935bd70

  1. Внесите правки и сохраните изменения.

0dd73fd9 048c 4279 9fec A48942bd00bd

Удаление правил

Чтобы удалить правило:

  1. Перейдите в раздел «Сети» — «Firewall».
  2. Кликните на нужную группу правил.
  3. Кликните на три точки у нужного правила и нажмите «Удалить правило».

1e620657 008f 4faf 858c E3e0518df67f

  1. Подтвердите удаление.

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). В результате для каждого порта создается отдельное правило в файрволе.

Добавление сервисов в файрвол

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

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

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

Панель управления

Из раздела Firewall

При создании файрвола кликните «Выбрать сервис» в блоке «Подключить к сервисам» и выберите нужные:

Image 137

Чтобы добавить сервисы в уже существующий файрвол:

  1. Перейдите в раздел «Сети» — «Firewall».
  2. Кликните на нужную группу правил.
  3. Перейдите на вкладку «Серверы» и нажмите «Добавить».

Adcd564e B0f9 411b 9cbb C5aeb9da1179

  1. В открывшемся окне выберите нужные сервисы и сохраните изменения.

Cfbfa8ea B927 4685 Abb9 C1363654284e

Со страницы сервиса

Вы можете добавить сервис в файрвол со страницы самого сервиса. Как и при создании нового файрвола, это можно сделать:

  • Для DBaaS — на вкладке «Настройки».
  • Для балансировщиков — на вкладке «Дашборд».
  • Для VDS — на вкладке «Сеть».

После перехода на нужную вкладку:

  1. В блоке «Firewall» кликните «Настроить».
  2. В открывшемся окне выберите нужную группу правил и нажмите «Сохранить».

F1b5edfa D97a 4f02 92d8 6823e84dcfcf

Сервис может быть одновременно добавлен в несколько разных групп правил.

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 мы привязали оба сервера к файрволу.

Удаление сервисов из файрвола

Из раздела Firewall

  1. Перейдите в раздел «Сети» — «Firewall».
  2. Кликните на нужную группу правил.
  3. Перейдите на вкладку «Сервисы».
  4. Кликните на три точки у нужного сервиса и кликните «Исключить сервис из группы».

Fa13f1ec 856d 4868 8cec Dfc9fb3de5c8

  1. Подтвердите удаление.

Со страницы сервиса

Исключить сервис из файрвола можно:

  • Для DBaaS — на вкладке «Настройки».
  • Для балансировщиков — на вкладке «Дашборд».
  • Для VDS — на вкладке «Сеть».

После перехода на нужную вкладку:

  1. В блоке Firewall на странице сервиса кликните на три точки у нужной группы правил и кликните «Отключить Firewall».
  2. Подтвердите отключение группы правил для этого сервиса.

19e93326 5fe3 4195 827c C23222f7149d

Удаление файрвола

Чтобы безвозвратно удалить файрвол:

  1. Перейдите в раздел «Сети» — «Firewall».
  2. Кликните на три точки у нужного файрвола.
  3. Кликните «Удалить группу правил».

0ee89e5c 2a41 461e 900f Da7491d0ec18

  1. Подтвердите удаление.

Файрвол и созданные в нем правила будут удалены и больше не будут применяться к добавленным сервисам.

Была ли статья полезна?
Ваша оценка очень важна
Комментарии 6
Fedor Sparrow
Fedor Sparrow
14.08.2023, 11:41

У меня с файрволлом squid работает очень странно. Некоторые сайты открывает, а некоторые нет. Файрволл отключаю - все открывается.

Дмитрий Вороной
Дмитрий Вороной
01.07.2023, 04:29

Вообщем несколько дней тестов - с включенным файрволлом время отклика сервера от 3х секунд. Без него - 0.2с, пока проще настроить iptables, потом еще посмотрим может наладят.....

Дмитрий Вороной
Дмитрий Вороной
29.06.2023, 17:54

Не ясно работает ли правила для всех адресов с ipv6. Или нужно отдельно создавать для ipv6 тоже?

Команда Timeweb Cloud
Команда Timeweb Cloud
30.06.2023, 08:28

Здравствуйте, Дмитрий!

Сейчас опция «Для всех адресов» включает только IPv4-адреса.

В перспективе доработаем и добавим IPv6, но пока что для аналогичной настройки для IPv6 нужно создать отдельное правило, указав адрес ::/0.

Саша Гуляев
Саша Гуляев
03.05.2023, 16:01

А как узнать Подсеть?

Команда Timeweb Cloud
Команда Timeweb Cloud
10.05.2023, 09:15

Получить базовые знания по подсетям можно на всеми известном ресурсе: https://tweb.link/mhrwc

Помочь посчитать корректную маску подсети для диапазона могут онлайн калькуляторы.

Если возникнут вопросы, всегда готовы помочь, можете написать тут или в поддержку.