Как настроить прямой http доступ к экземпляру EC2? - PullRequest
16 голосов
/ 07 марта 2012

Это очень простой вопрос об Amazon EC2, но я в тупике, так что здесь.

Я хочу запустить экземпляр Amazon EC2 и разрешить доступ к HTTP через порты 80 и 8888 откуда угодно. До сих пор я не могу даже позволить экземпляру подключаться к этим портам с помощью свой собственный IP-адрес (но он будет подключаться к локальному хосту).

Я настроил группу безопасности «по умолчанию» для HTTP, используя стандартную опцию HTTP на консоли управления (а также SSH).

Я запустил свой экземпляр в группе безопасности по умолчанию.

Я дважды подключился к экземпляру через SSH-порт 22 и в одном окне запустил HTTP-сервер на порту 80. В другом окне я проверяю, могу ли я подключиться к HTTP, используя «localhost».

Однако, когда я пытаюсь получить доступ к HTTP из экземпляра (или из любого другого места), используя либо общедоступный DNS, либо частный IP-адрес, я получаю «отказ в соединении».

Что я делаю не так, пожалуйста?

Ниже приведен фрагмент консоли, показывающий успешное выполнение wget и два неудачных запуска из самого экземпляра.

--2012-03-07 15:43:31--  http://localhost/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: /__whiff_directory_listing__ [following]
--2012-03-07 15:43:31--  http://localhost/__whiff_directory_listing__
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: “__whiff_directory_listing__”

[ <=>
                                                                                                               ] 7,512       --.-K/s   in 0.03s   

2012-03-07 15:43:31 (263 KB/s) - “__whiff_directory_listing__” saved [7512]

[ec2-user@ip-10-195-205-30 tmp]$ wget http://ec2-50-17-2-174.compute-1.amazonaws.com/
--2012-03-07 15:44:17--  http://ec2-50-17-2-174.compute-1.amazonaws.com/
Resolving ec2-50-17-2-174.compute-1.amazonaws.com... 10.195.205.30
Connecting to ec2-50-17-2-174.compute-1.amazonaws.com|10.195.205.30|:80... failed:          
Connection refused.
[ec2-user@ip-10-195-205-30 tmp]$ wget http://10.195.205.30/
--2012-03-07 15:46:08--  http://10.195.205.30/
Connecting to 10.195.205.30:80... failed: Connection refused.
[ec2-user@ip-10-195-205-30 tmp]$ 

Ответы [ 6 ]

19 голосов
/ 17 сентября 2013

(0) Это глупо, но первое, что вам нужно сделать, это убедиться, что ваш веб-сервер работает.

(1) Вам нужно отредактировать вашу группу безопасности, чтобы входящие HTTP-пакеты имели доступ к вашемуВеб-сайт.Если ваш веб-сайт прослушивает порт 80, вам нужно отредактировать группу безопасности, чтобы открыть доступ к порту 80, как указано выше.Если ваш веб-сайт прослушивает какой-либо другой порт, вам нужно отредактировать группу безопасности, чтобы получить доступ к этому другому порту.

(2) Если вы используете экземпляр Linux, брандмауэр iptables может работать по умолчанию.Вы можете убедиться, что этот брандмауэр активен, запустив

sudo service iptables status

в командной строке.Если вы получите вывод, значит, брандмауэр iptables работает.Если вы получите сообщение « Брандмауэр не запущен », это довольно очевидно.Обычно брандмауэр iptables работает по умолчанию.

У вас есть два варианта: отключить брандмауэр или отредактировать конфигурацию брандмауэра, чтобы пропустить HTTP-трафик.Я выбрал брандмауэр как более простой вариант (для меня).

Служба sudo остановка iptables

Нет реальной угрозы безопасности при отключении iptables , поскольку iptables , если активен,просто дублирует функциональность межсетевого экрана Amazon, который использует группу безопасности для создания своего файла конфигурации.Здесь мы предполагаем, что Amazon AWS не неправильно настраивает свои брандмауэры - очень безопасное предположение.

(3) Теперь вы можете получить доступ к URL из своего браузера.

(4) MicrosoftСерверы Windows также запускают свои персональные брандмауэры по умолчанию, и вам также необходимо исправить персональный брандмауэр Windows Server.

Исправление: по умолчанию AWS AWS не запускает брандмауэры серверов, такие как iptables (Centos) или UAF(Ubuntu), когда вы заказываете создание новых экземпляров EC2 - вот почему экземпляры EC2, которые находятся в одном и том же VPC, могут соединяться друг с другом, и вы можете «видеть» веб-сервер, запущенный из другого экземпляра EC2 в том же VPC.

Просто убедитесь, что ваш RESTful API прослушивает все интерфейсы, т.е. 0.0.0.0:portID

.
18 голосов
/ 07 марта 2012

Стандартный интерфейс сокетов tcp требует привязки к определенному IP-адресу при отправке или прослушивании.Есть несколько несколько специальных адресов: localhost (с которым вы, вероятно, знакомы), это 127.0.0.1.Также есть специальный адрес 0.0.0.0 или INADDR_ANY (интернет-протокол, специальное сокращение для ЛЮБОГО АДРЕСА).Это способ прослушивания ЛЮБОГО или чаще всего ВСЕХ адресов на хосте.Это способ сообщить ядру / стеку, что вас не интересует конкретный IP-адрес.

Итак, когда вы настраиваете сервер, который прослушивает «localhost», вы сообщаете службечто вы хотите использовать специальный зарезервированный адрес, доступ к которому могут получить только пользователи этого хоста, и, хотя он существует на каждом хосте, соединение с localhost только когда-либо достигнет хоста, с которого вы делаете запрос.

Если вы хотите, чтобы служба была доступна везде (на локальном хосте, на всех интерфейсах и т. Д.), Вы можете указать 0.0.0.0.

4 голосов
/ 27 ноября 2013

Поскольку вы получаете соединение отказано (пакеты отклоняются), держу пари, что iptables вызывает проблему. Попробуй запустить

iptables -I INPUT -p tcp --dport 80 -j ПРИНЯТЬ
iptables -I INPUT -p tcp --dport 8888 -j ПРИНЯТЬ

и проверьте соединение.

Вам также нужно будет постоянно добавлять эти правила, которые вы можете сделать, добавив приведенные выше строки в ie. / etc / sysconfig / iptables, если вы работаете в Red Hat.

3 голосов
/ 07 марта 2012

Очевидно, я был "привязан к локальному хосту", тогда как мне нужно было привязаться к 0.0.0.0, чтобы ответить на порт 80 для всех входящих интерфейсов TCP (?).Это тонкость TCP / IP, которую я до конца не понимаю, но она устранила проблему.

0 голосов
/ 07 марта 2018

Служба поддержки Amazon ответила на это, и она сработала мгновенно:

Я повторил проблему на своем тестовом экземпляре Ubuntu и смог ее решить.Проблема заключалась в том, что для запуска Tomcat на порте ниже 1024 в Ubuntu / Unix службе необходимы привилегии root, что обычно не рекомендуется, так как запуск процесса на порте 80 с привилегиями root является ненужным риском для безопасности.

Мы рекомендуем использовать перенаправление портов через iptables: -

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-порт 8080

Надеюсь, приведенная выше информация поможет.

0 голосов
/ 20 августа 2016

Пришлось сделать следующее:

1) Включить доступ HTTP в конфигурации экземпляра, он не был включен по умолчанию только по SSH 2) Попытался сделать сервер nodejs, поэтому порт был привязан к 80 ->3000 сделал следующие команды, чтобы исправить это

iptables -F
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo service iptables-persistent flush
...