Sgroup to Sgroup (Ingress/Egress)
Ресурс Security Group to Security Group представляет собой введенную нами абстракцию, которая обеспечивает гибкое
управление и контроль сетевого трафика между разными группами безопасности, используя протоколы 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[].sgroupSet[]- Список, содержащий названия Security Group(s).rules.$traffic[].access.$transport- Протокол L3/L4 уровня модели OSI.rules.$traffic[].access.$transport.action- Действие для пакетов в сформированных правил в цепочке.rules.$traffic[].access.$transport.priority- Поле определяющее порядок применения правил в цепочке.rules.$traffic[].access.$transport.log- Включить/отключить логирование.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[].sgroupSet[] | 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[].sgroupSet:- Длина значения элемента не должна превышать 256 символов.
- Значение элемента должно начинаться и заканчиваться символами без пробелов.
- Повторения значений в списке не допускаются.
- Необходимо указать минимум одно значение.
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:
- sgroupSet:
- "sg-example"
access:
tcp:
action: ACCEPT
priority: 0
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Egress
name: "sg-local-example"
rules:
egress:
- sgroupSet:
- "sg-example"
access:
tcp:
action: ACCEPT
priority: 0
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Ingress
name: "sg-local-example"
rules:
ingress:
- sgroupSet:
- "sg-example"
access:
udp:
action: ACCEPT
priority: 0
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Egress
name: "sg-local-example"
rules:
egress:
- sgroupSet:
- "sg-example"
access:
udp:
action: ACCEPT
priority: 0
logs: true
trace: true
ports:
- description: "example"
ports_from:
- 64231
ports_to:
- 443
- 80
Ingress
name: "sg-local-example"
rules:
ingress:
- sgroupSet:
- "sg-example"
access:
icmpIPv4:
action: ACCEPT
priority: -100
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Egress
name: "sg-local-example"
rules:
egress:
- sgroupSet:
- "sg-example"
access:
icmpIPv4:
action: ACCEPT
priority: -100
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Ingress
name: "sg-local-example"
rules:
ingress:
- sgroupSet:
- "sg-example"
access:
icmpIPv6:
action: ACCEPT
priority: -100
logs: true
trace: true
types:
- description: "example"
type:
- 0
- 8
Egress
name: "sg-local-example"
rules:
egress:
- sgroupSet:
- "sg-example"
access:
icmpIPv6:
action: ACCEPT
priority: -100
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.sg- Security Group, с которой устанавливаются правила взаимодействия.items.$ruleName.sg_local- 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.sg | да | String | ✔ | ✔ | ✔ | |
| items.$ruleName.sg_local | да | 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}:sg-local(${sg_local})sg(${sg})${traffic}".
- Форма ruleName должна быть организована в соответствии с определенной последовательностью, которую нужно соблюдать
items.$ruleName.sg:- Длина значения поля не должна превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
items.$ruleName.sg_local:- Длина значения поля не должна превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
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_ie_rules" "rules" {
items = {
"tcp:sg-local(sg-local-example)sg(sg-example)ingress" = {
traffic = "ingress"
logs = true
trace = true
sg_local = "sg-local-example"
sg = "sg-example"
transport = "tcp"
ports = [{
d = "80"
s = ""
}]
action = "ACCEPT"
priority = 0
}
}
}
Egress
resource "sgroups_ie_rules" "rules" {
items = {
"tcp:sg-local(sg-local-example)sg(sg-example)egress" = {
traffic = "egress"
logs = true
trace = true
sg_local = "sg-local-example"
sg = "sg-example"
transport = "tcp"
ports = [{
d = "80"
s = ""
}]
action = "ACCEPT"
priority = 0
}
}
}
Ingress
resource "sgroups_ie_rules" "rules" {
items = {
"udp:sg-local(sg-local-example)sg(sg-example)ingress" = {
traffic = "ingress"
logs = true
trace = true
sg_local = "sg-local-example"
sg = "sg-example"
transport = "udp"
ports = [{
d = "80"
s = ""
}]
action = "ACCEPT"
priority = 0
}
}
}
Egress
resource "sgroups_ie_rules" "rules" {
items = {
"udp:sg-local(sg-local-example)sg(sg-example)egress" = {
traffic = "egress"
logs = true
trace = true
sg_local = "sg-local-example"
sg = "sg-example"
transport = "udp"
ports = [{
d = "80"
s = ""
}]
action = "ACCEPT"
priority = 0
}
}
}
Ingress
resource "sgroups_ie_icmp_rules" "rules" {
items = {
"icmp4:sg-local(sg-local-example)sg(sg-example)ingress" = {
traffic = "ingress"
logs = true
trace = true
sg_local = "sg-local-example"
sg = "sg-example"
ip_v = "IPv4"
type = [0,8]
action = "ACCEPT"
priority = -100
}
}
}
Egress
resource "sgroups_icmp_rules" "rules" {
items = {
"icmp4:sg-local(sg-local-example)sg(sg-example)egress" = {
traffic = "egress"
logs = true
trace = true
sg_local = "sg-local-example"
sg = "sg-example"
ip_v = "IPv4"
type = [0,8]
action = "ACCEPT"
priority = -100
}
}
}
Ingress
resource "sgroups_ie_icmp_rules" "rules" {
items = {
"icmp6:sg-local(sg-local-example)sg(sg-example)ingress" = {
traffic = "ingress"
logs = true
trace = true
sg_local = "sg-local-example"
sg = "sg-example"
ip_v = "IPv6"
type = [0,8]
action = "ACCEPT"
priority = -100
}
}
}
Egress
resource "sgroups_icmp_rules" "rules" {
items = {
"icmp6:sg-local(sg-local-example)sg(sg-example)egress" = {
traffic = "egress"
logs = true
trace = true
sg_local = "sg-local-example"
sg = "sg-example"
ip_v = "IPv6"
type = [0,8]
action = "ACCEPT"
priority = -100
}
}
}
Более подробную документацию по API можно посмотреть здесь.
Более подробно по организации БД можно посмотреть здесь и здесь.
Далее везде в документе подразумевается что все места, содержащие переменную $node, могут принять одно из двух
значений: sgSgRules, ieSgSgIcmpRules.
Входные параметры
$node.rules[]- Структура, содержащая описание создаваемых правил.$node.rules[].SG- Security Group, с которой устанавливаются правила взаимодействия.$node.rules[].sgLocal- 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[].SG | да | String | ✔ | ✔ | ✔ | |
| $node.rules[].sgLocal | да | 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 | да | ✔ | ✔ | ✔ | ||
Ограничения
sgSgRules.rules[].SG:- Длина значения поля не должна превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
sgSgRules.rules[].sgLocal:- Длина значения поля не должна превышать 256 символов.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Значение должно быть уникальным в рамках типа ресурса.
sgSgRules.rules[].ports[].ports_to[]:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
sgSgRules.rules[].ports[].ports_from[]:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
- Не допускаются пересечения портов в правилах в рамках одной пары Security Group.</li>
sgSgRules.rules[].ICMP.Types[]:- Значение должно быть числом в диапазоне от 0 до 255.
- Повторения значений в списке не допускаются.
Пример использования
- TCP
- UDP
- ICMP4
- ICMP6
Ingress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieSgSgRules": {
"rules": [
{
"traffic": "Ingress",
"SG": "sg-example",
"sgLocal": "sg-local-example",
"logs": true,
"trace": true,
"ports": [{
"d": "64321",
"s": "443,80"
}],
"transport": "TCP",
"action": "ACCEPT",
"priority": {
"some": 0
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieSgSgRules": {
"rules": [
{
"traffic": "Egress",
"SG": "sg-example",
"sgLocal": "sg-local-example",
"logs": true,
"trace": true,
"ports": [{
"d": "64321",
"s": "443,80"
}],
"transport": "TCP",
"action": "ACCEPT",
"priority": {
"some": 0
}
}
]
},
"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 '{
"ieSgSgRules": {
"rules": [
{
"traffic": "Ingress",
"SG": "sg-example",
"sgLocal": "sg-local-example",
"logs": true,
"trace": true,
"ports": [{
"d": "64321",
"s": "443,80"
}],
"transport": "UDP",
"action": "ACCEPT",
"priority": {
"some": 0
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieSgSgRules": {
"rules": [
{
"traffic": "Egress",
"SG": "sg-example",
"sgLocal": "sg-local-example",
"logs": true,
"trace": true,
"ports": [{
"d": "64321",
"s": "443,80"
}],
"transport": "UDP",
"action": "ACCEPT",
"priority": {
"some": 0
}
}
]
},
"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 '{
"ieSgSgIcmpRules": {
"rules": [
{
"traffic": "Ingress",
"SG": "sg-example",
"sgLocal": "sg-local-example",
"logs": true,
"trace": true,
"ICMP": {
"IPv": "IPv4",
"Types": [0, 8]
},
"action": "ACCEPT",
"priority": {
"some": -100
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieSgSgIcmpRules": {
"rules": [
{
"traffic": "Egress",
"SG": "sg-example",
"sgLocal": "sg-local-example",
"logs": true,
"trace": true,
"ICMP": {
"IPv": "IPv4",
"Types": [0, 8]
},
"action": "ACCEPT",
"priority": {
"some": -100
}
}
]
},
"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 '{
"ieSgSgIcmpRules": {
"rules": [
{
"traffic": "Ingress",
"SG": "sg-example",
"sgLocal": "sg-local-example",
"logs": true,
"trace": true,
"ICMP": {
"IPv": "IPv6",
"Types": [0, 8]
},
"action": "ACCEPT",
"priority": {
"some": -100
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieSgSgIcmpRules": {
"rules": [
{
"traffic": "Egress",
"SG": "sg-example",
"sgLocal": "sg-local-example",
"logs": true,
"trace": true,
"ICMP": {
"IPv": "IPv6",
"Types": [0, 8]
},
"action": "ACCEPT",
"priority": {
"some": -100
}
}
]
},
"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- Включить/отключить трассировку.$SrcSgroup- Security Group, с которой устанавливаются правила взаимодействия.$DstGroup- Security Group, с которой устанавливаются правила взаимодействия.$Transport- Протокол L3/L4 уровня модели OSI.$NftRuleType- Характеристика описывающая, что принимается трафик типа ip.$IcmpTypeList- Список, определяющий допустимые типы ICMP запросов.$SrcPorts- Набор открытых портов отправителя.$DstPorts- Набор открытых портов получателя$NftCounter- Счетчик количества байтов и пакетов.$Log- Включить/отключить логирование.$NftRuleVerdict- Результат применения правила, определяющий действие, которое будет применено к пакету.
| шаблон параметра | структура параметра | значения | transport* | ||
|---|---|---|---|---|---|
| TCP | UDP | ICMP | |||
| $Trace | nftrace set |
| ✔ | ✔ | ✔ |
| $SrcSgroup | saddr | @${IPSet(sgName)} | ✔ | ✔ | ✔ |
| $DstSgroup | daddr | @${IPSet(sgName)} | ✔ | ✔ | ✔ |
| $Transport | tcp | udp | icmp | ✔ | ✔ | ✔ | |
| $NftRuleType | ip | ✔ | ✔ | ✔ | |
| $IcmpTypeList | type {} | Набор целочисленных значений от 0 до 255 | ✔ | ||
| $SrcPorts | sport {} | Набор целочисленных значений от 1 до 65535 | ✔ | ✔ | |
| $DstPorts | dport {} | Набор целочисленных значений от 1 до 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 $SrcSgroup $Transport $SrcPorts $DstPorts $NftCounter $Log $NftRuleVerdict
# **********
}