Назад | Перейти на главную страницу

Служба Linux прослушивает и отвечает на порты, которые ей не были назначены и которые не отображаются в netstat

У меня есть экземпляр 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, и теперь все работает.