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 nftables và bả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
và ĐẦ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 eth0
và eth1
.
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ỡ.