У меня 2 домена. Мне нужно разрешить определенные IP-адреса следующим образом:
Я не специалист по инфраструктуре, но мне пришла в голову эта идея.
Предлагаемое решение является хорошей настройкой, или мне следует полностью оставить его ИЛИ как-то настроить?
Проблема с решением 2 балансиров в том, что любой из них без разбора принимает любые Host
заголовок и перенаправить запрос на сервер. Нет ничего плохого в том, чтобы указать несколько балансировщиков на один и тот же сервер, но эта конфигурация тривиально обходит настройки вашей группы безопасности, если злонамеренный пользователь знает об этом. a.example.com
- они просто подключаются к балансировщику a.example.com и вводят Host: b.example.com
в их запросе, и экземпляр не может отличить.
ALB добавляют заголовок HTTP X-Forwarded-For
на каждый входящий запрос. Крайнее правое значение в этом заголовке представляет собой фактический IP-адрес подключающегося клиента и не может быть подделано. Любые адреса слева от крайнего правого значения были предоставлены клиентом (обычно прокси-сервером или детским скриптом) и для ваших целей не заслуживают доверия и бессмысленны. Но тот, что справа, будет точным.
Простейшей конфигурацией было бы использование одного ALB, и для всего, что принимает HTTP-соединения в экземпляре (например, Nginx, Apache), просто отклонять HTTP-запросы, когда Host
заголовок содержит b.example.com, но X-Forwarded-For
не закончить с доверенный IP, например 203.0.113.50. Ошибка могла быть 403 Forbidden
но, возможно, лучше было бы 503 Service Unavailable
.
С двумя настройками балансировщика и одним балансировщиком, ограниченным группами безопасности или NACL, ваш экземпляр или балансировщик должны блокировать запросы для b.example.com
через a.example.com
балансир. Экземпляр не может, потому что идентификация который балансировщик отправил запрос нецелесообразно. Когда они масштабируются или выходят из строя (и восстанавливаются), их внутренние адреса меняются.
Можно заблокировать определенные запросы через ALB, либо Host
соответствие заголовка или пути как я обсуждал здесь на SF, создав фиктивную целевую группу без назначенных ей экземпляров ... чтобы балансировщик a.example.com мог заблокировать запросы для b.example.com, используя такую конфигурацию.
Или вы можете использовать Amazon Web Application Firewall (WAF) в сочетании с ALB для блокировки любых неожиданных запросов. Это хороший вариант, если вы все равно планируете использовать WAF.
Однако ... Если вы делать используйте WAF, тогда вам не нужны два балансировщика ... вы можете использовать один балансировщик для обоих сайтов и добавить правила на WAF для блокировки запросов для Host: b.example.com
если только IP-адрес клиента соответствует разрешенному списку. Единственная оговорка с WAF заключается в том, что, поскольку он проверяется для каждого запроса, это означает, что сбой в WAF приведет к отключению ваших сайтов ... поэтому WAF был разработан с ошибкой открыто. Сбой WAF означает, что весь трафик разрешен, однако такой сбой маловероятен. WAF полностью управляется, поэтому вам нечего поддерживать.