安装docker会破坏防火墙功能。所以!要用防火墙,请卸载docker
一:防火墙简介
pve有3种防火墙:
1、面对数据中心的防火墙。处理流出流入数据中心的流量
2、面对虚拟化服务器的防火墙。处理主机的流量
3、面对vm的防火墙。处理vm流出流出的流量。
初次接触,可能很搞昏,这么多的防火墙,搞锤子,到底是哪个管哪个?
实际上,他们的是独立的。互不干预,但是又有联系。
当我们进入pve-webgui面板。会看到数据中心——节点——vm。这3个模块。
1.1 数据中心防火墙
数据中心,是由节点组成的一个集群。
可以说,数据中心防火墙,是专门处理集群流量的防火墙。
只有数据中心防火墙开启,才能开启集群内的防火墙,否则单独开启vm的防火墙是无效的。
1.2 主机防火墙
主机防火墙,只负责处理虚拟化服务器上的流量,比如一台服务器ip为192.168.1.2。
那么这个防火墙,只会关注192.168.1.2的流量。下面的虚拟机流量是独立开的。
这个防火墙的开关,不会影响vm的防火墙,所以要开启vm的防火墙,不必须开启这个防火墙,不同于数据中心防火墙
1.3 vm防火墙
这个不用介绍吧。
二: 防火墙配置文件
pve的防火墙配置文件在下面路径
#数据中心防火墙
/etc/pve/firewall/cluster.fw
#主机防火墙
/etc/pve/nodes/<nodename>/host.fw
#vm和lxc的防火墙
/etc/pve/firewall/<VMID>.fw
2.1 数据中心防火墙的配置文件
OPTIONS]
该小节用于设置整个集群的防火墙配置项。
ebtables: <boolean> (default = 1)
集群范围内启用 ebtables。
enable: <integer> (0 -N)
启用/禁用集群范围的防火墙。
log_ratelimit: [enable=]<1|0> [,burst=<integer>] [,rate=<rate>]
设置日志记录速度阀值。
burst=<integer> (0 – N) (default = 5)
将被记录的初始突发包。
enable=<boolean> (default = 1)
启用或禁用阀值
rate=<rate> (default = 1/second)
突发缓冲区重新填充频度。
policy_in: <ACCEPT | DROP | REJECT>
流入方向的防火墙策略。
policy_out: <ACCEPT | DROP | REJECT>
流出方向的防火墙策略。
[RULES]
该小节用于设置所有节点公共的防火墙策略。
[IPSET <name>]
整个集群范围内有效的 IP 集合定义。
[GROUP <name>]
整个集群范围内有效的组定义。
[ALIASES]
整个集群范围内有效的别名定义
对于web-gui来说,防火墙是能可视化编辑,对应【数据中心】——【防火墙】。
当然还是需要了解这个东西,毕竟可能在某些环境中,关闭了GUI,需要进终端手动编辑。
2.2 主机防火墙配置文件
[OPTIONS]
该小节用于设置当前主机的防火墙配置项。
enable: <boolean>
启用/禁用主机防火墙策略。
log_level_in: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
流入方向的防火墙日志级别。
log_level_out: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
流出方向的防火墙日志级别。
log_nf_conntrack: <boolean> (default = 0)
启用记录连接跟踪信息。
ndp: <boolean>
启用 NDP。
nf_conntrack_allow_invalid: <boolean> (default = 0)
在跟踪连接时允许记录不合法的包。
nf_conntrack_max: <integer> (32768 -N)
最大的跟踪连接数量。
nf_conntrack_tcp_timeout_established: <integer> (7875 -N)
反向连接建立超时时间。
nosmurfs: <boolean>
启用 SMURFS 过滤器。
smurf_log_level: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
SMURFS 过滤器日志级别。
tcp_flags_log_level: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
非法 TCP 标志过滤器日志级别。
tcpflags: <boolean>
启用非法 TCP 标志组合过滤器。
[RULES]
该小节用于设置当前主机的防火墙策略。
2.3 vm/lxc的防火墙配置文件
[OPTIONS]
该小节用于设置当前虚拟机或容器的防火墙配置项。
dhcp: <boolean>
启用 DHCP。
enable: <boolean>
启用/禁用防火墙策略。
ipfilter: <boolean>
启用默认 IP 地址过滤器。相当于为每个网卡接口增加一个空白的 ipfilter-net<id>地
址集合。该 IP 地址集合隐式包含了一些默认控制,例如限制 IPv6 链路本地地址为网
卡 MAC 生成的地址。对于容器,配置的 IP 地址将被隐式添加进去。
log_level_in: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
流入方向的防火墙日志级别。
log_level_out: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
流出方向的防火墙日志级别。
macfilter: <boolean>
启用/禁用 MAC 地址过滤器。
ndp: <boolean>
启用 NDP。
policy_in: <ACCEPT | DROP | REJECT>
流入方向的防火墙策略。
policy_out: <ACCEPT | DROP | REJECT>
流出方向的防火墙策略。
radv: <boolean>
允许发出路由通知。
[RULES]
该小节用于设置当前虚拟机或容器的防火墙策略。
[IPSET <name>]
IP 集合定义。
[ALIASES]
IP 地址别名定义。
看不懂,没关系!都是由GUI的
三:GUI里的防火墙
这部分好难写呀!
3.1 GUI防火墙2步走
GUI防火墙,总的来说,只有2个选项。
3.1.1 自定义防火墙规则
就是点击【防火墙】三个字,出现自定义防火墙界面。
这里重点介绍一下。点击【添加】,我们会出现下面这个界面
这里可以看到这些选项,因为是GUI特别好理解
【方向】:“in”指进入的流量,“out”出去的流量。
【启用】:勾选之后,才会启用这个防火墙规则。
【操作】:“accept”接受,“drop”丢弃,“reject”拒绝。
【宏】:是官方预定义的参数,比如“https”就是tcp/443,不用再选协议和端口了。
【接口】:是vm的网络接口,具体是网络接口,可以查看vm-【硬件】选项里的“网络设备”,后面接了个net1,这个就是网络接口。
【协议】:自选协议
【源】:源地址,可以是一个ip,也可以是ip集合,也可以是一段网络,用英文逗号分开。
【源端口】:源地址的端口, 端口范围例如800:900,开放800-900端口
【目标】:目标
【目标端口】:目标端口,端口范围例如800:900,开放800-900端口
【备注】:就是备注而已!
注意!如果上述选项,为空,就代表所有。协议为空,就代表所有协议
例1,我要给VM开放一个任何人都可连接的22-ssh端口。那么这里ssh是基于TCP的,所以就需要开通一个TCP/22的端口。在想一下。这个22端口,是所有人都可以连接的,于是源和端口都应该为空,如下图
防火墙启用之后,会有一段生效的时间,大概是几秒钟吧。
例2:我要给一个主机访问vm的所有网络权限。给一个主机,单个网络权限。
在192.168.4.221的主机上,只能ping,无法ssh
在192.168.4.2主机上,能ssh。
有其他例子,稍后会给大家展现。
3.1.2 官方预设防火墙规则
如下图所述,我简单介绍下。
在这些选项中,可以设定vm/主机/防火墙的开关。
输入/输出策略。是默认策略。这里需要强调一下。
如果,默认输入是accept,那么自定义防火墙,输入必须是reject和drop,才会生效。因为已经默认了可以输入!所以,再去自定义输入规则是无效的。
同理!如果默认是drop,你得设置accept或者reject才行,不然设置是多余的!
3.2 IPSET和别名
ip分组能够简化管理员的管理。
3.2.1 什么是ipset和别名
在pve里,有两个ip群组概念。
1、别名:别名是一个ip段的集合。例如192.168.1.1/24 我可以设置名称为local
2、IPSET:这是一个别名的集合。
3.2.2 区别
一个别名只能对应一个ip段。
可以看到只能填写ip/CIDR
注意的是,不管是别名还是ipset,名称都需要是英文,否则创建别名/ipset会提示错误,备注可以使用中文 。
ipset是别名中的集合。
例如有两个ip别名
local别名:192.168.1.0/24
local本地别名:10.13.14.0/24
创建ipset的时候,可选别名或者自定义ip段
3.2.3 例子
ipset和集合具体应用可以看下图
在设置ipset和别名之后,可以选择ipset或者别名。相当方便,能够显著的减少防火墙规则数目。
四 开启防火墙步骤
1、在数据中心的防火墙,开启tcp/8006端口
2、在主机防火墙,开启tcp/22,8006端口
3、在面板里面,开启数据中心防火墙、开启主机防火墙、开启VM的防火墙。
PVE官方文档说的是,开启防火墙之后,默认开放8006/22端口,但是我有一次失败了,所以,还是先开启端口,再开总的防火墙吧,免得出意外了。
之后,就可以按照上面的介绍,按照需求来了。
在PVE的角色权限中,只有VMADMIN/VMnetwork权限才能使用防火墙,vmuser不行