Viết trực tiếp vào / Proc so với sử dụng sysctl -w


8

Tôi đang cố gắng cấu hình kernel của máy chủ Linux của mình để nó không hoạt động như bộ định tuyến, để bảo mật hơn. Vấn đề là không chuyển tiếp các gói.

Tôi đã tìm thấy điều này:

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

và điều này:

sysctl -w net.ipv4.ip_forward=0  

Rõ ràng cả hai đều làm điều tương tự, nhưng tôi không chắc sự khác biệt thực sự giữa chúng là gì. Tôi cũng muốn làm cho các hiệu ứng vĩnh viễn nếu có thể.


Không có sự khác biệt, sysctl thực hiện giống như lệnh echo. Chỉ cần dễ dàng hơn.
vonbrand

Câu trả lời:


6

Không có sự khác biệt. Các sysctllệnh trên Linux viết trực tiếp vào tập tin trong /proc/sys. Đoạn mã này từ mã nguồn để sysctlchứng minh điều đó:

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

    /* ... */
}

Nếu bạn muốn một cái gì đó vĩnh viễn, bạn cần chỉnh sửa /etc/sysctl.confhoặc thêm một tệp trong /etc/sysctl.d(ví dụ /etc/sysctl.d/99-disable-ip-forwarding.conf) có chứa:

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

Bằng cách này, một số các bản phân phối đã vô hiệu hóa này một cách rõ ràng theo mặc định. Ví dụ: RHEL <= 6 hoặc Fedora <= 15 có điều này trong /etc/sysctl.conf:

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

Fedora 20 không vô hiệu hóa nó nữa. Không có cài đặt chuyển tiếp trong /etc/sysctl.conf, /etc/sysctl.d/hoặc /usr/lib/sysctl.d/.


Không phải luôn luôn chuyển tiếp tắt theo mặc định?
dùng1686

Đó cũng là những gì tôi nghĩ, nhưng bạn không bao giờ biết những phân phối hoang dã nào có thể ở ngoài đó :-)
Cristian Ciupitu

@grawity thực sự, nó cũng bị tắt theo phân phối của tôi. Bây giờ tôi đang bối rối, có cấu hình kernel nào khác để tránh hệ thống của chúng tôi chạy như bộ định tuyến không?
John M.

@ John: những gì cần tránh nếu mặc định bị tắt?
Cristian Ciupitu

@CristianCiupitu, tôi không biết, tôi mới biết về Linux và tất cả những gì tôi muốn vô hiệu hóa máy chủ của mình khỏi runnig như bộ định tuyến. Vì vậy, tôi không chắc lệnh này có đủ không :)
John M.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.