現状確認
以前の記事でFedoraServerゾーンに所属するIFのパケットを通すためにPublicゾーンのSourcesに通したいサブネットを追加していましたが、結局それってPublicゾーンにみんなが所属しただけでした。
で結局Publicゾーンにもサービスを追加しないと動かなくなったりしていました。
ちがう、そうじゃない(ヾノ・∀・`)ナイナイ
やりたいことは、こういった構成とゾーンの設定があって
FedoraServer (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: enp0s20f0u1 wlo1
sources:
services: cockpit dns kerberos samba ssh
ports: 8096/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public (active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: enp1s0
sources:
services:
ports: 8096/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
このお互いが完全に独立した状態のFirewall設定で、FedoraServerに所属するenp0s20f0u1,wlo1からpublicに所属するenp1s0を通ってインターネットにアクセスしたいわけです。
デフォルトゲートウェイはenp1s0に設定しています。
[ipv4]
address1=192.168.11.254/24
dns=127.0.0.1;
method=manual
gateway=192.168.11.1 # ここに書くと永続化する
$ ip route
default via 192.168.11.1 dev enp1s0 proto static metric 101
192.168.0.0/24 dev enp0s20f0u1 proto kernel scope link src 192.168.0.254 metric 100
192.168.1.0/24 dev wlo1 proto kernel scope link src 192.168.1.254 metric 600
192.168.11.0/24 dev enp1s0 proto kernel scope link src 192.168.11.254 metric 101
ホームルーターにはenp0s20f0u1とwlo1に向かうサブネットのときはenp1s0に向かうようWebインターフェイスで設定しています。
この状態でFirewalldを停止すれば快適に動きます。
逆に言うと、Firewalldを正しく設定しないとFedoraServerとpublicのゾーン間でパケットがfilterされてしまうのです。
転送ポリシーの追加
転送ポリシーというFirewalldの機能を使っていきます。
まず現状確認、すでになにかいますね。
$ sudo firewall-cmd --get-active-policies
allow-host-ipv6
ingress-zones: ANY
egress-zones: HOST
ingressがsrc、egressがdist側になるようです。
ここにFedoraServer_to_publicという新しいポリシー……にしたら名前を20文字以下にしろと怒られたので、internal_publicと短い名前で作っていきます。
# ポリシーの作成
$ sudo firewall-cmd --permanent --new-policy internal_public
$ sudo firewall-cmd --permanent --policy internal_public --add-ingress-zone FedoraServer
$ sudo firewall-cmd --permanent --policy internal_public --add-egress-zone public
$ sudo firewall-cmd --permanent --policy internal_public --set-target ACCEPT
# 反映
$ sudo firewall-cmd --reload
# 確認
$ sudo firewall-cmd --info-policy internal_public
internal_public (active)
priority: -1
target: ACCEPT
ingress-zones: FedoraServer
egress-zones: public
...
ingressからegressゾーンに向かう際のipフィルターがACCEPTに設定され、Zone間をパケットが通るようになりました。
これだけ!😊
