Настройки анализатора логов (analyzer.toml)

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

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

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

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

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


Защита от перебора пароля

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

[bruteForceProtection]
enabled = true
notify = true
rate_limit_count = 5
blocking_time = 3600
blocking_time = 3600
rate_limit_reset_period = 86400
Параметр enabled
Значение true или false
По умолчанию true
Описание Включает группу отслеживания перебора пароля. Если отключено, отслеживание перебора пароля работать не будет.
true  - включает
false - выключает
Примеры
enabled = true
enabled = false
***
Параметр notify
Значение true или false
По умолчанию true
Описание Включает уведомления об блокировок. Если отключено, они будут отображаться в логах только на уровне = "info".
true  - включает
false - выключает
Примеры
notify = true
notify = false
***
Параметр rate_limit_count
Значение от 1
По умолчанию 5
Описание Максимальное количество ошибок, после которого произойдёт блокировка.
Примеры
rate_limit_count = 5
rate_limit_count = 3
***
Параметр blocking_time
Значение от 0
По умолчанию 3600
Описание Время в секундах, в течение которого будет заблокирован IP-адрес. Указание 0 приведет к его постоянной блокировке.
Примеры
blocking_time = 3600
blocking_time = 600
blocking_time = 0
***
Параметр rate_limit_period
Значение от 1
По умолчанию 3600
Описание Установите временной интервал для отслеживания сбоев входа в систему в течение секунд.
Примеры
rate_limit_period = 3600
rate_limit_period = 600
***
Параметр rate_limit_reset_period
Значение от 0
По умолчанию 86400
Описание Указываем в секундах, через какое время сбрасывать данные IP в группе _default если не было событий. Если указать 0, то не будет сбрасывать.
Примеры
rate_limit_reset_period = 3600
rate_limit_reset_period = 86400
rate_limit_reset_period = 0
***
Параметр ssh_enable
Значение true или false
По умолчанию true
Описание Включает защиту от перебора пароля от ssh.
true  - включает
false - выключает
Примеры
ssh_enable = true
ssh_enable = false
***
Параметр ssh_notify
Значение true или false
По умолчанию true
Описание Включает уведомления об блокировках, когда срабатывает защита от перебора пароля. Если отключено, они будут отображаться в логах только на уровне = "info".
true  - включает
false - выключает
Примеры
ssh_notify = true
ssh_notify = false
***
Параметр ssh_notify_cooldown_seconds
Значение От 0
По умолчанию 0
Описание Минимальный интервал в секундах между уведомлениями об успешной SSH-блокировке. После отправки уведомления повторные уведомления не будут отправляться в течение указанного времени. Если вы укажете 0, ограничение по времени для уведомлений будет отключено.
Примеры
ssh_notify_cooldown_seconds = 0
ssh_notify_cooldown_seconds = 86400
***
Параметр ssh_notify_every
Значение От 0
По умолчанию 0
Описание Количество успешных SSH-блокировок, которое нужно пропустить после отправки уведомления. Следующее уведомление будет отправлено после указанного количества новых сообщений о блокировке. Этот параметр имеет приоритет над ssh_notify_cooldown_seconds. Если указать 0, ограничение на количество сообщений будет отключено.
Примеры
ssh_notify_every = 0
ssh_notify_every = 10
***
Параметр ssh_group
Значение Укажите name группы от [[bruteForceProtection.groups]]
По умолчанию  
Описание Можно указать свою группу, чтобы связать с другими правилами.
Примеры
ssh_group = ""
ssh_group = "new_group"

Защита от перебора пароля (настройка групп)

Если вы захотите добавить свои группы. Указывать параметры для этого раздела нужно вначале указать [[bruteForceProtection.groups]], а после уже указывать остальные параметры этого раздела.

Параметр [[bruteForceProtection.groups]]
Значение Указываем настройки группы.
По умолчанию  
Описание

Это группа настроек для защиты от перебора пароля. [[bruteForceProtection.groups]] можно указывать неограниченное количество групп.

[[bruteForceProtection.groups]]
name -
Имя группы должно быть уникальным и разрешены символы: a-z, A-Z, -, _ (обязательное поле)
message - Текст уведомления (обязательное поле)
rate_limit_reset_period
- Указываем в секундах, через какое время сбрасывать данные в группе если не было событий. Если вы укажете 0, ограничение по времени для уведомлений будет отключено.
block_type - Указываем тип блокировки: ip, ip_port. Если ничего не укажите, будет указан тип ip. (не обязательное поле)
ports - Если тип блокировки стоит ip_port, то нужно указать порты, которые будут заблокированы после обнаружения попытки перебора пароля.
[[bruteForceProtection.groups.rate_limits]] (можно указывать несколько)
count - Максимальное количество ошибок, после которого произойдёт блокировка.
period - Установите временной интервал для отслеживания сбоев входа в систему в течение секунд. 
blocking_time - Время в секундах, в течение которого будет заблокирован IP-адрес. Указание 0 приведет к его постоянной блокировке.
Внутри [[bruteForceProtection.groups.rate_limits]] можно переопределить настройки block_type и ports.
block_type - Указываем тип блокировки: ip, ip_port. Если ничего не укажите, будет указан тип ip. (не обязательное поле)
ports - Если тип блокировки стоит ip_port, то нужно указать порты, которые будут заблокированы после обнаружения попытки перебора пароля.

Примеры
[[bruteForceProtection.groups]]
name = "my_name_group"
message = "Любой текст группы"
rate_limit_reset_period = 86400
block_type = "ip_port"
ports = ["21/tcp", "21/udp"]
[[bruteForceProtection.groups.rate_limits]]
count = 5
period = 3600
blocking_time = 600
[[bruteForceProtection.groups.rate_limits]]
count = 3
period = 3600
blocking_time = 3600
[[bruteForceProtection.groups.rate_limits]]
count = 2
period = 18000
blocking_time = 36000
block_type = "ip"

Тут мы указали несколько [[bruteForceProtection.groups.rate_limits]]. Это означает, что после временной блокировки IP адрес в этой группе перейдёт на следующий уровень [[bruteForceProtection.groups.rate_limits]].

1 уровень будет работать по правилам, что если IP адрес совершил 5 не удачных попыток входов, где между попытками было менее часа, то заблокируется на 10 минут. Для этого IP адреса будет заблокирован только порт 21 TCP и UDP. И IP адрес будет переведён на следующий уровень.

2 уровень будет работать по правилам, что если IP адрес совершил 3 не удачных попыток входов, где между попытками было менее часа, то заблокируется на час. Для этого IP адреса будет заблокирован только порт 21 TCP и UDP. И IP адрес будет переведён на следующий уровень.

3 уровень будет работать по правилам, что если IP адрес совершил 2 не удачных попыток входов, где между попытками было менее 5 часов, то заблокируется на 10 часов. В этот раз блокируются все порты для этого IP адреса. И IP адрес будет переведён на следующий уровень.

Так как 4 уровня нет, то будет дальше приниматься для этого IP адреса только 3-ий уровень. Но если в течении суток (rate_limit_reset_period = 86400) не было с этого IP адреса зафиксированных не удачных авторизаций, то он снова передёт на 1 уровень.


Другой пример:

[[bruteForceProtection.groups]]
name = "my_name_group"
message = "Any message"
rate_limit_reset_period = 86400
[[bruteForceProtection.groups.rate_limits]]
count = 10
period = 3600
blocking_time = 600

[[bruteForceProtection.groups]]
name = "my_name_group 2"
message = "Any message 2"
rate_limit_reset_period = 3600
block_type = "ip"
[[bruteForceProtection.groups.rate_limits]]
count = 3
period = 60
blocking_time = 600
block_type = "ip_port"
ports = ["80/tcp", "443/tcp"]
[[bruteForceProtection.groups.rate_limits]]
count = 3
period = 60
blocking_time = 1800

[[bruteForceProtection.groups]]
name = "my_name_group 3"
message = "Any message 3"
rate_limit_reset_period = 604800
[[bruteForceProtection.groups.rate_limits]]
count = 10
period = 600
blocking_time = 600
[[bruteForceProtection.groups.rate_limits]]
count = 10
period = 3600
blocking_time = 600
[[bruteForceProtection.groups.rate_limits]]
count = 5
period = 3600
blocking_time = 3600
[[bruteForceProtection.groups.rate_limits]]
count = 3
period = 3600
blocking_time = 86400
[[bruteForceProtection.groups.rate_limits]]
count = 1
period = 3600
blocking_time = 86400

Защита от перебора пароля (настройка правил анализа логов)

Если вы захотите добавить свои настройки для отслеживания по логам не удачных входов. Указывать параметры для этого раздела нужно вначале указать [[bruteForceProtection.rules]], а после уже указывать остальные параметры этого раздела.

Параметр [[bruteForceProtection.rules]]
Значение Указываем настройки правил для анализа логов.
По умолчанию  
Описание

[[bruteForceProtection.rules]] можно указывать неограниченное количество правил.

[[bruteForceProtection.rules]]
enabled
- Включает или выключает отслеживания (обязательное поле)
notify
- Включает или выключает уведомления (обязательное поле)
notify_cooldown_seconds - Минимальный интервал в секундах между уведомлениями об успешной блокировке (не обязательное поле)
notify_every - Количество успешных блокировок, которое нужно пропустить после отправки уведомления (не обязательное поле)
name - Имя уведомления. Разрешены символы: a-z, A-Z, -, _.  Имя должно быть уникальным. Первый символ обязательно буква (обязательное поле)
message - Текст уведомления (обязательное поле)
group - Можно указать имя группы (не обязательное поле)
[bruteForceProtection.rules.source] Настройка источника лога
type - journalctl или file (обязательное поле)
path - Путь к файлу (обязательное поле если type = "file")
field - systemd_unit или syslog_identifier (обязательное поле если type = "journalctl")
match - Значение (обязательное поле если type = "journalctl")
Если field = "systemd_unit", то match должен заканчиваться: .service, .socket, .target, .mount, .timer, .path, .scope, .slice, .device
[[bruteForceProtection.rules.patterns]]
Настройка регулярок, может быть несколько
regexp - Указываем свою регулярку (обязательное поле)
ip - Указываем номер из регулярки (отсчёт идёт от 1) , который укажет IP (обязательное поле)
[[bruteForceProtection.rules.patterns.values]] Если в уведомлениях хотите указать ещё несколько полей, которые можно получить из регулярки
name - Название поля
value - Указываем номер из регулярки (отсчёт идёт от 1)

Примеры
[[bruteForceProtection.rules]]
enabled = true
notify = true
notify_cooldown_seconds = 0
notify_every = 0
name = "my_name_rule"
message = "Any message"
group = "my_name_group"
[bruteForceProtection.rules.source]
type = "journalctl"
field = "systemd_unit"
match = "ssh.service"
[[bruteForceProtection.rules.patterns]]
regexp = '^Failed password for (\S+) from (\S+) port \S+'
ip = 2
[[bruteForceProtection.rules.patterns.values]]
name = "User"
value = 1

Другой пример:

[[bruteForceProtection.rules]]
enabled = true
notify = true
notify_cooldown_seconds = 0
notify_every = 0
name = "Name 1"
message = "Message 1"
group = "group"
[bruteForceProtection.rules.source]
type = "journalctl"
field = "syslog_identifier"
match = "test"
[[bruteForceProtection.rules.patterns]]
regexp = '^Login attempt for: (\S+) from: (\S+)\/\S+\s+failed'
ip = 2
[[bruteForceProtection.rules.patterns.values]]
name = "Login"
value = 1


[[bruteForceProtection.rules]]
enabled = true
notify = true
notify_cooldown_seconds = 0
notify_every = 0
name = "Name 2"
message = "Message 2"
group = "group 2"
[bruteForceProtection.rules.source]
type = "file"
path = "/var/log/test.log"
[[bruteForceProtection.rules.patterns]]
regexp = '^Failed authentication attempt from (\d+.\d+.\d+.\d+)\S+\s+user does not exist (\S+)'
ip = 1
[[bruteForceProtection.rules.patterns.values]]
name = "Login"
value = 2
[[bruteForceProtection.rules.patterns]]
regexp = '^Failed authentication attempt from (\d+.\d+.\d+.\d+)\S+\s+\S+ password is invalid (\S+)'
ip = 1
[[bruteForceProtection.rules.patterns.values]]
name = "Login"
value = 2

Другой пример:

Если у вас есть сервис, которому необходима защита от подбора паролей, но частота попыток подбора паролей приводит к многочисленным уведомлениям, и вы не хотите полностью отключать уведомления, но все же хотите получать их время от времени, вы можете указать параметры notify_cooldown_seconds и/или notify_every.

[[bruteForceProtection.rules]]
enabled = true
notify = true
notify_cooldown_seconds = 86400
notify_every = 100
name = "Name 2"
message = "Message 2"
group = "group 2"
[bruteForceProtection.rules.source]
type = "file"
path = "/var/log/test.log"
[[bruteForceProtection.rules.patterns]]
regexp = '^Failed authentication attempt from (\d+.\d+.\d+.\d+)\S+\s+user does not exist (\S+)'
ip = 1
[[bruteForceProtection.rules.patterns.values]]
name = "Login"
value = 2

Мы указали notify_cooldown_seconds = 86400, что означает, что после получения уведомления о блокировке мы больше не будем получать уведомления от этого правила в течение 86400 секунд. Мы также указали notify_every = 100, что означает, что после получения уведомления о блокировке мы снова будем получать уведомления через 100 блоков. Это значит, что следующее уведомление мы получим либо через 24 часа, либо через 100 блоков.


Отслеживать авторизаций

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

[login]
enabled = true
notify = true
ssh_enable = true
ssh_notify = true
local_enable = true
local_notify = true
Параметр enabled
Значение true или false
По умолчанию true
Описание Включает группу отслеживания авторизации. Если отключено, отслеживание авторизации работать не будет.
true  - включает
false - выключает
Примеры
enabled = true
enabled = false
***
Параметр notify
Значение true или false
По умолчанию true
Описание Включает уведомления об авторизации. Если отключено, они будут отображаться в логах только на уровне = "info".
true  - включает
false - выключает
Примеры
notify = true
notify = false
***
Параметр ssh_enable
Значение true или false
По умолчанию true
Описание Включает отслеживание авторизации по ssh.
true  - включает
false - выключает
Примеры
ssh_enable = true
ssh_enable = false
***
Параметр ssh_notify
Значение true или false
По умолчанию true
Описание Включает уведомления об авторизации по ssh. Если отключено, они будут отображаться в логах только на уровне = "info".
true  - включает
false - выключает
Примеры
ssh_notify = true
ssh_notify = false
***
Параметр local_enable
Значение true или false
По умолчанию true
Описание Включает отслеживание локальных авторизаций (TTY, физический доступ).
true  - включает
false - выключает
Примеры
local_enable = true
local_enable = false
***
Параметр local_notify
Значение true или false
По умолчанию true
Описание Включает уведомления о локальных авторизациях.
true  - включает
false - выключает
Примеры
local_notify = true
local_notify = false
***
Параметр su_enable
Значение true или false
По умолчанию true
Описание Включает отслеживание, если кто-либо использует команду `su` для доступа к другой учетной записи.
true  - включает
false - выключает
Примеры
su_enable = true
su_enable = false
***
Параметр su_notify
Значение true или false
По умолчанию true
Описание Включает уведомления, если кто-либо использует команду `su` для доступа к другой учетной записи.
true  - включает
false - выключает
Примеры
su_notify = true
su_notify = false
***
Параметр sudo_enable
Значение true или false
По умолчанию false
Описание Включает отслеживание, если кто-либо использует команду `sudo` для доступа к другой учетной записи.
ПРИМЕЧАНИЕ: Эта опция может стать обременительной, если команда sudo широко используется.
true  - включает
false - выключает
Примеры
sudo_enable = true
sudo_enable = false
***
Параметр sudo_notify
Значение true или false
По умолчанию true
Описание Включает уведомления, если кто-либо использует команду `sudo` для доступа к другой учетной записи.
true  - включает
false - выключает
Примеры
sudo_notify = true
sudo_notify = false

Настройки анализа логов для уведомления

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

[logAlert]
enabled = true
notify = true
Параметр enabled
Значение true или false
По умолчанию true
Описание Включает группу отслеживания логов для уведомлений. Если отключено, отслеживание логов для уведомлений работать не будет.
true  - включает
false - выключает
Примеры
enabled = true
enabled = false
***
Параметр notify
Значение true или false
По умолчанию true
Описание Включает уведомления. Если отключено, они будут отображаться в логах только на уровне = "info".
true  - включает
false - выключает
Примеры
notify = true
notify = false

Анализ логов для уведомления (настройка групп)

Если вы захотите добавить свои группы. Указывать параметры для этого раздела нужно вначале указать [[logAlert.groups]], а после уже указывать остальные параметры этого раздела.

Параметр [[logAlert.groups]]
Значение Указываем настройки группы.
По умолчанию  
Описание

Это группа настроек для анализа логов для уведомлений. [[logAlert.groups]] можно указывать неограниченное количество групп.

[[logAlert.groups]]
name -
Имя группы должно быть уникальным и разрешены символы: a-z, A-Z, -, _   Имя должно быть уникальным. Первый символ обязательно буква (обязательное поле)
message - Текст уведомления (обязательное поле)
rate_limit_reset_period
- Указываем в секундах, через какое время сбрасывать данные в группе если не было событий. Если вы укажете 0, ограничение по времени для уведомлений будет отключено.
[[logAlert.groups.rate_limits]] (можно указывать несколько)
count - Через сколько событий будет срабатывать оповещение.
period - Установите временной интервал для отслеживания событий.

Примеры
[[logAlert.groups]]
name = "my_name_group"
message = "Любой текст группы"
rate_limit_reset_period = 86400
[[logAlert.groups.rate_limits]]
count = 5
period = 3600
[[logAlert.groups.rate_limits]]
count = 10
period = 3600
[[logAlert.groups.rate_limits]]
count = 50
period = 3600

Тут мы указали несколько [[logAlert.groups.rate_limits]]. Это означает, что после несколько событий в этой группе перейдёт на следующий уровень [[logAlert.groups.rate_limits]].

1 уровень будет работать по правилам, что если произошло 5 событий, где между событиями было менее часа, то отправится уведомления. И переведён на следующий уровень.

2 уровень будет работать по правилам, что если произошло 10 событий, где между событиями было менее часа, то отправится уведомления. И переведён на следующий уровень.

3 уровень будет работать по правилам, что если произошло 50 событий, где между попытками было менее часа, то отправится уведомления. И переведён на следующий уровень.

Так как 4 уровня нет, то будет дальше приниматься для этого события только 3-ий уровень. Но если в течении суток (rate_limit_reset_period = 86400) не было этого события, то он снова передёт на 1 уровень.


Другой пример:

[[logAlert.groups]]
name = "my_name_group"
message = "any message"
rate_limit_reset_period = 86400
[[logAlert.groups.rate_limits]]
count = 10
period = 60

Анализ логов для уведомления (настройка правил анализа логов)

Если вы хотите добавить собственные настройки для уведомлений. Указывать параметры для этого раздела нужно вначале указать [[logAlert.rules]], а после уже указывать остальные параметры этого раздела.

Параметр [[logAlert.rules]]
Значение Указываем настройки правил для анализа логов.
По умолчанию  
Описание

[[logAlert.rules]] можно указывать неограниченное количество правил.

[[logAlert.rules]]
enabled 
- Включает или выключает отслеживания (обязательное поле)
notify - Включает или выключает уведомления (обязательное поле)
name - Имя уведомления. Разрешены символы: a-z, A-Z, -, _.  Имя должно быть уникальным. Первый символ обязательно буква (обязательное поле)
message - Текст уведомления (обязательное поле)
group - Можно указать имя группы (не обязательное поле)
[logAlert.rules.source] Настройка источника лога
type - journalctl или file (обязательное поле)
path - Путь к файлу (обязательное поле если type = "file")
field - systemd_unit или syslog_identifier (обязательное поле если type = "journalctl")
match - Значение (обязательное поле если type = "journalctl")
Если field = "systemd_unit", то match должен заканчиваться: .service, .socket, .target, .mount, .timer, .path, .scope, .slice, .device
[[logAlert.rules.patterns]] Настройка регулярок, может быть несколько
regexp - Указываем свою регулярку (обязательное поле)
[[logAlert.rules.patterns.values]] Если в уведомлениях хотите указать ещё несколько полей, которые можно получить из регулярки
name - Название поля
value - Указываем номер из регулярки (отсчёт идёт от 1)
type - Если это поле связанно с IP адресом, то указываем type = "ip".

Примеры
[[logAlert.rules]]
enabled = true
notify = true
name = "my_name_rule"
message = "Any message"
group = "my_name_group"
[logAlert.rules.source]
type = "journalctl"
field = "systemd_unit"
match = "ssh.service"
[[bruteForceProtection.rules.patterns]]
regexp = '^Accepted (\S+) for (\S+) from (\S+) port \S+'
[[logAlert.rules.patterns.values]]
name = "User"
value = 2
[[logAlert.rules.patterns.values]]
name = "IP"
value = 3
type = "ip"