Schreiben direkt in / proc versus mit sysctl -w

8

Ich versuche, den Kernel meines Linux-Servers so zu konfigurieren, dass er aus Sicherheitsgründen nicht als Router fungiert. Es geht nicht darum, Pakete weiterzuleiten.

Ich habe folgendes gefunden:

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

und das:

sysctl -w net.ipv4.ip_forward=0  

Natürlich machen beide dasselbe, aber ich bin mir nicht sicher, was der wirkliche Unterschied zwischen ihnen ist. Ich möchte die Effekte auch möglichst dauerhaft machen.

John M.
quelle
Kein Unterschied, sysctl macht dasselbe wie der Echo-Befehl. Einfach einfacher.
vonbrand

Antworten:

6

Es gibt keinen Unterschied. Der sysctlBefehl unter Linux schreibt direkt in Dateien in /proc/sys. Dieser Ausschnitt aus dem Quellcode sysctlbeweist es:

/*
 * 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);

    /* ... */
}

Wenn Sie etwas Dauerhaftes möchten, müssen Sie /etc/sysctl.confeine Datei unter /etc/sysctl.d(z. B. /etc/sysctl.d/99-disable-ip-forwarding.conf) bearbeiten oder hinzufügen , die Folgendes enthält:

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

Übrigens deaktivieren einige Distributionen dies bereits explizit standardmäßig. Zum Beispiel haben RHEL <= 6 oder Fedora <= 15 dies in /etc/sysctl.conf:

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

Fedora 20 deaktiviert es nicht mehr explizit. Es ist nicht die Weiterleitung Einstellung in /etc/sysctl.conf, /etc/sysctl.d/oder /usr/lib/sysctl.d/.

Cristian Ciupitu
quelle
Ist die Weiterleitung nicht immer standardmäßig deaktiviert?
user1686
Das denke ich auch, aber man weiß nie, welche wilden Distributionen da draußen sein könnten :-)
Cristian Ciupitu
@grawity in der Tat, es ist standardmäßig auch in meiner Distribution deaktiviert. Ich bin jetzt etwas verwirrt. Gibt es eine andere Kernelkonfiguration, um zu vermeiden, dass unser System als Router ausgeführt wird?
John M.
@JohnM.: Was ist zu vermeiden, wenn die Standardeinstellung deaktiviert ist?
Cristian Ciupitu
@CristianCiupitu, ich weiß nicht, ich bin neu in Linux und alles, was ich möchte, ist, dass mein Server als Router ausgeführt wird. Ich bin mir also nicht sicher, ob dieser Befehl ausreicht :)
John M.