Порты Amazon-EC2 не открыты, несмотря на настройки групп безопасности и iptables
Я только что арендовал сервер Amazon EC2, предназначенный для размещения приложения node.js, которое прослушивает клиент на порту 9001.
Я настроил группы безопасности и добавил входящие и исходящие правила для этого порта. Там нет брандмауэра (Amazon Linux), и я полностью отключил iptables.
sudo netstat -plunta | grep LISTEN
возвращает это:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2064/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2104/sendmail
tcp 0 0 0.0.0.0:9001 0.0.0.0:* LISTEN 3207/node
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2146/mongod
tcp 0 0 :::80 :::* LISTEN 2303/httpd
tcp 0 0 :::22 :::* LISTEN 2064/sshd
Мое приложение node.js прослушивает этот порт и все адреса с помощью команды server.listen(9001, "0.0.0.0");
Тем не менее, nmap сервера возвращает это:
Portscan scan report for 172.31.47.81
Host is up.
All 1000 scanned ports on 172.31.47.81 are filtered
Portscan done: 1 IP address (1 host up) scanned in 2.32 seconds
Кроме того, выполнение Nmap на моем телефоне говорит мне, что открыт только порт 80.
Если я запускаю приложение node.js на сервере и делаю telnet <ip_server> 9001
это работает. Однако, если я делаю то же самое со своего персонального компьютера, я получаю ошибку тайм-аута.
Я знаю, что этот вопрос неоднократно задавался, но ни одно из решений, которые я пробовал, не сработало. Я могу пропинговать сервер, использовать ssh для подключения к нему, но приложение node.js не будет работать, а любой из портов, которые должны быть открыты, на самом деле нет (даже попытка подключиться через браузер к веб-серверу не не работает, несмотря на то, что httpd настроен с правильным веб-сайтом, поэтому порт 80 также не открыт).
Есть идеи как это исправить?
1 ответ
Все 1000 проверенных портов на 172.31.47.81 фильтруются
Как, впрочем, и должно быть.
Существует несколько диапазонов адресов IPv4, которые зарезервированы для использования в частных сетях.
10.*.*.*
172.16.*.* through 172.31.*.*
192.168.*.*
Любой адрес в этих диапазонах не может быть напрямую доступен через Интернет.
http://tools.ietf.org/html/rfc1918
https://www.arin.net/knowledge/address_filters.html
Экземпляры EC2 всегда имеют частный IP-адрес, связанный с ними, и иногда общедоступный публичный IP-адрес. Эти внешние адреса либо динамически распределяются при запуске экземпляра из пула (и освобождаются при остановке или завершении экземпляра, после чего адрес возвращается в пул), либо могут быть постоянно зарезервированы пользователем и связаны / не связаны с экземплярами. и сохраняется для последующего повторного использования клиентом (в этом случае они называются "Эластичные IP-адреса").
Внутри одного развертывания EC2 одного клиента в данном регионе (и через VPN-туннели в VPC) экземпляры могут обращаться друг к другу по своему частному IP-адресу (и должны, потому что это бесплатно для передачи данных)... но через Интернет экземпляры могут быть доступным только по их общему (так называемому "внешнему") IP-адресу, который виден в консоли... хотя, с точки зрения экземпляра (т.е. ifconfig
и т. д.) единственный известный адрес является частным.
Инфраструктура EC2 прозрачно выполняет преобразование сетевых адресов (NAT) между внешним публичным и внутренним частным адресом.
Если вы обращаетесь к экземпляру с помощью ssh извне, IP-адрес, который вы используете для установки ssh-соединения, будет тем же, который вам понадобится и для доступа к другим службам.