Firewalldの設定方法

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

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

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

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

サーバにログイン

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

Firewalldの有効化

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

# systemctl start firewalld
# systemctl enable firewalld
Firewalldの有効化のコマンド実行

設定の確認

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

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