美文网首页
ovn acl功能

ovn acl功能

作者: 分享放大价值 | 来源:发表于2021-05-23 19:37 被阅读0次

本文介绍一下ovn的acl功能,用来设置访问控制列表,并且只能应用在逻辑交换机或者port group上,不能应用在逻辑路由器上。

acl table

nbdb中提供了acl table,如下所示,其中每行都表示一条acl规则,参数包括优先级,方向,匹配域和动作。

image.png
priority
指定acl规则的优先级,值越大优先级越高。如果匹配到的多条规则优先级相同,最终哪条规则生效是不确定的。
direction
指定报文的方向,只有两个值: from-lport和to-lport。前者表示入方向,后者表示出方向,这是在逻辑交换机的角度来说的。
match
用来指定报文匹配域,具体的表达式规则可参考sbdb中 logical_flow table的match列。注意:类型为localnet和router的端口上不能应用acl规则。
action
对于匹配到规则的报文的处理,目前支持四个值:allow, allow-related, drop, or reject。
allow: 表示允许报文通过;
allow-related:表示允许报文和其响应报文通过;
drop:静默丢弃报文;
reject:丢弃报文,并回复报文。对于tcp协议报文,回复rst,对于其他类型的报文,回复ICMPv4/ICMPv6 unreachable。

比如在逻辑交换机ls1上添加如下规则,发往ls1-vm1端口的ip报文被丢弃,优先级为0。

ovn-nbctl acl-add ls1 to-lport 0 'outport == "ls1-vm1" && ip' drop

address_set table

address_set table的每行指定了地址集合,包含ipv4,ipv6和mac地址,可以用在acl规则的match字段。


image.png

如下两个例子

//创建ip地址集合
ovn-nbctl create Address_Set name=ipset addresses='10.10.20.2 10.10.10.3'
//创建mac地址集合
ovn-nbctl create Address_Set name=macset addresses='"02:00:00:00:00:01","02:00:00:00:00:02"'

应用acl

只在acl table添加规则是没用的,还需要将其应用到逻辑交换机或者port group。如下Logical_Switch和Port_Group table的acls列指定了acl规则的集合。

Logical_Switch TABLE 
  acls                          set of ACLs

Port_Group TABLE
  acls                          set of ACLs

实验

在前一篇文章ovn 配置逻辑路由器实现三层转发的基础上,做个小实验,拓扑如下

image.png
ls1和ls2两个网段的四个vm是可以互相通信的,现在要做的是在ls1上的vm1 namespace中启动一个web服务器,默认情况下,其他三个vm都可以访问这个web服务,然后通过添加acl规则限制,仅让ls2上的两个vm可以访问。

首先在ls1的vm1上启动web服务

rm /tmp/www -rf
mkdir -p /tmp/www
echo "i am vm1" > /tmp/www/index.html
cd /tmp/www
ip netns exec vm1 python -m SimpleHTTPServer 8000

先验证默认情况下,其余三个vm都可以访问web服务

root@master:~# ip netns exec vm2 curl 10.10.10.2:8000
i am vm1
root@node1:~# ip netns exec vm1 curl 10.10.10.2:8000
i am vm1
root@node1:~# ip netns exec vm2 curl 10.10.10.2:8000
i am vm1

root@master:/tmp/www# ip netns exec vm1 python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...
10.10.10.3 - - [23/May/2021 19:32:42] "GET / HTTP/1.1" 200 -
10.10.20.2 - - [23/May/2021 19:32:49] "GET / HTTP/1.1" 200 -
10.10.20.3 - - [23/May/2021 19:32:53] "GET / HTTP/1.1" 200 -

然后在中心节点上添加两条优先级最低的规则,从ls1-vm1发出和发往ls1-vm1的ip报文默认drop

ovn-nbctl acl-add ls1 to-lport 0 'outport == "ls1-vm1" && ip' drop
ovn-nbctl acl-add ls1 from-lport 0 'inport == "ls1-vm1" && ip' drop

再次在其他vm上访问,结果是失败的。

下面添加另一个acl规则,使ls2上的两个vm可以访问web服务。

//只允许 10.10.20.0/24 网段的ip访问8000服务
ovn-nbctl acl-add ls1 to-lport 1000 'outport == "ls1-vm1" && ip4.src == 10.10.20.0/24 && tcp.dst == 8000' allow-related

查看结果,只有ls2上的vm1和vm2可以访问web服务

root@master:~# ip netns exec vm2 curl 10.10.10.2:8000
 ... ->不通
root@node1:~# ip netns exec vm1 curl 10.10.10.2:8000
i am vm1
root@node1:~# ip netns exec vm2 curl 10.10.10.2:8000
i am vm1

参考

https://blog.csdn.net/zhengmx100/article/details/75431393

相关文章

  • ovn acl功能

    本文介绍一下ovn的acl功能,用来设置访问控制列表,并且只能应用在逻辑交换机或者port group上,不能应用...

  • OVN系列8 -- ACL & 安全组

    ACL & 安全组 同大部分使用OVS实现安全组功能的方案一样,OVN通过流表实现进出VM流量的有状态的ACL控制...

  • ovn 3个选举 两种超时

    cms <----> ovn-nbdb <----> ovn-northd <----> ovn-sbdb <-...

  • ovn load balance功能

    本文实验ovn的load balance功能,在nbdb数据库中提供了Load_Balancer表,用来设置相关参...

  • OVN实践

    1.OVN简介 OVN是基于OVS开发的,相比于OVS提供了更多的功能和控制灵活性,在性能层面也有所提升,同时也兼...

  • CCNA-30、ACL

    ACL(Access Control List) 访问控制列表 ·ACL的两大主要功能·流量控制·匹配感兴趣流量...

  • ovn-northd 源码分析

    ovn-northd是ovn中的核心后台进程,主要负责将ovn的高层配置转换成供ovn-controller后台进...

  • ovn隧道类型

    本文简单介绍下ovn支持的隧道类型,具体可参考ovn-architecture[https://www.ovn.o...

  • ovsdb数据库修改

    目前我们维护的ovsdb数据库主要是ovn nb和sb:ovn-nb.ovsschema ,ovn-sb.ovss...

  • ovn 架构介绍

    ovn是什么就不多说了,网上有很多介绍的文章。这里主要是学习下ovn的架构,并通过实践认识一下ovn。ovn代码最...

网友评论

      本文标题:ovn acl功能

      本文链接:https://www.haomeiwen.com/subject/karzjltx.html