Назад | Перейти на главную страницу

Архитектура AWS WebServer (ELB + iptables)

В настоящее время я работаю над архитектурой веб-сайта с высокой посещаемостью и высокой доступностью.

Мы используем AWS.

В настоящее время у нас есть:

Route 53 -> ELB -> Несколько экземпляров EC2 -> RDS Multi AZ.

Каждый экземпляр EC2 запускает Varnish + Nginx и PHP FCGI. Сессии и некоторые другие общие данные хранятся через ElastiCache.

Мы планируем запускать Varnish и Nginx на каждом экземпляре EC2, потому что это позволяет уменьшить количество точек сбоя и просто запускать дополнительные экземпляры при увеличении нагрузки.

Однако мы должны добавить к этому iptables (fail2ban). Конечно, мы получаем IP ELB вместо реального IP клиента ...

Мы подумали о следующих решениях:

1) Добавьте экземпляр EC2 между Route 53 и ELB, запустите iptables / firewalls (и, возможно, varnish?) И перенаправьте все в ELB.

2) Замените ELB кастомным EC2 с HAProxy + iptables.

3) Используйте mod_security и создайте некоторые пользовательские вещи для динамического черного списка IP-адресов

4) Придерживайтесь текущей архитектуры и удалите iptables из нашего списка дел.

Что было бы хорошим подходом?

Спасибо

заголовок x-forwarded-for

Конечно, мы получаем IP ELB вместо реального IP клиента ...

Вы захотите использовать заголовок x-forwarded-for, который даст вам IP-адрес клиента.

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

Заголовок запроса X-Forwarded-For помогает определить IP-адрес клиента при использовании балансировщика нагрузки HTTP / HTTPS.


Вот еще кое-что, что может вас заинтересовать ...

Группы безопасности и сетевые ACL

AWS предоставляет две отличные функции безопасности, которые работают в той же области, что и iptables:

  • Группы безопасности
  • Сетевые ACL

Группы безопасности (подумайте о замене iptables) дают вам возможность разрешать / запрещать трафик на основе IP-адреса и порта. Есть и другие возможности, связанные с предоставлением другого ресурса AWS вместо IP-адреса.

Сетевые списки ACL дают вам дополнительный контроль над вашей сетью. Вы можете разрешить / запретить трафик на основе IP-адреса и порта внутри и между подсетями в вашем VPC.

AWS Безопасность

  • Если вы используете VPC, у вас есть возможность размещать такие вещи, как EC2, в частных подсетях.
  • ELB, которые должны быть доступны публике, могут иметь только самое необходимое (443, 80).
  • Вы можете заблокировать такие сервисы, как SSH, до белого списка IP-адресов.
  • Если у вас есть приложение с веб-интерфейсом для администрирования, вы можете заблокировать его на уровне веб-сервера для защиты от любых уязвимостей на уровне программного обеспечения.

Добавление собственной безопасности к EC2

Если вы хотите добавить дополнительные меры безопасности к своим EC2 (например, fail2ban) и используете несколько EC2 за балансировщиком нагрузки, вам необходимо спроектировать свои EC2 так, чтобы на них не было никаких уникальных данных ( нет смысла добавлять правило EC2 # 1, если его нет на EC2 # 2).

Существуют методы, позволяющие поддерживать синхронизацию EC2 друг с другом, такие как хранение данных на S3, получение управления конфигурацией от мастера или получение содержимого из одного репо. Использование образов Golden вместе со сценариями начальной загрузки (которые извлекают данные из S3).

Ответы на ваши вопросы

1) Добавьте экземпляр EC2 между Route 53 и ELB, запустите iptables / firewalls (и, возможно, varnish?) И перенаправьте все в ELB.

Добавление экземпляра EC2 перед вашим ELB снизит вашу способность к масштабированию. Вы также создаете единую точку отказа, поэтому вы, вероятно, не захотите этого делать.

2) Замените ELB кастомным EC2 с HAProxy + iptables.

Вы могли бы сделать это, но это достигается за счет управления этим самостоятельно. Вы несете ответственность за программное обеспечение, безопасность, обновления, доступность и т. Д. Вы хотите избежать этого, если это возможно (т.е. делайте это только в том случае, если вы не можете решить проблему с помощью ELB).

3) Используйте mod_security и создайте некоторые пользовательские вещи для динамического черного списка IP-адресов

Это вариант, но вы можете захотеть управлять безопасностью на уровне ОС / сети, а не (только) на уровне программного обеспечения / приложения.

4) Придерживайтесь текущей архитектуры и удалите iptables из нашего списка задач.

Конечно, это вариант, но приемлем ли это для бизнеса / проекта?