Linuxサーバー・ハードニング・チェックリスト

15分で読めます - 2026年5月8日

hero section cover
目次
  • Linuxサーバーの堅牢化チェックリスト
  • SSHのロックダウン
  • ファイアウォールとFail2Banの設定
  • パッチとアップデートの自動化
  • ファイルシステムとパーミッションの強化
  • 必須アクセス制御の有効化
  • 監査ログとモニタリングの設定
  • 継続的なメンテナンス
共有

Linuxサーバーを堅牢化するためのステップバイステップのチェックリスト。SSH、ファイアウォール、パッチ適用、ファイルパーミッション、SELinux/AppArmor、監査ロギングをカバー。

Linuxサーバーの堅牢化チェックリスト

デフォルトのLinuxインストールは、安全なLinuxインストールではありません。オープン・ルートのSSHアクセス、脆弱なファイアウォール、パッチ未適用のソフトウェアなどの設定ミスが、侵害の大部分を占めている。新しいサーバーは、オンラインになってから数分以内に自動スキャンに直面するため、何よりも先にハードニングを行う必要があります。

このチェックリストは、SSHのロックダウン、ファイアウォールの設定、パッチ適用、ファイル・パーミッションの厳格化、必須アクセス・コントロールの有効化、監査ロギングの設定といった、中核となるステップをカバーしている。

SSHのロックダウン

SSHは主要なアクセスポイントであり、攻撃者が最初に探るものです。デフォルトの設定(パスワード認証、rootログイン、ポート22)は、まさに自動化されたスキャナが探すものです。

RSAよりもセキュリティとパフォーマンスに優れたEd25519キー・ペアを生成してください:

ssh-keygen -t ed25519

鍵ベースのログインがうまくいったら、/etc/ssh/sshd_configを更新する:

PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
AllowUsers yourname
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

デフォルトのポートを22から目立たないものに変更する。これは断固とした攻撃者を止めることはできないが、自動スキャンによるノイズを大幅に減らすことができる。

現在のセッションを閉じる前に、必ず2つ目のターミナルから変更をテストすること。sudo sshd -tを実行して構文エラーをチェックし、systemctl reload sshdでアクティブな接続を切断せずに適用する。

二要素認証を追加する

2FAとは、攻撃者があなたのSSHキーとデバイスへの物理的アクセスの両方を必要とすることを意味します。Google Authenticator PAMモジュールをインストールします:

sudo apt install libpam-google-authenticator   # Debian/Ubuntu
sudo dnf install google-authenticator           # RHEL/Fedora

各ユーザーに対してgoogle-authenticatorを実行し、シークレットキーとリカバリーコードを生成する。リカバリーコードをオフラインで保存する。

以下の行を/etc/pam.d/sshdに追加する:

auth required pam_google_authenticator.so

その後、/etc/ssh/sshd_configを更新する:

KbdInteractiveAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive

テスト中はアクティブなセッションを開いておく。TOTPコードは正確なシステム時刻に依存するので、NTPが実行されていることを確認する。

ファイアウォールとFail2Banの設定

サーバーがネットワークファイアウォールの背後にある場合でも、ホストベースのファイアウォールを実行してください。原理は簡単で、デフォルトですべての受信トラフィックを拒否し、必要なものだけを許可する。

Ubuntu/Debian(UFW)の場合:

ufw default deny incoming
ufw default allow outgoing
ufw limit ssh
ufw enable

RHEL/Rocky/AlmaLinux(Firewalld)の場合:

firewall-cmd --set-default-zone=public
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

etc/sysctl.confに以下を追加して、カーネルネットワークスタックを強化する:

net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1

Fail2Banのインストール

Fail2Banはログイン試行を監視し、何度も失敗するとIPを禁止する。etc/fail2ban/jail.localを作成し(jail.confを直接編集しないでください。アップデートによって上書きされます)、10分以内に3回失敗したら1時間IPを禁止するように設定します。ファイアウォールの正しいバックエンドを設定する(banaction = ufwまたはbanaction = nftables)。

サービスの監査と古いプロトコルの削除

ss -tlnpで何がリッスンされているか、systemctl list-units --type=service --state=runningで何が実行されているかをチェックする。不要なものはすべて無効にしてください:Bluetooth、CUPS、avahi-daemon、rpcbind。

クリアテキストでデータを送信するレガシープロトコルを削除する:

レガシープロトコルポートセキュアな代替プロトコル
テルネット23SSH
RSH / Rlogin512, 513, 514SSH
FTP21SFTP / FTPS
TFTP69SFTP / SCP
NIS変数LDAP / Kerberos

Debian/Ubuntu の場合:sudo apt-get --purge remove xinetd nis tftpd telnetd rsh-server.RHEL ベースのシステムの場合:yum erase xinetd ypserv tftp-server telnet-server rsh-server.ss -tulpn で削除を確認します。

パッチとアップデートの自動化

システムのアップデートは、既知のセキュリティ・ギャップを埋める最速の方法です。プロビジョニング後、直ちにアップデートを実行する:

apt update && apt upgrade -y      # Debian/Ubuntu
dnf update -y                      # RHEL/Rocky

次にセキュリティパッチを自動化する。Debian/Ubuntuでは、unattended-upgradesをインストールし、セキュリティパッチのみを適用するように設定します。RHEL/Rocky では、dnf-automatic をインストールし、/etc/dnf/automatic.confupgrade_type = securityと設定する。

アップデート結果のメール通知を設定する。本番サーバーの自動再起動を無効にし(Automatic-Reboot = false)、計画されたメンテナンスウィンドウの間に再起動が行われるようにする。高アップタイム環境では、Canonical Livepatch(Ubuntu)またはkpatch(RHEL)によるライブパッチを検討する。

ファイルシステムとパーミッションの強化

SUIDとSGIDのバイナリを最初に監査する。これらのファイルは昇格した権限で実行され、悪用の格好のターゲットとなる:

find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -ls

重要なファイルのパーミッションを厳しくする:/etc/shadowを 600 、/etc/passwdを 644 、/etc/ssh/sshd_configを 600にする。etc/profileのグローバルumaskを 027に設定し、新しいファイルがワールドリーダブルにならないようにする。

find / -xdev -type f -perm -0002 -lsで、世界書き込み可能なファイルを見つけて修正する。(/tmpのように)世界書き込み可能であり続けなければならないディレクトリには、chmod 1777 /tmpというスティッキービットを適用する。

安全なマウントオプション

etc/fstabを編集して、クリティカルパーティションで何が起こるかを制限します:

パーティションマウントオプションパーティションマウントオプション
/tmpnodev、nosuid、noexec世界に書き込み可能な領域でのマルウェアの実行を防ぐ
/var/tmpnodev、nosuid、noexectmpと同じ保護
/dev/shmnodev、nosuid、noexec共有メモリの保護
/ホームnodev, nosuidsetuidバイナリとデバイスノードをブロック
/var/lognodev、nosuid、noexecログの整合性を保護

ブート時の問題を避けるため、再起動前にmount -o remountで変更をテストする。

必須アクセス制御の有効化

SELinuxとAppArmorは、プロセスができることをカーネルレベルで制限します。お使いのディストリビューションに搭載されているものを使用してください:RHEL/CentOS/FedoraにはSELinuxを、Ubuntu/Debian/SUSEにはAppArmorを。これらを切り替えると互換性の問題が発生します。

SELinux: getenforce で状態をチェック。少なくとも2週間はパーミッシブ・モード(setenforce 0)で起動し、何も壊さずにワークロードの動作をキャプチャする。ausearch -m avc -ts recentで違反を監視する。audit2why を使ってブロックを診断し、audit2allow -M [module_name] を使ってポリシーモジュールを作成する。ログがきれいになったら、setenforce 1で強制に切り替え、/etc/selinux/configで永続化する。

AppArmor: aa-statusでアクティブなプロファイルをチェックします。管理コマンド用にapparmor-utilsをインストールします。aa-complainでプロファイルをcomplainモードで開始し、確信が持てたらaa-enforceでenforceモードに移行する。aa-genprofを使ってカスタム・アプリケーション用のプロファイルを構築する。

監査ログとモニタリングの設定

ロギングがなければ、インシデントは痕跡を残さない。auditdをインストールしてください:

sudo apt-get install auditd audispd-plugins

重要なファイルのファイルシステム監視を追加する:

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity

すべてのルートレベルのコマンド実行を追跡する:

-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands

augenrules --loadでルールをロードし、ルールファイルの最後に-e 2を追加して、設定を改ざんできないようにします(変更には再起動が必要です)。

AIDEによるファイルの完全性監視

AIDEは、現在の状態を既知の良好なベースラインと比較することで、不正なファイル変更を検出します。AIDEをインストールし、aideinitでデータベースを初期化し、結果のファイルを/var/lib/aide/aide.db.gzに移動する。aide -checkを実行し、結果を管理者に電子メールで送信するcronジョブを毎日セットアップする。

ログの一元化

ローカルのログは、root権限を持つ攻撃者が削除してしまったら意味がない。TLS暗号化付きのrsyslogを使って、リアルタイムでログをリモートサーバーに転送する。etc/rsyslog.confに追加する:

*.* @@remote-host:514

etc/rsyslog.confに追加する:ログインが成功するたびにログに鍵指紋が含まれるように、SSH設定にLogLevel VERBOSEを設定する。複数のサーバーを管理する本番環境では、Wazuhや OSSECのようなツールが、集中ログ分析によるホストベースの侵入検知を提供する。

継続的なメンテナンス

ハードニングは1回限りの作業ではありません。設定が流れたり、新たな脆弱性が現れたり、スタッフの異動でアカウントが取り残されたりします。

毎週:Fail2Banのログを確認し、更新の失敗をチェックし、バックアップを確認する。

毎月:ユーザーアカウントと権限を監査し、実行中のサービスを確認し、LynisまたはOpenSCAPでフルスキャンを実行する。

四半期ごと:認証情報のローテーション、ファイアウォールルールの更新、ディザスタリカバリのテスト。

Ansibleのようなinfrastructure-as-codeツールとdev-sec.ioのhardeningロールを使用して、フリート全体で一貫した設定を実施し、監査間のドリフトを防止します。

FDCの専用サーバーは、完全なrootアクセスを提供し、セキュリティスタックを完全に制御します。専用サーバーのオプションを検討し、すべてのレイヤーを制御するプラットフォーム上に構築してください。

background image
サーバーが成長を妨げていませんか?

遅いデプロイメントや帯域幅の制限にうんざりしていませんか?FDC Serversは、瞬時の専用電源、グローバルリーチ、あらゆる規模に対応する柔軟なプランを提供します。

今すぐアップグレード

ブログ

今週の特集

その他の記事
Linuxサーバー・ハードニング・チェックリスト

Linuxサーバー・ハードニング・チェックリスト

Linuxサーバーを堅牢化するためのステップバイステップのチェックリスト。SSH、ファイアウォール、パッチ適用、ファイルパーミッション、SELinux/AppArmor、監査ロギングをカバー。

15分で読めます - 2026年5月8日

iperf3 チュートリアル:LinuxとWindowsでネットワーク速度をテストする

10分で読めます - 2026年5月7日

その他の記事
background image

ご質問またはカスタムソリューションが必要ですか?

icon

柔軟なオプション

icon

グローバル・リーチ

icon

即時展開

icon

柔軟なオプション

icon

グローバル・リーチ

icon

即時展開