У меня есть экземпляр Amazon Linux 1, созданный из Solarwinds DPA AMI. Я создал это около 2 лет назад. Возможно, я тогда сделал что-то странное, чтобы это произошло.
Сегодня я обновил Solardwinds DPA. Я заметил, что порты прослушивания были настроены для 8123/8124 в файле Tomcat server.xml, но все же я обращался к DPA через порт 80. Я ничего об этом не думал, предполагая, что это нормальное поведение через некоторую конфигурацию / порт DPA перенаправление.
Но я хотел перейти на SSL, и мне нужен простой и знакомый способ управления сертификатами SSL. DPA - это Java-приложение, которое требует до смешного глупого хранилища Java для сертификатов SSL. Итак, я установил nginx как обратный прокси-сервер, где я могу очень просто управлять сертификатами SSL.
После установки я настраиваю nginx для прослушивания портов 81 и 443 и перенаправляю порт 443 на порт 80 на бэкэнде. Затем я протестировал открытие сайта DPA на порту 443 и получил предупреждение о недопустимом сертификате. При проверке сертификата это самозаверяющий сертификат DPA. Понимая, что это странно, я внимательно посмотрел на netstat.
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 13040/nginx
tcp 0 0 0.0.0.0:8123 0.0.0.0:* LISTEN 10950/java
tcp 0 0 0.0.0.0:8124 0.0.0.0:* LISTEN 10950/java
tcp 0 0 127.0.0.1:8127 0.0.0.0:* LISTEN 10950/java
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 13040/nginx
tcp 0 0 :::81 :::* LISTEN 13040/nginx
Здесь вы можете видеть, что nginx фактически прослушивает порты 443 и 81, а DPA фактически прослушивает 8123 и 8124.
Тем не менее, я могу подключиться к порту 80 и получить доступ к DPA (даже если в netstat нет порта 80), и хотя nginx сообщает, что прослушивает порт 443, я нажимаю DPA непосредственно на порт 443. Если я использую telnet из мой локальный компьютер и подключиться к порту 80 на сервере, netstat показывает установленное соединение между моим IP-адресом и портом 8123 на сервере.
Что мне здесь не хватает? Почему netstat показывает то, что я ожидал увидеть, но поведение, которое я вижу, состоит в том, что DPA на самом деле отвечает на порты 80 и 443.
По прихоти я проверил iptables, чтобы узнать, выполняется ли какое-либо перенаправление портов. iptables пуст и использует политики ACCEPT по умолчанию.
Очевидно, что-то перехватывает эти соединения до того, как они попадут в демонов, отображаемых в netstat. Что-то перенаправляет эти порты. Что мне искать?
Я обнаружил, что это делает iptables. Я сделал ошибку, когда перечислил правила iptables и использовал только iptables -L
для команды. Это не показало мне таблицу нат. Используя команду iptables -t nat -L
, Я смог увидеть:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8123
REDIRECT tcp -- anywhere anywhere tcp dpt:https redir ports 8124
Я отдал команду, iptables -t nat -F
сбросить все правила нац, а затем service iptables save
чтобы сохранить правила. Я обновил свою конфигурацию nginx, чтобы перенаправить запрос на порт 8123 вместо порта 80, и теперь все работает.