代码之家  ›  专栏  ›  技术社区  ›  Jiew Meng

为什么我的AWS ECS应用程序需要“奇怪的”TCP端口才能从ECR中拉出?

  •  8
  • Jiew Meng  · 技术社区  · 6 年前

    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 是我的专有网络私人地址。注意第一次说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 44920 . 我这样问是为了知道如何打开正确的端口。目前由于端口是如此随机,我需要打开一切

    3 回复  |  直到 6 年前
        1
  •  8
  •   Community CDub    5 年前

    当它说 18.136.60.252:443 is accessing 10.0.12.61:55584 18.136.60.252 正在“访问”您的本地专有网络IP。我更愿意说“18.136.60.252”是通过一个已经建立的TCP连接(由您实例中的ecs代理发起),向您的本地VPC IP、OS分配的用于建立TCP通信的随机SRC端口(55584)发送响应。

    从实例到网络,要访问远程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代理作为源端口的操作系统,它只是一个免费的、随机选择的操作系统。


    通过OP和自学进行澄清后编辑

    所以在AWS NACL级别我应该允许所有短暂的端口范围?

    根据 AWS NACL docs

    实际上,为了覆盖可能向VPC中面向公众的实例发起通信的不同类型的客户端,您可以打开临时端口1024-65535。但是,也可以向ACL添加规则,以拒绝该范围内任何恶意端口上的通信。请确保在表中放置DENY规则的时间早于打开大量临时端口的ALLOW规则。

    但要考虑到:

    额外的 专有网络的安全层。 (我的重点)

    在操作系统层面上,你会这样做吗?如果我使用docker,我需要通过Dockerfile来完成吗?

    我的建议是通过安全组进行管理,因为它们是“有状态”的,这意味着它们跟踪所建立的每个连接,自动允许对临时端口进行“响应”,而无需配置这些规则。例如,您可以“拒绝”所有入站流量,并允许TCP 443用于出站流量。是的 here

    安全组:是有状态的:返回流量是自动允许的,无论任何规则

    网络ACL:无状态:规则必须显式允许返回流量 <--这是对上一个问题的回答,关于短暂的港口

    关于操作系统和iptables,我将首先探讨更容易配置和维护的安全组,至少对于目前的用例是这样的。

        2
  •  2
  •   Imran    6 年前

    ecs代理进程在特定的时间间隔内与上述awsapi(443)交互,这就是源端口不断变化的原因。这是我的EC2服务器netstat日志的输出。

    命令- 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只需要ECR端点的443端口。所有其他流量都是特定于ecs代理的集群维护。让我知道您的想法,根据您的ec2tcp日志和哪个进程是负责它。

        3
  •  2
  •   buræquete Naveen Kocherla    6 年前

    动态端口映射 为您的ECS配置。它的默认临时端口范围为 49153 通过 65535 ,一般来说,下面的端口 32768 在临时端口范围之外,因此TCP连接中主机端口的随机性。您确实有较低的端口值,但这必须是由于您的实例配置(默认值为 ip_local_port_range 大部分时间是 32768 - 61000

    请阅读有关如何配置它的详细信息 here ,可以找到端口设置的确切位置 here

    可以使用set a或set a配置或设置单个端口 所有连接的单端口,或通过 /proc/sys/net/ipv4/ip_local_port_range 偏离默认范围。