为Proxmox VE PVE启用防火墙

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

 

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

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

https://foxi.buduanwang.vip/virtualization/pve/508.html/

评论

  1. M
    Windows Chrome 99.0.4844.82
    2年前
    2022-3-27 19:27:07

    好文!通俗易懂,解释了一些在说明文档里表述较为复杂的问题

  2. jack adam
    Windows Chrome 89.0.4389.114
    3年前
    2021-4-03 22:03:05

    意思就是所有开放的端口,都需要开启三次?数据中心、主机、虚拟机?
    我这里很奇怪的是,我在三个防火墙规则,都设置为空,即允许所有协议所有端口,所有源,所有目的,所有网卡。
    一旦打开数据中心的防火墙,就无法ping通虚拟机了。

    • jack adam
      Windows Chrome 89.0.4389.114
      3年前
      2021-4-03 22:38:44

      继续尝试,虚拟机网卡打开防火墙,虚拟机防火墙输入规则drop,虚拟机防火墙关,仍然无法通信。

    • 佛西 博主
      Windows Edge 89.0.774.68
      3年前
      2021-4-04 21:36:27

      记得要开启防火墙。启用规则

  3. 匿名
    Windows Chrome 70.0.3538.25
    4年前
    2020-9-22 16:39:02

    想咨询下您 ,在 web上配置具体的 vm虚拟机时,虚拟机网卡旁边的firewall可选项 代表什么呢?

    • 匿名
      Windows Chrome 85.0.4183.121
      4年前
      2020-9-24 23:02:46

      代表着启用 或者没启用

  4. dater
    Windows Chrome 78.0.3904.108
    4年前
    2020-8-30 17:06:34

    您好,照您的步骤成功开启防火墙,但开启防护墙后,会导致ceph异常出现 slow ops,关闭数据中心防火墙即可恢复正常,in方向的 udp全部放行的,tcp 该开的端口也全开了,宏 ceph和 ntp也加上了,还是异常,甚是费解,希望你能够拨冗解答,可付费请教,谢谢您

    • 佛西 博主
      Windows Chrome 84.0.4147.135
      4年前
      2020-8-31 20:53:25

      我对ceph并不是特别了解,下面是我的愚见。开启数据中心防火墙,放行ceph所需端口。开启每个主机防火墙,放行ceph端口。对于tcp来说,在主机上可以使用netstat -tunlp来查看监听的端口,再放行对应端口。
      如果您这边必须开启防火墙,并且ceph集群是一条独立的线路,可以把连接ceph的网卡给完全放行。
      如果以上都不能解决,可以看ceph日志,找出到底是哪个环节出错,然后再把它解决了。希望能帮到您。建议在实验环境 实验成功了,再应用于生产环境


Deprecated: preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /www/wwwroot/foxi.buduanwang.vip_80/wwwroot/wp-content/themes/argon-theme-master/functions.php on line 1383

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇