为Proxmox VE PVE启用防火墙

一:防火墙简介

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不行

更多例子,请见 pve的防火墙配置例子

更多教程,请看pve教程汇总

Author: 佛西

1 thought on “为Proxmox VE PVE启用防火墙

Leave a Reply

Your email address will not be published.