ACL规划
当前新建的ACL表默认是黑名单模式的,默认的出站和入站规则均为优先级最低的“全部放行”规则。在实际场景中,ACL由于其无状态的性质,设定非常复杂。下文将介绍ACL规则设定的要点,以及如何根据场景设置恰当的ACL规则。
ACL规则建议
设定ACL规则的时候,建议如下:
- ACL规则是无状态的,因此设定规则的时候需要同时考虑出站、入站两个方向。
- 云知芯 ACL产品默认生效级别为单一云资源。例如添加一条目标地址为0.0.0.0/0的拒绝规则,那么主机与同子网内的主机的互通也会受到影响。因此需要额外添加一条针对同子网网段的放行规则。
- 同一张ACL表中的不同入站规则,不允许优先级相同。同一张ACL表中的不同出站规则,不允许优先级相同。
- ACL规则设置,需要尽可能的靠近流量的源头。例如禁止某个IP对子网资源的访问,在出站规则和入站规则做黑名单都可以达到效果。应当设置入站规则,拒绝流量流入。
- 云知芯公共服务网段需要放行,否则将无法正常使用ULB、yum源、NTP、内网DNS等服务。公共服务网段参见公共服务网段。
ACL案例
下面通过一个例子来介绍如何配置ACL规则。
网络架构如下图:
在这个例子中,需要为云知芯广州Region的子网A配置ACL规则。子网A需要满足如下规则:
- 子网A的网段为10.10.1.0/24,子网内部全部互通。
- 子网A的22端口,能且仅能被子网B访问,子网B的网段为192.168.1.0/24.
- 子网A的云资源仅能访问8.8.8.8的53端口(UDP/TCP),不能访问其他外网地址。
- 子网A的云资源 80端口能被任意地址访问。
- 子网A可以正常使用云知芯提供的公共服务。
其余流量均禁止。
那么子网A的ACL规则应当配置如下:
- 入站规则
优先级 | 目标端口 | 协议 | 源地址 | 策略 | 描述 |
---|---|---|---|---|---|
1 | 22 | TCP | 192.168.1.0/24 | 接受 | 允许子网B访问22端口 |
2 | 80 | TCP | 0.0.0.0/0 | 接受 | 允许任意地址访问80端口 |
3 | 32768-65535 | TCP | 8.8.8.8/32 | 接受 | 允许子网内主机访问8.8.8.8的TCP 53端口,临时端口放行。 |
4 | 32768-65535 | UDP | 8.8.8.8/32 | 接受 | 允许子网内主机访问8.8.8.8的UDP 53端口,临时端口放行。 |
5 | ALL | ALL | 10.10.1.0/24 | 接受 | 允许子网内主机互通 |
6 | ALL | ALL | 10.13.192.0/18 | 接受 | 允许公共服务的访问 |
30000 | ALL | ALL | 0.0.0.0/0 | 拒绝 | 默认拒绝所有流量 |
* | ALL | ALL | 0.0.0.0/0 | 接受 | 默认放行所有流量,创建时系统自动添加。优先级最低。 |
- 出站规则
优先级 | 目标端口 | 协议 | 目标地址 | 策略 | 描述 |
---|---|---|---|---|---|
1 | 53 | TCP | 8.8.8.8/32 | 接受 | 允许子网内主机访问8.8.8.8的TCP53端口 |
2 | 53 | UDP | 8.8.8.8/32 | 接受 | 允许子网内主机访问8.8.8.8的UDP53端口 |
3 | 32768-65535 | TCP | 0.0.0.0/0 | 接受 | 允许80端口对外访问,允许22端口对子网B访问,临时端口放行。 |
4 | ALL | ALL | 10.10.1.0/24 | 接受 | 允许子网内主机互通 |
5 | ALL | ALL | 10.13.192.0/18 | 接受 | 允许公共服务的访问 |
30000 | ALL | ALL | ALL | 拒绝 | 默认拒绝所有流量 |
* | ALL | ALL | 0.0.0.0/0 | 接受 | 默认放行所有流量,创建时系统自动添加。优先级最低。 |
ACL规则分析
以“子网A的22端口,能且仅能被子网B访问,子网B的网段为192.168.1.0/24.”这条规则为例,分析方式如下:
其中临时端口是TCP、UDP等协议在主动发起连接的时候,从预设的范围内可以分配到的端口。该端口仅在连接生命周期内处于被占用状态。该范围可以通过以下方式获得:
cat /proc/sys/net/ipv4/ip_local_port_range
可以利用下列命令进行临时端口范围的修改:
echo "32768 65535" > /proc/sys/net/ipv4/ip_local_port_range
本文使用“32768-65535”指代临时端口。 如上,分别标记出子网A的22端口被子网B访问的四元组。那么在默认规则为拒绝的条件下,需要添加如下入站和出站规则:
- 入站规则
优先级 | 目标端口 | 协议 | 源地址 | 行为 | 描述 |
---|---|---|---|---|---|
1 | 22 | TCP | 192.168.1.0/24 | 接受 | 允许子网B访问22端口 |
- 出站规则
优先级 | 目标端口 | 协议 | 目标地址 | 行为 | 描述 |
---|---|---|---|---|---|
1 | 32768-65535 | TCP | 192.168.1.0/24 | 接受 | 允许子网B访问22端口 |
其余场景,也可以通过列举入向、出向的五元组分析得到。