เขียนโดยตรงไปยัง / proc กับการใช้ sysctl -w


8

ฉันพยายามกำหนดค่าเคอร์เนลของเซิร์ฟเวอร์ Linux ของฉันเพื่อที่จะไม่ทำหน้าที่เป็นเราเตอร์เพื่อความปลอดภัยมากขึ้น จุดนี้ไม่ได้ส่งต่อแพ็กเก็ต

ฉันได้พบสิ่งนี้:

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

และนี่:

sysctl -w net.ipv4.ip_forward=0  

เห็นได้ชัดว่าทั้งสองทำสิ่งเดียวกัน แต่ฉันไม่แน่ใจว่าอะไรคือความแตกต่างที่แท้จริงระหว่างพวกเขา ฉันต้องการทำเอฟเฟกต์ถาวรถ้าเป็นไปได้


ไม่มีความแตกต่าง sysctl ทำเช่นเดียวกันกับคำสั่ง echo ง่ายขึ้น
vonbrand

คำตอบ:


6

ไม่มีความแตกต่าง คำสั่งบนลินุกซ์เขียนโดยตรงไปยังไฟล์ในsysctl /proc/sysตัวอย่างนี้จากซอร์สโค้ดสำหรับsysctlพิสูจน์:

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

    /* ... */
}

หากคุณต้องการบางสิ่งบางอย่างถาวรคุณต้องแก้ไข/etc/sysctl.confหรือเพิ่มไฟล์ภายใต้/etc/sysctl.d(เช่น/etc/sysctl.d/99-disable-ip-forwarding.conf) ที่มี:

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

โดยวิธีการกระจายบางอย่างแล้วปิดการใช้งานนี้อย่างชัดเจนโดยค่าเริ่มต้น ตัวอย่างเช่น RHEL <= 6 หรือ Fedora <= 15 มีสิ่งนี้ใน/etc/sysctl.conf:

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

Fedora 20 ไม่ได้ปิดการใช้งานอย่างชัดเจนอีกต่อไป มีไม่ได้ส่งต่อการตั้งค่าใน/etc/sysctl.conf, หรือ/etc/sysctl.d//usr/lib/sysctl.d/


การส่งต่อไม่ใช่ค่าเริ่มต้นเสมอหรือไม่
user1686

นั่นคือสิ่งที่ฉันคิดเช่นกัน แต่คุณไม่เคยรู้เลยว่าการกระจายตัวของป่าอาจจะอยู่ที่นั่น :-)
Cristian Ciupitu

@grawity แน่นอนมันเป็นค่าเริ่มต้นในการกระจายของฉันเช่นกัน ฉันสับสนแล้วตอนนี้มีการกำหนดค่าเคอร์เนลอื่น ๆ เพื่อหลีกเลี่ยงระบบของเราทำงานเป็นเราเตอร์หรือไม่?
John M.

@JohnM: มีอะไรที่ต้องหลีกเลี่ยงหากปิดการใช้งานค่าเริ่มต้น
Cristian Ciupitu

@CristianCiupitu ฉันไม่รู้ฉันใหม่กับ Linux และทั้งหมดที่ฉันต้องการปิดการใช้งานเซิร์ฟเวอร์ของฉันจาก runnig เป็นเราเตอร์ ดังนั้นผมไม่แน่ใจว่าคำสั่งนี้จะเพียงพอ :)
จอห์นเอ็ม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.