ファイアウォール(firewalld)の設定について【Linux】

Linux

ファイアーウォールについて調べました。一度設定するとなかなか触ることがないので忘れがちです。
忘れないようにメモしておきます。

ファイアウォールとは

ファイアウォール(firewalld)とは、通信プロトコルの不要な入り口を塞いでくれる機能のことです。
よく聞くプロトコルには次のようなものがあり、ポート番号も決まっています。

ssh:ポート番号22
http:ポート番号80
https:ポート番号443

ポート番号とはプロトコルごとの窓口を番号で表したものです。IPアドレスとセットで使います。

通信が許可されているサービスを確認

通信プロトコルのブロックを解除しないと通信ができません。
まず、プロトコルが開放されているか確認します。

// 現在のファイアウォールの設定を確認
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

// publicゾーンのserviceだけ表示したいとき
$ sudo firewall-cmd --list-services --zone=public
dhcpv6-client http https ssh

servicesの行で、現在通信可能なサービスを確認できます。
ポート番号では表示されませんが、http、https 、sshが許可されていることが確認できます。
ここでは通信プロトコルのことをサービス、というらしい、、です?

ここで覚えておきたいのがゾーン(zone)です。ファイアウォールの設定をまとめたテンプレートのようなもので、デフォルトではpublicが設定されています。ここに通信を許可するサービス、またはポート番号を追加します。

任意のサービス、ポート番号を開放する

ゾーンにサービスを追加する

サービス名で通信を解放するには次のコマンドを使います。
ウェブ通信であるhttpとhttpsのサービスをpublicゾーンに追加します。

// httpとhttpsプロトコルを開放 ※一行ごとに実行
$ firewall-cmd --add-service=http --zone=public --permanent
$ firewall-cmd --add-service=https --zone=public --permanent

// 設定を反映(再起動)
$ sudo firewall-cmd --reload

設定したらファイアーウォールを再起動します。

ゾーンにポート番号を追加する

ポート番号で通信を開放するには以下のコマンドを使用します。こちらも設定したらファイアーウォールを再起動します。

// 012345番ポートを開放
$ sudo firewall-cmd --add-port=012345/tcp --zone=public --permanent

// 設定を反映(再起動)
$ sudo firewall-cmd --reload

// 反映されているか確認
$ firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 012345/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

ポート番号012345が追加されていることを確認できました。

尚、最後の–permanentオプションをつけ忘れると、ファイアウォール再起動の時に設定が消えてしまうので注意します。

サービス名をつけてポート番号を開放する

先ほどはポート番号で通信を開放しましたが、サービス名をつけて設定した方が管理しやすいです。

例としてsshのポート番号を変更します。

ここではファイアーウォールの説明なので、実際にsshのポート番号を変更するには/etc/ssh/sshd_configのファイルを編集してください。

/usr/lib/firewalld/servicesにサービスごとの設定がxmlファイルとして保存されています。

$ pwd
/usr/lib/firewalld/services
$ ls -la | grep -e ssh -e http -e https
-rw-r--r--  1 root root  353  4月 28  2020 http.xml
-rw-r--r--  1 root root  448  4月 28  2020 https.xml
-rw-r--r--  1 root root  463  4月 28  2020 ssh.xml

sshの設定はssh.xmlの中身を確認します。

ssh.xml

ポート番号がデフォルトの22になっていることが確認できます。
この番号を任意の番号に変更すればOKですが、このファイルはコピペして使います。
/usr/lib/firewalld/services 以下のファイルは編集しないというお約束があるようです。

ssh.xmlを上書きする方法

結論から言うと、usr/lib/firewalld/services/にあるssh.xmlをetc/firewalld/services/にコピーして編集します。

次のコマンドでファイルをコピペすることができます。
sshのポート番号は56789にするので、ファイル名は「ssh-56789」にします。

$ cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-56789.xml

コピーしたファイルのport=”22″の部分を変更したいポート番号に変更(49152 ~ 65535の範囲)します。

<service>
   <short>SSH</short>
   <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It pro    vides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled in    terface, enable this option. You need the openssh-server package installed for this option to be useful.</descript    ion>
   <port protocol="tcp" port="56789"/>
</service>

保存したらファイアーウォールを再起動します。

// 設定を反映(再起動)
$ sudo firewall-cmd --reload

これでSSHのポート番号を変更することができました。

参考サイト

firewall-cmdコマンドの使い方 - Qiita
1 firewall-cmdとは? firewall-cmdは、ファイアウォールの設定を行うコマンドです。 firewall-cmdは、Ubuntuのufw,openSUSEのSUSEfirewall2と同じ位置づけのコマンドで...
firewalldの設定方法(基本設定編)
「firewalld」の基本的な設定方法です。ポートフォワーディング等の設定方法は別途作成していく予定です。firewalldについてCentOS6までのファイアウォールは「iptables」でしたが、CentOS7からは「firewall

まとめ

だいぶ理解不足なところもあるので、分かったところがあったら都度修正していこうと思います!

コメント