Service to Service
Ресурс Service to Service представляет собой введенную нами абстракцию, позволяющая описывать п равила между сервисами, которые открывают доступ одновременно с двух сторон.
- API
- nftables
Более подробную документацию по API можно посмотреть здесь.
Более подробно по организации БД можно посмотреть здесь.
Входные параметры
serviceRules.rules[]- Список описываемых правил.serviceRules.rules[].name- Имя правила.serviceRules.rules[].svcFrom- Имя сервиса откуда уходит трафикserviceRules.rules[].svcTo- Имя сервиса куда уходит трафикserviceRules.rules[].logs- Включить/отключить логирование.serviceRules.rules[].trace- Включить/отключить трассировку.serviceRules.rules[].action- Действие для пакетов в сформированных правил в цепочке.serviceRules.rules[].priority- Структура, содержащая описание порядка применения правил в цепочке.serviceRules.rules[].priority.some- Поле, определяющее порядок применения правил в цепочке.syncOp- Поле определяющее действие с данными из запроса.
| название | обязательность | тип данных | значение по умолчанию |
|---|---|---|---|
| serviceRules.rules[] | да | Object[] | |
| serviceRules.rules[].name | да | String | |
| serviceRules.rules[].svcFrom | да | String | |
| serviceRules.rules[].svcTo | да | String | |
| serviceRules.rules[].logs | нет | Boolean | false |
| serviceRules.rules[].trace | нет | Boolean | false |
| serviceRules.rules[].action | да | ||
| serviceRules.rules[].priority | нет | Object | -350 |
| serviceRules.rules[].priority.some | нет | Integer | String | -350 |
| syncOp | да | Enum("Delete", "Upsert", "FullSync") |
Ограничения
serviceRules.rules[].svcFrom:- Длина значения не должна превышать 256 символов.
- Значение должно начинаться и заканчиваться символами без пробелов.
- Значение не может быть пустой строкой
- Возможно указать только существующий Service.
serviceRules.rules[].svcTo:- Длина значения не должна превышать 256 символов.
- Значение должно начинаться и заканчиваться символами без пробелов.
- Значение не может быть пустой строкой
- Возможно указать только существующий Service.
serviceRules.rules[].priority.some:- Значения должны находиться в интервале от -32768 до 32767
- Принимает значения (число) в виде string || integer
Пример использования
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"serviceRules": {
"rules": [
{
"name": "rule-svc-svc",
"action": "DROP",
"logs": true,
"priority": {
"some": -32768
},
"svcFrom": "svc-0",
"svcTo": "svc-1",
"trace": true
}
]
},
"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
Диаграмма последовательности
В этом разделе мы покажем, как правила фильтрации трафика, созданные с помощью API, внедряются в настройки nftables. Это позволяет легко интегрировать сложные правила безопасности прямо в вашу систему фильтрации трафика.
$Trace- Включить/отключить трассировку.$hostUUID- Уникальный идентификатор ресурса в формате UUID.$Transport- Протокол L3/L4 уровня модели OSI.$NftRuleType- Характеристика описывающая, что принимается трафик типа ip.$resourceName- путь к ресурсу через namespace$DstPorts- Набор открытых портов получателя$NftCounter- Счетчик количества байтов и пакетов.$Log- Включить/отключить логирование.$NftRuleVerdict- Результат применения правила, определяющий действие, которое будет применено к пакету.
| шаблон параметра | структура параметра | значение | описание |
|---|---|---|---|
| ${Trace} | nftrace set |
| Трассировка указанного правила (опциональна, можно включить/выключить) |
| ${hostUUID} | UUID | UUID4 | Значение UUID хоста |
| ${resourceName} | namespace/resource | incloud-sgroups/example | Путь до ресурса через namespace |
| ${Transport} | tcp | udp | протокол передачи данных в цепочке правил. | Одно из двух значений tcp | udp |
| ${RuleType} | ip | ip | ip6 | Описывает, что принимает трафик типа ip |
| ${DstPorts} | dport {} | Набор целочисленных значений от 0 до 65535 | Значения dport (destination port). Может быть как одно значение, как и множество значений портов. В случае если одно значение у порта то передается значение либо как целочисленное значение либо как название порта. Если передается массив значений портов то они должны быть внутри {} перечислены через запятую. |
| ${Counter} | counter packets 0 bytes 0 | Не параметризированный | Счетчик, учитывает количество пройденных пакетов с количеством байтов переданной информации в рамках указанной цепочки правил |
| ${Log} | log level debug flags ip options | Не параметризированный | Логирование указанного правила (опциональна, можно включить/выключить) |
| ${Verdict} | accept | Не параметризированный $Verdict определяет действие, которое будет применено к пакету в соответсвии с правилом. Это поле может принимать значение Подробнее: Verdict statementaccept или drop в зависимости от указанного в правиле. | Вердикт политики по пакетам данных |
Шаблон
chain EGRESS-host-${hostUUID} {
# **********
${RuleType} daddr @NetIPv4/@NetIPv6-${resourceName} ${Transport} ${DstPorts} ${Trace} ${Counter} ${Log} ${Verdict}
# **********
}
chain INGRESS-host-${hostUUID} {
# **********
${RuleType} saddr @NetIPv4/@NetIPv6-${resourceName} ${Transport} ${DstPorts} ${Trace} ${Counter} ${Log} ${Verdict}
# **********
}
Пример использования
set NetIPv4-${namespace/service} {
type ipv4_addr
flags interval
auto-merge
elements = { 1.1.1.1, 10.244.0.129, 127.0.0.1 } <- service IPs
}
set NetIPv6-${namespace/service} {
type ipv6_addr
flags interval
auto-merge
elements = { ::1, fe80::98de:51ff:feb6:673d } <- service IPs
}
chain INGRESS-host-d09f6c25-6e70-4a29-8559-6664cdcb84c9 {
ip saddr @NetIPv4-incloud-sgroups/example tcp dport 1-65500 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
ip6 saddr @NetIPv6-incloud-sgroups/example tcp dport 1-65500 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
meta nftrace set 1 counter packets 0 bytes 0 drop
}
chain EGRESS-host-d09f6c25-6e70-4a29-8559-6664cdcb84c9 {
ip daddr @NetIPv4-incloud-sgroups/example tcp dport 1-65500 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
ip6 daddr @NetIPv6-incloud-sgroups/example tcp dport 1-65500 meta nftrace set 1 counter packets 0 bytes 0 log level debug flags ip options drop
meta nftrace set 1 counter packets 0 bytes 0 drop
}