Запретить IP-адрес на AWS ELB

У меня более или менее следующая конфигурация на AWS:

Эластичный балансировщик нагрузки с 3-мя машинами o 3 разных зоны доступности. Моя группа безопасности разрешает 0.0.0.0/0:80, так как это мое приложение rails (nginx, unicorn).

Мне было интересно, есть ли способ запретить доступ к моему приложению на определенный публичный IP-адрес? Я читал документацию по AWS, но поскольку SG "запрещают все", нет способа отказать только один конкретный IP-адрес.

Есть идеи? iptables на 3 машины за балансировщиком нагрузки?

Спасибо!

5 ответов

Прямое решение состоит в том, чтобы использовать входящее правило ACL сети VPC. Это работает, только если ваш ELB находится в VPC, но если вы создали его в последние несколько лет, он должен быть по умолчанию.

Например, чтобы запретить 1.2.3.4, сделайте следующее:

  1. Авторизуйтесь в AWS.
  2. Перейдите к VPC,
  3. выберите Network ACLs из меню левой руки.
  4. Выберите ACL, связанный с VPC, в котором находится ваш ELB.
  5. Выбрать Inbound Rules Вкладка.
  6. выберите Edit и добавьте новое правило со следующими атрибутами:
    • Правило №: 50 (любое число, если оно меньше, чем правило, которое РАЗРЕШАЕТСЯ от ВСЕХ)
    • Тип: ВСЕ Трафик
    • Протокол: ВСЕ
    • Диапазон портов: ВСЕ
    • Источник: 1.2.3.4/32
    • Разрешить / Запретить: DENY

Здесь есть много дополнительной информации о сетевых ACL: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html

С помощью балансировщика нагрузки приложения вы можете остановить трафик с помощью правила прослушивателя.

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-update-rules.html

Если вам нужно занести в черный список только несколько IP-адресов, вы можете использовать nginx_http_access_module на вашем веб-сервере.

Нет, нет возможности заблокировать IP с группой безопасности.

Группа безопасности - это, по сути, белый список, а не черный список.

Все по умолчанию запрещено, и вы можете выборочно открывать порты в соответствии с вашими потребностями, но вы не можете заблокировать никаких конкретных людей /ip.

Для этого лучшим решением, как вы сказали, являются IPtables на 3 разных компьютерах.

Я уверен, что в будущем группы безопасности AWS также будут иметь эту функциональность, но не сейчас.

Для этого лучшим решением, как вы сказали, являются IPtables на 3 разных компьютерах.

На самом деле, это не очень хорошее решение, как удаленный IP ($remote_addr в Nginx) будет от loadbalancer Amazon. Запрет, который приведет к тому, что весь перенаправленный трафик будет заблокирован.

Вам придется проверить пакеты и найти HTTP X-Forwarded-For заголовок, IPtables не поддерживает протокол, как это.

Я остановился на следующем решении 2 непослушных IP-адресов в Nginx

set $client_ip $remote_addr;
if ($http_x_forwarded_for) {
  set $client_ip $http_x_forwarded_for;
}

if ($client_ip = "123.123.123.123") {
  return 403;
}

if ($client_ip = "123.123.123.234") {
  return 403;
}

Введение переменной $client_ipтолько для того, чтобы я мог также проверить это локально, где нет http_x_forwarded_for имеется в наличии..

Немного оффтоп, но для удобства я также добавил этот ip клиента в мои журналы доступа:

log_format main "\$client_ip - \$remote_user [\$time_local] \"\$request\" \$status \$body_bytes_sent \"\$http_referer\" \"\$http_user_agent\"";
access_log /var/log/nginx.access.log main;

Это не красиво, но надеюсь, что это помогает

Другие вопросы по тегам