Vô hiệu hóa rp_filter trên một giao diện


9

Tôi có Máy chủ Ubuntu 16.04 hoạt động như một bộ định tuyến với nhiều giao diện (Vlan). Theo mặc định, rp_filter(lọc đường dẫn ngược) được bật cho tất cả các giao diện. Tôi muốn giữ nó như vậy, nhưng tạo một ngoại lệ cho chính xác một giao diện. (Các gói từ giao diện này phải được phép có địa chỉ IP nguồn không tương ứng với bất kỳ địa chỉ đích định tuyến nào của giao diện này.)

Giả sử giao diện này có tên ens20.4, thiết bị vlan-raw-của nó ens20và giao diện đích (để kiểm tra luồng gói) được đặt tên ens20.2(mặc dù nó nên hoạt động cho bất kỳ giao diện đích nào).

Tôi đã cố gắng chỉ thiết lập rp_filtertài sản ens20.4, nhưng không thành công:

echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter

Vì vậy, để thử nghiệm, tôi cũng đã vô hiệu hóa rp_filtercho thiết bị vlan-raw-interface và giao diện đích thử nghiệm:

echo 0 > /proc/sys/net/ipv4/conf/ens20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.2/rp_filter

Vẫn không thành công, các gói có địa chỉ IP nguồn "giả mạo" vẫn bị loại bỏ. Chỉ khi tôi vô hiệu hóa rp_filtercho tất cả các giao diện, các gói mới vượt qua:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

Tuy nhiên, tôi vẫn muốn giữ bộ lọc đường dẫn ngược cho tất cả các giao diện khác - tôi còn thiếu gì?


Một số thử nghiệm khác cho thấy tính năng lọc đường dẫn ngược được kích hoạt nếu rp_filter được đặt thành 1 cho tất cả hoặc giao diện gửi đến. Vẫn đang tìm kiếm một câu trả lời dứt khoát hoặc tài liệu tham khảo tài liệu, mà cho đến nay tôi không thể tìm thấy.
Cybran

Câu trả lời:


12

Thông tin đó: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.9#n1090

Lưu ý câu cuối cùng sẽ giải thích những nỗ lực của bạn:

Giá trị tối đa từ conf / {all, interface} / rp_filter được sử dụng khi thực hiện xác thực nguồn trên {interface}.

Vì vậy, điều này sẽ làm việc:

for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > "$i"
done
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter

Bây giờ max (conf / {all, ske20.4} / rp_filter == 0: không xác thực nguồn. Chỉ cần kiểm tra kỹ xem các giao diện khác có còn được bảo vệ không.

Bạn cũng có thể kiểm tra rpf "lỏng" với giá trị 2. Trong trường hợp gói thường được định tuyến bởi một giao diện khác, điều đó sẽ tốt hơn là không có xác nhận.


2
Cảm ơn bạn, điều đó giải thích nó rất tốt! Cảm ơn đặc biệt về đề xuất rpf "lỏng lẻo", đây thực sự là lựa chọn tốt hơn cho thiết lập của tôi. Cũng làm cho không cần thiết phải đặt tất cả / rp_filter thành 0, điều này được hoan nghênh nhất.
Cybran
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.