AWS WebServer架构(ELB + iptables)

我目前正在研究高stream量高可用性网站的架构。

我们正在使用AWS。

目前,我们有:

路线53 – > ELB – >多个EC2实例 – > RDS多AZ。

每个EC2实例运行Varnish + Nginx和PHP FCGI。 会话和其他一些共享数据通过ElastiCache存储。

我们计划在每个EC2实例上运行Varnish和Nginx,因为这样可以减less故障点,并在负载增加时运行额外的实例。

但是,我们必须添加iptables(fail2ban)。 当然,我们获得ELB的IP而不是真正的客户端IP …

我们想到了以下解决scheme:

1)在Route 53和ELB之间添加一个EC2实例,运行iptables / firewalls(也可能是varnish?)并将所有内容转发到ELB。

2)用运行HAProxy + iptables的自定义EC2replaceELB。

3)使用mod_security并构build一些自定义的东西来dynamic地将IP列入黑名单

4)坚持目前的架构,并从我们的待办事项列表中删除iptables。

什么是一个好方法?

谢谢

x-forwarded-for标题

当然,我们获得ELB的IP而不是真正的客户端IP …

你会想要使用x-forwarded-for头,这将给你的客户端IP。

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#x-forwarded-for

当您使用HTTP / HTTPS负载均衡器时,X-Forwarded-For请求标头可帮助您识别客户端的IP地址。


这里有一些你可能感兴趣的东西

安全组和networkingACL

AWS提供了两个很好的安全特性,它们在iptables的相同区域中运行:

  • 安全组
  • networkingACL

安全组(考虑replace为iptables)使您能够根据ip和端口来允许/拒绝stream量。 还有其他function可以提供另一个AWS资源来代替IP地址。

networkingACL可以进一步控制networking。 您可以根据VPC内部和子网内的IP和端口来允许/拒绝stream量。

AWS安全

  • 如果您使用的是VPC,则可以将诸如EC2之类的内容放在私有子网中。
  • 需要面向公众的ELB只能暴露必要条件(443,80)。
  • 您可以将SSH等服务locking到IP白名单。
  • 如果您的应用程序具有用于pipe理的Web界面,则可以在Web服务器级别将其locking,以防止软件级别的任何漏洞。

将您自己的安全添加到EC2

如果您希望在您的EC2上添加额外的安全措施(如fail2ban),并且您在负载均衡器后面使用多个EC2,则需要deviseEC2,以便它们没有任何唯一的数据(如果EC2#2不在EC2#2上,则添加规则EC2#1是没有意义的)。

有一些技术可以使EC2彼此保持同步,例如在S3上存储数据,从主服务器上拉取configurationpipe理,或者从同一个回购站点提取内容。 使用金色图像以及引导脚本(从S3中提取数据)。

您的问题的答案

1)在Route 53和ELB之间添加一个EC2实例,运行iptables / firewalls(也可能是varnish?)并将所有内容转发到ELB。

在ELB前添加一个EC2实例会降低您的扩展能力。 你也创build了一个单一的失败点,所以你可能不想这样做。

2)用运行HAProxy + iptables的自定义EC2replaceELB。

你可以做到这一点,但它是以自己pipe理它为代价的。 你成为负责软件,安全,更新,可用性等。你想避免这个如果可能的话(即只有这样做,如果你不能解决问题使用ELB)。

3)使用mod_security并构build一些自定义的东西来dynamic地将IP列入黑名单

这是一个选项,但您可能需要在操作系统/networking级别pipe理安全性,而不是(仅)在软件/应用程序级别。

4)坚持目前的架构,并从我们的待办事项列表中删除iptables。

当然,这是一个select,但这是可以接受的业务/项目?