Linux OS のファイアウォールを、ロックアウトされることなく確認、有効化、設定、無効化します。
仕組み
セキュリティグループは、Elastic Compute Service (ECS) インスタンスを発着するすべてのトラフィックを最初にフィルタリングし、その後に OS ファイアウォールが処理します。トラフィックがアプリケーションに到達するには、両方を通過する必要があります。
-
セキュリティグループ (クラウドネットワークレイヤー)
-
機能:セキュリティグループ は、OS の外部でインバウンドトラフィックとアウトバウンドトラフィックを制御する仮想ファイアウォールとして機能し、第一の防御線です。
-
ロジック:セキュリティグループがポート (SSH 用のポート 22 など) のトラフィックを拒否すると、OS ファイアウォールの設定に関係なく、そのポートへの外部リクエストはすべてブロックされます。
-
-
システムファイアウォール (インスタンスレイヤー)
-
機能:
firewalldやufwなどのファイアウォールソフトウェアは、Linux OS 内で動作し、デフォルトで無効 になっています。これにより、セキュリティグループによってすでに許可されたトラフィックをきめ細かく制御できます。 -
ロジック:トラフィックは、OS ファイアウォールに到達する前にセキュリティグループを通過する必要があります。両者は AND 関係にあります。つまり、両方で許可された場合にのみ、アプリケーションがトラフィックを受信します。
-
操作手順
ファイアウォールの状態確認
変更を行う前に、現在のファイアウォールの状態を確認します。
Alibaba Cloud Linux、CentOS、または Red Hat
次のコマンドを実行して、firewalld の状態を確認します。
sudo firewall-cmd --state
-
not running: ファイアウォールは無効です。 -
running: ファイアウォールは有効です。 -
出力が
command not foundの場合、firewalldがインストールされていません。sudo yum install firewalld -yまたはsudo dnf install firewalld -yを実行してインストールしてください。
Ubuntu または Debian
次のコマンドを実行して、ufw の状態を確認します。
sudo ufw status
-
Status: active: ファイアウォールは有効です。 -
Status: inactive: ファイアウォールは無効です。 -
Debian で出力が
command not foundの場合、ufwがインストールされていません。sudo apt update && sudo apt install ufw -yを実行してインストールしてください。
ファイアウォールの有効化
必要なトラフィックを許可するルールを追加する前に、ファイアウォールを有効にしないでください。そうしないと、インスタンスからロックアウトされるおそれがあります。常に最初に許可ルールを追加し、その後に有効化してください。
Alibaba Cloud Linux、CentOS、または Red Hat
-
リモートセッションを維持するために、SSH を永続的に許可します。
sudo firewall-cmd --permanent --add-service=ssh -
ファイアウォールをリロードして、新しいルールを適用します。
sudo firewall-cmd --reload -
ファイアウォールサービスを起動します。
sudo systemctl start firewalld -
(オプション): ファイアウォールが起動時に有効になるように設定します。
sudo systemctl enable firewalld
Ubuntu または Debian
-
SSH 接続を許可します。
sudo ufw allow ssh -
ファイアウォールを有効にします。
ufwは、既存のallowルールを自動的に読み込み、デフォルトで起動時に起動します。sudo ufw enableシステムから、この操作により既存の接続が中断される可能性があるという警告が表示されます。
yを入力して確定します。SSH はすでに許可されているため、セッションは接続されたままです。
特定のポートまたはサービスの開放
Alibaba Cloud Linux、CentOS、または Red Hat
-
特定のポートまたはサービスを開く:
-
サービス名で指定 (推奨):
# HTTP および HTTPS サービスを永続的に許可する sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https -
ポート番号で指定:
# ポート 8080/TCP を永続的に許可する sudo firewall-cmd --permanent --add-port=8080/tcp
-
-
新しいルールを適用する: ルールを追加または削除した後、ファイアウォールをリロードします。
sudo firewall-cmd --reload -
ルールが有効になっていることを確認する:
現在のゾーンのすべてのアクティブなルール (サービス、ポート、プロトコルなど) を一覧表示します。
sudo firewall-cmd --list-all
Ubuntu または Debian
ufw では、ルールは即座に有効になり、再起動後も維持されます。
-
特定のポートまたはサービスを開く:
-
サービス名で指定 (推奨):
# HTTP および HTTPS サービスを許可する sudo ufw allow http sudo ufw allow https -
ポート番号で指定:
# ポート 3306/TCP を許可する sudo ufw allow 3306/tcp
-
-
ルールが有効になっていることを確認する:
次のコマンドを実行して、すべてのアクティブなルールを表示します。
sudo ufw status
ファイアウォールの無効化
接続の問題がブロックポリシーによって引き起こされているかどうかを判断するために、ファイアウォールを一時的に無効にします。
本番環境ではファイアウォールを無効にしないでください。テスト後または問題解決後に再度有効にしてください。
CentOS、Red Hat、または Alibaba Cloud Linux
sudo systemctl stop firewalld
Ubuntu または Debian
sudo ufw disable
本番環境での適用
-
ベストプラクティス
-
最小権限の原則: アプリケーションに必須のポートのみを開きます。データベースなどのコアサービスについては、信頼できる内部 IP アドレスからのアクセスのみを許可し、インターネットに公開しないようにしてください。
-
バックアップ接続を維持する: ファイアウォール ルールを変更する前に、インスタンスへのリモート接続を確立してください。既存のセッションはルール変更後も持続し、バックアップチャネルとして機能します。
-
-
リスク防止
-
ロギングとモニタリング: ファイアウォール ログを定期的に監査して、異常なアクセス試行を検出してください。
-
firewalld: ログはjournaldによって管理されます。sudo journalctl -u firewalldで表示できます。 -
ufw: ログは/var/log/ufw.logにあります。
-
-
よくある質問
-
OS ファイアウォールを無効にしてもサービスにアクセスできない
次の項目を順番に確認してください。
-
セキュリティグループの確認: ECS コンソール - セキュリティグループページ にログオンし、インバウンドルールが適切なソース IP から必要なポートへのトラフィックを許可していることを確認してください。
-
サービスのリスニングステータスの確認: アプリケーションが期待されるアドレス (
0.0.0.0など) とポートでリスニングしていることを確認してください。インスタンスでss -tunlp | grep <port_number>またはnetstat -tunlp | grep <port_number>を実行してください。 -
ネットワークACLの確認: インスタンスが ネットワーク ACL に関連付けられている場合は、そのルールが関連するトラフィックを許可していることを確認してください。
-
-
「
command not found」エラーの解決ファイアウォール管理ツールがインストールされていません。インストールしてください。
-
CentOS/Red Hat/Alibaba Cloud Linux では、
sudo yum install firewalld -yまたはsudo dnf install firewalld -yを実行してください。 -
Ubuntu/Debian では、
sudo apt update && sudo apt install ufw -yを実行してください。
-