Прямое обращение к /proc против использования sysctl -w

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

Я пытаюсь настроить ядро моего сервера Linux так, чтобы он не выполнял роль маршрутизатора для большей безопасности. Суть в том, чтобы не пересылать пакеты.

Я нашел это:

echo 0 > /proc/sys/net/ipv4/ip_forward  

и это:

sysctl -w net.ipv4.ip_forward=0  

Очевидно, что оба делают одно и то же, но я не уверен, в чем на самом деле разница между ними. Я также хотел бы сделать эффект постоянным, если это возможно.

Разницы нет. Команда sysctl в Linux записывает напрямую в файлы в /proc/sys. Этот фрагмент исходного кода для sysctl это подтверждает:

/*
 * Запись настройки sysctl
 */
static int WriteSetting(const char *setting)
{
    /* ... */

    /* используется для открытия файла */
    tmpname = xmalloc(equals - name + 1 + strlen(PROC_PATH));
    strcpy(tmpname, PROC_PATH);
    strncat(tmpname, name, (int) (equals - name));
    tmpname[equals - name + strlen(PROC_PATH)] = 0;
    /* заменяем . на / */
    slashdot(tmpname + strlen(PROC_PATH), '.', "https://superuser.com/");

    /* ... */

    fp = fopen(tmpname, "w");
    /* проверка на ошибки ... */
    rc = fprintf(fp, "%s\n", value);

    /* ... */
}

Если вы хотите что-то постоянное, вам нужно отредактировать /etc/sysctl.conf или добавить файл в /etc/sysctl.d (например, /etc/sysctl.d/99-disable-ip-forwarding.conf), содержащий:

# Отключить пересылку IP-пакетов
net.ipv4.ip_forward = 0

Кстати, некоторые дистрибутивы уже отключают это явно по умолчанию. Например, RHEL <= 6 или Fedora <= 15 имеют это в /etc/sysctl.conf:

# Управляет пересылкой IP-пакетов
net.ipv4.ip_forward = 0

Fedora 20 больше не отключает это явно. Нет настройки пересылки в /etc/sysctl.conf, /etc/sysctl.d/ или /usr/lib/sysctl.d/.

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

Директория /proc в Linux представляет собой виртуальную файловую систему, которая предоставляет интерфейс к состоянию ядра и его параметрам. Файл /proc/sys/net/ipv4/ip_forward — это специфичный файл, управляющий параметром, отвечающим за маршрутизацию IP-пакетов. Настройки можно изменить различными способами, включая перезапись этого файла непосредственно или использование команды sysctl.

Сравнение методов

  1. Запись напрямую в /proc:

    echo 0 > /proc/sys/net/ipv4/ip_forward

    Этот метод меняет значение непосредственно в системном файле. Он мгновенно применяет изменения, но они будут потеряны при перезагрузке системы.

  2. Использование sysctl:

    sysctl -w net.ipv4.ip_forward=0

    Команда sysctl также изменяет значение, но она делает это через интерфейс, предоставляемый для управления параметрами ядра. С точки зрения функциональности разницы нет; sysctl фактически выполняет запись в файл /proc/sys/net/ipv4/ip_forward за кулисами. Однако использование sysctl предпочтительнее, поскольку:

    • Оно более читаемо и интуитивно понятно.
    • Предоставляет дополнительные возможности для управления и получения информации о текущих параметрах ядра.

Постоянное изменение

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

# Отключить маршрутизацию IP-пакетов
net.ipv4.ip_forward = 0

После изменения конфигурационных файлов, чтобы применить новые настройки без перезагрузки системы, выполните команду:

sysctl -p /etc/sysctl.conf

Или:

sysctl --system

Дополнительные замечания

Некоторые дистрибутивы Linux по умолчанию отключают маршрутизацию. Например, в RHEL ≤ 6 и Fedora ≤ 15 значение net.ipv4.ip_forward уже установлено на 0 в файле /etc/sysctl.conf. Начиная с Fedora 20, данная конфигурация больше неявно указана.

Таким образом, использование sysctl для изменения конфигурации является более предпочтительным подходом с учетом читаемости и консистентности, а также для достижения постоянных изменений через корректное редактирование системных конфигурационных файлов.

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

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