Menulis langsung ke / proc versus menggunakan sysctl -w

8

Saya mencoba mengkonfigurasi kernel dari server Linux saya sehingga tidak akan bertindak sebagai router, untuk keamanan lebih. Intinya bukan untuk meneruskan paket.

Saya telah menemukan ini:

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

dan ini:

sysctl -w net.ipv4.ip_forward=0  

Jelas keduanya melakukan hal yang sama, tetapi saya tidak yakin apa perbedaan nyata di antara mereka. Saya juga ingin membuat efek permanen jika memungkinkan.

John M.
sumber
Tidak ada perbedaan, sysctl melakukan hal yang sama dengan perintah echo. Lebih mudah.
vonbrand

Jawaban:

6

Tidak ada perbedaan. The sysctlperintah pada Linux menulis langsung ke file dalam /proc/sys. Cuplikan ini dari kode sumber untuk sysctlmembuktikannya:

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

    /* ... */
}

Jika Anda menginginkan sesuatu yang permanen, Anda perlu mengedit /etc/sysctl.confatau menambahkan file di bawah /etc/sysctl.d(misalnya /etc/sysctl.d/99-disable-ip-forwarding.conf) yang berisi:

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

By the way, beberapa distribusi sudah menonaktifkan ini secara eksplisit secara default. Misalnya RHEL <= 6 atau Fedora <= 15 memilikinya di /etc/sysctl.conf:

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

Fedora 20 tidak menonaktifkannya secara eksplisit lagi. Tidak ada pengaturan penerusan /etc/sysctl.conf, /etc/sysctl.d/atau /usr/lib/sysctl.d/.

Cristian Ciupitu
sumber
Bukankah penerusan selalu mati secara default?
user1686
Itulah yang saya pikirkan juga, tetapi Anda tidak pernah tahu distribusi liar apa yang mungkin ada di sana :-)
Cristian Ciupitu
@ kegembiraan memang, secara default dinonaktifkan dalam distribusi saya juga. Saya agak bingung sekarang, apakah ada konfigurasi kernel lain untuk menghindari sistem kami berjalan sebagai router?
John M.
@JohnM .: apa yang harus dihindari jika default dinonaktifkan?
Cristian Ciupitu
@CristianCiupitu, saya tidak tahu, saya baru mengenal Linux dan saya ingin menonaktifkan server saya dari runnig sebagai router. Jadi saya tidak yakin apakah perintah ini cukup :)
John M.