nwfilter目的是讓管理員在host上控制vm的每塊網卡。同一個nwfilter規則可以被不同vm重複使用,也可以每個VM創建不同的filter規則。
它的默認路徑在/etc/libvirt/nwfilter/
默認libvirt安裝好後會加載一些規則,用戶也可以自定義規則。
自定義的規則編寫好後使用下面命令加載
virsh nwfilter-define 規則文件路徑
取消規則(有虛擬機使用時無法取消)
virsh nwfilter-undefine 規則名
查看已經加載的nwfilter規則
virsh nwfilter-list
編譯規則:
virsh nwfilter-edit windows (編輯保存後就立刻生效)
也可以vi 直接編輯規則的xml的文件,編輯完成後nwfilter-define後生效
規則鏈:
nwfilter支持的網卡模式bridge和network
所有規則鏈都入口都爲頂部的root在xml中這樣寫
<filter name='clean-traffic' chain='root'>
規則鏈支持的協議:root,stp,mac,vlan,ipv4,ipv6,arp,rarp
鏈名前綴以協議開頭,xml示例如:
<filter name='' chain='arp' priority=''> <uuid></uuid> <rule action='' direction='' priority=''> <mac match='' srcmacaddr="/> </rule> <rule action='' direction='' priority=''> <arp match='' arpsrcmacaddr=''/> </rule> </filter>
優先級priority的值越小優先級越高,優先級範圍-1000 到 1000,優先級越小(越高)的就越靠前。
默認優先級:
stp -810
mac -800
vlan -750
ipv4 -700
ipv6 -600
arp -500
rarp -400
規則變量
目前保留兩個變量MAC和IP,可以指定規則匹配具體的MAC和IP,同一個規則可以有多個IP
<devices>
<interface type='bridge'>
<mac address='00:16:3e:5d:c7:9e'/>
<filterref filter='clean-traffic'>
<parameter name='IP' value='10.0.0.1'/>
<parameter name='IP' value='10.0.0.2'/>
<parameter name='IP' value='10.0.0.3'/>
</filterref>
</interface>
</devices>
如果沒有指定IP,libvirt會自動偵測IP,建議明確指定,會少一些開銷。
value可以接收的值有具體的IP,any,dhcp,none
規則匹配處理
規則指定匹配到相關數據包後東站使用action來制定,每條規則都必須由action,action的動作如下:
drop 丟棄數據包
reject 返回ICMP包並拒絕
accept 允許
return 返回規則鏈上級繼續下一項檢查
continue 直接繼續下一條規則的檢測
規則的數據包走向,關鍵字direction,該關鍵字必須
下面的in和out是針對vm來說,in是進入vm的數據包,out是從VM裏面出來的數據包
in 進入
out 流出
inout 進和出
每條規則可以指定優先級priority關鍵字,如果不指定默認爲500
規則可以定義匹配的state關鍵字match
可選項statematch可以選的值0或者false