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示例如:
优先级priority的值越小优先级越高,优先级范围-1000 到 1000,优先级越小(越高)的就越靠前。
默认优先级:stp -810mac -800vlan -750ipv4 -700ipv6 -600arp -500rarp -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