2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

firewalldの設定方法①

Last updated at Posted at 2022-12-04

初めて自分でfirewalldの設定をした時に、色々調べてまとめたので
備忘録として載せておきます:raising_hand:

ゾーンについて

初めに、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」を使用した通信は許可されているということになります。
portsprotocols欄は空欄になっているので、上記の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:

sourcesservicesportsの項目に、上記で設定した内容が追加され、設定が反映されたことが分かります。

これが基本的なfirewalldの設定になります。
interfacesprotocolsの設定方法については後述します。

次は、もっと複雑な要件でfirewalldの設定をしてみたいと思います。
firewalldの設定方法②へ続きます!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?