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

Правило для входящих подключений Amazon EC2 Security Group с динамическим IP

Я ищу разъяснения по поводу того, что я считаю потенциальной проблемой с группами безопасности EC2.

Я настраиваю группу безопасности для подключения к экземплярам Linux. Я создал правила для доступа по HTTP и HTTPS "где угодно".

Для моего правила SSH в учебнике Amazon сказано, что я должен ограничить входящий доступ к моему общедоступному IP-адресу.

  1. Я не понимаю, насколько это безопасно или работоспособно, если ваш общедоступный IP-адрес является динамическим?

  2. Мой IP-адрес является динамическим. Что произойдет, если мой интернет-провайдер изменит мой общедоступный IP-адрес, и я больше не смогу подключиться к моему экземпляру по ssh?

Ссылка на руководство по установке, которое я использую: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html (Шаг 7 «Создание группы безопасности» мне кажется проблематичным)

Я не понимаю, насколько это безопасно или работоспособно, если ваш общедоступный IP-адрес является динамическим?

Это решение может работать, если вы обнаружите, что ваш IP-адрес не меняется часто или вам нужен доступ только на короткое время. Это добавляет дополнительный уровень безопасности, поскольку SSH не подвергается трафику за пределами предоставленного вами CIDR.

Если конкретный CIDR не работает, вы можете попробовать на плате или более диапазонах CIDR, которые, вероятно, будет использовать ваш провайдер, это все равно ограничит доступ из большого процента Интернета, и это победа для безопасности.

что произойдет, если мой интернет-провайдер изменит мой общедоступный IP-адрес, и я больше не смогу подключиться к своему экземпляру по ssh?

Вы можете войти в консоль AWS или использовать интерфейс командной строки для обновления правила группы безопасности на лету.

Вы можете написать сценарий, который напрямую взаимодействует с CLI. Это может быть так же просто, как что-то, что проверяет Port 22 rule против вашего текущего IP-адреса и обновляет его, если он отличается. Конечно, запуск такого скрипта может вызвать больше вопросов безопасности :)

Брандмауэр IP - лучший способ защитить SSH?

Хотя приятно ограничивать трафик ssh только надежными IP-источниками, где это возможно, то, что делает ssh безопасным, - это использование закрытых ключей и разумная конфигурация.

Ключевые моменты, которые следует учитывать:

  • Добавьте кодовую фразу в свой закрытый ключ SSH
  • Отключить аутентификацию по паролю для SSH
  • Отключить вход root в SSH
  • Аудит всех учетных записей пользователей на предмет открытых ключей SSH

Вы также можете сделать несколько вещей, чтобы избавиться от «шума», связанного с атаками методом грубой силы:

  • Запустите ssh на более высоком порту
  • Используйте программное обеспечение, такое как fail2ban, которое будет динамически регистрировать многочисленные неудачные попытки и блокировать диапазоны IP-адресов в течение определенных периодов времени.

Можно ограничить доступ к вашему SSH-серверу по IP-адресу, но SSH не полагается на это для своей безопасности. Если вы отключите вход по паролю (PasswordAUthentication no) и используйте только аутентификацию с закрытым ключом, никто не сможет войти без вашего закрытого ключа. Это безопасно.

Другими словами, вам не нужно беспокоиться о правилах брандмауэра, если вы этого не хотите.

Вы можете добавить диапазон CIDR в группу безопасности, которая представляет собой надмножество всех IP-адресов, которые ваш интернет-провайдер может вам выделить.

Либо так, либо используйте API AWS для динамического обновления вашей группы безопасности.

Есть несколько более свежих решений этого старого вопроса:

Изнутри AWS: Как автоматически обновлять группы безопасности для Amazon CloudFront и AWS WAF с помощью AWS Lambda

Удаленное обновление из динамического источника (скрипт node.js): скрипт узла aws-ec2-ssh-secgroup-update

Удаленное обновление из динамического источника (скрипт Python): Автоматически добавлять текущий общедоступный IP-адрес в группу безопасности, чтобы разрешить трафик на определенный порт

Ты можешь использовать aws_ipadd , чтобы легко обновлять правила группы безопасности AWS и управлять ими, а также вносить в белый список ваш общедоступный IP-адрес с портом при его изменении.

$ aws_ipadd my_project_ssh
 Your IP 10.10.1.14/32 and Port 22 is whitelisted successfully.

$ aws_ipadd my_project_ssh
 Modifying existing rule...
 Removing old whitelisted IP '10.10.1.14/32'.
 Whitelisting new IP '10.4.10.16/32'.
 Rule successfully updated!

Вы можете использовать AWS CLI для динамического добавления / удаления правил доступа для SSH в вашей группе безопасности. Есть авторизовать вход группы безопасности и аннулировать вход группы безопасности Доступны методы API.

Я недавно опубликовал сообщение в блоге об этом на случай, если вам нужно пошаговое объяснение.

После настройки правильной группы безопасности и пользователей IAM вы можете переключить свой SSH-доступ, используя следующие сценарии bash:

bin / open_ssh

#!/bin/sh

source ./bin/.authorize_aws

WHITELISTED_IP=$(curl https://ifconfig.me 2> /dev/null)

echo "Opening SSH for ${WHITELISTED_IP}"

aws ec2 autorize-security-group-ingress \
--group-name ephemeral-ec2-ssh-access \
--region us-west-1 --protocol tcp --port 22 \
--cidr "${WHITELISTED_IP}/32" 2> /dev/null

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY

bin / close_ssh

#!/bin/sh

source ./bin/.authorize_aws

WHITELISTED_IP=$(curl https://ifconfig.me 2> /dev/null)

echo "Closing SSH for ${WHITELISTED_IP}"

aws ec2 revoke-security-group-ingress \
--group-name ephemeral-ec2-ssh-access \
--region us-west-1 --protocol tcp --port 22 \
--cidr "${WHITELISTED_IP}/32" 2> /dev/null

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY