Вопрос или проблема
У меня есть довольно много опыта с перенаправлением портов TCP в мире UNIX (netcat, iptables), но теперь мне нужно сделать то же самое на Windows Server 2022.
Клиентские машины могут достигать TCP 25 на “шлюзовом” сервере (мы контролируем этот брандмауэр). Этот “шлюзовой” сервер может подключаться к SMTP-реле где-то там (мы не контролируем этот путь). Мы не хотим поддерживать SMTP-реле на “шлюзовом” сервере, вместо этого просто хотим перенаправить TCP 25 через него. Позже будут и другие порты. UDP тоже.
Временное решение можно было бы сделать с помощью netsh, но даже это не работает:
На “шлюзе”:
telnet a.b.c.d 25 – это работает
Запустил wf.msc и создал новое стандартное входящее правило для tcp 25, принимающее все удаленные адреса
netsh interface portproxy add v4tov4 listenport=25 connectport=25 connectaddress=a.b.c.d
netsh interface portproxy show all # выглядит хорошо
telnet 127.0.0.1 25 – соединение не удалось (что значит “не удалось”? это “отказано?”)
Предпочтительное долгосрочное решение – сделать это с помощью постоянного правила в Защитнике:
Удалил это стандартное входящее правило и попытался настроить “пользовательское” входящее правило… Смешивает с толку, что подразумевается под “удаленными адресами” и даже полем диапазонов – как можно перенаправить на множество адресов или даже диапазонов?! Я подозреваю, что это все еще означает исходные IP-адреса для входящих соединений. Но тогда, где еще я могу указать IP-адрес назначения для перенаправления? Или я смотрю на совершенно неправильное решение? Пожалуйста, не предлагайте сторонние приложения, мы строго ограничены инструментами и функциям MS.
Ответ или решение
Настройка переадресации TCP-портов в Windows Server 2022 с помощью брандмауэра
Ваша задача по переадресации TCP-порта 25 на Windows Server 2022, учитывая, что у вас есть опыт работы в окружении UNIX, требует понимания различий между инструментами и правилами, предоставленными системой Windows. Давайте разберем шаги, которые помогут вам настроить переадресацию портов на вашем "шлюзе" и создать необходимые правила в Брандмауэре Windows.
1. Понимание концепции
В отличие от UNIX, где вы можете использовать iptables
для настройки правил NAT и переадресации, в Windows Server для этой цели используется netsh
и Брандмауэр Windows. При использовании Брандмауэра Windows важно понимать, что вы работаете с правилами, касающимися входящего и исходящего трафика.
2. Настройка с использованием netsh
Так как вы начали с netsh
, давайте остановимся на этом подходе.
netsh interface portproxy add v4tov4 listenport=25 connectport=25 connectaddress=a.b.c.d
Эта команда создает правило, которое слушает на порту 25 и перенаправляет трафик на заданный адрес. Проверьте, правильно ли он добавлен, с помощью:
netsh interface portproxy show all
Однако, если вы не можете подключиться с помощью telnet 127.0.0.1 25
, это может быть связано с отсутствием правил в брандмауэре для разрешения входящих запросов на этот порт.
3. Создание правил в Брандмауэре Windows
Теперь к вашей основной задаче – созданию постоянного правила в Брандмауэре Windows. При создании нового правила важно правильно настроить параметры, чтобы обеспечить необходимый доступ.
-
Запуск управления брандмауэром: Откройте „Брандмауэр Windows с расширенной безопасностью“ (wf.msc).
-
Создайте новое правило:
- Выберите „Правила для входящих подключений“.
- Нажмите „Создать правило“.
-
Тип правила: Выберите „Пользовательское“, так как это позволяет более детально настроить параметры.
-
Действие: Выберите „Разрешить подключение“.
-
Профиль: Убедитесь, что выбранные профили (Домен, Частный, Общедоступный) соответствуют вашему сетевому окружению.
-
Параметры IP-адресов:
- В поле „Удаленные адреса“ укажите IP-адреса клиентов, которые могут инициировать подключение к вашему "шлюзу". Если вы хотите разрешить доступ всем адресам, вы можете указать
0.0.0.0/0
. Это, однако, небезопасно, поэтому лучше указать конкретные адреса или подсети. - В поле „Локальные адреса“ указать
0.0.0.0/0
для всех локальных адресов в случае, если ваш сервер должен принимать запросы от всех интерфейсов.
- В поле „Удаленные адреса“ укажите IP-адреса клиентов, которые могут инициировать подключение к вашему "шлюзу". Если вы хотите разрешить доступ всем адресам, вы можете указать
-
Протокол и порты: Выберите TCP и введите порт 25 в поле „Локальный порт“.
4. Проверка конфигурации
После создания правила проверьте его работу так же, как и раньше. Попробуйте выполнить команду telnet 127.0.0.1 25
, чтобы убедиться, что соединение не будет отвергнуто. Если проблемы сохраняются, проверьте журнал событий и используйте команды диагностики, такие как:
Get-NetFirewallRule -DisplayName "<Имя вашего правила>"
Это позволит вам увидеть, правильно ли настроены ваши параметры.
Заключение
Создание правил для переадресации портов в Windows требует внимания к деталям и понимания, как работают правила брандмауэра. Следуя представленным шагам, вы сможете реализовать эффективную переадресацию для TCP-порта и, возможно, для UDP в будущем, обеспечивая надежную связь между вашими клиентскими машинами и SMTP реле. Подходите к каждому этапу с осторожностью, и вы достигнете желаемого результата.