Я использую ubuntu headless server 18.04 на выделенном сервере хоста. У хостера есть внешний брандмауэр, где я открыл порты 8443,443 (tcp). На моем сервере ubuntu я использую iptables, где я перенаправил порт 443 на 8443 с помощью таблицы nat.
iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-ports 8443
также я открыл входящие и исходящие порты 443 и 8443.
Я все еще могу получить доступ к экземпляру tomcat с example.com:8443 и не вижу никаких проблем, но example.com не отвечает. Заглядывая в iptables, я не вижу никаких отброшенных пакетов. На моем экземпляре tomcat я не меняю server.xml. Коннектор слушает 8443. Я не знаю, в чем проблема? Я надеюсь, что некоторые эксперты смогут помочь мне решить проблему.
С уважением
черная борода
решение1
Что вам действительно нужно, так это обратный прокси-сервер (например, Nginx), который может выполнить SSL-терминацию на порту 443, а затем передать запрос Tomcat на порт 8443.
SSL/TLS — сложный протокол, и, на мой взгляд, полагаться на IPTABLES для обработки SSL-рукопожатия и передачи вашего запроса приложению Tomcat — не очень хорошая идея.
Если вам действительно нужно использовать IPTABLES, подключитесь к сервису openssl
и выясните, что именно происходит. Сообщите о выводе здесь, и может быть доступна дополнительная помощь.
openssl s_client -connect www.example.com:443
Проблема также может быть в том, что вы используете nat
таблицу. Насколько я понимаю, правила для этой таблицы применяются только в том случае, если запросы маршрутизируютсячерезсервера, а не перенаправляться на другой порт на том же IP-адресе.
Обратный прокси-сервер устранит большую часть этой сложности и предоставит вам гораздо больше функциональных возможностей (например, ограничение скорости, контроль доступа и т. д.).
решение2
Это может зависеть от того, к какому интерфейсу привязан ваш tomcat. Если он привязан к интерфейсу loopback, то это вообще не будет работать.
Чаще всего цель REDIRECT используется с указанным интерфейсом, например:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8443
(замените eth1 на фактический сетевой интерфейс, на котором работает tomcat)
REDIRECT — это удобный метод для цели DNAT, поэтому, если вышеизложенное не сработало, вы можете попробовать что-то вроде:
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.0.0.1:8443
(замените 10.0.0.1 на IP-адрес вашего компьютера)