Điểm:2

Chặn lưu lượng truy cập đến/từ máy chủ từ một phía của cầu

lá cờ in

Nếu tôi có hai giao diện ethernet eth0 và eth1. Chúng được bắc cầu (br0). Máy chủ chạy cầu nối có thể giao tiếp với mạng bằng cách sử dụng bất kỳ eth0 hoặc eth1 nào tùy thuộc vào mạng được kết nối.

Bây giờ đến câu hỏi:

Làm cách nào để ngăn máy chủ giao tiếp với mạng thông qua eth1?

Những gì tôi muốn thực hiện:

eth0 <-> br0: Được chấp nhận.
eth1 <-> br0: Bị từ chối.
eth0 <-> eth1: Được chấp nhận.

Trước khi nói rằng điều này là không thể và không phù hợp với mô hình OSI, bạn cần kiểm tra những điều sau: br_netfilter (mô-đun hạt nhân), net.bridge.bridge-nf-call-iptables và tường lửa trong suốt: https://www.debian.org/doc/manuals/securing-debian-manual/bridge-fw.en.html

Tôi đã lọc các gói dựa trên lớp 3 trong cầu nối ( eth0 <-> eth1 ). Việc còn lại phải làm là ngăn không cho tường lửa tự giao tiếp với mạng ở phía bên trái của tường lửa.

Giải pháp nftables được mô tả trong một trong các nhận xét là tuyệt vời và đó là cách để thực hiện sau này nhưng ngay bây giờ tôi cần một bản sửa lỗi nhanh để hoạt động cho đến khi tôi nâng cấp nền tảng và chuyển đổi ứng dụng sang sử dụng nftables.

Các giải pháp có thể chấp nhận được cho câu hỏi này dựa trên iptables (tốt nhất là) hoặc ebtables (tôi cần điều tra vấn đề này, nhưng hiện tại đây là cách nhanh hơn nftables để giải quyết vấn đề này).

Tom Yan avatar
lá cờ in
Bạn có thể sử dụng iptables và nftables cùng lúc. Sẽ không có vấn đề gì khi bạn chỉ sử dụng bảng cầu nối với bảng sau. (Nhưng nó có thể là một vấn đề nếu bạn vì lý do nào đó cần gỡ cài đặt các công cụ không gian người dùng nftables.)
mlom avatar
lá cờ in
@TomYam Hệ điều hành hiện không hỗ trợ nftables (không hỗ trợ kernel và không có công cụ userspace). Điều đó sẽ thay đổi nhưng ngay bây giờ trong thời gian ngắn, tôi không muốn cập nhật/cấu hình lại HĐH. Nó là một hệ thống nhúng với một hệ điều hành tối thiểu.
Điểm:0
lá cờ cl
A.B

Bức tường lửa

Người ta có thể sử dụng các quy tắc tường lửa ở cấp độ cầu nối Ethernet để thực hiện các hạn chế của OP.

Cầu nối Linux có một cổng "tự" đặc biệt với tên của cầu nối. Toàn bộ cầu nối tham gia chuyển tiếp các khung tại L2 giữa các cổng (giao diện được đặt là cầu nối) nhưng cổng cầu nối tự tham gia vào việc định tuyến các gói tại L3 giống như các giao diện khác. So sánh điều này với một công tắc được quản lý đơn giản: nó có các cổng, nhưng cũng có thể được truy cập cho mục đích quản lý qua IP: các gói IP như vậy có thể truy cập từ bất kỳ cổng nào (vẫn ở dạng khung Ethernet) nhưng sau đó được gửi đến chính công tắc đó thay vì chuyển tiếp đến một cổng khác.

Đối với khung tường lửa Netfilter được sử dụng bởi nftablesbảng ebtables, điều này được dịch bằng cách nhìn thấy lưu lượng truy cập giữa cổng cầu và cổng cầu trong bộ lọc về phía trước móc (bộ lọc/chuỗi FORWARD cho bảng ebtables). Lưu lượng truy cập từ cổng tự đến cổng khác là móc đầu ra bộ lọc (chuỗi bộ lọc/OUTPUT) và lưu lượng truy cập từ một cổng đến cổng tự cầu là móc đầu vào bộ lọc (bộ lọc/chuỗi INPUT). sơ đồ này mô tả nó trong phần Lớp liên kết (hộp màu xanh lam ở trường màu xanh lam phía dưới).

Vì vậy, ở đây lưu lượng truy cập để chặn là giữa eth1 và giao diện tự (tức là chặn quá trình xử lý tiếp theo đối với ngăn xếp định tuyến) và ngược lại.

Tôi sẽ cho rằng chỉ có một cây cầu ở đây. Bây giờ các công cụ này đã được trình bày, cần đầu tư nhiều hơn để sử dụng chúng đúng cách, đặc biệt trong trường hợp có nhiều cầu nối. Dù sao thì các lệnh bên dưới sẽ luôn hoạt động bình thường vì eth1 có thể là cổng của chỉ một cây cầu tại một thời điểm: tại đây anh trai.

sử dụng bảng ebtables:

ebtables -A INPUT -i eth1 -j DROP
ebtables -A OUTPUT -o eth1 -j DROP

không có đề cập đến anh trai: nó được đại diện bởi ĐẦU VÀOĐẦU RA.

Vì các giá trị mặc định khác nhau vẫn chấp nhận lưu lượng truy cập, eth0 sẽ không bị chặn với anh trai, cũng như lưu lượng truy cập giữa eth0eth1.

Sử dụng (đủ gần đây để tránh lỗi cú pháp) nftables: nó giống với bản soạn sẵn ban đầu để thêm:

nft thêm bảng cầu mytable

nft add chain bridge mytable myinput '{ type filter hook input priority filter; chính sách chấp nhận; }'
nft add chain bridge mytable myoutput '{ type filter hook input priority filter; chính sách chấp nhận; }'

nft thêm cầu quy tắc mytable myinput iif eth1 drop
nft add rule bridge mytable myoutput oif eth1 drop

Ghi chú

iptables không được sử dụng ở lớp Ethernet (L2), nhưng ở lớp IP (L3) nên không phải là công cụ thích hợp cho việc này. Có thể cho rằng đó cũng là một tính năng đặc biệt gọi là bộ lọc mạng cầu sẽ chuyển đổi các khung Ethernet của loại IPv4 để đẩy các gói IP nhân tạo sang iptables (vẫn trong đường dẫn cầu nối) để chúng có thể được xử lý và sau đó sẽ chuyển đổi lại các gói đó thành khung Ethernet để xử lý thêm bằng cách bảng ebtables. Nó sẽ cho phép sử dụng iptables để thực hiện lọc như vậy nếu một người theo dõi và hiểu chính xác cách xử lý các hộp màu xanh lá cây (cấp độ mạng: gói) trong trường màu xanh bên dưới (Lớp liên kết: Ethernet) trong sơ đồ trước , nhưng rất có thể sẽ dẫn đến các hiệu ứng không mong muốn bổ sung. Không sử dụng tính năng này (cũng không thử nghiệm bất cứ điều gì trên hệ thống đã chạy Docker) trước khi hiểu những gì có thể phá vỡ.

Điểm:0
lá cờ it

Tôi xin lỗi nhưng câu hỏi cần được giải thích thêm vì nó không có ý nghĩa vào lúc này.

Bằng cách nối eth0 và eth1 với br0, bạn đã tạo một bộ chuyển mạch ethernet 2 cổng.

Những gì bạn muốn thực hiện:

eth0 <-> br0: Được chấp nhận.
eth1 <-> br0: Bị từ chối.
eth0 <-> eth1: Được chấp nhận.

sẽ có thể nếu bạn xóa eth1 khỏi br0 và cho phép chuyển tiếp gói trong kernel cho eth0 và eth1.

iptables xử lý địa chỉ IP - tức là lớp 3 (mạng) trong mô hình OSI - do đó không thể sử dụng được trong trường hợp này.

Bạn đang nói về việc chuyển đổi khung so với lớp 2 (liên kết) trong mô hình OSI - do đó bạn cần tham khảo ebtables để thực hiện bất kỳ bộ lọc nâng cao nào.

Liên kết để bạn tham khảo:

https://linux.die.net/man/8/ebtables

Có thể sử dụng ebtables để lọc lưu lượng theo địa chỉ MAC trên giao diện ethernet đơn giản mà không cần bắc cầu không?

Tom Yan avatar
lá cờ in
Không, OP hoàn toàn hợp lệ và có thể được thực hiện với nftables (bảng cầu nối) hoặc ebtables. Điều mà OP không muốn là "đầu vào" L2 từ eth1 nhưng cho phép "chuyển tiếp" L2. `cho phép chuyển tiếp gói trong kernel cho eth0 và eth1` và bạn không yêu cầu ai đó chuyển sang L3.
mlom avatar
lá cờ in
Bạn có thể muốn đọc tùy chọn kernel: net.bridge.bridge-nf-call-iptables trước khi trả lời tùy chọn này.
Roman Spiak avatar
lá cờ it
@Tom Yan - vui lòng biết rằng câu trả lời của tôi không yêu cầu bất kỳ ai tham gia L3. Hơn nữa, nếu ai đó tạo cầu nối Linux - họ nên mong đợi nó hoạt động giống như một công tắc thích hợp. Điều này có nghĩa là trong cấu hình mặc định, tất cả các giao diện đang vận chuyển các khung và miền va chạm phân đoạn mico. Nếu bạn muốn ngăn các máy chủ được kết nối qua ETH1 giao tiếp với phần còn lại của cầu nối - chỉ cần không thêm nó vào cầu nối...
Tom Yan avatar
lá cờ in
`phần còn lại của cây cầu` dường như bạn thậm chí không thấy những gì OP muốn đạt được: `br0` không đề cập đến điều đó

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.