Escrevendo diretamente para / proc versus usando sysctl -w

8

Estou tentando configurar o kernel do meu servidor Linux para que ele não atue como roteador, para mais segurança. O objetivo não é encaminhar pacotes.

Eu encontrei isto:

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

e isto:

sysctl -w net.ipv4.ip_forward=0  

Obviamente, ambos fazem a mesma coisa, mas não tenho certeza qual é a diferença real entre eles. Eu também gostaria de tornar os efeitos permanentes, se possível.

John M.
fonte
Não há diferença, o sysctl faz o mesmo que o comando echo. Apenas mais fácil.
vonbrand

Respostas:

6

Não há diferença. O sysctlcomando no Linux grava diretamente nos arquivos /proc/sys. Este trecho do código fonte para sysctlprova:

/*
 * Write a sysctl setting
 */
static int WriteSetting(const char *setting)
{
    /* ... */

    /* used to open the file */
    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;
    /* change . to / */
    slashdot(tmpname + strlen(PROC_PATH), '.', '/');

    /* ... */

    fp = fopen(tmpname, "w");
    /* some error checking ... */
    rc = fprintf(fp, "%s\n", value);

    /* ... */
}

Se você quiser algo permanente, precisará editar /etc/sysctl.confou adicionar um arquivo em /etc/sysctl.d(por exemplo /etc/sysctl.d/99-disable-ip-forwarding.conf), contendo:

# Disable IP packet forwarding
net.ipv4.ip_forward = 0

A propósito, algumas distribuições já desativam isso explicitamente por padrão. Por exemplo, RHEL <= 6 ou Fedora <= 15 tem isso em /etc/sysctl.conf:

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

O Fedora 20 não o desativa mais explicitamente. Não há configuração de encaminhamento em /etc/sysctl.conf, /etc/sysctl.d/ou /usr/lib/sysctl.d/.

Cristian Ciupitu
fonte
O encaminhamento não está sempre desativado por padrão?
user1686
Isso é o que eu acho também, mas você nunca sabe o que distribuições selvagens pode estar lá fora :-)
Cristian Ciupitu
@ grrawity, de fato, está desativado por padrão na minha distribuição também. Estou meio confuso agora, existe alguma outra configuração do kernel para evitar que nosso sistema funcione como roteador?
John M.
@JohnM .: o que há para evitar se o padrão estiver desativado?
Cristian Ciupitu 24/03
@CristianCiupitu, eu não sei, eu sou novo no Linux e tudo o que eu quero desativar meu servidor de executar como roteador. Então, eu não tenho certeza se esse comando é :) suficiente
John M.