ファイアーウォールについて調べました。一度設定するとなかなか触ることがないので忘れがちです。
忘れないようにメモしておきます。
ファイアウォールとは
ファイアウォール(firewalld)とは、通信プロトコルの不要な入り口を塞いでくれる機能のことです。
よく聞くプロトコルには次のようなものがあり、ポート番号も決まっています。
ssh:ポート番号22
http:ポート番号80
https:ポート番号443
通信が許可されているサービスを確認
通信プロトコルのブロックを解除しないと通信ができません。
まず、プロトコルが開放されているか確認します。
// 現在のファイアウォールの設定を確認 $ 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のポート番号を変更します。
/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のポート番号を変更することができました。
参考サイト
まとめ
だいぶ理解不足なところもあるので、分かったところがあったら都度修正していこうと思います!
コメント