Sgroup to Sgroup (Ingress/Egress) ICMP
Ресурс Security Group to Security Group представляет собой введенную нами абстракцию, которая обеспечивает гибкое
управление и контроль сетевого трафика между разными группами безопасности, используя протокол ICMP. Этот ресурс
позволяет точно настраивать, какой трафик может передаваться между группами, обеспечивая таким образом высокий уровень
защиты и контроля в сетевой инфраструктуре.
- API
- nftables
Более подробную документацию по API можно посм отреть здесь.
Более подробно по организации БД можно посмотреть здесь
Входные параметры
ieSgSgIcmpRules.rules[]- Структура, содержащая описание создаваемых правил.ieSgSgIcmpRules.rules[].SG- Имя Security GroupieSgSgIcmpRules.rules[].sgLocal- Security Group относительно которой рассматриваются правила.ieSgSgIcmpRules.rules[].logs- Включить/отключить логирование.ieSgSgIcmpRules.rules[].trace- Включить/отключить трассировку.ieSgSgIcmpRules.rules[].ICMP- Объект, определяющий параметры настройки ICMP.ieSgSgIcmpRules.rules[].ICMP.IPv- Версия IP для ICMP (IPv4 или IPv6).ieSgSgIcmpRules.rules[].ICMP.Types- Список, определяющий допустимые типы ICMP запросов.ieSgSgIcmpRules.rules[].traffic- Поле описывающий направление трафика.ieSgSgIcmpRules.rules[].action- Действие для пакетов в сформированных правил в цепочке.ieSgSgIcmpRules.rules[].priority- Структура, содержащ ая описание порядка применения правил в цепочке.ieSgSgIcmpRules.rules[].priority.some- Поле, определяющее порядок применения правил в цепочке.syncOp- Поле определяющее действие с данными из запроса.
| название | обязательность | тип данных | значение по умолчанию |
|---|---|---|---|
| ieSgSgIcmpRules.rules[] | да | Object[] | |
| ieSgSgIcmpRules.rules[].SG | да | String | |
| ieSgSgIcmpRules.rules[].sgLocal | да | String | |
| ieSgSgIcmpRules.rules[].logs | нет | Boolean | false |
| ieSgSgIcmpRules.rules[].trace | нет | Boolean | false |
| ieSgSgIcmpRules.rules[].ICMP | да | Object | |
| ieSgSgIcmpRules.rules[].ICMP.IPv | да | Enum("IPv4", "IPv6") | |
| ieSgSgIcmpRules.rules[].ICMP.Types | нет | Integer[] | [] |
| ieSgSgIcmpRules.rules[].traffic | да | Enum("Ingress", "Egress") | |
| ieSgSgIcmpRules.rules[].action | да | ||
| ieSgSgIcmpRules.rules[].priority | нет | Object | |
| ieSgSgIcmpRules.rules[].priority.some | нет | Integer | |
| syncOp | да |
Ограничения
ieSgSgIcmpRules.rules[].SG:- Длина значения не должна превышать 256 символов.
- Значение должно начинаться и заканчиваться символами без пробелов.
- Возможно указать только существующий Security Group.
ieSgSgIcmpRules.rules[].sgLocal:- Длина значения не должна превышать 256 символов.
- Значение должно начинаться и заканчиваться символами без пробелов.
- Возможно указать только существующий Security Group.
ieSgSgRules.rules[].ICMP.Types:- Значение должно быть числом в диапазоне от 0 до 255.
- Повторения значений в списке не допускаются.
Пример использования
- ICMP4
- ICMP6
Ingress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieSgSgIcmpRules": {
"rules": [
{
"SG": "sg-1",
"sgLocal": "sg-2",
"logs": true,
"trace": true,
"traffic": "Ingress",
"ICMP": {
"IPv": "IPv4",
"Types": [
10, 20, 40
]
},
"action": "ACCEPT",
"priority": {
"some": 300
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieSgSgIcmpRules": {
"rules": [
{
"SG": "sg-1",
"sgLocal": "sg-2",
"logs": true,
"trace": true,
"traffic": "Egress",
"ICMP": {
"IPv": "IPv4",
"Types": [
10, 20, 15, 18
]
},
"action": "ACCEPT",
"priority": {
"some": 300
}
}
]
},
"syncOp": "Upsert"
}'
Выходные параметры
| название | тип данных | описание |
|---|---|---|
| - | Object | в случае успеха возвращается пустое тело |
Возможные ошибки API
Пользователь указал некорректные значения агрументов
- HTTP code: 400
- gRPC code: INVALID_ARGUMENT
- gRPC number: 3
Ошибка в указанных данных
- HTTP code: 500
- gRPC code: INTERNAL
- gRPC number: 13
Не найден метод
- 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": [
{
"SG": "sg-1",
"sgLocal": "sg-2",
"logs": true,
"trace": true,
"traffic": "Ingress",
"ICMP": {
"IPv": "IPv6",
"Types": [
10, 20, 40
]
},
"action": "ACCEPT",
"priority": {
"some": 300
}
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieSgSgIcmpRules": {
"rules": [
{
"SG": "sg-1",
"sgLocal": "sg-2",
"logs": true,
"trace": true,
"traffic": "Egress",
"ICMP": {
"IPv": "IPv6",
"Types": [
10, 20, 40, 45
]
},
"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
Ошибка в указанных данных
- HTTP code: 500
- gRPC code: INTERNAL
- gRPC number: 13
Диаграмма последовательности
В этом разделе мы покажем, как правила фильтрации трафика, созданные с помощью Terraform и API, внедряются в настройки nftables. Это позволяет легко интегрировать сложные правила безопасности прямо в вашу систему фильтрации трафика.
$Trace- Включить/отключить трассировку.$SrcSgroup- Имя Security Group$DstGroup- Имя Security Group$Transport- Протокол L3/L4 уровня модели OSI.$NftRuleType- Характеристика описывающая, что принимается трафик типа ip.$IcmpTypeList- Список, определяющий допустимые типы ICMP запросов.$SrcPorts- Набор открытых портов отправителя.$DstPorts- Набор открытых портов получателя$NftCounter- Счетчик количества байтов и пакетов.$Log- Включить/отключить логирование.$NftRuleVerdict- Результат применения правила, определяющий действие, которое будет применено к пакету.$hostUUID- Уникальный идентификатор ресурса в формате UUID.
| шаблон параметра | структура параметра | значения |
|---|---|---|
| $Trace | nftrace set |
|
| $SrcSgroup | saddr | |
| $DstSgroup | daddr | @${IPSet(sgName)} |
| $Transport | icmp | |
| $NftRuleType | ip | |
| $IcmpTypeList | type {} | Набор целочисленных значений от 0 до 255 |
| $NftCounter | counter | packets 0 bytes 0 |
| $Log | log | level debug flags ip options |
| $NftRuleVerdict | accept | $NftRuleVerdict определяет действие, которое будет применено к пакету в соответсвии с правилом. Это поле может принимать значение |
| $hostUUID | UUID | Указывается UUID хоста, от которого исходит правило |
Пример использования
- ICMP
- ingress
- egress
Шаблон
chain INGRESS-INPUT-sgName {
# **********
$Trace $NftRuleType $SrcSgroup $Transport $SrcPorts $DstPorts $NftCounter $Log $NftRuleVerdict
# **********
}
Пример использования
chain INGRESS-INPUT-sg-local-example {
# **********
nftrace set 1 ip saddr @NetIPv4-sg-example tcp dport { 80, 443 } sport { 64231 } counter packets 0 bytes 0 log level debug flags ip options accept
nftrace set 1 ip saddr @NetIPv6-sg-example tcp dport { 80, 443 } sport { 64231 } counter packets 0 bytes 0 log level debug flags ip options accept
# **********
}
Шаблон
chain EGRESS-POSTROUTING-sgName {
# **********
$Trace $NftRuleType $DstSgroup $Transport $SrcPorts $DstPorts $NftCounter $Log $NftRuleVerdict
# **********
}
Пример использования
chain EGRESS-POSTROUTING-sg-local-example {
# **********
nftrace set 1 ip daddr @NetIPv4-sg-example tcp dport { 80, 443 } sport { 64231 } counter packets 0 bytes 0 log level debug flags ip options accept
nftrace set 1 ip daddr @NetIPv6-sg-example tcp dport { 80, 443 } sport { 64231 } counter packets 0 bytes 0 log level debug flags ip options accept
# **********
}
- ingress
- egress
Шаблон
chain INGRESS-host-$hostUUID {
# **********
$NftRuleType $DstSgroup $Transport $IcmpTypeList $Trace $NftCounter $Log $NftRuleVerdict
# **********
}
Пример испо льзования
chain INGRESS-host-7f32b49b-3943-467c-aa00-72387671cf88 {
# **********
ip saddr @NetIPv4-incloud-sgroups/example icmp type { 100 } meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
ip6 saddr @NetIPv6-incloud-sgroups/example icmp type { 100 } meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
# **********
}
Шаблон
chain EGRESS-host-$hostUUID {
# **********
$NftRuleType $DstSgroup $Transport $IcmpTypeList $Trace $NftCounter $Log $NftRuleVerdict
# **********
}
Пример использования
chain EGRESS-POSTROUTING-sg-local-example {
# **********
ip daddr @NetIPv4-incloud-sgroups/example icmp type { 100 } meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
ip6 daddr @NetIPv6-incloud-sgroups/example icmp type { 100 } meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
# **********
}