Настройка непривилегированного порта не сохраняется при перезапуске сервера.

Вопрос или проблема

У меня есть небольшой домашний сервер, на котором я хочу разместить несколько служб podman и caddy в качестве обратного прокси. С помощью

sysctl net.ipv4.ip_unprivileged_port_start=443

caddy может запускаться и привязываться к порту. Моя проблема в том, что этот параметр не сохраняется при перезапусках сервера. Я даже попытался добавить его в /etc/sysctl.conf и попробовать опцию -w, но оба варианта не сработали. Когда я перезапускаю сервер, он снова устанавливается на 1024, и мой сервер caddy не может запуститься.

Как сохранить эту конфигурацию при перезапусках на сервере Ubuntu 24.10?

Ответ или решение

Чтобы решить вопрос с настройкой незапривилегированных портов, которая не сохраняется после перезагрузки сервера, необходимо глубоко разобраться в механизме работы системы и доступных инструментах настройки. Ваша проблема связана с тем, что параметр net.ipv4.ip_unprivileged_port_start=443, задаваемый с помощью команды sysctl, не сохраняется после перезагрузки. Рассмотрим, как можно обеспечить его сохранение на сервере Ubuntu 24.10.

Теория:

На большинстве Unix-подобных систем, включая Ubuntu, порты с 0 до 1023 считаются привилегированными и для их использования требуются особые привилегии. Параметр net.ipv4.ip_unprivileged_port_start отвечает за настройку порога, выше которого порты считаются непривилегированными. В вашем случае, вы хотите, чтобы порт 443, обычно используемый для HTTPS, был непривилегированным, что позволяет приложениям без специальных привилегий использовать его напрямую.

Пример:

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

Применение:

  1. Редактирование /etc/sysctl.conf:
    Убедитесь, что вы добавили строку

    net.ipv4.ip_unprivileged_port_start=443

    в конец файла /etc/sysctl.conf. Затем, чтобы сразу применить изменения, выполните sudo sysctl -p.

  2. Проверка на вмешательство других инструментов:
    Иногда вмешательство других скриптов или приложений может приводить к перезаписи sysctl-параметров. Проверьте, не конфигурируются ли параметры сетевых портов в других файлах, например в /etc/sysctl.d/, /lib/sysctl.d/, и других.

  3. Использование Unit-файлов systemd:
    Сервис caddy может быть настроен так, чтобы изменять настройки sysctl при его запуске. Для этого отредактируйте соответствующий Unit-файл или создайте соответствующий файл drop-in для systemd.

    Создайте папку для настройки:

    sudo mkdir -p /etc/systemd/system/caddy.service.d

    И файл с конфигурацией:

    sudo nano /etc/systemd/system/caddy.service.d/override.conf

    Добавьте следующее:

    [Service]
    ExecStartPre=/sbin/sysctl -w net.ipv4.ip_unprivileged_port_start=443

    Перезапустите demon systemd и затем Caddy:

    sudo systemctl daemon-reload
    sudo systemctl restart caddy
  4. Скрипт init.d или systemd Service Timer:
    В качестве альтернативы, можно создать скрипт, который автоматически изменяет данный параметр в момент загрузки системы. Скрипт может быть помещен в /etc/rc.local (если этот файл управляет startup-скриптами) или быть частью кастомного systemd-временного задания (Timer).

  5. Проверка запуска Caddy:
    Убедитесь, что Caddy запускается с нужными правами и привилегиями для использования порта 443. Возможно, потребуется запускать его от специального пользователя или группы с правами на использование привилегированных портов.

Эти шаги должны обеспечить надлежащее сохранение и применение вашей настройки net.ipv4.ip_unprivileged_port_start=443 при рестарте системы. Использование systemd и настройка конфигурационных файлов позволит автоматизировать этот процесс и избежать проблем в будущем.

Оцените материал
Добавить комментарий

Капча загружается...