Linux 講座 / ファイアウォール・アカウント・アップデートで Linux サーバーを保護する
Linuxサーバーの保護は、必要なアカウントとポートのみを許可し、管理権限を制限し、セキュリティアップデートと復旧手段を維持する複数の対策の組み合わせです。リモート接続ポリシーを変更する際は、現在のセッションとコンソールを確保し、新しい接続が可能か確認したうえで、次の制限を適用してください。
リモート接続を維持したままルールを変更する場合は、SSH接続確認と仮想コンソール復旧準備を先に行う必要があります。新しい接続で確認した後にのみ既存セッションを終了してください。
システム設定実習の基準は Ubuntu 26.04 LTS と Rocky Linux 9 系の一般インストール VM です。コンテナ・WSL・別のリリースでは、サービスやパッケージの構成が異なる場合があります。仮想マシン実習環境の作成で、コンソールの復旧とバージョン確認を最初に準備してください。
変更前に現在の露出状況と復旧経路を確認する
id
getent group sudo
getent group wheel
sudo ss -lntup
systemctl --failed
Ubuntuは通常sudoグループ、Rocky Linuxはwheelグループを管理権限ポリシーで使用しますが、実際のsudoers設定を確認する必要があります。ネットワークポートはインストールされているサービスと実際の使用目的を照合してください。使用していないサービスは影響を確認した上で停止・無効化し、ファイアウォールは必要な通信のみを許可します。クラウドセキュリティグループとホストファイアウォールは別の階層です。
仮想マシンコンソール・クラウドのシリアルコンソールなどSSH以外の復旧手段が実際に開けるか確認します。変更前にファイアウォールの状態・SSH設定・アカウント情報を記録し、設定ファイルをバックアップします。現在のセッションが生きているという事実だけで、新しい接続も許可されると判断しないでください。
公開鍵認証を確認した後にSSHポリシーを調整する
管理権限を持つ一般ユーザーアカウントで公開鍵認証とsudoの両方が機能するか、新しいセッションで確認します。パスワード認証を制限するには、対象システムのIncludeファイル・Matchセクション・クラウド初期設定がどの値を適用しているかをまず確認してください。設定ファイルに同じ項目を何度も追加する方法は、実際の適用値と異なる場合があります。
sudo /usr/sbin/sshd -t
sudo /usr/sbin/sshd -T | grep -E "^(port|permitrootlogin|passwordauthentication|pubkeyauthentication) "
sshd -tは構文・キーの状態などをチェックし、-Tは適用設定を出力します。Match条件がある場合は、接続コンテクストを指定する-Cのチェックも必要です。チェックが通った後、ディストリビューションの正確なサービス名でreloadし、新しいログインを試します。新しい接続が失敗した場合は、保持していたセッション・コンソールからバックアップ設定を復元し、再度検証します。
Ubuntu UFWは管理接続を許可した後に有効化する
以下はSSHが実際にTCP 22番を使用する演習用サーバーの例です。カスタムポートの場合は、すべての22を実際の値に置き換える必要があります。インターネット全体からSSHを許可する代わりに、信頼する管理元に制限可能ですが、NAT・VPNの出口アドレスを誤って指定すると接続が遮断されます。まず状態を確認し、必要な許可ルールを追加した後に有効化します。
sudo ufw status verbose
sudo ufw --dry-run allow 22/tcp
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status numbered
このルールは 22/tcp をすべての送信元に許可するため、インターネット公開運用ポリシーの最終案としては考えないでください。新しい端末で接続を確認した後、必要なサービスと送信元に合わせたルールに絞ります。より狭いルールをまず検証した後、広いルールを削除して再度接続を確認します。削除は現在の番号付きリストと元の状態を比較して、正確なルールのみを対象とします。
Rocky Linux firewalld はゾーンと永続設定を区別する
ゾーンは、インターフェースや送信元に応じて適用するルールをまとめる単位です。この節ではfirewalldが導入・起動されている実習VMを使います。停止中の場合は、既存のネットワークポリシーと管理接続への影響を確認してから初期設定を行ってください。
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --get-default-zone
インターフェースが実際に属するゾーンを確認します。次の REPLACE_WITH_ACTIVE_ZONE はそのゾーン名に置き換え、ssh サービス定義が実際の SSH ポートと一致するかを --info-service=ssh で確認します。現在適用されている runtime ルールをまず試し、同じルールのみを permanent に保存します。
zone=REPLACE_WITH_ACTIVE_ZONE
sudo firewall-cmd --info-service=ssh
sudo firewall-cmd --zone="$zone" --add-service=ssh
sudo firewall-cmd --zone="$zone" --list-all
sudo firewall-cmd --permanent --zone="$zone" --add-service=ssh
sudo firewall-cmd --permanent --zone="$zone" --list-all
runtime と permanent は異なり、reload すると保存されていない runtime の変更は消える可能性があります。逆に runtime 全体を無条件に permanent にコピーすると、仮に許可した一時的なものまで残る可能性があります。元に戻す場合は、今回追加され、以前はなかったルールのみを各設定から削除します。現在管理接続を許可しているルールは、代替接続を検証する前に削除しません。
アップデートとSELinuxも一緒に管理する
sudo apt update
apt list --upgradable
sudo dnf check-update
getenforce
最初のブロックはUbuntu、2つ目はRocky Linuxの確認例です。dnf check-updateは更新がある場合、状態100を返すことがあるため、通常の実行エラーと区別します。実際のインストールはバックアップ・サービス影響・再起動の必要性を確認した上で行います。アップデート後はバージョンだけでなく、サービスの応答や再起動後の状態も確認してください。
Rocky LinuxではSELinux(Security-Enhanced Linux)がファイルラベルとプロセスポリシーでアクセスを制御します。ウェブサービスがファイルを読めないからといってすぐに無効化せず、権限・ラベル・監査ログを確認してください。基本ディレクトリから外れたパスには適切な永続ラベルポリシーとrestoreconが必要な場合があります。SELinuxとファイアウォールは異なる種類の制限です。




