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

Требуемые исходящие порты для открытия экземпляра Ubuntu 20.04 EC2 (помимо TCP 80/443)

Я усиливаю группы безопасности для экземпляров EC2, работающих на AMI Ubuntu 20.04 по умолчанию. Какие системные службы сломаются после закрытия всех исходящих портов, ожидающих TCP 80 и TCP 443? (Я предполагаю, что все порты, необходимые приложению, тоже открыты. Меня беспокоит нарушение неявных служб, предоставляемых ОС.)

Насколько я понимаю, разрешения TCP 80/443 достаточно для основных служб ОС. Например, apt-get обновления должны работать. Или я пропустил порты, которые Ubuntu или AWS всегда ожидают открытыми?


Примечание: мне было интересно, как работает синхронизация времени. По умолчанию я не вижу никаких NTP или chrony-сервисов, предустановленных в Ubuntu AMI по умолчанию. В противном случае должен быть открыт и порт 123 UDP. Я предполагаю, что (гостевые) аппаратные часы, предоставляемые виртуальной машиной, уже синхронизированы хостом (управляемым AWS). Кроме того, я не могу вспомнить ни одного порта, который нужно разрешить с точки зрения ОС.

В зависимости от того, какие сервисы AWS будет использовать приложение, потребуется больше портов, например 6379 для ElastiCache (Redis). Однако меня беспокоят вызовы API, которые не исходят из развернутого приложения. Можно считать, что требования приложения известны. Требования среды (ОС и инфраструктура EC2) сложнее.

В Ubuntu 20.04 в большинстве случаев достаточно разрешения исходящего трафика http и https. Однако у меня возникла проблема с NTP. Мои попытки открыть порт 123 UDP не удались. Не знаю почему, но чтобы решить эту проблему, я перешел на внутренний Обслуживание синхронизации времени из AWS:

$ cat /etc/systemd/timesyncd.conf
[Time]
NTP=169.254.169.123

Если часы синхронизируются, вы должны получить следующий результат:

$ timedatectl
...
System clock synchronized: yes                        
...

Если нет, проверьте журналы через:

$ journalctl --unit=systemd-timesyncd

В моем случае у меня все еще был тайм-аут при подключении к ntp.ubuntu.com:123, даже после открытия порта UDP 123 (я даже пытался открыть TCP 123). С сервисом AWS он работал, не открывая ни один из этих исходящих портов.

Для этого вам нужно будет использовать NACL, поскольку группы безопасности могут обрабатывать только входящий трафик и разрешать все выходить. Вы должны учитывать эфемерные порты. Это означает, что когда вы запускаете запрос на https://my-apt-repo.com порт назначения будет 443 из-за HTTPS, но исходный порт, с которого будет начинаться запрос на вашем экземпляре, может быть любым от порта ~ 10000 до ~ 65000. Вы должны обратить внимание на то, чтобы разрешить как входящие, так и исходящие порты, потому что NACL не имеют состояния. Если вы разрешите исходящий трафик только на некоторых портах, но не входящий, ответ не сможет вернуться.

Чтобы узнать, какие порты используются вашей системой как временные, выполните:

sysctl net.ipv4.ip_local_port_range

Вы можете изменить диапазон портов, отредактировав /etc/sysctl.conf файл. Если вы не хотите перезагружаться, чтобы изменения вступили в силу, выполните следующую команду, чтобы получить конфигурацию:

sysctrl -p /etc/sysctl.conf .

Для получения дополнительной информации, проверьте эту статью.