RockyLinux9.3で自宅サーバーを再構築V03・firewalldでアクセス制御

Linux (CentOS、Rocky、Ubuntu)

RHEL 8でTCP Wrapperが廃止されたようで、RockyLinux9でも、廃止になっています。
いままでは、TCP Wrapperと共にFirewalldは利用していましたが、あまり理解せず、
ネット上情報を参考に設定していました。
今回、TCP Wrapperが使いえないとの事で、Firewalldを少し詳しく調べてみました。

ゾーン(ZONE)

ゾーンは、RedHat のドキュメントによると、
着信トラフィックをより透過的に管理する概念を表しています。
とあります。
なんか、よくわからないので、Google Bard に聞いてみました。

firewalld のゾーンとは、ファイアウォールのセキュリティポリシーを適用する範囲を定義するものです。
ゾーンは、インターフェイスやソースアドレスの範囲に割り当てることができます。
ゾーンを設定することで、同じ性質の通信をまとめて管理することができます。
例えば、インターネットからの通信をすべて許可する「public」ゾーンと、内部ネットワークからの通信のみ許可する「internal」ゾーンを作成すれば、インターフェイスごとにルールを設定する必要がなくなります。

雛形ゾーン

インストール時に、いくつかのゾーンが定義されています。
各ゾーンの内容は、こちらからに説明があります。
現在定義されている「ゾーン」は下記コマンドで確認できる。

アクティブゾーン

RockyLinux9 は、インストール直後は10個のゾーンが登録されていますが、
ゾーン名の横に(active)が付加されているのは、「public」だけです。
アクティブゾーンは「firewall-cmd –get-active-zones」で確認できます。

firewalld では、アクセスルールが適応されるのは、「アクティブゾーン」だけです。
上記の例では、「public」のみとなります。
では、どうすれば「アクティブソーン」になるのか?
これは、interfaces: 」か「sources:」が設定されると「active」になります
ただし、どちらも、複数のゾーンに同じ設定はできません。
firewalldのデフォルト設定では、有線接続など、「Interface」がpublicゾーンも設定されています、
IPアドレスなどの「Source」はどのゾーンにも設定されていないので、
初期状態ではpublicゾーンのみがアクティブゾーンになっています。

target:

ゾーンの性質を決める、重要なパラメータです。
設定された、対象元をどうするのかが、決まります。

  • default ⇒ 指定されたアクセス元と指定されたサービスのみ許可する。
  • ACCEPT ⇒ 指定されたアクセス元に全てを許可する。
  • DROP ⇒ 指定されたアクセス元は全て拒否し、何も返さない。
  • REJECT ⇒ defaultと同等であるが、ICMP を返す。

interfaces:

ネットワークアダプタのシステム名

Source:

アクセス元のIPアドレス範囲です。
192.168.0.1 とか、192.168.0.1/24 のように指定します

services:

アクセス元に提供するサービスを定義します。
すでに用意されている、サービスはこちらから確認できます

すごく沢山あります。
ポート番号など変更したい場合には、「 /usr/lib/firewalld/services/ 」のデフォルト設定ファイルを /etc/firewalld/services /」にコピーして編集します。

ports:

アクセス元に開放するポートを指令します。
定義は、firewall-cmd –add-port=[port-number]/[port-type] の形式になります
port-typeは、tcpudpsctpdccp になります。
これは、firewalld で定義されていないサービスを許可する必要がある場合に便利です。

既存ゾーンで動作確認

定義済みのゾーンはこちらで確認できます。

ゾーンを編集し、動作を確認してみます。

この「public」ゾーンは「target: default」で、ネットワークアダプタ「eno1」に、
「cockpit」「dhcpv6-client」「ssh」サービスを許可します。
「services:」に指定がないサービスは許可されません。
ただしアクセス元の「sources:」IPアドレスには関係なく、「eno1」への要求元へサービス許可します。

この「trusted」ゾーンは「ACCEPT」で、アクセス元に「192.168.0.100」を定義してみました。
この場合「services:」には、なにも指定はありませんが、
「192.168.0.100」からは「ssh」が可能です。
「ACCEPT」では、「services:」の指定がなくても、可能になります。

この「drop」ゾーンは「target: DROP」です。
例えば、「sources: 」に「172.16.0.100」を設定みます
「DROP」は指定された「sources: 172.16.0.100」からのアクセスを拒否します。
pingも拒否しますから、アクセス元からみると、起動状態も確認できません。

よく使うコマンド

アクティブゾーンの確認
firewall-cmd --get-active-zones

任意ゾーンの設定確認
firewall-cmd --list-all --zone=home

すべてのゾーンの設定確認
firewall-cmd --list-all-zones

新しいゾーンの作成
firewall-cmd --new-zone=hogehoge --permanent

ゾーンの削除
firewall-cmd --delete-zone=hogehoge --permanent

ゾーンのターゲット変更 < default | ACCEPT | REJECT | DROP >
firewall-cmd --set-target=ACCEPT --zone=hogehoge --permanent

許可IPアドレスの追加
firewall-cmd --add-source=192.168.0.0/24 --zone=public --permanent

許可IPアドレスの削除
firewall-cmd --remove-source=192.168.0.0/24 --zone=public --permanent

許可サービスの追加
firewall-cmd --add-service=ssh --zone=public --permanent

許可サービスの削除
firewall-cmd --remove-service=ssh --zone=public --permanent

許可ポート番号の追加
firewall-cmd --add-port=8080/tcp --zone=public --permanent

許可ポート番号の削除
firewall-cmd --remove-port=8080/tcp --zone=public --permanent

拒否IPアドレスの追加
firewall-cmd --add-source=172.16.0.100 --zone=drop --permanent

拒否IPアドレスの削除
firewall-cmd --remove-source=172.16.0.100 --zone=drop --permanent

設定変更後は設定の再読み込みで設定を反映
firewall-cmd --reload

管理ゾーン追加

デフォルトの「publicのゾーン」はインターフェイスに割り当てられているので、
個別のIPアドレス「sources:」で制限することができません。
ここでは管理用として新しいゾーン「admin」を作成して、
「ssh」サービスは接続元のIPアドレスで制限しようと思います。
まずは、今の「publicのゾーン」設定を確認してみます。

サービスとしては、「cockpit」「dhcpv6-client」「ssh」が設定されています。
インターフェイス全体に許可が掛かる設定になっているので、このサービスは、
どのIPアドレスからでもアクセスできるという設定になってしまいます。
「cockpit」と「ssh」は新規に作る管理ゾーンのみでIPアドレス制限しようと思います。

  • まず、管理ゾーン「admin」を作成。
  • 「target:」は「default」
  • 「sources:」はLAN内の2か所「192.168.0.100」「192.168.0.101」
  • 「adminゾーン」の「services:」に「dhcpv6-client」「cockpit」と「ssh」を追加
  • 「publicのゾーン」からは「cockpit」と「ssh」を削除
  • 再起動
  • 設定の確認

このように設定してみたいと思います。

これで、「ssh」は、LAN内部の「192.168.0.100」と「192.168.0.101」からのみ、アクセス可能になりました。
「sources:」に、外部からのグローバルアドレスを追加すれば、外部からもアクセス可能となります。
ただし、外部から入ってくるには、入り口のルーターに「sshポート」への要求を、このサーバーへ転送する設定が必要になります。

RockyLinux9.3で自宅サーバーを再構築・記事一覧

コメント

タイトルとURLをコピーしました