osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

ProxmoxVE_PVE防火墙_本机静态路由_本机端口转发_修改默认8006端口_旁路由VM

转载注明来源: 本文链接 来自osnosn的博客,写于 2021-03-29.

以下内容基于 pve 版本为 6.2-4

PVE 自身设置静态路由

  • 按 Debian 的设置来,pve 的网卡没有使用 NetworkManager 管理。
    所以直接修改 /etc/network/interfaces,记得 up/down 要对应。
    在对应的 iface vmbr0 下面,添加静态路由,使用 ip route 指令。

修改默认8006端口

PVE 添加 nat 的 redirect 规则

  • pve 的管理 web 口 8006,是写死在 perl5 的模块中。
    /usr/share/perl5/PVE/Service/pveproxy.pm
    如果要修改的话,要改好多个地方。包括防火墙,issue,……,太复杂。
  • 所以还是考虑用 iptables 的 redirect 规则。重定向443端口。
  • pve 的防火墙,只能添加 filter 表的过滤规则。无法添加 nat 表的规则。
    为了不破坏 pve 的防火墙,就不另外安装第三方防火墙服务了。
  • pve 默认没有 /etc/rc.local,但支持 rc.local。只是需要自己创建这个文件,并chmod +x
    rc.local 是在 network 启动后执行的,应该可以写 nat规则。我没有测试 rc.local
  • 还可以写在 /etc/network/interfaces 中,用 iptables 命令。
    下面的示例,用的是这个方法。 2021-03测试可用。

示例

示例,是针对 Node自身的IP,地址为 10.123.123.99 ,找到对应的 iface 配置段。
例子中,添加静态路由重定向 8006 端口。
实际使用,自己找到对应的 IP的 iface 配置段,然后按需添加 两组 up/down 命令。

iface vmbr0 inet static
   address 10.123.123.99/24
   gateway 10.123.123.2
    ... #省略
   up ip route add 10.0.0.0/8 via 10.123.123.1 proto static
   down ip route del 10.0.0.0/8 via 10.123.123.1
   post-up iptables -t nat -A PREROUTING -p tcp -d 10.123.123.99/32 --dport 443 -j REDIRECT --to-ports 8006
   post-down iptables -t nat -D PREROUTING -p tcp -d 10.123.123.99/32 --dport 443 -j REDIRECT --to-ports 8006

修改 interfacces 文件后,重启就会生效。
如果不想马上重启,手工执行一下添加的命令即可。
pve的防火墙开/关,不影响 nat 表中的内容。

开启 PVE 的防火墙

  • 2021-04

打开Node防火墙

  • 集群 Datacenter -> Firewall -> Options -> Firewall 的值改为 Yes。 这个是防火墙总开关。
    防火墙总开关打开后,节点就不能被 ping 通了。这是正常现象。如需被ping,自行在节点添加一条允许规则即可。
  • 如果防火墙总开关为 No,下面的就不用做了。同时 Node 和 VM 的防火墙也无法使用。
  • 假设 Node 节点的 IP是 10.123.123.99。
    节点 Node -> Firewall -> Options -> Firewall 的值改为 Yes
    • 节点 Node -> Firewall 中添加规则,允许全网访问,允许从any地址到自身10.123.123.99,端口TCP/8006.
      因为,pve 缺省的防火墙规则,只允许 10.123.123.0/24 网段访问 8006.
    • 或者,不添加规则,去改变管理的地址集ipset来实现。
      缺省只允许 local network 访问 8006 和 22。其实是因为缺省的管理ipset仅包含本地局域网。
      可以参考文档man pve-firewall中的说明,修改这个管理的ipset(地址集)。
      在文件/etc/pve/firewall/cluster.fw中,添加[IPSET management],写入允许的ip和IP范围。
      还能设置黑名单ipset [IPSET blacklist],不过黑名单是全局的,连vm都不能访问。
  • 另外还有个地方限制管理的ip。(是应用层级的,非防火墙层级)。
    文档man pveproxy中的说明,创建 /etc/default/pveproxy
    写入配置项目 ALLOW_FROM=, DENY_FROM=, POLICY=
  • VM 客户机的防火墙,按需使用。这里的规则只影响对应的 VM,不影响 pve 本身。

PVE 节点中有个旁路由器的 vm

  • PVE的防火墙总开关No,这个旁路由工作正常。没有问题。
  • PVE的防火墙总开关Yes.
    • pve同节点中其他vm使用这个旁路由,没问题。
    • pve节点外部的实体机,使用这个旁路由,可以ping通目标,但无法浏览目标网站。
      通过查看 iptables 的规则。发现是 filter 表 FORWARD 链中第一条规则,
      -A PVEFW-FORWARD -m conntrack --ctstate INVALID -j DROP限制的。
      这条规则在模块/usr/share/perl5/PVE/Firewall.pm中,受配置项nf_conntrack_allow_invalid控制。
    • 解决办法,在/etc/pve/nodes/<nodename>/host.fw中的[OPTIONS]中,
      加入nf_conntrack_allow_invalid: 1
      然后,重新开关一次pve的防火墙总开关即可。
  • Proxmox VE中虚拟机非对等路由出站数据包被丢的情况分析

PVE 节点中有个主路由器,且有ipv6

  • VM 客户机(路由器)的防火墙如果Yes
    • 需要在/etc/pve/firewall/<VMID>.fw中,[OPTIONS]中,加入radv: 1。允许路由广播
      在 node的 ip6tables规则的 FORWARD中,对应 vm虚拟机网卡的 OUT中,-p ipv6-icmp -m icmp6 --icmpv6-type 134 -j DROP 变为ACCEPT
      iptables 规则没变化。
  • pve Node节点 和 vm客户机 两个地方的 Firewal->Options 中 NDP 都要检查,设置为 Yes。允许网络邻居发现协议。

重新配置pve防火墙

  • 2023-03
  • pve-7.1.9 , pve-7.2.11
  • pve 使用的是 iptables-legacy,没有使用 iptables-nft 或 nft。

开启Node的防火墙

  • 集群 Datacenter -> Firewall -> Options -> Firewall 的值改为 Yes。 这个是防火墙总开关。
    Node 的防火墙是 No,关闭。
    系统虽然生成了一堆filter规则。但全是accept。Node节点的访问没有限制。
    在 Datacenter -> Firewall 中,添加规则,没有效果。

  • 集群 Datacenter 的防火墙 No关闭
    节点 Node 的防火墙 Yes打开
    后台查看,规则为空 (没有规则)。
    防火墙不生效。Node节点的访问没有限制。

  • 如果是远程设置,打开两个防火墙开关之前,先添加一个规则,允许你所处的网段的访问。假设你在 192.168.33.x。

    • 添加规则,只需填写 Directtion: in, Action: ACCEPT, Interface: vmbr0, Source: 192.168.33.0/24, 勾上Enable, 即可。
      其中 Interface 可以留空。也可以填入对应的Linux Bridge名称,限定规则的作用范围。
      Interface 只能写一个,如果要限定多个网卡,用多条规则解决。
    • 最终会对应一条 -A INPUT -s 192.168.33.0/24 -j ACCEPT
    • 使用 "Security Group" 或 "IPSet" 也很方便,见下面的 其他

    集群 Datacenter -> Firewall -> Options -> Firewall 的值改为 Yes 打开。
    节点 Node -> Firewall -> Options -> Firewall 的值改为 Yes 打开。
    后台看到,iptables 启用了 PVEFW-HOST-IN 和 PVEFW-HOST-OUT 两个规则链。
    效果就是,禁止了非本地网段,对 Node节点的访问。对 vm虚拟机/客户机的访问无影响。
    应该检查一下,pve自己识别的"本地网段"是否正确。见下面的 其他。以防未达到预期
    在 Datacenter -> Firewall 中,添加规则。与在 Node -> Firewall 中,添加规则,都有效,效果相同。规则插入在iptables的相同位置。
    只是这些规则,被分别保存在/etc/pve/firewall/cluster.fw/etc/pve/nodes/<nodename>/host.fw文件中。

  • /etc/pve/nodes/<nodename>/host.fw中的[OPTIONS]中,加入nf_conntrack_allow_invalid: 1。如有vm旁路由。

  • 检查 pve Node节点的 Firewal->Options 中 NDP 设置为 Yes。允许网络邻居发现协议。如有支持ipv6的vm主路由。

  • 如果 vm客户机的防火墙也打开,要加radv: 1配置,允许路由广播 (见前文)。vm防火墙不开,不用配。

  • 重新开关一下 DataCenter 或者是 Node 的防火墙。让其生效。

  • vm客户机的防火墙开关是 "No",关闭时。
    vm客户机的访问不受限制。

  • vm客户机的防火墙开关是 "Yes",打开时。
    还需要设置对应 vm, "Hardware" 中,对应网卡的设置,勾上 "Firewall"。
    才真正打开了 vm的对应网卡的防火墙。

其他

  • 修改 Datacenter -> Firewall -> Options 中的值,
    或者 Datacenter -> Firewall 添加规则。
    /etc/pve/firewall/cluster.fw自动生成了。
  • 修改 Node -> Firewall -> Options 中的值,
    或者 Node -> Firewall 添加规则。
    /etc/pve/nodes/<nodename>/host.fw自动生成了。
  • 在没有添加合适的 ACCEPT规则之前,不要把 DataCenter 和 Node 的 Firewall 都设为 "Yes"。
    会导致远程连接失败。无法继续配置。除非你在本地网段。
  • SMURFS filter 是对 smurf 攻击 的过滤。一种利用广播地址,做流量放大的攻击方式。
  • Datacenter -> Firewall -> Options -> Input Policy 默认是 DROP。然后自己添加 ACCEPT规则。
    这是针对 Node节点 防火墙的设置。
    可以修改 Policy 为 ACCEPT,然后在规则中添加 DROP规则,阻止某些网段的访问。
  • pve防火墙 INPUT链中,最前面有-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    所以不会影响pve自身,去访问外部的IP
  • pve-7.2 似乎已经预装了 nft 命令行工具。如果没有,也可以用apt install nftables自己装。
    用 nft 编写防火墙规则,并不影响 pve控制台的防火墙。
  • IPSet
    在 Datacenter -> Firewall -> IPSet 可以添加 "地址集",其实就是一堆 IP 和 IP网段 的集合。
    "地址集" 不支持 ip-range。只支持 IP,CIDR,例如 "192.168.2.22", "192.168.2.0/24"。
    可以多个防火墙中使用。同 一堆地址 就不用反复配置了。
    在 Node的防火墙,或 vm的防火墙,或 Security Group,添加规则时,Source地址/Destination地址 就可以选择"地址集"。
    在系统中,地址集就是一个命名的ipset,名称通常是 PVEFW-xxxxx。
    如果某条规则使用了,对应规则就是-m set --match-set PVEFW-xxxxx src/dst
    IPSet 如果改名,会导致所有使用了这个IPSet的规则都失效
  • Security Group
    在 Datacenter -> Firewall -> Security Group 可以添加 "规则组",其实就是 一套规则 的集合。
    一条规则中,"source地址" 支持 多个ip (逗号隔开),ip-range,例如 "192.168.1.50-192.168.1.100"。
    可以多个防火墙中使用。同 一套规则 就不用反复配置了。
    在 Node的防火墙,或者 vm的防火墙 规则配置中,点击 "Insert Security Group",就可以加入这套规则。
    在iptables中,Group就是一个自定义chain,名称为 GROUP-xxxxx。
    如果 Node的防火墙添加了这个Group,就会在对应位置插入这个chain,-j GROUP-xxxxx
    Security Group 如果改名,会导致所有添加了这个Group的防火墙丢失这个Group
    建议 Security Group 中的规则,不要使用 IPSet 内容,防止 IPSet改名导致的规则失效
  • pve 自动生成的 本地网络 错误,见【PVE Firewall
    用命令pve-firewall localnet检查,是否正确。有时会出现类似 10.0.0.0/8这样的值。
    在 Datacenter -> Firewall -> Alias 中添加 local_network覆盖系统的自动生成。

转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/14590683.html 来自osnosn的博客.

posted on 2021-03-29 00:35  osnosn  阅读(8606)  评论(0编辑  收藏  举报