Настройки firewall nftables (firewall.toml)

По умолчанию настройки от firewall находятся тут:

/etc/kor-elf-shield/firewall.toml

Путь к этим настройкам можно поменять в главных настройках и ознакомиться можно тут (параметр firewall).

Копия полноценого файл настроек находится тут.

В этом файле есть несколько разделов:


Настройки портов

Эти настройки должны находиться вначале файла до разделов: "Настройки IPv4", "Настройки IPv6", "Общие настройки", "Политика действий по умолчанию", "Именование метаданных".

Параметр [[ports]]
Значение Указываем группу настроек портов
По умолчанию  
Описание Это группа настроек портов. [[ports]] можно указывать неограниченное количество групп.

[[ports]]
numbers - Номера портов (обязательное поле)
directions - Входящий (in), исходящий трафик (out) (обязательное поле)
protocols - Протокол: tcp, udp (обязательное поле)
action - Действие: accept, drop или reject (обязательное поле)
limit_rate - Указываем ограничения если будет нужно (не обязательное поле)

numbers - можно указывать одно или несколько портов, но правила будут создаваться отдельно для каждого порта.
directions - если указываем in и out, то создаться каждое правило отдельно в своей цепочке.
protocols - если указано tcp и udp, то создаться каждое правило отдельно для каждого протокола.

action:
accept - разрешить
drop    - блокировать молча
reject  - блокировка с обратной связью

limit_rate - устанавливайте его в соответствии с документацией nftables (limit rate).
Примеры
[[ports]]
numbers = [22]
directions = ["in", "out"]
protocols = ["tcp"]
action = "accept"

[[ports]]
numbers = [80,443]
directions = ["in", "out"]
protocols = ["tcp"]
action = "accept"

[[ports]]
numbers = [53]
directions = ["in", "out"]
protocols = ["tcp", "udp"]
action = "accept"
Другой пример:
[[ports]]
numbers = [22]
directions = ["in", "out"]
protocols = ["tcp"]
action = "accept"
Другой пример:
[[ports]]
numbers = [22]
directions = ["in"]
protocols = ["tcp"]
action = "drop"

[[ports]]
numbers = [22]
directions = ["out"]
protocols = ["tcp"]
action = "accept"

[[ports]]
numbers = [80,443]
directions = ["in", "out"]
protocols = ["tcp"]
action = "accept"
limit_rate = "10/second"
***
Параметр [[ips]]
Значение Указываем группу настроек IP адресов
По умолчанию  
Описание

Указываем IP адреса, которые надо разрешить или запретить. [[ips]] можно указывать неограниченное количество групп.

[[ips]]
ips - Список IP адресов (обязательное поле)
directions - Входящий (in), исходящий трафик (out) (обязательное поле)
action -
Действие: accept, drop или reject (обязательное поле)
ports - Номера портов (не обязательное поле)
protocols - Протокол: tcp, udp (не обязательное поле)
limit_rate - Указываем ограничения если будет нужно (не обязательное поле)

ips - можно указывать одно или несколько IP адресов, но правила будут создаваться отдельно для каждого адреса.
ports - можно указывать одно или несколько портов, но правила будут создаваться отдельно для каждого порта.
directions - если указываем in и out, то создаться каждое правило отдельно в своей цепочке.
protocols - если указано tcp и udp, то создаться каждое правило отдельно для каждого протокола.

Внимание:
Если protocols не указан, но указан ports, то правила будут добавляться с протоколом TCP. protocols работает вместе с ports. Если protocols указан, а ports нет, то добавится правило без учёта этих полей.

action:
accept - разрешить
drop - блокировать молча
reject - блокировка с обратной связью

limit_rate - устанавливайте его в соответствии с документацией nftables (limit rate).

Примеры
[[ips]]
ips = ["192.168.1.1", "fe80::260:8ff:fe52:f9d8"]
action = "accept"
directions = ["in", "out"]
protocols = ["tcp", "udp"]
ports = ["80"]
limit_rate = "10/second"

[[ips]]
ips = ["192.168.1.2"]
action = "drop"
directions = ["in"]
Другой пример:
[[ips]]
ips = ["192.168.1.2"]
action = "drop"
directions = ["in"]

Настройки IPv4

Указывать параметры для этого раздела нужно вначале указать [ip4], а после уже указывать остальные параметры этого раздела. Пример:

[ip4]
icmp_in = true
icmp_in_rate = "1/second"
icmp_out = true
Параметр icmp_in
Значение true или false
По умолчанию true
Описание Разрешить входящий PING. Отключение PING может нарушить работу внешнего мониторинга.
true  - включает
false - выключает
Примеры
icmp_in = true
icmp_in = false
***
Параметр icmp_in_rate
Значение Установите ограничения на количество одновременных пакетов в секунду
По умолчанию 1/second
Описание Установите ограничения на количество одновременных входящих пакетов в секунду. Если превысит количество пакетов за указанный период, оставшиеся пакеты будут отброшены. Если вы заметите нежелательные потери, увеличьте значение или отключите его.

Чтобы отключить ограничение скорости, установите значение "0", в противном случае установите его в соответствии с документацией nftables (limit rate). Например, «1/second» ограничит передачу одним пакетом в секунду.
Примеры
icmp_in_rate = "1/second"
icmp_in_rate = "0"
icmp_in_rate = "3/second"
***
Параметр icmp_out
Значение true или false
По умолчанию true
Описание Разрешить исходящий PING. Если нет особых причин, то лучше не отключать иначе может нарушить работу ОС.
true - включает
false - выключает
Примеры
icmp_out = true
icmp_out = false
***
Параметр icmp_out_rate
Значение Установите ограничения на количество одновременных пакетов в секунду.
По умолчанию 0
Описание Установите ограничения на количество одновременных исходящих пакетов в секунду. Если превысит количество пакетов за указанный период, оставшиеся пакеты будут отброшены. Если нет особых причин, то лучше не включать ограничения иначе может нарушить работу ОС.

Чтобы отключить ограничение скорости, установите значение "0", в противном случае установите его в соответствии с документацией nftables (limit rate). Например, «1/second» ограничит передачу одним пакетом в секунду.
Примеры
icmp_out_rate = "1/second"
icmp_out_rate = "0"
icmp_out_rate = "3/second"
***
Параметр icmp_timestamp_drop
Значение true или false
По умолчанию false
Описание Блокировать ICMP timestamp-запросы. На самом деле реальной угрозы почти нет, но иногда ИТ-аудиторы настаивают на блокировке ICMP timestamp-запросов.
true  - включает
false - выключает
Примеры
icmp_timestamp_drop = true
icmp_timestamp_drop = false

Настройки IP6

Указывать параметры для этого раздела нужно вначале указать [ip6], а после уже указывать остальные параметры этого раздела. Пример:

[ip6]
enable = true
icmp_strict = false
Параметр enable
Значение true или false
По умолчанию false
Описание Включает поддержку IPv6. Если IPv6 выключен, то все настройки связанные с IPv6 будут игнорироваться.
true  - включает
false - выключает
Примеры
enable = true
enable = false
***
Параметр icmp_strict
Значение true или false
По умолчанию false
Описание IPv6 активно использует пакеты ICMPV6, поэтому по умолчанию строгий режим ICMPV6 выключен. Однако это может увеличить риск атак на ICMPV6. Можно включить строгий режим, но это может спровоцировать проблемы с некоторыми типами подключений.
true  - включает
false - выключает
Примеры
icmp_strict = true
icmp_strict = false

Общие настройки

Указывать параметры для этого раздела нужно вначале указать [options], а после уже указывать остальные параметры этого раздела. Пример:

[options]
saves_rules = false
saves_rules_path = "/etc/nftables.conf"
dns_strict = false
Параметр saves_rules
Значение true или false
По умолчанию false
Описание Будет ли демон сохранять правила в системный файл nftables. Не забудьте проверить, что путь к nftables соответствует вашей ОС. Если не сохранять правила в системный файл nftables, то после перезапуска программы nftables (например после обновления) все правила сотрутся. Тем не менее мы по умолчанию решили отключить автоматическое сохранения правил в системный файл nftables, потому что надо вначале убедиться, что параметре saves_rules_path указывает на правильный файл.
true  - включает
false - выключает
Примеры
saves_rules = true
saves_rules = false
***
Параметр saves_rules_path
Значение Указываем путь к файлу
По умолчанию /etc/nftables.conf
Описание Путь, где будут сохранены правила для nftables. Укажите путь, соответствующий вашей ОС. Путь должен быть абсолютный. Относительный путь вызовет ошибку! Обязательно в конце должно быть указано .conf.
Примеры
saves_rules_path = "/etc/nftables.conf"
***
Параметр dns_strict
Значение true или false
По умолчанию false
Описание Включает строгие правила nftables к DNS-трафику. Если включить этот режим, то некоторые правила, связанные с DNS, не добавятся в nftables. Что улучшит безопасность и предотвратить злоупотребление локальным DNS-сервером. Но может вызвать проблемы связанным с DNS.
true  - включает
false - выключает
Примеры
dns_strict = true
dns_strict = false
***
Параметр dns_strict_ns
Значение true или false
По умолчанию false
Описание Включает строгие правила nftables к DNS-трафику. Если включить этот режим, то не добавятся правила, разрешающие IP адресам порт 53 (входящим и исходящим), которые указаны в /etc/resolv.conf. Это может спровоцировать проблему с DNS.
true  - включает
false - выключает
Примеры
dns_strict_ns = true
dns_strict_ns = false
***
Параметр packet_filter
Значение true или false
По умолчанию true
Описание Добавляет в nftables фильтирацию пакетов, которые нарушают порядок. Отключать не рекомендуется!
true  - включает
false - выключает
Примеры
packet_filter = true
packet_filter = false

Политика действий по умолчанию

Указывать параметры для этого раздела нужно вначале указать [policy], а после уже указывать остальные параметры этого раздела. Пример:

[policy]
default_allow_input = false
default_allow_output = false
default_allow_forward = false
Параметр default_allow_input
Значение true или false
По умолчанию false
Описание Разрешить входящий трафик по умолчанию.
true  - включает
false - выключает
Примеры
default_allow_input = true
default_allow_input = false
***
Параметр default_allow_output
Значение true или false
По умолчанию false
Описание Разрешить исходящий трафик по умолчанию.
true  - включает
false - выключает
Примеры
default_allow_output = true
default_allow_output = false
***
Параметр default_allow_forward
Значение true или false
По умолчанию false
Описание Разрешить forward трафик по умолчанию.
true  - включает
false - выключает
Примеры
default_allow_forward = true
default_allow_forward = false
***
Параметр input_drop
Значение drop или reject
По умолчанию drop
Описание Как заблокировать входящий трафик.
drop   - блокировать молча
reject - блокировка с обратной связью
Примеры
input_drop = "drop"
input_drop = "reject"
***
Параметр output_drop
Значение drop или reject
По умолчанию reject
Описание Как заблокировать исходящий трафик.
drop   - блокировать молча
reject - блокировка с обратной связью
Примеры
output_drop = "drop"
output_drop = "reject"
***
Параметр forward_drop
Значение drop или reject
По умолчанию drop
Описание Как заблокировать трафик forward.
drop   - блокировать молча
reject - блокировка с обратной связью
Примеры
forward_drop = "drop"
forward_drop = "reject"

Именование метаданных

Указывать параметры для этого раздела нужно вначале указать [metadataNaming], а после уже указывать остальные параметры этого раздела. Пример:

[metadataNaming]
table_name = "shield"
chain_input_name = "input"
chain_output_name = "output"
chain_forward_name = "forward"
Параметр table_name
Значение От 1 символа по 32 символа
Разрешены символы: a-zA-Z0-9_-
По умолчанию shield
Описание Имя таблицы в nftables.
Примеры
table_name = "shield"
***
Параметр chain_input_name
Значение От 1 символа по 32 символа
Разрешены символы: a-zA-Z0-9_-
По умолчанию input
Описание Имя цепочки для входящего трафика.
Примеры
chain_input_name = "input"
***
Параметр chain_output_name
Значение От 1 символа по 32 символа
Разрешены символы: a-zA-Z0-9_-
По умолчанию output
Описание Имя цепочки для исходящего трафика.
Примеры
chain_output_name = "output"
***
Параметр chain_forward_name
Значение От 1 символа по 32 символа
Разрешены символы: a-zA-Z0-9_-
По умолчанию forward
Описание Имя цепочки для forward трафика.
Примеры
chain_forward_name = "forward"