Всем привет! Пишу сюда впервые, так что будьте добры
Столкнулись с довольно странной проблемой с пробросом портов, постараюсь объяснить как можно понятнее. Если что-то упущу — спрашивайте, с радостью дополню.
У нас много Mikrotik-ов по всей Америке, которые работают в качестве шлюзовых роутеров. Во многих местах есть внутренние ресурсы, к которым нужно подключаться через RDP. Например, у одного клиента (мы — MSP) около 40 локаций, и в каждой есть сервер. Мы создаём правило в firewall, которое разрешает RDP на порт 3389, но только с конкретных исходящих IP-адресов. Что-то вроде этого:
add chain=forward comment=“Allow RDP - 3389- Only From Approved List” dst-port=3389 in-interface=ether1 protocol=tcp src-address-list=“Allowed IP Addresses”
А для надёжности (не везде, но в некоторых местах) добавляем правило на блокировку:
add chain=forward action=drop comment=“Block RDP - 3389- Not From Approved List” dst-port=3389 in-interface=ether1 protocol=tcp src-address-list=“!Allowed IP Addresses”
Это хорошо работает и ограничивает RDP с firewall-а только на конкретные публичные IP. Мы просто поддерживаем список адресов и добавляем туда по мере необходимости.
Проблема в том, что иногда пользователям нужно подключаться к внутренним ресурсам по RDP с ноутбуков в поле, где их исходящие IP меняются или нестабилны, и добавлять их в список — не очень удобно.
Чтобы обойти эту проблему, мы создали ещё одно правило, которое разрешает входящий трафик на другом порте, без ограничений по списку адресов. В итоге у нас получается такое:
add chain=forward comment=“Allow RDP - 3391/TCP” dst-port=3391 in-interface=ether1 protocol=tcp
add chain=forward comment=“Allow RDP - 3389- Only From Approved List” dst-port=3389 in-interface=ether1 protocol=tcp src-address-list=“Allowed IP Addresses”
add chain=forward action=drop comment=“Block RDP - 3389- Not From Approved List” dst-port=3389 in-interface=ether1 protocol=tcp src-address-list=“!Allowed IP Addresses”
Пользователь пытается подключиться по RDP к publicIP:3391, чтобы попасть внутрь.
Но мы обнаружили, что независимо от того, какой порт используешь, трафик RDP всегда срабатывает на drop-правило. Можно поднять правило для 3391 на самый верх, но трафик всё равно попадает под “Block RDP - 3389- Not From Approved List”. Это видно при просмотре трафика, попадающего под правило.
Странно ещё то, что если юзер указывает RDP на порт 3391, а drop-правило для 3389 отбрасывает соединение, то при этом видно, что трафик всё равно попадает в NAT-правило на 3391. Думаю, это связано не с тем, как Mikrotik обрабатывает трафик, а с особенностями работы RDP на уровне протокола. По моему предположению, RDP передаёт часть трафика через 3389, даже если явно указать другой порт.
Это не ошибка в настройках — я настраивал так много раз и тестировал, чтобы убедиться. Хотя я подозреваю, что проблема в том, как RDP обрабатывает порты, я хотел бы услышать мнение более опытных ребят и узнать, есть ли у кого-то лучшее решение.
Из-за этого сложно заблокировать RDP на серверах, одновременно позволяя пользователям доступ к другим ресурсам.
Как же мы пока с этим справляемся? Хороший вопрос! Мы просто пропускаем весь RDP трафик через firewall, затем создаём jump-правила для разных внешних IP. Для серверов используем один внешний IP и ограничиваем исходящие адреса там, а для пользователей настраиваем отдельное jump-правило с открытым доступом.
Но и тут есть минусы. Во-первых, несколько локаций требуют полной переработки firewall/NAT, чтобы это работало. Мне совсем не хочется переделывать NAT-правила только ради того, чтобы юзер смог подключаться к своему ПК по RDP.
Во-вторых, во многих местах только один публичный IP, и тогда этот обход не работает совсем. В таком случае приходится настраивать VPN для пользователей.
Понимаю, что VPN — это, наверное, лучшее решение и, возможно, мы будем так делать в будущем, но всё равно хотел бы собрать мнения — эта тема уже долгое время не даёт покоя.
В любом случае заранее большое спасибо всем! Буду очень признателен за любую помощь.
Столкнулись с довольно странной проблемой с пробросом портов, постараюсь объяснить как можно понятнее. Если что-то упущу — спрашивайте, с радостью дополню.У нас много Mikrotik-ов по всей Америке, которые работают в качестве шлюзовых роутеров. Во многих местах есть внутренние ресурсы, к которым нужно подключаться через RDP. Например, у одного клиента (мы — MSP) около 40 локаций, и в каждой есть сервер. Мы создаём правило в firewall, которое разрешает RDP на порт 3389, но только с конкретных исходящих IP-адресов. Что-то вроде этого:
add chain=forward comment=“Allow RDP - 3389- Only From Approved List” dst-port=3389 in-interface=ether1 protocol=tcp src-address-list=“Allowed IP Addresses”
А для надёжности (не везде, но в некоторых местах) добавляем правило на блокировку:
add chain=forward action=drop comment=“Block RDP - 3389- Not From Approved List” dst-port=3389 in-interface=ether1 protocol=tcp src-address-list=“!Allowed IP Addresses”
Это хорошо работает и ограничивает RDP с firewall-а только на конкретные публичные IP. Мы просто поддерживаем список адресов и добавляем туда по мере необходимости.
Проблема в том, что иногда пользователям нужно подключаться к внутренним ресурсам по RDP с ноутбуков в поле, где их исходящие IP меняются или нестабилны, и добавлять их в список — не очень удобно.
Чтобы обойти эту проблему, мы создали ещё одно правило, которое разрешает входящий трафик на другом порте, без ограничений по списку адресов. В итоге у нас получается такое:
add chain=forward comment=“Allow RDP - 3391/TCP” dst-port=3391 in-interface=ether1 protocol=tcp
add chain=forward comment=“Allow RDP - 3389- Only From Approved List” dst-port=3389 in-interface=ether1 protocol=tcp src-address-list=“Allowed IP Addresses”
add chain=forward action=drop comment=“Block RDP - 3389- Not From Approved List” dst-port=3389 in-interface=ether1 protocol=tcp src-address-list=“!Allowed IP Addresses”
Пользователь пытается подключиться по RDP к publicIP:3391, чтобы попасть внутрь.
Но мы обнаружили, что независимо от того, какой порт используешь, трафик RDP всегда срабатывает на drop-правило. Можно поднять правило для 3391 на самый верх, но трафик всё равно попадает под “Block RDP - 3389- Not From Approved List”. Это видно при просмотре трафика, попадающего под правило.
Странно ещё то, что если юзер указывает RDP на порт 3391, а drop-правило для 3389 отбрасывает соединение, то при этом видно, что трафик всё равно попадает в NAT-правило на 3391. Думаю, это связано не с тем, как Mikrotik обрабатывает трафик, а с особенностями работы RDP на уровне протокола. По моему предположению, RDP передаёт часть трафика через 3389, даже если явно указать другой порт.
Это не ошибка в настройках — я настраивал так много раз и тестировал, чтобы убедиться. Хотя я подозреваю, что проблема в том, как RDP обрабатывает порты, я хотел бы услышать мнение более опытных ребят и узнать, есть ли у кого-то лучшее решение.
Из-за этого сложно заблокировать RDP на серверах, одновременно позволяя пользователям доступ к другим ресурсам.
Как же мы пока с этим справляемся? Хороший вопрос! Мы просто пропускаем весь RDP трафик через firewall, затем создаём jump-правила для разных внешних IP. Для серверов используем один внешний IP и ограничиваем исходящие адреса там, а для пользователей настраиваем отдельное jump-правило с открытым доступом.
Но и тут есть минусы. Во-первых, несколько локаций требуют полной переработки firewall/NAT, чтобы это работало. Мне совсем не хочется переделывать NAT-правила только ради того, чтобы юзер смог подключаться к своему ПК по RDP.
Во-вторых, во многих местах только один публичный IP, и тогда этот обход не работает совсем. В таком случае приходится настраивать VPN для пользователей.
Понимаю, что VPN — это, наверное, лучшее решение и, возможно, мы будем так делать в будущем, но всё равно хотел бы собрать мнения — эта тема уже долгое время не даёт покоя.
В любом случае заранее большое спасибо всем! Буду очень признателен за любую помощь.
