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

10

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

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

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

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

Спасибо!

Борис Кироз
источник

Ответы:

16

Прямое решение состоит в том, чтобы использовать входящее правило 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

Тама
источник
1

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

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

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

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

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

Napster_X
источник
1

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

Себастьян Круз
источник
Основная проблема в том, что мне нужно выяснить, как сделать это «автоматически», так как все мои конфигурации управляются Chef. Мне нужно что-то вроде fail2ban или denyhost, чтобы указать конфигурации Chef для блокировки некоторых IP-адресов ...
boris quiroz
1

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

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

Вам нужно будет проверить пакеты и найти X-Forwarded-Forзаголовок HTTP , 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;

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

КВЗ
источник