Escrevendo diretamente para / proc versus usando sysctl -w

8

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

Eu encontrei isto:

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

e isso:

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.

    
por John M. 24.03.2013 / 11:47

1 resposta

5

Não há diferença. O comando sysctl no Linux grava diretamente em arquivos em /proc/sys . Este snippet do código fonte de sysctl comprova:

/*
 * 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, precisa editar /etc/sysctl.conf ou 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á desabilitam isso explicitamente por padrão. Por exemplo, RHEL < = 6 ou Fedora < = 15 têm isso em /etc/sysctl.conf :

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

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

    
por 24.03.2013 / 12:20