Jie*_*eng 9 acl vpc amazon-web-services amazon-ecs docker
我正在使用带有NLB的ECS.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
Run Code Online (Sandbox Code Playgroud)
我的流程记录在上面.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
.我问,所以我知道如何打开正确的端口.目前由于端口如此随机,我需要打开一切
当它说18.136.60.252:443 is accessing 10.0.12.61:55584
,我不会说18.136.60.252正在"访问"您的本地VPC IP.我宁愿说"18.136.60.252"正在通过已经建立的TCP连接(由ecs-agent发起)向本地VPC IP发送响应,由OS分配的随机SRC端口建立TCP通信(55584)在你的实例中).
您无需专注于应允许的源端口.您更愿意告诉操作系统(防火墙)"让响应进入已建立的连接".在iptables中是这样的:
从实例到网络,访问远程443端口:
iptables -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
从远程主机到您的实例,让响应回来:
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
Run Code Online (Sandbox Code Playgroud)
在这里你可以找到一些更好的解释:
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用于出站流量.但这并不意味着反应不能达到临时端口,他们的确可以(尽管拒绝所有inbout流量),因为安全组记住的连接.在这里查看更多信息:
安全组:是有状态的:无论有什么规则,都会自动允许返回流量
网络ACL:无状态:规则必须明确允许返回流量< - 这是回答前一个问题,关于短暂的端口
关于操作系统和iptables,我将首先探索更容易配置和维护的安全组,至少对于当前的用例.
归档时间: |
|
查看次数: |
813 次 |
最近记录: |