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