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

Заставить NTP работать на AWS без открытия входящего порта в группе безопасности

У меня есть частный сервер на AWS, на котором нет публично открытых входящих портов. Единственный открытый порт - это SSH, и он доступен только с других компьютеров в той же подсети.

Эта машина читает файлы с S3 по сети. Недавно он перестал работать, потому что время сервера сдвинулось более чем на 15 минут и запросы к S3 были отклонены:

<Code>RequestTimeTooSkewed</Code>
<Message>
    The difference between the request time and the current time
    is too large.
</Message>
<MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds>

Простое решение - установить ntp, но для этого необходимо открыть порт 123 UDP. Поскольку UDP не имеет состояния, входящие и исходящие порты должны быть открыты.

Как я могу автоматически обновлять системное время, используя только TCP-соединения, инициированные моим сервером? Есть ли стандартный демон на основе TCP, такой как NTP? Меня не волнует, что это не так точно: допустим даже перекос до 10 минут.

Редактировать 2 июня 2017 г.

Вот как группы безопасности настроены:

Это сетевой ACL для подсети - просто ACL по умолчанию:

Редактировать 2 июня 2017 # 2

Хорошо, теперь он работает без каких-либо специальных групп безопасности, как и предсказал @Tim. Думаю, я просто не тестировал как следует:

Вместо этого тестирование с ntpdate-debian, и без открытого порта 123 в группе безопасности работает нормально; и ntpd обновляет время правильно, если я позволяю ему работать некоторое время.

Согласно Документация AWS вы можете открыть UDP: 123 только в исходящей группе безопасности. Поскольку группы безопасности являются ответами с отслеживанием состояния, они будут возвращаться вам, но никто за пределами вашего VPC не сможет инициировать соединение.

Вы, конечно, потребуете, чтобы NACL были открыты в обоих направлениях для этого порта.

Обновить Вы должны прочитать о AWS Безопасность, особенно группы безопасности и NACL.

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

С другой стороны, группы безопасности обеспечивают соблюдение сетевых правил на уровне гипервизора. Они сохраняют состояние, поэтому, если вы разрешаете исходящий порт, ответ автоматически возвращается в экземпляр.

Теоретически NACL немного снижают нагрузку на хост-сервер, поскольку предотвращают попадание трафика на сетевой интерфейс. Поскольку вы контролируете только небольшую часть сервера, это, вероятно, не имеет большого значения.

Обновление 1 декабря 2017 г.

AWS имеют объявил то Сервис AWS Time Sync. Короче говоря, они предоставляют серверы в каждом центре обработки данных, чтобы гарантировать точное время сервера.

В документации AWS говорится, что нужно использовать программное обеспечение Chrony, а не NTP, но оба сервиса - NTP. Нет смысла копировать инструкции AWS в этот пост, поскольку они могут измениться в будущем, а документация AWS превосходна.

Использование NTPD

Вместо установки Chrony я просто добавил следующее в свой /etc/ntp.conf, чтобы попытаться заставить NTP использовать новый сервер AWS NTP

server 169.254.169.123 prefer iburst

Я также удостоверился, что ни один из других операторов сервера не был настроен как «предпочитают».

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