Sgroup to FQDN
Ресурс Security Group to FQDN представляет собой введенную нами абстракцию, которая обеспечивает гибкое управление и
контроль за сетевым трафиком между различными группами безопасности и IP адресами стоящие за FQDN записями, используя
TCP, UDP протоколы. Этот ресурс дает возможность детально настроить, какой трафик разрешен к передаче между группами
безопасности и IP адресами стоящие за определенными FQDN записями, тем самым гарантируя высокий уровень защиты и
управления сетевой инфраструктурой.
- API
- nftables
Более подробную документацию по API можно посмотреть здесь.
Более подробно по организации БД можно посмотреть здесь.
Входные параметры
fqdnRules.rules- Структура, содержащая описание создаваемых правил.fqdnRules.rules[].FQDN- Полное доменное имя (FQDN), для которого применяется данное правило.fqdnRules.rules[].logs- Включить/отключить логирование.fqdnRules.rules[].ports- Включить/отключить трассировку.fqdnRules.rules[].ports[].d- Набор открытых портов получателяfqdnRules.rules[].ports[].s- Набор открытых портов отправителя.fqdnRules.rules[].sgFrom- Security Group относительно которой рассматриваются правила.fqdnRules.rules[].transport- Протокол L3/L4 уровня модели OSI.fqdnRules.rules[].action- Действие для пакетов в сформированных правил в цепочке.fqdnRules.rules[].priority- Структура, содержащая описание порядка применения правил в цепочке.fqdnRules.rules[].priority.some- Поле, определяющее порядок применения правил в цепочке.syncOp- Поле определяющее действие с данными из запроса.
| название | обязательность | тип данных | значение по умолчанию |
|---|---|---|---|
| fqdnRules.rules | да | Object | |
| fqdnRules.rules[].FQDN | да | String | |
| fqdnRules.rules[].logs | нет | Boolean | false |
| fqdnRules.rules[].ports | нет | Object[] | null |
| fqdnRules.rules[].ports[].d | нет | String | null |
| fqdnRules.rules[].ports[].s | нет | String | null |
| fqdnRules.rules[].sgFrom | да | String | |
| fqdnRules.rules[].transport | да | Enum("TCP", "UDP") | |
| fqdnRules.rules[].action | да | Enum("UNDEF", "ACCEPT", "DROP") | |
| fqdnRules.rules[].priority | нет | Object | |
| fqdnRules.rules[].priority.some | нет | Integer | |
| syncOp | да |
Ограничения
fqdnRules.rules[].FQDN:fqdnRules.rules[].sgFrom:- Длина значения не должна превышать 256 символов.
- Значение должно начинаться и заканчиваться символами без пробелов.
- Возможно указать только существующий Security Group.
fqdnRules.rules[].ports:- Source порты не должны пересекаться в разных пачках в рамках ресурса
- Source || destination порт обязателен для заполнения
fqdnRules.rules[].ports[].s:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально, используя '-'.
- Не допускаются пересечения портов для ресурса.
- Ин тервал прописывается от меньшего к большему (99-110)
fqdnRules.rules[].ports[].d:- Значения портов должно находиться в интервале от 1 до 65535.
- Если значение не будет указано то будет использоваться весь диапазон портов.
- Значения портов прописываются по одному или интервально используя '-'.
- Интервал прописывается от меньшего к большему (9090-1010)
- Допускаются пересечения портов destination для ресурса.
Пример использования
- TCP
- UDP
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"fqdnRules": {
"rules": [
{
"ports": [
{
"s": "8080",
"d": "40000-45000"
}
],
"sgFrom": "sg-0",
"FQDN": "google.com",
"transport": "TCP",
"logs": true,
"action": "DROP",
"priority": {
"some": 255
}
}
],
"syncOp": "Upsert"
}'
curl '127.0.0.1:9007/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"fqdnRules": {
"rules": [
{
"ports": [
{
"s": "443",
"d": "40000-45000"
}
],
"sgFrom": "sg-0",
"FQDN": "google.com",
"transport": "UDP",
"logs": true,
"action": "DROP",
"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
Ошибка в указанных данных
- HTTP code: 500
- gRPC code: INTERNAL
- gRPC number: 13
Диаграмма последовательности
В этом разделе мы покажем, как правила фильтрации трафика, созданные с помощью API, внедряются в настройки nftables. Это позволяет легко интегрировать сложные правила безопасности прямо в вашу систему фильтрации трафика.
| шаблон параметра | структура параметра | значение | описание |
|---|---|---|---|
| ${DstFQDN} | daddr @NetIPv4-$DstFQDN | Наименование IPSet в котором описаны сети в FQDN | Значение типа string, не должно содержать в себе пробелов |
| ${Transport} | tcp | udp | протокол передачи данных в цепочке правил. | Одно из двух значений tcp | udp |
| ${RuleType} | ip | Описывает, что принимает трафик типа ip | |
| ${SrcPorts} | sport {} | Набор целочисленных значений от 0 до 65535З | Значения sport (source port). Может быть как одно значение, как и множество значений портов. В случае если одно значение у порта то передается значение либо как целочисленное значение либо как название порта. Если передается массив значений портов то они должны быть внутри {} перечислены через запятую. |
| ${DstPorts} | dport {} | Набор целочисленных значений от 0 до 65535З | Значения dport (destination port). Может быть как одно значение, как и множество значений портов. В случае если одно значение у порта то передается значение либо как целочисленное значение либо как название порта. Если передается массив значений портов то они должны быть внутри {} перечислены через запятую. |
| ${hostUUID} | UUID | Указывается UUID хоста, от которого исходит правило | Значение UUID хоста |
| ${Counter} | counter packets 0 bytes 0 | Не параметризированный | Счетчик, учитывает количество пройденных пакетов с количеством байтов переданной информации в рамках указанной цепочки правил |
| ${Log} | log level debug flags ip options | Не параметризированный | Логирование указанного правила (опциональна, можно включить/выключить) |
| ${Verdict} | accept | Не параметризированный $Verdict определяет действие, которое будет применено к пакету в соответсвии с правилом. Это поле может принимать значение Подробнее: Verdict statementaccept или drop в зависимости от указанного в правиле. | Вердикт политики по пакетам данных |
Шаблон
chain EGRESS-host-$hostUUID {
# **********
${RuleType} ${DstFQDN} ${Transport} ${SrcPorts} ${DstPorts} ${Counter} ${Log} ${Verdict}
# **********
}
Пример использования
chain EGRESS-host-$hostUUID {
# *****************
ip daddr @NetIPv4-fqdn-google.com tcp sport 100 tcp dport 40000-45000 counter packets 0 bytes 0 log level debug flags ip options drop
# *****************
}