我的 VPC 的 ACL 非常严格。我们有一个公共子网和一个私有子网,每个子网都有自己的 ACL。
我不明白为什么以下 ACL 适用于通过 Amazon SES 在端口 465 上发送电子邮件。
民众:
- 入站:src 0.0.0.0/0,端口 465
- 出站:目标 0.0.0.0/0,端口 465
私人的:
- 入站:N/A
- 出站:目标 0.0.0.0/0,端口 465
我收到了两个出站消息,但公共入站消息没有任何意义。SMTP RFC 中的哪个部分提到 smtp 服务器(SES,中继)将通过端口 465 与客户端连接?我希望客户端选择一个高端口,如以下 netstat 所示:
tcp 104 0 ip-10-0-1-75.ec:36836 ec2-54-243-225-221.:urd CLOSE_WAIT
tcp 0 0 ip-10-0-1-75.ec:50903 ec2-54-243-161-229.:urd ESTABLISHED
据我所知,urd 是 465。因此,私有子网中的实例将请求路由到 NAT 实例,而 NAT(在公共子网中)将数据包发送到远程服务器。那么为什么入站需要 465 呢?
答案1
为了确保我们清楚,src 0.0.0.0/0 port 465
指的是来源IP 但目的地港口。
流量的来源(CIDR 范围)和目标(监听)端口或端口范围。
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html
问题有趣的地方在于,规则的“错误”(即混乱的根源)根本不是端口,而是 IP 范围。
此规则允许私有子网上的实例访问公共子网上的 NAT 实例,以便流量可以从那里转发到 Internet。它的实际目的不是允许来自 Internet 的流量返回(尽管它无意中做了类似的事情,允许目标端口为 465 的入口流量,这是您不想要的)。更正确的规则是使用 VPC 的 cidr 块(例如 172.31.0.0/16)(或适当的子集)作为源,使用 NAT 计算机或其子网作为目标。