初めて自分でfirewalld
の設定をした時に、色々調べてまとめたので
備忘録として載せておきます
ゾーンについて
初めに、firewalld
を扱う上で避けては通れない「ゾーン」について軽く説明します。
ゾーン(zone
)というのは、どのような通信を許可するのかというルールが設定されている定義のようなものです。
あらかじめ9種類のゾーンが用意されていますが、全ての通信を許可するもの(trusted
)や、逆に全ての受信パケットを破棄するもの(drop
)など、それぞれのゾーンに異なる受信ルールが決められています。
デフォルトではpublic
ゾーンが適用されています。
ゾーンごとに設定できる項目はいくつかありますが、よく使用するものは以下になると思います。
・sources:通信を許可する送信元のIPアドレスを追加する
・services:通信を許可するサービスを追加する
・ports:通信を許可するポート番号を追加する
・protocols:通信を許可するプロトコルを追加する
・interfaces:対象のゾーンを適用したいインターフェースを追加する
今回はpublic
ゾーンに上記の項目を追加していきます。
その前に、firewalld
が起動していないと設定が出来ないので、事前に起動しておきましょう。
まずは設定前に今現在の設定内容を確認しておきましょう。(※今回の環境はRHEL8.2)
# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
※コマンドの最後のpublic
の部分を変更すると、別のゾーンの設定内容も確認できます。
firewalld
はホワイトリスト方式なので、services
欄に記載のある「cockpit
dhcpv6-client
ssh
」を使用した通信は許可されているということになります。
ports
、protocols
欄は空欄になっているので、上記の3つのサービス以外の通信は許可されていないという事になります。
ただ、sources
欄も空欄ですが、こちらは何も許可されていない訳ではなく、前述した3つのサービスからの通信は、どのIPアドレスからでも受け付ける状態になっています。
また、interfaces
の項目を見ると、ens33
のインターフェースにこのゾーンが適用されているので、ens33
を使用した通信には上記ルールが当てはまるということになります。
その他のインターフェースを使用した通信には上記のルールは適用されません。
送信元IPアドレスの追加
初めに、通信を許可する送信元のIPアドレスを追加したいと思います。
# firewall-cmd --add-source=192.168.0.0/24 --zone=public --permanent
success
この先は省略しますが、firewall-cmd
を使って設定を行った場合、コマンド入力後にsuccessと表示されます。
構文や指定方法などが間違っているとエラーが表示されるので、その時は再度コマンドを確認しましょう。
これで、192.168.0.0/24
のセグメントからの通信が許可されたことになりますが、前述したように、元々送信元のIPアドレスの制限はなかったので、この設定により192.168.0.0/24
以外からの通信は拒否されるようになったということになります。
ちなみに、--permanent
は恒久的な設定をする場合のオプションなので、一時的に設定したい場合はこのオプションは付けずに設定してください。
サービスの追加
次に、通信を許可するサービスを追加したいと思います。
# firewall-cmd --zone=public --add-service=http --permanent
これで、http
を使用した通信も許可されました。
この他にも、上記のコマンドで設定できるサービス一覧は、以下のコマンドで確認できます。
# firewall-cmd --get-services
ポート番号の追加
次に、通信を許可するポート番号を追加します。
sshやhttpのように使用するポートが決まっているものは前述の方法で許可できますが、ミドルウェアなどで独自で使用するポートがある場合にはこちらを使用します。
# firewall-cmd --zone=public --add-port=3000/tcp --permanent
# firewall-cmd --zone=public --add-port=3000/udp --permanent
これで、3000番
のポートを使用した通信も許可されました。
udp
は不要で、tcp
だけ設定したい場合は1つ目のコマンドだけ入力します。
設定の反映
一通り設定を変更したら、最後に、設定を反映させるコマンドを忘れずに実行してください。
# firewall-cmd --reload
変更後の設定内容を確認します。
# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources: 192.168.0.0/24
services: cockpit dhcpv6-client ssh http
ports: 3000/tcp 3000/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
sources
とservices
とports
の項目に、上記で設定した内容が追加され、設定が反映されたことが分かります。
これが基本的なfirewalld
の設定になります。
※interfaces
、protocols
の設定方法については後述します。
次は、もっと複雑な要件でfirewalld
の設定をしてみたいと思います。
firewalldの設定方法②へ続きます!