Sgroup to CIDR (Ingress/Egress)
Ресурс Security Group to CIDR
представляет собой введенную нами абстракцию, которая обеспечивает гибкое управление и контроль за
сетевым трафиком между различными группами безопасности и подсетями, используя TCP, UDP и ICMP протоколы. Этот ресурс
дает возможность детально настроить, какой трафик разрешен к передаче между группами безопасности и определенными
подсетями, тем самым гарантируя высокий уровень защиты и управления сетевой инфраструктурой.
- Terraform module
- Terraform resource
- API
- nftables
Terraform module представляет собой высокоуровневую абстракцию над terraform resources, которая упрощает работу с ресурсами Terraform, скрывая сложность их непосредственного использования. Он предлагает простой и понятный интерфейс для взаимодействия, позволяя пользователям легко интегрироваться и управлять компонентами инфраструктуры без необходимости глубоко погружаться в детали каждого ресурса.
Далее везде в документе подразумевается что все места, содержащие переменную $traffic
, могут принять одно из двух
значений: Ingress
Egress
. Аналогчично для $transport
подразумевается одно из четырех значений: tcp
, udp
,
icmpIPv4
, icmpIPv6
rules
- Структура, содержащая описание создаваемых правил.rules.$traffic[]
- Поле описывающий направление трафика.rules.$traffic[].cidrSet[]
- Список, содержащий подсети типа IP.rules.$traffic[].access.$transport
- Протокол L3/L4 уровня модели OSI.rules.$traffic[].access.$transport.action
- Действие для пакетов в сформированных правил в цепочке.rules.$traffic[].access.$transport.priority
- Поле определяющее порядок применения правил в цепочке.rules.$traffic[].access.$transport.logs
- Включить/отключить логирование.rules.$traffic[].access.$transport.trace
- Включить/отключить трассировку.rules.$traffic[].access.$transport.ports[].description
- Формально е текстовое описание.rules.$traffic[].access.$transport.ports[].ports_to[]
- Набор открытых портов получателяrules.$traffic[].access.$transport.ports[].ports_from[]
- Набор открытых портов отправителя.rules.$traffic[].access.$transport.types[].description
- Формальное текстовое описание.rules.$traffic[].access.$transport.types[].type[]
- Список, определяющий допустимые типы ICMP запросов.
название параметра | тип данных | значение по умолчанию | transport* | ||
---|---|---|---|---|---|
TCP | UDP | ICMP | |||
rules | Object[] | [] | ✔ | ✔ | ✔ |
rules.$traffic[] | Object[] | ✔ | ✔ | ✔ | |
rules.$traffic[].cidrSet[] | String[] | ✔ | ✔ | ✔ | |
rules.$traffic[].access.$transport | Object | ✔ | ✔ | ✔ | |
rules.$traffic[].access.$transport.action | ✔ | ✔ | ✔ | ||
rules.$traffic[].access.$transport.priority | String | ✔ | ✔ | ✔ | |
rules.$traffic[].access.$transport.log | Boolean | false | ✔ | ✔ | ✔ |
rules.$traffic[].access.$transport.trace | Boolean | false | ✔ | ✔ | ✔ |
rules.$traffic[].access.$transport.ports[] | Object[] | ✔ | ✔ | ✔ | |
rules.$traffic[].access.$transport.ports[].description | String | "" | ✔ | ✔ | |
rules.$traffic[].access.$transport.ports[].ports_to[] | Integer[] | null | ✔ | ✔ | |
rules.$traffic[].access.$transport.ports[].ports_from[] | Integer[] | null | ✔ | ✔ | |
rules.$traffic[].access.$transport.types[] | Object[] | ✔ | |||
rules.$traffic[].access.$transport.types[].description | String | "" | ✔ | ||
rules.$traffic[].access.$transport.types[].type[] | Integer[] | null | ✔ |
Ограничения
name
:- Длина значения поля не должна превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
rules.$traffic[].cidrSet
:- Значение элемента должно начинаться и заканчиваться символами без пробелов.
- Повторения значений в списке не допускаются.
- Необходимо указать минимум одно значение.
- В пределах одной Security Group и направления трафика (I/E), необходимо обеспечить, непересекаемость диапазонов адресов подсетей.
- Подсеть должна соответствовать формату записи, определенному в RFC 4632.
rules.$traffic[].access.$transport.priority
:- Значения должны находиться в интервале от -32768 до 32767
rules.$traffic[].access.$transport.ports[].ports_to[]
:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одн ому или интервально используя '-'.
rules.$traffic[].access.$transport.ports[].ports_from[]
:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
- Не допускаются пересечения портов в правилах в рамках одной пары Security Group.</li>
rules.$traffic[].access.$transport.types[].type[]
:- Значение должно быть числом в диапазоне от 0 до 255.
- Повторения значений в списке не допускаются.
Пример использования
- TCP
- UDP
- ICMP4
- ICMP6
Ingress
name: sg-local-example
rules:
ingress:
- cidrSet:
- "10.0.0.0/8"
access:
tcp:
action: ACCEPT
priority: 300
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Egress
name: sg-local-example
rules:
egress:
- cidrSet:
- "10.0.0.0/8"
access:
tcp:
action: ACCEPT
priority: 300
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Ingress
name: sg-local-example
rules:
ingress:
- cidrSet:
- "10.0.0.0/8"
access:
udp:
action: ACCEPT
priority: 300
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Egress
name: sg-local-example
rules:
egress:
- cidrSet:
- "10.0.0.0/8"
access:
udp:
action: ACCEPT
priority: 300
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Ingress
name: sg-local-example
rules:
ingress:
- cidrSet:
- "10.0.0.0/8"
access:
icmpIPv4:
action: ACCEPT
priority: 200
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Egress
name: sg-local-example
rules:
egress:
- cidrSet:
- "10.0.0.0/8"
access:
icmpIPv4:
action: ACCEPT
priority: 200
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Ingress
name: sg-local-example
rules:
ingress:
- cidrSet:
- "::ffff:a00:0/104"
access:
icmpIPv6:
action: ACCEPT
priority: 200
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Egress
name: sg-local-example
rules:
egress:
- cidrSet:
- "::ffff:a00:0/104"
access:
icmpIPv6:
action: ACCEPT
priority: 200
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Terraform resource является ключевым элементом в Terraform, предназначенным для управления различными аспектами инфраструктуры через код. Он позволяет задавать, настраивать и управлять инфраструктурными компонентами без привязки к их конкретным типам, обеспечивая автоматизацию развертывания и поддержки инфраструктуры согласно подходу Infrastructure as Code (IaC).
items
- список ресурсов создаваемые terraform ресурсом.items.$ruleName
- уникальное имя создаваемого ресурса.items.$ruleName.traffic
- Поле описывающий направление трафика.items.$ruleName.transport
- Протокол L3/L4 уровня модели OSI.items.$ruleName.cidr
- Список, содержащий подсети типа IP.items.$ruleName.sg_name
- Security Group относительно котор ой рассматриваются правила.items.$ruleName.ports
- Блок описывающий набор пар портов (src-dst).items.$ruleName.ports[].d
- Набор открытых портов получателяitems.$ruleName.ports[].s
- Набор открытых портов отправителя.items.$ruleName.logs
- Включить/отключить логирование.items.$ruleName.trace
- Включить/отключить трассировку.items.$ruleName.ip_v
- Версия IP для ICMP (IPv4 или IPv6).items.$ruleName.type
- Список, определяющий допустимые типы ICMP запросов.items.$ruleName.action
- Действие для пакетов в сформированных правил в цепочке.items.$ruleName.priority
- Поле определяющее порядок применения правил в цепочке.
название | обязательность | тип данных | значение по умолчанию | transport* | ||
---|---|---|---|---|---|---|
TCP | UDP | ICMP | ||||
items | да | Object | ✔ | ✔ | ✔ | |
items.$ruleName | да | Object | ✔ | ✔ | ✔ | |
items.$ruleName.traffic | да | ✔ | ✔ | ✔ | ||
items.$ruleName.transport | да | Enum("TCP", "UDP") | ✔ | ✔ | ||
items.$ruleName.cidr | да | String | ✔ | ✔ | ✔ | |
items.$ruleName.sg_name | да | String | ✔ | ✔ | ✔ | |
items.$ruleName.ports | нет | Object[] | null | ✔ | ✔ | |
items.$ruleName.ports[].d | нет | String | "" | ✔ | ✔ | |
items.$ruleName.ports[].s | нет | String | "" | ✔ | ✔ | |
items.$ruleName.logs | нет | Boolean | false | ✔ | ✔ | ✔ |
items.$ruleName.trace | нет | Boolean | false | ✔ | ✔ | ✔ |
items.$ruleName.ip_v | да | Enum("IPv4", "IPv6") | ✔ | |||
items.$ruleName.type | да | String[] | null | ✔ | ||
items.$ruleName.action | да | ✔ | ✔ | ✔ | ||
items.$ruleName.priority | нет | Integer | ✔ | ✔ | ✔ |
Ограничения
items
:- Каждое правило должно обладать уникальным ключом для предотвращения конфликтов.
items.$ruleName
:- Форма ruleName должна быть организована в соответствии с определенной последовательностью, которую нужно соблюдать
"${transport}:cidr(${cidr})sg(${sg_name})${traffic}"
.
- Форма ruleName должна быть организована в соответствии с определенной последовательностью, которую нужно соблюдать
items.$ruleName.sg_name
:- Каждое правило должно обладать уникальным ключом для предотвращения конфликтов.
items.$ruleName.cidr
:- Значение поля должно начинаться и заканчиваться символами без пробелов.
- В пределах одной Security Group и направления трафика (I/E), необходимо обеспечить, непересекаемость диапазонов адресов подсетей.
- Подсеть должна соответствовать формату записи, определенному в RFC 4632.
items.$ruleName.ports[].s
:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
- Не допускаются пересечения портов в правилах в рамках одной пары Security Group.</li>
items.$ruleName.ports[].d
:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
items.$ruleName.type[]
:- Значение должно быть числом в диапазоне от 0 до 255.
- Повторения значений в списке не допускаются.
items.$ruleName.priority
:- Значения должны находиться в интервале от -32768 до 32767
Пример использования
- TCP
- UDP
- ICMP4
- ICMP6
Ingress
resource "sgroups_cidr_rules" "rules" {
items = {
"tcp:cidr(10.0.0.0/8)sg(sg-example)ingress" = {
traffic = "ingress"
logs = true
trace = true
sg_name = "sg-local-example"
cidr = "10.0.0.0/8"
transport = "tcp"
ports = [{
d = "80"
s = ""
}]
action = "ACCEPT"
priority = 300
}
}
}
Egress
resource "sgroups_cidr_rules" "rules" {
items = {
"tcp:cidr(10.0.0.0/8)sg(sg-example)egress" = {
traffic = "egress"
logs = true
trace = true
sg_name = "sg-local-example"
cidr = "10.0.0.0/8"
transport = "tcp"
ports = [{
d = "80"
s = ""
}]
action = "ACCEPT"
priority = 300
}
}
}
Ingress
resource "sgroups_cidr_rules" "rules" {
items = {
"udp:cidr(10.0.0.0/8)sg(sg-example)ingress" = {
traffic = "ingress"
logs = true
trace = true
sg_name = "sg-local-example"
cidr = "10.0.0.0/8"
transport = "udp"
ports = [{
d = "80"
s = ""
}]
action = "ACCEPT"
priority = 300
}
}
}
Egress
resource "sgroups_cidr_rules" "rules" {
items = {
"udp:cidr(10.0.0.0/8)sg(sg-example)egress" = {
traffic = "egress"
logs = true
trace = true
sg_name = "sg-local-example"
cidr = "10.0.0.0/8"
transport = "udp"
ports = [{
d = "80"
s = ""
}]
action = "ACCEPT"
priority = 300
}
}
}
Ingress
resource "sgroups_cidr_icmp_rules" "rules" {
items = {
"icmp4:cidr(10.0.0.0/8)sg(sg-example)ingress" = {
traffic = "ingress"
logs = true
trace = true
sg_name = "sg-local-example"
cidr = "10.0.0.0/8"
ip_v = "IPv4"
type = [0,8]
action = "ACCEPT"
priority = 200
}
}
}
Egress
resource "sgroups_cidr_icmp_rules" "rules" {
items = {
"icmp4:cidr(10.0.0.0/8)sg(sg-example)egress" = {
traffic = "egress"
logs = true
trace = true
sg_name = "sg-local-example"
cidr = "10.0.0.0/8"
ip_v = "IPv4"
type = [0,8]
action = "ACCEPT"
priority = 200
}
}
}
Ingress
resource "sgroups_cidr_icmp_rules" "rules" {
items = {
"icmp6:cidr(::ffff:a00:0/104)sg(sg-example)ingress" = {
traffic = "ingress"
logs = true
trace = true
sg_name = "sg-local-example"
cidr = "::ffff:a00:0/104"
ip_v = "IPv6"
type = [0,8]
action = "ACCEPT"
priority = 200
}
}
}
Egress
resource "sgroups_cidr_icmp_rules" "rules" {
items = {
"icmp6:cidr(::ffff:a00:0/104)sg(sg-example)egress" = {
traffic = "egress"
logs = true
trace = true
sg_name = "sg-local-example"
cidr = "::ffff:a00:0/104"
ip_v = "IPv6"
type = [0,8]
action = "ACCEPT"
priority = 200
}
}
}
Более подробную документацию по API можно посмотреть здесь.
Более подробно по организации БД можно посмотреть здесь и здесь.
Далее везде в документе подразумевается что все места, содержащие переменную $node
, могут принять одно из двух значений: cidrSgRules
cidrSgIcmpRules
.
Входные параметры
$node.rules[]
- Структура, содержащая описание создаваемых правил.$node.rules[].CIDR
- Список, содержащий подсети типа IP.$node.rules[].SG
- Security Group относительно которой рассматриваются правила.$node.rules[].logs
- Включить/отключить логирование.$node.rules[].trace
- Включить/отключить трассировку.$node.rules[].ports
- Блок описывающий набор пар портов (src-dst).$node.rules[].ports[].d
- Набор открытых портов получателя$node.rules[].ports[].s
- Набор открытых портов отправителя.$node.rules[].traffic
- Поле описывающий направление трафика.$node.rules[].transport
- Протокол L3/L4 уровня модели OSI.$node.rules[].ICMP
- Структура, содержащая описание создаваемых правил типа ICMP.$node.rules[].ICMP.IPv
- Версия IP для ICMP (IPv4 или IPv6).$node.rules[].ICMP.Types
- Список, определяющий допустимые типы ICMP запросов.$node.rules[].action
- Действие для пакетов в сформированных правил в цепочке.$node.rules[].priority
- Структура, содержащая описание порядка применения правил в цепочке.$node.rules[].priority.some
- Поле определяющее порядок применения правил в цепочке.syncOp
- Поле определяющее действие с данными из запроса.
название | обязательность | тип данных | значение по умолчанию | transport* | ||
---|---|---|---|---|---|---|
TCP | UDP | ICMP | ||||
$node.rules[] | да | Object | null | ✔ | ✔ | ✔ |
$node.rules[].CIDR | да | String | ✔ | ✔ | ✔ | |
$node.rules[].SG | да | String | ✔ | ✔ | ✔ | |
$node.rules[].logs | нет | Boolean | false | ✔ | ✔ | ✔ |
$node.rules[].trace | нет | Boolean | false | ✔ | ✔ | ✔ |
$node.rules[].ports | нет | Object[] | null | ✔ | ✔ | |
$node.rules[].ports[].d | нет | String | null | ✔ | ✔ | |
$node.rules[].ports[].s | нет | String | null | ✔ | ✔ | |
$node.rules[].traffic | да | Enum("Ingress", "Egress") | ✔ | ✔ | ✔ | |
$node.rules[].transport | нет | Enum("TCP", "UDP") | TCP | ✔ | ✔ | |
$node.rules[].ICMP | да | Object | ✔ | |||
$node.rules[].ICMP.IPv | да | Enum("IPv4", "IPv6") | ✔ | |||
$node.rules[].ICMP.Types | нет | String[] | [] | ✔ | ||
$node.rules[].action | да | ✔ | ✔ | ✔ | ||
$node.rules[].priority | нет | Object | ✔ | ✔ | ✔ | |
$node.rules[].priority.some | нет | Integer | ✔ | ✔ | ✔ | |
syncOp | да | ✔ | ✔ | ✔ |
Ограничения
$node.rules[].SG
:- Длина значения поля не должна превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
$node.rules[].CIDR
:- Значение поля должно начинаться и заканчиваться символами без пробелов.
- В пределах одной Security Group и направления трафика (I/E), необходимо обеспечить, непересекаемость диапазонов адресов подсетей.
- Подсеть должна соответствовать формату записи, определенному в RFC 4632.
$node.rules[].ports[].s
:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
- Не допускаются пересечения портов в правилах в рамках одной пары Security Group.</li>
$node.rules[].ports[].d
:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
$node.rules[].type[]
:- Значение должно быть числом в диапазоне от 0 до 255.
- Повторения значений в списке не допускаются.
Пример использования
- TCP
- UDP
- ICMP4
- ICMP6
Ingress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgRules": {
"rules": [
{
"traffic": "Ingress",
"CIDR": "10.0.0.0/8",
"SG": "sg-local-example",
"logs": true,
"trace": true,
"ports": [{
"d": "64321",
"s": "443,80"
}],
"transport": "TCP",
"action": "ACCEPT",
"priority": {
"some": 300
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgRules": {
"rules": [
{
"traffic": "Egress",
"CIDR": "10.0.0.0/8",
"SG": "sg-local-example",
"logs": true,
"trace": true,
"ports": [{
"d": "64321",
"s": "443,80"
}],
"transport": "TCP",
"action": "ACCEPT",
"priority": {
"some": 300
}
}
]
},
"syncOp": "Upsert"
}'
Выходные параметры
название | тип данных | описание |
---|---|---|
- | Object | в случае успеха возвращается пустое тело |
Возможные ошибки API
Пользователь указал некорректные значения агрументов
- HTTP code: 400
- gRPC code: INVALID_ARGUMENT
- gRPC number: 3
Не найден метод
- HTTP code: 404
- gRPC code: NOT_FOUND
- gRPC number: 5
Диаграмма последовательности
Ingress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgRules": {
"rules": [
{
"traffic": "Ingress",
"CIDR": "10.0.0.0/8",
"SG": "sg-local-example",
"logs": true,
"trace": true,
"ports": [{
"d": "64321",
"s": "443,80"
}],
"transport": "UDP",
"action": "ACCEPT",
"priority": {
"some": 300
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgRules": {
"rules": [
{
"traffic": "Egress",
"CIDR": "10.0.0.0/8",
"SG": "sg-local-example",
"logs": true,
"trace": true,
"ports": [{
"d": "64321",
"s": "443,80"
}],
"transport": "UDP",
"action": "ACCEPT",
"priority": {
"some": 300
}
}
]
},
"syncOp": "Upsert"
}'
Выходные параметры
название | тип данных | описание |
---|---|---|
- | Object | в случае успеха возвращается пустое тело |
Возможные ошибки API
Пользователь указал некорректные значения агрументов
- HTTP code: 400
- gRPC code: INVALID_ARGUMENT
- gRPC number: 3
Не найден метод
- HTTP code: 404
- gRPC code: NOT_FOUND
- gRPC number: 5
Диаграмма последовательности
Ingress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgIcmpRules": {
"rules": [
{
"traffic": "Ingress",
"CIDR": "10.0.0.0/8",
"SG": "sg-local-example",
"logs": true,
"trace": true,
"ICMP": {
"IPv": "IPv4",
"Types": [0, 8]
},
"action": "ACCEPT",
"priority": {
"some": 200
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgIcmpRules": {
"rules": [
{
"traffic": "Egress",
"CIDR": "10.0.0.0/8",
"SG": "sg-local-example",
"logs": true,
"trace": true,
"ICMP": {
"IPv": "IPv4",
"Types": [0, 8]
},
"action": "ACCEPT",
"priority": {
"some": 200
}
}
]
},
"syncOp": "Upsert"
}'
Выходные параметры
название | тип данных | описание |
---|---|---|
- | Object | в случае успеха возвращается пустое тело |
Возможные ошибки API
Пользователь указал некорректные значения агрументов
- HTTP code: 400
- gRPC code: INVALID_ARGUMENT
- gRPC number: 3
Не найден метод
- HTTP code: 404
- gRPC code: NOT_FOUND
- gRPC number: 5
Диаграмма последовательности
Ingress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgIcmpRules": {
"rules": [
{
"traffic": "Ingress",
"CIDR": "::ffff:a00:0/104",
"SG": "sg-local-example",
"logs": true,
"trace": true,
"ICMP": {
"IPv": "IPv6",
"Types": [0, 8]
},
"action": "ACCEPT",
"priority": {
"some": 200
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgIcmpRules": {
"rules": [
{
"traffic": "Egress",
"CIDR": "::ffff:a00:0/104",
"SG": "sg-local-example",
"logs": true,
"trace": true,
"ICMP": {
"IPv": "IPv6",
"Types": [0, 8]
},
"action": "ACCEPT",
"priority": {
"some": 200
}
}
]
},
"syncOp": "Upsert"
}'
Выходные параметры
название | тип данных | описание |
---|---|---|
- | Object | в случае успеха возвращается пустое тело |
Возможные ошибки API
Пользователь указал некорректные значения агрументов
- HTTP code: 400
- gRPC code: INVALID_ARGUMENT
- gRPC number: 3
Не найден метод
- HTTP code: 404
- gRPC code: NOT_FOUND
- gRPC number: 5
Диаграмма последовательности
В этом разделе мы покажем, как правила фильтрации трафика, созданные с помощью Terraform и API, внедряются в настройки nftables. Это позволяет легко интегрировать сложные правила безопасности прямо в вашу систему фильтрации трафика.
$Trace
- Включить/отключить трассировку.$SrcCIDR
- CIDR, с которой устанавливаются правила взаимодействия.$DstCIDR
- CIDR, с которой устанавливаются правила взаимодействия.$Transport
- Протокол L3/L4 уровня модели OSI.$NftRuleType
- Характеристика описывающая, что принимается трафик типа ip.$IcmpTypeList
- Список, определяющий допустимые типы ICMP запросов.$SrcPorts
- Набор открытых портов отправителя.$DstPorts
- Набор открытых портов получателя$NftCounter
- Счетчик количества байтов и пакетов.$Log
- Включить/отключить логирование.$NftRuleVerdict
- Результат применения правила, определяющий действие, которое будет применено к пакету.
шаблон параметра | структура параметра | значения | transport* | ||
---|---|---|---|---|---|
TCP | UDP | ICMP | |||
$Trace | nftrace set |
| ✔ | ✔ | ✔ |
$SrcCIDR | saddr | ${CIDR} | ✔ | ✔ | ✔ |
$DstCIDR | daddr | ${CIDR} | ✔ | ✔ | ✔ |
$Transport | ✔ | ✔ | ✔ | ||
$NftRuleType | ip | ✔ | ✔ | ✔ | |
$IcmpTypeList | type {} | Набор целочисленных значений от 0 до 255 | ✔ | ||
$SrcPorts | sport {} | Набор целочисленных значений от 0 до 65535 | ✔ | ✔ | |
$DstPorts | dport {} | Набор целочисленных значений от 0 до 65535 | ✔ | ✔ | |
$NftCounter | counter | packets 0 bytes 0 | ✔ | ✔ | ✔ |
$Log | log | level debug flags ip options | ✔ | ✔ | ✔ |
$NftRuleVerdict | accept | $NftRuleVerdict определяет действие, которое будет применено к пакету в соответсвии с правилом. Это поле может принимать значение | ✔ | ✔ | ✔ |
Пример использования
- TCP
- UDP
- ICMP
- ingress
- egress
Шаблон
chain INGRESS-INPUT-sgName {
# **********
$Trace $NftRuleType $SrcCIDR $Transport $SrcPorts $DstPorts $NftCounter $Log $NftRuleVerdict
# **********
}
Пример использования
chain INGRESS-INPUT-sg-local-example {
# **********
nftrace set 1 ip saddr { 10.0.0.0/8 } tcp dport { 80, 443 } sport { 64231 } counter packets 0 bytes 0 log level debug flags ip options accept
# **********
}
Шаблон
chain EGRESS-POSTROUTING-sgName {
# **********
$Trace $NftRuleType $DstCIDR $Transport $SrcPorts $DstPorts $NftCounter $Log $NftRuleVerdict
# **********
}
Пример использования
chain EGRESS-POSTROUTING-sg-local-example {
# **********
nftrace set 1 ip daddr { 10.0.0.0/8 } tcp dport { 80, 443 } sport { 64231 } counter packets 0 bytes 0 log level debug flags ip options accept
# **********
}
- ingress
- egress
Шаблон
chain INGRESS-INPUT-sgName {
# **********
$Trace $NftRuleType $SrcCIDR $Transport $SrcPorts $DstPorts $NftCounter $Log $NftRuleVerdict
# **********
}