この記事は、リレーブログ企画「25新卒リレーブログ」の記事です。
はじめに
こんにちは。新卒1年目の大村です。
先日、初めてfirewalldというツールに触れました。
これを一般的なACLと同じように送信元アドレス(sources)について設定したら、意図しないパケットが通過してしまい設定に悩まされました。
今回なぜこのような挙動になったのか、想定通り動作させるにはどのような設定にすれば良いかについて、この経験を踏まえたうえで、firewalldに始めて触れる人に向けてまとめたいと思います。
筆者プロフィール
- 入社時期: 2025年4月
- 入社前のスキル: ネットワーク, Linux
- 現在の担当: ISPオペレーション・OAチーム
今回どのような設定を投入していたのか
あるインタフェース(仮: eth1)において、IPアドレス(仮: 192.0.2.1)からのみサービス(仮: 22/tcp)を許可するルールを追加することになりました。
このとき、私は以下のような設定に変更しました。

意図としては”eth1に到達したパケットについて、送信元IPアドレスが192.0.2.1、宛先ポートが22/tcpなら許可”といった具合です。
しかし、実際の挙動としては、192.0.2.1以外のホストもアクセス可能となりました。
firewalld基本とACLとの違い
なぜこのような挙動になったのかの前に、まずfirewalldがどのよう動作するかを紹介しようと思います。
まず、firewalldは、多くの人が触れてきたであろう”プロトコル、IPアドレスとポート番号の送信元や宛先、許可/拒否のみでルールを記述するACL”とレイヤが異なるものです。

firewalldは独自の概念に基づいて設定し、上記のようなルールを生成するものであるという認識が重要になります。
一般的なACLは、インタフェースが中心であり、インタフェースごとにルールを追加していくかと思います。
一方、firewalldは、”ゾーン“というものが中核となっており、このゾーンにインタフェースや送信元IPアドレスを追加していきます。
このゾーンとは、そのインタフェースや送信元IPアドレスがどの程度信頼できるか、どのようなルールでパケットを通過させるかのプロファイルのようなものです。

パケットが到達すると、送信元IPアドレス、次にインタフェースの順で先にマッチしたゾーンに割り振られます2。


またゾーンには、通過が可能なポート番号やプロトコル、後述するリッチルールを割り当てられます。
最初の設定の問題点
ACLでは送信元IPアドレスは許可(拒否)のルールの一部なため、同様だと認識していました。
しかし、firewalldにおいての送信元IPアドレスは、ゾーンの振り分けのためのルール3です。
今回のケースは、sourcesにマッチしなくても、interfacesにマッチしてしまい、publicゾーンで評価されるようになったため、アクセスが可能となった訳です。
では、意図した通りの動作をさせるにはどのようにするか。
私は次のようにリッチルールを使用して設定を変更しました。
リッチルールでは、ACLのルールと似たような設定方法で、送信元/宛先のIPアドレス、ポート番号、プロトコルの組み合わせで許可/拒否が可能です。
今回の要件では、”192.0.2.1からのSSH”を許可が要件なため、以下のようなリッチルールを追加しました。

これで意図したように192.0.2.1からのみSSHが通るようになりました。
firewalldで設定するには
firewalldを上手く設定するには、まずfirewalldのアプローチを理解することが大切です。
インタフェースや送信元アドレスでゾーンに振り分け、そのゾーンでパケットを通過させるかを決定します。
この仕組みを理解したうえで、通過させたいルールを宛先ポート番号やリッチルールなどに落としこむことが鍵になるかと思います。
まとめ
firewalldにおけるsourcesは、一般的なACLのような”許可/拒否するIPアドレス”の設定ではありませんでした。
sourcesはゾーンを選択するための設定項目です。
もし、ACLのような設定を追加するのであれば、リッチルールを使用することで可能となります。
【終わりに】 学生の皆様に向けて
まだ入社して間もないですが、ニフティには、成長・挑戦を支えてくれる仕組みが整っていると感じています。
制度はこちらで紹介されているものや無料で使えるUdemyなど数多く揃っていますし、入社後の研修も魅力の一つです。
また、配属後も困っていることがあれば丁寧に指導頂け、挑戦したいことがあれば、それを受け入れる文化もあります。
そんなニフティでは、この制度・文化を活用して挑戦していける仲間を募集中です。
成長・挑戦を軸にしている人には、とても良い環境だと思います。
この記事をご覧になっているあなたが、一緒に働きたいと思って頂けますと幸いです。
次は、なべしまさんの記事です。
どんな記事か楽しみですね。
参考文献
- 各事前定義されたゾーンについて: https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/10/html/configuring_firewalls_and_packet_filters/using-and-configuring-firewalld#firewalld-zones ↩︎
- Previous Behaviorのセクション: https://firewalld.org/2023/04/zone-priorities ↩︎
- https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/10/html/configuring_firewalls_and_packet_filters/adding-a-source ↩︎