Firewalldの設定方法

ファイアウォール機能である Firewalld は、サーバへ接続させる通信のルールを設定できます。
本マニュアルでは、簡易的な設定を一例として紹介します。

※ Firewalldの設定内容は、サーバーへの攻撃対策方法やお客様の利用用途により多岐にわたり、このページに紹介する設定の限りではありません。
※ 本マニュアルはあくまでも参考としてご覧いただき、実際の設定はお客様にてサーバーへの攻撃対策方法やご利用用途をご確認のうえ追加での対策設定などを、各種参考書籍をもとに行ってください。

本マニュアルは、さくらのVPSの標準OS(CentOS 7/CentOS 8/CentOS Stream 8)がインストールされているサーバーが対象です。
その他のOSでの設定は、各OSのマニュアルをご確認ください。
Firewalld以外にもセキュリティ対策を行ってください。

さくらのVPSでは、標準でパケットフィルタが有効になっています。パケットフィルタが有効になっている場合、Firewalldの設定のほかにパケットフィルタの設定も必要になります。

サーバにログイン

リモートコンソールやターミナルソフトなどを利用してroot権限を持ったユーザでサーバーにログインします。
※ ここではrootでログインした場合で説明します。

Firewalldの有効化

さくらのVPSの標準OSでは、Firewalldが有効になっていません。Firewalldを使用する際は以下のコマンドで起動します。

# systemctl start firewalld
# systemctl enable firewalld

設定の確認

Firewalldには「ゾーン」という概念があり、ファイアウォール設定はゾーンに対しておこないます。インタフェースはゾーンに所属することになります。以下のコマンドでインターネット側のインタフェース(eth0)がどのゾーンに所属しているかを確認します。

# firewall-cmd --get-active-zones
インタフェースeth0はゾーンpublicに所属していることがわかりました。ゾーンpublicに対して設定をおこなうことで、eth0を経由する通信の制御ができるようになります。
続いて以下のコマンドでゾーンpublicの設定を確認します。
# firewall-cmd --list-all --zone=public

services: ssh dhcpv6-clientとあるので、インターネットからeth0への通信はsshとdhcpv6-clientのみが許可されている状態であることがわかります。

許可する通信の設定(サービス名)

以下のコマンドでは、サービスhttpの通信許可設定をゾーンpublicに対しておこなっています。この設定をおこなうことで、インターネット上からサーバーのhttp(TCP/80)に対して通信ができるようになります。

# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --reload

使用できるサービス名の一覧は以下のコマンドで確認できます。

# firewall-cmd --get-services

許可する通信の設定(ポート番号)

以下のコマンドでは、TCPプロトコルの10050番ポートに対しての通信許可設定をゾーンpublicにおこなっています。この設定をおこなうことで、インターネット上からサーバーの10050/tcpに対して通信ができるようになります。

# firewall-cmd --add-port=10050/tcp --zone=public --permanent
# firewall-cmd --reload

設定の確認

以下のコマンドでゾーンpublicの設定を確認します。

# firewall-cmd --list-all --zone=public

許可する通信の削除

上記で許可した設定を削除します。
サービス名で通信許可した場合の削除は以下のコマンドです。
# firewall-cmd --remove-service=http --zone=public --permanent
# firewall-cmd --reload

ポート番号/プロトコルで通信許可した場合の削除は以下のコマンドです。

# firewall-cmd --remove-port=10050/tcp --zone=public --permanent
# firewall-cmd --reload

以下のコマンドでゾーンpublicの設定を確認します。削除されていることが確認できます。

# firewall-cmd --list-all --zone=public