・Oracle Linux 8 のファイアウォールfirewallの設定方法を知りたい。
・具体的な手順を教えてほしい。
こういった疑問に答えます。
本記事の内容
この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。
こういった私が、解説していきます。
私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。
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」のところを見ると、cockpit
とdhcpv6-client
とssh
が許可されているのがわかります。
(※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 | dhcp、dns、sshサービスのみ許可 |
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
で設定の再読み込みをすることで反映されます。