Sgroup to CIDR (Ingress/Egress) TCP/UDP
Ресурс Security Group to CIDR представляет собой введенную нами абстракцию, которая обеспечивает гибкое управление и
контроль за сетевым трафиком между различными группами безопасности и подсетями, используя TCP, UDP протоколы. Этот
ресурс дает возможность детально настроить, какой трафик разрешен к передаче между группами безопасности и
определенными подсетями, тем самым гарантируя высокий уровень защиты и управления сетевой инфраструктурой.
- API
- nftables
Более подробную документацию по API можно посмотреть здесь.
Более подробно по организации БД можно посмотреть здесь.
Входные параметры
ieCidrSgRules.rules[]- Структура, содержащая описание создаваемых правил.ieCidrSgRules.rules[].CIDR- Список, содержащий подсети типа IP.ieCidrSgRules.rules[].SG- Security Group относительно которой рассматриваются правила.ieCidrSgRules.rules[].logs- Включить/отключить логирование.ieCidrSgRules.rules[].trace- Включить/отключить трассировку.ieCidrSgRules.rules[].ports- Блок описывающий набор пар портов (source-destination).ieCidrSgRules.rules[].ports[].d- Набор открытых портов получателяieCidrSgRules.rules[].ports[].s- Набор открытых портов отправителя.ieCidrSgRules.rules[].traffic- Поле описывающий направление трафика.ieCidrSgRules.rules[].transport- Протокол L3/L4 уровня модели OSI.ieCidrSgRules.rules[].action- Действие для пакетов в сформированных правил в цепочке.ieCidrSgRules.rules[].priority- Структура, содержащая описание порядка применения правил в цепочке.ieCidrSgRules.rules[].priority.some- Поле, определяющее порядок применения правил в цепочке.ieCidrSgRules.syncOp- Поле определяющее действие с данными из запроса.
| название | обязательность | тип данных | значение по умолчанию |
|---|---|---|---|
| ieCidrSgRules.rules[] | да | Object[] | |
| ieCidrSgRules.rules[].CIDR | да | String | |
| ieCidrSgRules.rules[].SG | да | String | |
| ieCidrSgRules.rules[].logs | нет | Boolean | false |
| ieCidrSgRules.rules[].trace | нет | Boolean | false |
| ieCidrSgRules.rules[].ports | нет | Object[] | [] |
| ieCidrSgRules.rules[].ports[].d | да/нет | String | |
| ieCidrSgRules.rules[].ports[].s | да/нет | String | |
| ieCidrSgRules.rules[].traffic | да | Enum("Ingress", "Egress") | |
| ieCidrSgRules.rules[].transport | нет | Enum("TCP", "UDP") | TCP |
| ieCidrSgRules.rules[].action | да | ||
| ieCidrSgRules.rules[].priority | нет | Object | |
| ieCidrSgRules.rules[].priority.some | нет | Integer | String | |
| syncOp | да |
Ограничения
ieCidrSgRules.rules[].SG:- Длина значения не должна превышать 256 символов.
- Значение должно начинаться и заканчиваться символами без пробелов.
- Возможно указать только существующий Security Group.
ieCidrSgRules.rules[].CIDR:- Значение не может быть пустым.
- Значение поля должно начинаться и заканчиваться символами без пробелов.
- Подсеть должна соответствовать формату записи, определенному в RFC 4632.
ieCidrSgRules.rules[].ports:- Source порты не должны пересекаться в разных пачках в рамках ресурса
- Source || destination порт обязателен для заполнения
ieCidrSgRules.rules[].ports[].s:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения пор тов прописываются по одному или интервально, используя '-'.
- Не допускаются пересечения портов для ресурса.
- Интервал прописывается от меньшего к большему (99-110)
ieCidrSgRules.rules[].ports[].d:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
- Интервал прописывается от меньшего к большему (9090-1010)
- Допускаются пересечения портов destination для ресурса.
ieCidrSgRules.rules[].priority.some:- Значения должны находиться в интервале от -32768 до 32767
- Принимает значения (число) в виде string || integer
Пример использования
- TCP
- UDP
Ingress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgRules": {
"rules": [
{
"CIDR": "10.0.0.0/8",
"SG": "sg-1",
"ports": [
{
"s": "550",
"d": "5000"
},
{
"s": "44-66",
"d": "5010"
}
],
"trace": true,
"logs": true,
"traffic": "Ingress",
"transport": "TCP",
"action": "ACCEPT"
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgRules": {
"rules": [
{
"CIDR": "::1/128",
"SG": "sg-1",
"ports": [
{
"s": "550",
"d": "5000"
},
{
"s": "44-66",
"d": "5010"
}
],
"trace": true,
"logs": true,
"traffic": "Egress",
"transport": "TCP",
"action": "ACCEPT"
}
]
},
"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
Диаграмма последовательности
Ingress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgRules": {
"rules": [
{
"CIDR": "10.0.0.0/8",
"SG": "sg-1",
"ports": [
{
"s": "550",
"d": "5000"
},
{
"s": "44-66",
"d": "5010"
}
],
"trace": true,
"logs": true,
"traffic": "Ingress",
"transport": "UDP",
"action": "ACCEPT"
}
]
},
"syncOp": "Upsert"
}'
Egress
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"ieCidrSgRules": {
"rules": [
{
"CIDR": "::1/128",
"SG": "sg-1",
"ports": [
{
"s": "550",
"d": "5000"
},
{
"s": "44-66",
"d": "5010"
}
],
"trace": true,
"logs": true,
"traffic": "Egress",
"transport": "UDP",
"action": "ACCEPT"
}
]
},
"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- Включить/отключить трассировку.$SrcCIDR- CIDR, с которой устанавливаются правила взаимодействия.$DstCIDR- CIDR, с которой устанавливаются правила взаимодействия.$Transport- Протокол L3/L4 уровня модели OSI.$NftRuleType- Характеристика описывающая, что принимается трафик типа ip.$SrcPorts- Набор открытых портов отправителя.$DstPorts- Набор открытых портов получателя$NftCounter- Счетчик количества байтов и пакетов.$Log- Включить/отключить логирование.$NftRuleVerdict- Результат применения правила, определяющий действие, которое будет применено к пакету.$hostUUID- Уникальный идентификатор ресурса в формате UUID.
| шаблон параметра | структура параметра | значения |
|---|---|---|
| $Trace | nftrace set |
|
| $SrcCIDR | saddr | ${CIDR} |
| $DstCIDR | daddr | ${CIDR} |
| $Transport | ||
| $NftRuleType | ip | |
| $SrcPorts | sport {} | Набор целочисленных значений от 0 до 65535 |
| $DstPorts | dport {} | Набор целочисленных значений от 0 до 65535 |
| $NftCounter | counter | packets 0 bytes 0 |
| $Log | log | level debug flags ip options |
| $NftRuleVerdict | accept | $NftRuleVerdict определяет действие, которое будет применено к пакету в соответсвии с правилом. Это поле
может принимать значение |
| $hostUUID | UUID | Указывается UUID хоста, от которого исходит правило |
Пример использования
- TCP
- UDP
- ingress
- egress
Шаблон
chain INGRESS-host-$hostUUID {
# **********
$NftRuleType $SrcCIDR $Transport $SrcPorts $DstPorts $Trace $NftCounter $Log $NftRuleVerdict
# **********
}
Пример использования
chain INGRESS-host-7f32b49b-3943-467c-aa00-72387671cf88 {
# **********
ip saddr { 10.150.0.208/28 } tcp sport 40025 tcp dport 40026 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
ip6 saddr { ::1 } tcp sport 1000 tcp dport 2000 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
# **********
}
Шаблон
chain EGRESS-host-$hostUUID {
# **********
$NftRuleType $SrcCIDR $Transport $SrcPorts $DstPorts $Trace $NftCounter $Log $NftRuleVerdict
# **********
}
Пример использования
chain EGRESS-host-7f32b49b-3943-467c-aa00-72387671cf88 {
# **********
ip daddr { 10.150.0.208/28 } tcp sport 40025 tcp dport 40026 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
ip6 daddr { ::1 } tcp sport 1000 tcp dport 2000 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
# **********
}
- ingress
- egress
Шаблон
chain INGRESS-host-$hostUUID {
# **********
$NftRuleType $SrcCIDR $Transport $SrcPorts $DstPorts $Trace $NftCounter $Log $NftRuleVerdict
# **********
}
Пример использования
chain INGRESS-host-7f32b49b-3943-467c-aa00-72387671cf88 {
# **********
ip saddr { 10.150.0.208/28 } udp sport 40025 udp dport 40026 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
ip6 saddr { ::1 } udp sport 1000 udp dport 2000 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
# **********
}
Шаблон
chain EGRESS-host-$hostUUID {
# **********
$NftRuleType $SrcCIDR $Transport $SrcPorts $DstPorts $Trace $NftCounter $Log $NftRuleVerdict
# **********
}
Пример использования
chain EGRESS-host-7f32b49b-3943-467c-aa00-72387671cf88 {
# **********
ip daddr { 10.150.0.208/28 } udp sport 40025 udp dport 40026 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
ip6 daddr { ::1 } udp sport 1000 udp dport 2000 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
# **********
}