Задача о запутанных ACL для сервера
Эта задача будет полезна системным администраторам и рядовым пользователям, которые хотят защитить свою сеть с помощью межсетевого экрана.
Условие
Представьте ситуацию: вы организовали небольшой домашний сервер с выходом в сеть и хотите ограничить к нему доступ.
У вас есть хост с двумя интерфейсами…
- 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 (Локальная сеть):
- Разрешить весь исходящий трафик с нашего сервера по любым протоколам, портам, на любые IP-адреса.
- Разрешить весь входящий трафик по TCP с сети 10.10.100.0/24 на порт 554 (RTSP).
- Разрешить весь входящий TCP-трафик с подсети 10.10.2.0/24 на порт 3306.
- Разрешить весь входящий TCP-трафик c 10.10.1.100/32 на порт 22.
- Запретить весь трафик.
Ethernet 2 (Глобальная сеть)
- Разрешить весь исходящий трафик с нашего сервера по любым протоколам, портам, на любые IP-адреса.
- Разрешить весь входящий UDP-трафик на порт 53, со всех IP-адресов (так как мы подключаемся к VPN).
- Разрешить весь входящий трафик по TCP на порт 443 — разрешаем доступ на HTTPS-сервер.
- Разрешить весь входящий трафик по TCP с 85.119.149.3/32 на порт 3389 — разрешаем RDP.
- Запретить весь трафик.
У нас получилось два списка. Отмечу, что в данном списке не будет работать команда Ping, потому что там используется ICMP.
Реализуем сценарий для Ethernet 2
Переходим в Inbound rules (правила для входящего трафика, п.1) и удаляем все созданные по умолчанию правила (п.2).
Важно: данное действие может повлечь за собой обрыв соединения и т.п. Выполнять только на тестовых машинах с прямым доступом.
Создаем новое правило. Для этого в правом верхнем углу нажимаем new rule.
Затем:
- в менеджере создания правила выбираем port, поскольку мы уже определили порты приложений;
- выбираем протокол и прописываем порт;
- разрешаем подключение — выбираем пункт Allow the connection;
- применяем его к типу интерфейсов Public;
- даем имя правилу, например, allow WireGuard.
То же самое выполняем для всех правил из списка. Только для исходящего трафика правила необходимо создавать в разделе Outbound Rules.
Мы получили список правил. При сохранении правила применяются автоматически. В случае с Windows Defender запрещающее правило писать не обязательно, так как оно написано в системе по умолчанию.