防火壁
外部からの侵入に条件を設けて、特定の条件なら内部への通行を許可する仕組み. 門番. 関所.
RHEL9での既定は下記のように ssh 、 cockpit 、 dhcpv6-client に向けたリクエストは許可しています.
そとと繋がっていれば世界中に ssh,cockpit,dhcpv6-client サービスを晒しているわけです.
別に晒していても ssh ならその後に認証が必要でそれを通らないと内部にアクセスできません.
[root@rockylinux9 ~]# firewall-cmd --get-active-zones
public
interfaces: ens192
[root@rockylinux9 ~]# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@rockylinux9 ~]#
マシンでサービスを提供する場合、それに応じてportやserviceの穴を作ることになります.
既定でsshサービスは初めから用意されています.
ここで「〇〇からのsshのみを許可したい」と思って
「firewall-cmd --add-source=192.168.0.3 --zone=public --permanent ; firewall-cmd --reload」
としても効きません.
この場合はまず ssh サービスを抜いて、rich ruleで「〇〇からのsshのみを許可したい」を組み込みます
firewall-cmd --remove-service=ssh --zone=public --permanent
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.0.3 port protocol=tcp port=22 accept" --zone=public --permanent
firewall-cmd --reload
とします.
「services:」欄からsshを除いたのは、これが「OR」条件として扱われるので、せっかくrichでこのホストとこのポートとしてもORで逃れてしまうので.
確認
[root@rockylinux9 ~]# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: cockpit dhcpv6-client
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.0.3" port port="22" protocol="tcp" accept
[root@rockylinux9 ~]#
主にport番号 39000 を起点に連続10個のportを使います. 45000とかを起点にしても大丈夫です
ちなみにポート番号の上限は 65535 です.
すべてのマシンからのcryoSPARC webサービスにアクセスさせるなら
firewall-cmd --add-port=39000-39009/tcp --zone=public --permanent
firewall-cmd --reload
とします.
確認
[root@rockylinux9 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: cockpit dhcpv6-client
ports: 39000-39009/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.0.3" port port="22" protocol="tcp" accept
[root@rockylinux9 ~]#
これも特定のマシンからの接続のみ許可するとなれば
firewall-cmd --remove-port=39000-39009/tcp --zone=public --permanent
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.0.0/25 port protocol=tcp port=39000-39009 accept" --zone=public --permanent
firewall-cmd --reload
として.
確認
[root@rockylinux9 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: cockpit dhcpv6-client
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.0.3" port port="22" protocol="tcp" accept
rule family="ipv4" source address="192.168.0.0/25" port port="39000-39009" protocol="tcp" accept
[root@rockylinux9 ~]#
192.168.0.0/25なので 192.168.0.1から 192.168.0.63 のマシンは 39000-39009のtcpにアクセス可能となります
source address部分はsubnet maskの計算を参照しながら決めれる.
192.168.0.000/24 なら 192.168.0.001 - 192.168.0.254 のipアドレスがokとなる
192.168.0.000/25 なら 192.168.0.001 - 192.168.0.126
192.168.0.127/25 なら 192.168.0.128 - 192.168.0.254
192.168.0.000/27 なら 192.168.0.001 - 192.168.0.030
192.168.0.032/27 なら 192.168.0.033 - 192.168.0.062
192.168.0.064/27 なら 192.168.0.065 - 192.168.0.094
192.168.0.096/27 なら 192.168.0.097 - 192.168.0.126
192.168.0.128/27 なら 192.168.0.129 - 192.168.0.158
192.168.0.160/27 なら 192.168.0.161 - 192.168.0.190
192.168.0.192/27 なら 192.168.0.193 - 192.168.0.222
192.168.0.224/27 なら 192.168.0.225 - 192.168.0.254