У меня есть веб-сервер, который находится за Carrier Grade NAT, и поэтому мне нужен внешний сервер, чтобы дать мне стабильный IP-адрес. Для этого у меня есть экземпляр AWS EC2, на котором работает SLES, и у меня есть обратный перенаправленный ssh-туннель, инициированный с веб-сервера для обслуживания входящих запросов на порт 80. Хотя я не думаю, что это относится к проблеме как таковой, она была полезна для устранения неполадок, поэтому для контекста я должен заявить, что веб-сервер прослушивает нестандартный порт, скажем, 8080, и правило брандмауэра с предварительной настройкой на экземпляре AWS перенаправляет запросы на порт 80 на 8080. Туннель ssh использует autossh и берет его конфигурацию из файла конфигурации, но эквивалентен следующей команде ssh.

ssh -N -R 8080:localhost:8080 -i ~/.fwd/portal.uk.pem ec2-user@ec2-xxx-xxx-xxx-xxx.eu-west-x.compute.amazonaws.com

Правило перенаправления брандмауэра выглядит следующим образом

iptables -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

Есть также правила брандмауэра во входной цепочке, которые открывают порты 80 и 8080 из всех источников, и я настроил группу безопасности в консоли управления EC2, чтобы аналогичным образом разрешать трафик в порты 80 и 8080 из всех источников. При этом все работает так, как задумано, страницы доставляются во внешний мир.

Я пришел к тому, что мне нужно начать обслуживать страницы через https и приступил к созданию той же конфигурации для порта 443, но я продолжаю сталкиваться с ошибкой подключения к порту 443 на экземпляре AWS. Сначала я попробовал прямой туннель для порта 443. Имеются правила ввода брандмауэра и группы безопасности, чтобы разрешить подключения к 443, но попытка установить туннель приводит к предупреждению о прослушивании порта.

ssh -N -R 443:localhost:443 -i ~/.fwd/portal.uk.pem ec2-user@ec2-xxx-xxx-xxx-xxx.eu-west-x.compute.amazonaws.com
Warning: remote port forwarding failed for listen port 443

Процесс ssh остается активным на веб-сервере, но, по-видимому, не работает во всех отношениях, любая попытка подключиться к 443 на AWS с помощью telnet отклоняется. Чтобы было ясно, веб-сервер определенно прослушивает порт 443, потому что я могу подключиться с помощью запросов https локально. Вся информация, которую я нашел в этом предупреждении, предполагает, что это, вероятно, вызвано процессом, который все еще имеет контроль над портом и может быть найден с помощью netstat -plant или аналогичного, или lsof -i -t . Ни один из них не показывает какого-либо активного процесса на 443 в AWS, и в любом случае я попытался перезагрузить экземпляры AWS, чтобы очистить любые постоянные процессы и при появлении тех же симптомов, которые возникают при его возврате, по-прежнему.

Затем я попытался скопировать конфигурацию для порта 80, изменив порт прослушивания веб-сервера на нечто нестандартное, скажем, 8443, и добавив еще одно правило предварительной маршрутизации, правило ввода и группу безопасности точно так же, как и раньше. Теперь я могу успешно настроить туннель на порту 8443 без получения предупреждения, но я все еще получаю отказ в соединении на порту 443 AWS с telnet, и запросы https не проходят. Тем не менее, если я подключу telnet на компьютере AWS к порту 8443, это будет успешно. Для меня это говорит о том, что конфигурация туннеля и веб-сервера работает нормально, и это определенно что-то, блокирующее порт 443 на AWS, но я не знаю, куда обратиться дальше. Поэтому, в частности, мой вопрос: нет ли процессов прослушивания, показанных netstat или lsof, и брандмауэр открыт, что еще мне нужно искать?

0