そういうのがいいブログ

SIerで働く30代サラリーマンSEがインフラエンジニアに憧れてLinux・クラウド・AWSの勉強をするブログ

Oracle Linux 8 のインストール手順(その⑤)firewall設定方法

Oracle Linux 8 のファイアウォールfirewallの設定方法を知りたい。
・具体的な手順を教えてほしい。

こういった疑問に答えます。

本記事の内容

  1. Oracle Linux 8 のインストール手順(その⑤)ファイアウォールfirewallの設定方法

この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。

こういった私が、解説していきます。

私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。

souiunogaii.hatenablog.com

Oracle Linux 8 のインストール手順(その⑤)ファイアウォールfirewallの設定方法

firewalldの管理コマンドはfirewall-cmdのあとにオプションをいろいろ付ける形になっています。

①:firewalldの現在の状態を確認

現在の動作状況を確認

firewall-cmd --state
[root@SV-IXION ~]# firewall-cmd --state
running

初期状態だと、runningと表示されました

デフォルトで割り当てられている「ゾーン」の確認

firewalldには、「ゾーン(zone)」という考え方があります。
いくつかのパケットフィルタのルールをまとめた雛形があらかじめ用意されている感じのものみたいです。

デフォルトで割り当てられているゾーンを確認します。

firewall-cmd --get-default-zone
[root@SV-IXION ~]# firewall-cmd --get-default-zone
public

Oracle Linux 8.3インストール後のデフォルトのゾーンはpublicでした。

publicゾーンの設定内容を確認

firewall-cmd --list-all
[root@SV-IXION ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

「services」のところを見ると、cockpitdhcpv6-clientsshが許可されているのがわかります。
(※cockpit はRHEL8系で新たに追加されたブラウザでサーバーを管理するための機能)

そのほかのゾーンすべての設定内容を確認

firewall-cmd --list-all-zones
[root@SV-IXION ~]# firewall-cmd --list-all-zones
block
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

dmz
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

drop
  target: DROP
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

external
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

home
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

internal
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

nm-shared
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcp dns ssh
  ports:
  protocols: icmp ipv6-icmp
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule priority="32767" reject

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

trusted
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

work
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Oracle Linux 8.3 インストール後の状態では、以下の10個のゾーンがありました。

ゾーン名 設定内容
block REJECT(受信はすべて拒否)、ICMPブロックは無し
dmz sshサービスのみ許可
drop DROP(すべて破棄)
external sshサービスのみ許可、マスカレードあり
home cockpit、dhcpv6-client、mdns、samba-client、sshサービスのみ許可
internal cockpit、dhcpv6-client、mdns、samba-client、sshサービスのみ許可
nm-shared dhcpdnssshサービスのみ許可
public (default) cockpit、dhcpv6-client、sshサービスのみ許可
trusted ACCEPT(すべて許可)
work cockpit、dhcpv6-client、sshサービスのみ許可

②:サーバ管理操作用の新しいゾーンを作成

もともと用意されている10個のゾーンに対して、フィルタルールの追加・削除をすることもできますが、
今回は「個別に接続元のIPアドレスを指定したルールを追加」したかったので、
新しくゾーンmangerzoneを作成して、そのゾーンに対して設定を追加することにしました。

新しいゾーン作成

--new-zoneオプションを使います。

firewall-cmd --new-zone=managerzone --permanent
[root@SV-IXION ~]# firewall-cmd --new-zone=managerzone --permanent
success

作成したゾーンに接続許可を与える

--set-targetオプションを使います。

firewall-cmd --zone=managerzone --set-target=ACCEPT --permanent
[root@SV-IXION ~]# firewall-cmd --zone=managerzone --set-target=ACCEPT --permanent
success

作成したゾーンにsshサービスを追加

--add-serviceオプションを使います。

firewall-cmd --zone=managerzone --add-service=ssh --permanent
[root@SV-IXION ~]# firewall-cmd --zone=managerzone --add-service=ssh --permanent
success

作成したゾーンに接続元IPアドレスを追加

--add-sourceオプションを使います。

firewall-cmd --zone=managerzone --add-source=●●●【IPアドレス】/24 --permanent
[root@SV-IXION ~]# firewall-cmd --zone=managerzone --add-source=192.168.1.101/24 --permanent
success

設定変更後の再読み込み

firewall-cmd --reload
[root@SV-IXION ~]# firewall-cmd --reload
success

現在アクティブなゾーンの確認

firewall-cmd --get-active-zones
[root@SV-IXION ~]# firewall-cmd --get-active-zones
managerzone
  sources: 192.168.1.101/24
public
  interfaces: ens192

③:publicゾーンからsshサービスの削除

管理操作用のmanagerzoneを作成してsshサービスを許可したので、
逆に、publicゾーンからはsshサービスを削除しておきます。
(これを残していると、他のすべてのIPアドレスからのssh接続を受け付けてしまうので)

sshサービスの削除

--remove-serviceオプションを使います。

firewall-cmd --remove-service=ssh --zone=public --permanent
[root@SV-IXION ~]# firewall-cmd --remove-service=ssh --zone=public --permanent
success

設定変更後の再読み込み

firewall-cmd --reload
[root@SV-IXION ~]# firewall-cmd --reload
success

変更後の確認

servicesのところから、sshが削除されているのがわかります。

firewall-cmd --list-all
[root@SV-IXION ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: cockpit dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

④:firewall-cmdコマンド使用時の注意事項

  • 管理コマンドfirewall-cmdでは、オプションの--zone ~を省略すると、publicゾーンが操作対象になります。
  • --permanentオプションをつけないと、次回のOS再起動時に設定がリセットされてしまいます。
  • --permanentオプションをつけて設定変更した後は、firewalld-cmd reloadで設定の再読み込みをすることで反映されます。