当前基础设施包含位于Amazon EC2的两台服务器:应用程序服务器和MySQL服务器。
关注点:应用服务器和数据库之间的通信安全,同时不降低性能。
当前设置:MySQL 服务器有一个弹性 IP,应用程序使用该 IP 连接到服务器。原因是内部 IP 在重新启动时会发生变化,而弹性 IP 保持不变。MySQL 上的连接通过防火墙连接到应用程序服务器,MySQL 本身已将用户分配给应用程序服务器的 IP。
理想情况下,我们希望两台服务器使用内部 IP 进行通信。出于性能原因,我们不想通过 SSL 实现通信。
问题:
我是否正确地认为中间人攻击是可能的,因为通信发生在使用弹性 IP 的网络上?
我们预计在两台服务器之间实施 SSL 通信会对性能造成多大的影响?
除了自定义脚本之外,还有其他方法可以处理内部 IP 的变化吗?
如果没有 SSL,是否仍会通过内部网络从 EC2 邻居发生中间人攻击?
答案1
使用 VPC 可以解决很多问题,因为私有 IP 地址在那里是静态的。出于这样的原因,亚马逊强烈鼓励人们转向 VPC。一旦您拥有 VPC,您的两个系统就应该能够通过 AWS 内部网络进行通信。
回答您关于 aws-public <---> aws-public 路径的暴露问题,理论上是暴露的。但是,这一切都可能发生在亚马逊的内部交换结构上,因此暴露给不良分子的可能性可能与仅内部流量路由相同。
答案2
作为sysadmin1138 的回答中推荐,这就是 Amazon Web Services 中增加 VPC 的原因:这样你就可以在 EC2 实例之间拥有私有内联网。在我看来,这是第一部分解决方案:将您的数据库服务器与您的应用程序服务器放在一个 VPC 中,并且只允许从内部(非面向互联网)网络访问数据库服务器,并拒绝从外部(面向互联网)网络访问 TCP 3306。
第二步是“是的,你应该使用 SSL,而且性能成本不是很高。”你当然可以测试通过 SSL 与纯文本连接数据库,但开销充其量也相对较小。您的实际性能成本将根据使用情况而有所不同。
您的申请是否:
- 为每个 SQL 操作创建新的数据库连接?
- 如果是这样,你的性能成本将会更大,尽管仍然相对较小。
- 缓存/池化一定数量的数据库连接并根据需要重新使用它们?
- 如果是这样,那么几乎没有理由不使用 SSL。
就我个人而言,如果我可以选择使用 SSL,我会使用 SSL。使用 2048 位 RSA 密钥与 4096 位 RSA 密钥可能会加快初始握手时间,并将密码列表缩减为加快第一个字节的时间;您必须检查 MySQL 的选项是什么。
从安全角度来看,使用 PFS 密码并且不要使用 SSLv3;如果可以的话,只使用 TLSv1.2(即:如果您运行的是 2008 之后的任何 MySQL/SSL 版本)。我不确定 MySQL 允许您对此进行多少自定义。
总结:仅通过 VPC 内部网络将您的 MySQL 端口公开给您的应用程序服务器,绝对使用 SSL,但如果您担心速度并且不重复使用连接,则对其进行基准测试。