ファイアウォールの設定ミスは、サービスへのアクセス不可やリモート接続失敗の一般的な原因です。このトピックでは、Linux インスタンスの OS ファイアウォールを管理する安全な標準手順として、ステータス確認、安全な有効化、特定ポートの開放、そしてトラブルシューティングのための一時的な無効化の方法を説明します。
仕組み
Elastic Compute Service (ECS) インスタンスへのトラフィックは、2 つのフィルタリング層を通過します。まずセキュリティグループ、次に OS レベルのシステムファイアウォールです。トラフィックがアプリケーションに到達するには、セキュリティグループとシステムファイアウォールの両方で許可される必要があります。
セキュリティグループ(クラウドネットワーク層)
機能: セキュリティグループ は、インスタンスの仮想ファイアウォールとして機能し、そのインバウンドおよびアウトバウンドトラフィックを制御します。インスタンスの OS 外で動作する、第一の防御壁として機能します。
ロジック: セキュリティグループルールが特定のポート(SSH のポート 22 など)へのトラフィックを拒否すると、リクエストはインスタンスの OS に到達する前に拒否されます。
システムファイアウォール(インスタンス層)
機能: システムファイアウォールは、
firewalldやufwなど、Linux オペレーティングシステム内で実行されるソフトウェアです。デフォルトでは無効になっています。セキュリティグループを通過したトラフィックをさらに制御する、第二の防御壁として機能します。ロジック: トラフィックはまずセキュリティグループを通過し、その後システムファイアウォールによって評価されます。両方のファイアウォールで許可されて初めて、トラフィックはアプリケーションに到達します。これは「AND」の関係です。
手順
ファイアウォールのステータス確認
変更を加える前に、まずファイアウォールの現在のステータスを確認します。
Alibaba Cloud Linux、CentOS、または Red Hat
次のコマンドを実行して、firewalld サービスのステータスを確認します。
sudo firewall-cmd --statenot running: ファイアウォールは無効になっています。running: ファイアウォールは有効になっています。command not foundエラーが表示された場合は、firewalldがインストールされていないことを意味します。sudo yum install firewalld -yまたはsudo dnf install firewalld -yを実行してインストールします。
Ubuntu または Debian
次のコマンドを実行して、ufw サービスのステータスを確認します。
sudo ufw statusStatus: 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 firewalldUbuntu または Debian
sudo ufw disable本番環境に関する考慮事項
ベストプラクティス
最小権限の原則: ビジネスに不可欠なポートのみを開きます。データベースなどのコアサービスの場合は、信頼できる内部 IP アドレスからのみアクセスを許可し、インターネットに公開しないでください。
バックアップ接続の確保: 大規模なファイアウォール変更を行う前に、インスタンスへのリモート接続を確立しておくことを推奨します。一度確立された接続セッションは、ファイアウォールルールが変更された後も維持されるため、万が一設定ミスでアクセスできなくなった場合でも、このセッションを利用して問題を修正できます。
リスク防止
ロギングとモニタリング: ファイアウォールログを定期的に監査して、異常なアクセス試行を検出します。
firewalld: ログは通常、journaldによって管理されます。sudo journalctl -u firewalldを使用して表示します。ufw: ログは通常、/var/log/ufw.logにあります。
FAQ
OS ファイアウォールを無効にした後もサービスにアクセスできないのはなぜですか?
これは通常、クラウド環境の最初の保護層を見落としている場合に発生します。以下の順序で問題の原因を切り分けてください。
セキュリティグループの確認: ECS コンソール - セキュリティグループページ にログインし、インスタンスに関連付けられているセキュリティグループを見つけます。インバウンドルールで、対象のポートが、適切な送信元 IP アドレス (例: `0.0.0.0/0`) に対して許可されているかを確認します。
サービスのリスニング状態の確認: インスタンス内で、
ss -tunlp | grep <Port Number>またはnetstat -tunlp | grep <Port Number>を実行して、アプリケーションが正常に起動し、予期される IP アドレス(0.0.0.0など)とポートでリスニングしていることを確認します。ネットワーク 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を実行します。