Вопрос
Как перенаправить привилегированный порт sub-1024 на непривилегированный порт 1024+ с помощью firewalld?
Причина
Зачем мы это делаем? Мы хотим иметь возможность переключать непривилегированный порт 1050 на шлюзе и использовать другой почтовый сервер верхнего уровня. Например, чтобы протестировать другое решение по борьбе со спамом, используйте порт 1051 для отправки почты на другой почтовый сервер с другим решением по фильтрации спама.
Почтовые серверы автоматически подключаются к шлюзу при запуске. Автоматическое подключение может происходить только на непривилегированных портах 1024+.
Макет и настройка
Макет
+--------+ +---------------------+ +----------------+
| WAN | | 1050 | <- | |
| Client | | Gateway | \ | Mail Server |
| | <---> | 25 | -> | 25 |
+--------+ +---------------------+ +----------------+
Настроить брандмауэр
Очистите брандмауэр, откройте порт, настройте переадресацию порта и добавьте несколько служб.
root@gateway:~# firewall-cmd --reload
root@gateway:~# firewall-cmd --zone=public --add-port=25/tcp
root@gateway:~# firewall-cmd --zone=public --add-forward-port=port=25:proto=tcp:toport=1050
root@gateway:~# firewall-cmd --add-service={http,https,smtp}
Проверить брандмауэр
Подтвердите настройки брандмауэра...
root@gateway:~# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: etho0
sources:
services: dhcpv6-client http https smtp ssh
ports: 25/tcp
protocols:
masquerade: no
forward-ports: port=25:proto=tcp:toport=1050:toaddr=
source-ports:
icmp-blocks:
rich rules:
Именно это мы и ожидали увидеть в правилах брандмауэра.
Результат
Вот что мы получаем, когда подключаемся по telnet к вышестоящему почтовому серверу на шлюзе...
root@gateway:~# telnet localhost 1050
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 debian10email.debian10email ESMTP Postfix (Debian/GNU)
Вот что мы получаем с удаленной клиентской машины...
client@client123:~$ telnet gateway.example.org 25
Trying <IP_of_gateway>...
Connected to gateway.example.org.
Escape character is '^]'.
Мы тоже рассчитываем увидеть эту 220 debian10email.debian10email ESMTP Postfix (Debian/GNU)
очередь, но ее нет.
Санитарная проверка...
Тест
Чтобы убедиться, что правила переадресации портов написаны правильно, мы...
- Откройте порт 1025 на брандмауэре.
- Переадресация порта 1025 на 1050
- А затем проверим, что мы видим на удаленном клиенте.
Настройте брандмауэр
Очистите брандмауэр, откройте порт, настройте переадресацию порта и несколько служб.
root@gateway:~# firewall-cmd --reload
root@gateway:~# firewall-cmd --zone=public --add-port=1025/tcp
root@gateway:~# firewall-cmd --zone=public --add-forward-port=port=1025:proto=tcp:toport=1050
root@gateway:~# firewall-cmd --add-service={http,https,smtp}
Проверить брандмауэр
root@gateway:~# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: etho0
sources:
services: dhcpv6-client http https smtp ssh
ports: 1025/tcp
protocols:
masquerade: no
forward-ports: port=1025:proto=tcp:toport=1050:toaddr=
source-ports:
icmp-blocks:
rich rules:
Результат
client@client123:~$ telnet gateway.example.org 1025
Trying <IP_of_gateway>...
Connected to gateway.example.org.
Escape character is '^]'.
220 debian10email.debian10email ESMTP Postfix (Debian/GNU)
У нас есть ожидаемая 220 debian10email.debian10email ESMTP Postfix (Debian/GNU)
строка, поэтому брандмауэр перенаправляет порты, как и ожидалось.
Заключение
Переадресация между привилегированными и непривилегированными портами отличается от переадресации между непривилегированными портами.
Как нам перенаправить привилегированный порт sub-1024 на непривилегированный порт 1024+ с помощью firewalld на Debian 10 Buster? Если где-то есть ответ, пожалуйста, укажите его. Мы не смогли его найти.
решение1
Ваша конфигурация firewalld выглядит правильной. Разрешено ли машине, с которой вы тестировали, делать исходящие соединения на порт 25? Попробуйте с другой машины.