Oracle Linux8.1のファイアウォール firewalld の設定手順メモ
RHEL6系まではパケットフィルタ機能としては、「iptables」が使われていたのですが、
RHEL7系以降のバージョンでは、あらたに「firewalld」が使われています。
本記事では、firewalldの設定の確認、デフォルトからの変更方法、の手順をコマンド付きで紹介します。
firewalldの現在の状態を確認
firewalldの管理コマンドは「firewall-cmd」のあとにオプションをいろいろ付ける形になっています。
このコマンド自体、RHEL7系からあらたに導入されたものだそうです。
まずは現在の動作状況を確認します
Oracle Linux8.1インストール後の初期状態だと、「running」と表示されました# firewall-cmd --state
[root@SV-PLUTO ~]# firewall-cmd --state running
デフォルトで割り当てられている「ゾーン」の確認
firewalldには、「ゾーン(zone)」という考え方があります。
いくつかのパケットフィルタのルールをまとめた雛形があらかじめ用意されている感じのものみたいです。
デフォルトで割り当てられているゾーンを確認します。
Oracle Linux8.1インストール後のデフォルトのゾーンは「public」でした。
# firewall-cmd --get-default-zone
[root@SV-PLUTO ~]# firewall-cmd --get-default-zone public
publicゾーンの設定内容を確認します。
「services」のところを見ると、「cockpit」と「dhcpv6-client」と「ssh」が許可されているのがわかります。
(※「cockpit」はRHEL8系で新たに追加されたブラウザでサーバーを管理するための機能)
# firewall-cmd --list-all
[root@SV-PLUTO ~]# 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:
そのほかのゾーンすべての設定内容を確認します
CentOS8.0インストール後の状態では、以下の9個のゾーンがありました。
ゾーン名 | 設定内容 |
---|---|
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サービスのみ許可 |
public (default) | cockpit、dhcpv6-client、sshサービスのみ許可 |
trusted | ACCEPT(すべて許可) |
work | cockpit、dhcpv6-client、sshサービスのみ許可 |
# firewall-cmd --list-all-zones
[root@SV-PLUTO ~]# 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: 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:
管理操作用の新しいゾーンを作成
もともと用意されている9個のゾーンに対して、フィルタルールの追加・削除をすることもできますが、
今回は「個別に接続元のIPアドレスを指定したルールを追加」したかったので、新しくゾーン「mangerzone」を作成して、そのゾーンに対して設定を追加することにしました。
新しいゾーン作成
「--new-zone」オプションを使います。
# firewall-cmd --new-zone=managerzone --permanent
[root@SV-PLUTO ~]# firewall-cmd --new-zone=managerzone --permanent success
作成したゾーンに接続許可を与える
「--set-target」オプションを使います。
# firewall-cmd --zone=managerzone --set-target=ACCEPT --permanent
[root@SV-PLUTO ~]# firewall-cmd --zone=managerzone --set-target=ACCEPT --permanent success
作成したゾーンにsshサービスを追加
「--add-service」オプションを使います。
# firewall-cmd --zone=managerzone --add-service=ssh --permanent
[root@SV-PLUTO ~]# firewall-cmd --zone=managerzone --add-service=ssh --permanent success
作成したゾーンに接続元IPアドレスを追加
「--add-source」オプションを使います。
# firewall-cmd --zone=managerzone --add-source=192.168.1.101/24 --permanent
[root@SV-PLUTO ~]# firewall-cmd --zone=managerzone --add-source=192.168.1.101/24 --permanent success
設定変更後の再読み込み
# firewall-cmd --reload
[root@SV-PLUTO ~]# firewall-cmd --reload success
現在アクティブなゾーンの確認
# firewall-cmd --get-active-zones
[root@SV-PLUTO ~]# 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-PLUTO ~]# firewall-cmd --remove-service=ssh --zone=public --permanent success
設定変更後の再読み込み
# firewall-cmd --reload
[root@SV-PLUTO ~]# firewall-cmd --reload success
変更後の確認
「services」のところから、sshが削除されているのがわかります。
# firewall-cmd --list-all
[root@SV-PLUTO ~]# 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」では、オプションの「--zone ~」を省略すると、「publicゾーン」が操作対象になります。
- 「--permanent」オプションをつけないと、次回のOS再起動時に設定がリセットされてしまいます。
- 「--permanent」オプションをつけて設定変更した後は、「firewalld-cmd reload」で設定の再読み込みをすることで反映されます。
参考にしたサイト
www.atmarkit.co.jpeng-entrance.com
https://www.rem-system.com/centos8-first-settings/www.rem-system.com
参考書籍
絶対に損をさせない完全ガイド
圧倒的情報量、この分厚さは伊達じゃない!
全ての管理者・開発者が知っておくべき知識がここにある!
初めて触れる入門者から、第一線で活躍するプロの技術者まで、
あらゆる人の役に立つCentOSガイドの決定版
各種ツールのインストール、設定ファイルの編集、コマンドの実行方法、セキュリティ対策までも詳細に解説!
標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド (有限会社ナレッジデザイン) |