Задача о запутанных ACL для сервера

Задача о запутанных ACL для сервера

Андрей Салита
Андрей Салита Архитектор ИБ
21 декабря 2023

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

Изображение записи

Условие

Представьте ситуацию: вы организовали небольшой домашний сервер с выходом в сеть и хотите ограничить к нему доступ.

У вас есть хост с двумя интерфейсами…

  • Ethernet 1 — в локальную сеть, IP 10.10.10.0.2/24,
  • Ethernet 2 — в  глобальную сеть, IP 95.213.255.1.

…и следующими сервисами: SSH, MYSQL, RDP, HTTPS, WireGuard.

Вы подключаетесь по SSH из домашней сети с IP-адреса 10.10.1.100. Делаете это раз в неделю и проводите в консоли не больше 30–40 минут.

Внутри сети с подсети 10.10.2.0/24 вы обращаетесь в базу MySQL со средней скоростью 35 Кбит/с.

Также подключаетесь к серверу по RDP (суммарно на 2-3 часа, c IP 85.119.149.3) по протоколу TCP — просматриваете видео с камер. Камеры передают данные в локальной сети по RTSP на 544 порт из подсети 10.10.100.0/24 со скоростью 50 Кбит/с. 

На сервере поднят WireGuard server (порт 53), которым пользуетесь постоянно. Здесь средняя скорость 3 Мбит/с. 

На компьютере развернут домашний сайт (HTTPS) со средним трафиком около 1 Мбит/с. В данном случае мы не ограничиваем исходящий трафик.

Схема подключений.

Задача

Составьте ACL для данного сервера при условии, что все протоколы работают на стандартных портах. Установите правила в нужном порядке.

Решение

Перед составлением ACL распишем, какие сервисы на каких протоколах работают, по каким портам, и главное, сколько примерно пакетов необходимо обрабатывать устройству. Это нужно, поскольку сервер проверяет соответствие каждого пакета правилам сверху вниз — от первого до последнего.

Как работают сервисы:

  • SSH работает по TCP и обращается на порт 22 (с IP 10.10.1.100).
  • MySQL работает по TCP и обращается на порт 3306 (с подсети 10.10.2.0/24).
  • RDP работает по TCP и обращается на порт 3389 (c IP 85.119.149.3).
  • RTSP работает по TCP и использует порт 554 ( с подсети 10.10.100.0/24).
  • WireGuard работает по UDP, порт сервера 53.
  • HTTPS работает по TCP, порт 443.

Теперь расставим сервисы по количеству отправляемых пакетов. В большинстве случаев можно расставлять по скорости, но некоторые приложения могут генерировать множество небольших пакетов — в этом задании такую ситуацию не рассматриваем.

Расставляем сервисы по порядку:

  • WireGuard  — 3 Мбит/с;
  • HTTPS  — 1 Мбит/с;
  • RDP — не менее 256 Кбит/с;
  • RTSP — 50 Кбит/с; 
  • MySQL — 35 Кбит/с;
  • SSH — средняя скорость будет меньше 1 Кбит/с, и этот протокол используется редко.

Логическое составление ACL-списков

Так как ACL создаем на сервере с двумя интерфейсами, будем настраивать ACL для каждого интерфейса в отдельности — по-другому на оборудовании не получится.

Ethernet 1 (Локальная сеть):

  1. Разрешить весь исходящий трафик с нашего сервера по любым протоколам, портам, на любые IP-адреса.
  2. Разрешить весь входящий трафик по TCP с сети 10.10.100.0/24 на порт 554 (RTSP).
  3. Разрешить весь входящий TCP-трафик с подсети 10.10.2.0/24 на порт 3306.
  4. Разрешить весь входящий TCP-трафик c 10.10.1.100/32 на порт 22.
  5. Запретить весь трафик.

Ethernet 2 (Глобальная сеть)

  1. Разрешить весь исходящий трафик с нашего сервера по любым протоколам, портам, на любые IP-адреса.
  2. Разрешить весь входящий UDP-трафик на порт 53, со всех IP-адресов (так как мы подключаемся к VPN).
  3. Разрешить весь входящий трафик по TCP на порт 443 — разрешаем доступ на HTTPS-сервер.
  4. Разрешить весь входящий трафик по TCP с 85.119.149.3/32 на порт 3389 — разрешаем RDP.
  5. Запретить весь трафик.

У нас получилось два списка. Отмечу, что в данном списке не будет работать команда Ping, потому что там используется ICMP.

Реализуем сценарий для Ethernet 2

Переходим в Inbound rules (правила для входящего трафика, п.1) и удаляем все созданные по умолчанию правила (п.2).

Важно: данное действие может повлечь за собой обрыв соединения и т.п. Выполнять только на тестовых машинах с прямым доступом.

Выбрали Inbound Rules.

Создаем новое правило. Для этого в правом верхнем углу нажимаем new rule.

Затем:

  • в менеджере создания правила выбираем port, поскольку мы уже определили порты приложений;
  • выбираем протокол и прописываем порт;
Выбрали протокол UDP и прописали порт 53.
    • разрешаем подключение — выбираем пункт Allow the connection;
    • применяем его к типу интерфейсов Public;
    • даем имя правилу, например, allow WireGuard.

    То же самое выполняем для всех правил из списка. Только для исходящего трафика правила необходимо создавать в разделе Outbound Rules.

    Выбрали Allow HTTPS.

    Мы получили список правил. При сохранении правила применяются автоматически. В случае с Windows Defender запрещающее правило писать не обязательно, так как оно написано в системе по умолчанию.

    Полезные материалы для обучения