2024 [11] Система защиты
После получения информации о возможной компьютерной атаке, в компании решили установить и настроить систему защиты от DDoS-атак. Система анализирует журналы активности пользователей и вычисляет количество запросов от уникальных пользователей на каждый ресурс в единицу времени. Журналы содержат информацию о попытках доступа к серверу, включая время обращения, IP‑адрес источника, IP-адрес назначения. Если количество одновременных подключений разных пользователей превышает пороговое значение для конкретного ресурса, выдается предупреждение о возможной DDoS-атаке.
Перед запуском системы необходимо её настроить (обучить) на корректном трафике. Для этих целей был подготовлен журнал запросов от сотрудников компании за определенный период времени ко всем внутренним информационным ресурсам компании.
Администраторам требуется настроить систему защиты для следующих информационных ресурсов:
- web-сервер (IP-адрес: 172.17.148.17),
- почтовый сервер (IP-адрес: 172.17.148.18).
Определите, какое максимальное количество одновременных подключений разных пользователей в минуту необходимо установить в системе защиты для указанных ресурсов, чтобы она корректно работала и не выдавала ложных предупреждений. Разработчики рекомендуют устанавливать пороговое значение на 20% больше максимально возможного числа подключений в единицу времени.
В ответе укажите ресурс и пороговое значение (количество подключений в единицу времени), а также обоснование выбранного значения.
К задаче прилагается:
файл «log_v1.log»
Показать подсказку
Как подсчитать количество уникальных IP-адресов в минуту?
Показать решение
Для решения можно подчитать количество уникальных IP-адресов для каждой минуты, однако, это очень долго. Поэтому, необходимо написать скрипт, например на Python:
import re
from collections import defaultdict
from datetime import datetime
def analyze_log(logs, time_window_minutes=1):
web_server_ip = "172.17.148.17"
mail_server_ip = "172.17.148.18"
results = {"web_server": defaultdict(set), "mail_server": defaultdict(set)}
for line in logs:
match = re.match(r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", line)
if match:
timestamp_str, src_ip, dest_ip = match.groups()
try:
timestamp = datetime.strptime(timestamp_str, "%Y-%m-%d %H:%M:%S")
time_key = timestamp.strftime("%H:%M")
if dest_ip == web_server_ip:
results["web_server"][time_key].add(src_ip)
elif dest_ip == mail_server_ip:
results["mail_server"][time_key].add(src_ip)
except ValueError:
print(f"Ошибка при разборе времени: {timestamp_str}")
else:
print(f"Неверный формат строки: {line.strip()}")
return results
def get_max_connections(analysis_results):
max_connections = {}
for server, data in analysis_results.items():
print(f"\nАнализ для {server.capitalize()}:") # Добавлено: Заголовок для каждого сервера
if data:
max_count = 0
max_time = None
for time, ips in data.items():
count = len(ips)
print(f" {time}: {count} подключений") # Вывод количества подключений для каждой минуты
if count > max_count:
max_count = count
max_time = time
if max_time is not None:
max_connections[server] = f"максимальное количество подключений в {max_time} - {max_count} штук"
else:
max_connections[server] = "Нет данных"
else:
max_connections[server] = "Нет данных"
return max_connections
# --- Основная программа ---
if __name__ == "__main__":
Вывод программы будет:
Анализ для Web_server:
10:00: 2 подключений
10:02: 2 подключений
10:03: 3 подключений
10:04: 3 подключений
10:07: 6 подключений
10:11: 5 подключений
10:22: 1 подключений
10:36: 1 подключений
10:40: 3 подключений
10:46: 2 подключений
10:51: 5 подключений
10:57: 3 подключений
10:59: 4 подключений
Анализ для Mail_server:
10:00: 2 подключений
10:01: 3 подключений
10:02: 2 подключений
10:03: 4 подключений
10:04: 4 подключений
10:07: 4 подключений
10:10: 6 подключений
10:11: 3 подключений
10:21: 2 подключений
10:36: 4 подключений
10:40: 4 подключений
10:46: 4 подключений
10:51: 7 подключений
10:57: 6 подключений
10:59: 3 подключений
Web_server: максимальное количество подключений в 10:07 - 6 штук
Mail_server: максимальное количество подключений в 10:51 - 7 штук
Далее необходимо взять на 20% больше: (6 * 0,2) + 6 = 7.2, округляем это значение в большую сторону, так как количество IP-адресов у нас обязательно должно быть целым, отсюда ответ для web-сервера - 8. Далее необходимо взять на 20% больше: (7 * 0,2) + 7 = 8.4, округляем это значение в большую сторону, так как количество IP-адресов у нас обязательно должно быть целым, отсюда ответ для mail-сервера – 9.
Показать ответ
web-сервер – 8,
почтовый сервер – 9
<< Назад в раздел (Все задания)