Почему "странные" TCP-порты требуются для приложения AWS ECS для извлечения из ECR? - PullRequest
0 голосов
/ 24 сентября 2018

Я использую ECS с NLB впереди.ECS вытягивает изображения из ECR.Я не могу понять, почему ECS требует, чтобы я открыл все порты TCP, чтобы иметь возможность извлекать данные из ECR?

2 621567429603 eni-0f5e97a3c2d51a5db 18.136.60.252 10.0.12.61 443 55584 6 13 6504 1537798711 1537798719 ACCEPT OK
2 621567429603 eni-0f5e97a3c2d51a5db 10.0.12.61 54.255.143.131 44920 443 6 13 5274 1537798711 1537798719 ACCEPT OK
2 621567429603 eni-0f5e97a3c2d51a5db 54.255.143.131 10.0.12.61 443 44952 6 13 6504 1537798711 1537798719 ACCEPT OK
2 621567429603 eni-0f5e97a3c2d51a5db 10.0.12.61 18.136.60.252 55584 443 6 15 5378 1537798711 1537798719 ACCEPT OK
2 621567429603 eni-0f5e97a3c2d51a5db 10.0.12.61 18.136.60.252 55612 443 6 15 5378 1537798711 1537798719 ACCEPT OK
2 621567429603 eni-0f5e97a3c2d51a5db 52.219.36.183 10.0.12.61 443 51892 6 19 11424 1537798711 1537798719 ACCEPT OK
2 621567429603 eni-0f5e97a3c2d51a5db 10.0.12.61 54.255.143.131 44908 443 6 14 1355 1537798711 1537798719 ACCEPT OK
2 621567429603 eni-0f5e97a3c2d51a5db 52.219.36.183 10.0.12.61 443 51912 6 31807 44085790 1537798711 1537798719 ACCEPT OK
2 621567429603 eni-0f5e97a3c2d51a5db 18.136.60.252 10.0.12.61 443 55612 6 12 6452 1537798711 1537798719 ACCEPT OK

Мои журналы потоков выше.10.0.0.0/8 это мои частные адреса VPC.Обратите внимание, что в первый раз SRC: 18.136.60.252:443 обращается к 10.0.12.61:55584, почему этот порт назначения?

Затем следующая строка 2 621567429603 eni-0f5e97a3c2d51a5db 10.0.12.61 54.255.143.131 44920 443 6 13 5274 1537798711 1537798719 ACCEPT OK.Почему мой ECS запрашивает данные, используя порт источника 44920.Я спрашиваю, чтобы я знал, как открыть правильные порты.В настоящее время из-за случайного выбора портов мне нужно открыть все

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Должно быть, у вас настроено динамическое сопоставление портов , настроенное для вашей ECS.Он имеет диапазон эфемерного порта по умолчанию от 49153 до 65535, и, как правило, порты ниже 32768 находятся за пределами диапазона эфемерного порта, следовательно, случайность портов хоста в соединениях TCP.У вас есть более низкие значения порта, но это должно быть связано с вашей конфигурацией экземпляра (значение по умолчанию ip_local_port_range большую часть времени составляет 32768 - 61000)

Пожалуйста, прочтите подробности о том, как его настроить из здесь , а точную точку, в которой установлена ​​настройка порта, можно найти здесь

Можно настроить или настроить один порт, используя любой набородин порт для всех подключений или измените диапазон портов с помощью /proc/sys/net/ipv4/ip_local_port_range, хотя не рекомендуется отклоняться от диапазона по умолчанию.

0 голосов
/ 04 ноября 2018

Когда написано 18.136.60.252:443 is accessing 10.0.12.61:55584, я бы не сказал, что 18.136.60.252"обращается" к вашему локальному IP-адресу VPC.Я бы скорее сказал, что «18.136.60.252» отправляет ответ на ваш локальный IP-адрес VPC, на произвольный порт SRC, назначенный ОС для установления связи TCP (55584), через уже установленное соединение TCP (инициированное ecs-agent).в вашем случае).

Вам не нужно концентрироваться на том, какой порт источника следует разрешить.Вы скорее хотите сказать ОС (брандмауэр) «разрешить ответам входить для уже установленных соединений».В iptables это выглядит так:

Из экземпляра в сеть, для доступа к удаленному порту 443:

iptables -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443 -j ACCEPT

С удаленного хоста до вашего экземпляра, чтобы позволить ответам возвращаться:

iptables -A INPUT -i eth0 -p tcp -m multiport --sports 80,443 -m state --state RELATED,ESTABLISHED -j ACCEPT
.                                               ^ source port          ^ the rule only applies to already established connections

Здесь вы можете найти более подробные объяснения:

https://unix.stackexchange.com/q/323546/18256

https://superuser.com/a/1171322/131073

Почему мой ECS запрашивает данные, используяпорт источника 44920

ОС - это та ОС, которая назначает эти порты агенту ECS для использования в качестве порта источника, это просто свободный случайный выбор.


Редактировать после уточнений с помощью OP и самообучения

Так что на уровне AWS NACL мне следует разрешить весь диапазон эфемерных портов?

Согласно Документам AWS NACL :

На практике для охвата различных типов клиентов, которые могут инициировать трафик к публичным экземплярам вваш VPC, вы можете открыть эфемерные порты 1024-65535.Однако вы также можете добавить правила в ACL, чтобы запретить трафик на любые вредоносные порты в этом диапазоне.Убедитесь, что вы поместили правила DENY в таблицу раньше, чем правила ALLOW, которые открывают широкий диапазон эфемерных портов.

Но учтите:

Вы можете установитьсетевые ACL с правилами, аналогичными вашим группам безопасности, чтобы добавить дополнительный уровень безопасности к вашему VPC. (выделение мое)

.

А на уровне ОС это сделать?Если я использую Docker, мне нужно сделать это через Dockerfile?

Я рекомендую управлять этим с помощью групп безопасности, так как они «с состоянием» означают, что они отслеживают каждое установленное соединение, автоматически разрешая »ответы "на эфемерные порты, без настройки этих правил.Например, вы можете «ОТКАЗАТЬ» весь входящий трафик и разрешить TCP 443 для исходящего трафика.Это означает, что не означает, что ответы не могут достичь эфемерного порта, они действительно могут (несмотря на DENY весь входящий трафик), потому что Группа безопасности запоминает соединение.Подробнее здесь :

Группа безопасности: с состоянием: возврат трафика разрешен автоматически, независимо от каких-либо правил

ACL сети: без сохранения состояния: возврат трафикадолжно быть явно разрешено правилами <- это ответ на предыдущий вопрос об эфемерных портах </em>

Что касается ОС и iptables, я бы рассмотрел первые группы безопасности, которые легченастраивать и поддерживать, по крайней мере, для данного варианта использования.

0 голосов
/ 04 ноября 2018

Я просто добавляю свои мысли здесь, основываясь на опыте исходящей сети ECS.На вашем ECS EC2 работает ecs-агент, который постоянно взаимодействует с ECS, API-интерфейсами CloudWatch.ecs-agent постоянно информирует о состоянии хоста EC2, запущенных контейнерах док-станции и отправке журналов агента в указанные выше API.

Процесс ecs-agent взаимодействует с вышеуказанными API-интерфейсами AWS (443) через определенные промежутки времени, поэтому порт источникаэто постоянно меняется.Вот вывод моего журнала netstat моего сервера EC2.

команда - netstat -tcp

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 ip-172-31-86-188.:47364 52.46.132.80:https      ESTABLISHED 4188/agent          
tcp        0      0 ip-172-31-86-188.:57190 52.46.132.44:https      ESTABLISHED 4188/agent 

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 ip-172-31-86-188.:57190 52.46.132.44:https      ESTABLISHED 4188/agent          
tcp        0      0 ip-172-31-86-188.:60646 52.46.128.101:https     ESTABLISHED 4188/agent    

Для извлечения изображения из ECR, вашему EC2 просто нужен 443 порт конечной точки ECR.Весь другой трафик является чем-то особенным для обслуживания кластера ecs-агентом.Дайте мне знать ваши мысли на основе ваших журналов TCP EC2 и какой процесс отвечает за это.

...