Tôi thiết lập một cây cầu br0
"gắn" với hai giao diện:
eth0
, giao diện vật lý của tôi được kết nối với mạng LAN thực,vnet0
, giao diện ảo KVM (được kết nối với Windows VM).
Và tôi có quy tắc tường lửa duy nhất này trong chuỗi chuyển tiếp:
iptables -A FORWARD -j REJECT
Bây giờ, ping duy nhất đang hoạt động là từ VM đến máy chủ.
Các br0
giao diện sở hữu địa chỉ IP của máy chủ của tôi. eth0
và vnet0
không "sở hữu" bất kỳ IP nào, theo quan điểm của máy chủ lưu trữ. Windows VM có cấu hình IP tĩnh.
Nếu thay đổi iptables
quy tắc của tôi thành ACCEPT
(hoặc thậm chí sử dụng hạn chế hơn iptables -A FORWARD -o br0 -j ACCEPT
), mọi thứ đều hoạt động tốt! (tức là tôi có thể ping bất kỳ máy LAN nào từ VM và ngược lại cũng vậy).
Tất cả các tùy chọn kernel chuyển tiếp IP bị vô hiệu hóa (như net.ipv4.ip_forward = 0
).
Vậy, làm thế nào để tường lửa bộ lọc mạng có thể chặn thứ gì đó thậm chí không được kích hoạt?
Hơn nữa, lưu lượng VM - LAN chỉ nên ngụ ý eth0
và vnet0
. Tuy nhiên, có vẻ như cho phép lưu lượng truy cập FORWARD với -o br0
"công trình" (mặc dù tôi đã không kiểm tra rất cẩn thận).
sysctl -a | grep bridge-nf
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-filter-vlan-tagged = 0
net.bridge.bridge-nf-filter-pppoe-tagged = 0