Chains
В нашей реализации структуры мы вводим для INPUT и OUTPUT понятие 2-х цепочек. Первая цепочка является точкой входа для пакетов из сетевого стека, в ней указывается хук (input, prerouting, postrouting) и приоритет выполнения, так же эта цепочка используется для маршрутизации в последующие цепочки по принадлежности к той или иной Security Group. Вторая цепочка содержит наборы правил, относящиеся только к конкретной Security Group.
| Наименование цепочки | Тип | Описание |
|---|---|---|
| INGRESS-INPUT | Ingress | Первая цепочка является точкой входа для пакетов из сетевого стека, в ней указывается хук (input) и приоритет выполнения 0 (filter). Так же используется для маршрутизации в последующие цепочки по принадлежности к той или иной Security Group. |
| INGRESS-INPUT-$sgName | Ingress | Вторая цепочка содержит наборы правил, относящиеся только к конкретной Security Group. |
| EGRESS-POSTROUTING | Egress | Первая цепочка является точкой входа для пакетов из сетевого стека, в ней указывается хук (postrouting) и приоритет выполнения 300. Так же используется для маршрутизации в последующие цепочки по принадлежности к той или иной Security Group. |
| Egress | Вторая цепочка содержит наборы правил, относящиеся только к конкретной Security Group. |
- INGRESS-INPUT
- EGRESS-POSTROUTING
Описание
Правило перехода в цепочку INGRESS-INPUT-sgName с проверкой что трафик является входящим и предназначен для указанной Security Group.
Параметры
| Шаблон параметра | Структура параметра | Значение | Описание |
|---|---|---|---|
| $ConntrackState | ct state | established,related | Оптеделяет правило для обработки пакетов, удовлетворяющих условиям установленного и связанного состояния соединения. |
| $CtVerdict | accept | $CtVerdict - указывает на принятие (accept) пакетов по указанным условиям. Подробнее: Verdict statement | |
| $BaseRules | Base Rules - набор правил, которые прописываются статично из конфиграционнного файла агента для того что бы всегда был доступ до высококритичных сервисов таких как HBF и DNS. Подробнее: Config Base Rules | ||
| $RuleType | ip | Указатель на трафик типа IP | |
| $DstSgroup | daddr | @${IPSet({sgName})} | Значение типа string, не должно содержать в себе пробелов |
| $sgName | Название Security Group | ||
| $Counter | counter | packets 0 bytes 0 | Счетчик, учитывает количество пройденных пакетов с количеством байтов переданной информации в рамках указанной цепочки правил |
| $PolicyVerdict | policy | drop | Policy $Verdict устанавливается для цепочек с целью установки базового правила, которое будет применено к пакету если установленное правило не удовлетворили условия. По умолчанию drop. Подробнее: Verdict statement |
| $Verdict | goto | Так как данное правило используется для проверки типа трафика то переход на другую цепочку правил происходит только с помощью goto. Подробнее: Verdict statement | |
| $Hook | hook | input | Приоритет выполнения цепочки характеризующий стадию прохождения трафика |
| $HookPriority | priority | 0 | Приоритет выполнения цепочки одного типа |
Шаблон
chain INGRESS-INPUT {
type filter $Hook $HookPriority; $PolicyVerdict;
$ConntrackState $Counter $CtVerdict
$BaseRules
# **********
$RuleType $DstSgroup $Counter $Verdict INGRESS-INPUT-$sgName
# **********
$Counter
}
Пример использования
chain INGRESS-INPUT {
type filter hook input priority 0; policy drop;
ct state established,related counter packets 0 bytes 0 accept
ip saddr { 1.1.1.1, 2.2.2.2} accept
# **********
ip daddr @NetIPv4-exampleSG counter packets 0 bytes 0 goto INGRESS-INPUT-exampleSG
# **********
counter packets 0 bytes 0
}
table inet main-1705582480 {
chain INGRESS-INPUT {
type filter hook input priority filter; policy drop;
ct state established,related counter packets 0 bytes 0 accept
ip saddr { 1.1.1.1, 2.2.2.2} accept
# ******
ip daddr @NetIPv4-no-routed counter packets 0 bytes 0 goto INGRESS-INPUT-no-routed
ip daddr @NetIPv4-exampleSG counter packets 0 bytes 0 goto INGRESS-INPUT-exampleSG
counter packets 0 bytes 0
}
chain INGRESS-INPUT-no-routed {
# ******
counter packets 0 bytes 0 accept
}
chain INGRESS-INPUT-exampleSG {
# ******
counter packets 0 bytes 0 accept
}
}