Linuxサーバーセキュリティ強化の実践

Linuxサーバーの運用保守において、セキュリティ強化(Hardening)はビジネスの安定稼働を支える核心的なプロセスです。本稿では、SSHセキュリティ設定、ファイアウォール戦略、パスワード強度の管理、ブルートフォース攻撃のブロック、サービスとシステムのアップデートという5つの観点から、サーバーセキュリティ強化の専門的な実務手法を詳しく解説し、エンジニアが多層的な防御体系を構築するのを支援します。

1. SSHサービスのセキュリティ強化:ポート変更とRootログインの制限

SSHはサーバーのリモート管理における主要な入り口ですが、デフォルト設定のままではブルートフォース攻撃を受けるリスクが非常に高いため、ポート番号とユーザー権限の両面から強化を図る必要があります。

1.1 普通の管理者ユーザーの作成

rootアカウントでの直接ログインを避け、一般ユーザーを作成してsudo権限を付与することで、権限の乱用リスクを低減します。

# 一般ユーザーの作成(usernameを実際のユーザー名に置き換え)
useradd -m username

# ユーザーのパスワードを設定
passwd username

# sudo権限を付与
usermod -aG sudo username

1.2 SSHデフォルトポートの変更とRootログイン制限

SSHのデフォルトポートである22番は、攻撃者によるスキャンの頻度が高いターゲットです。これをデフォルト以外のポートに変更し、かつrootの直接ログインを禁止します。

# SSH設定ファイルを編集
vim /etc/ssh/sshd_config

# ポート番号を変更(例:2222番に変更。ポートが未使用であることを確認してください)
Port 2222

# Rootの直接ログインを禁止
PermitRootLogin no

# 設定を反映させるためにSSHサービスを再起動
systemctl restart ssh

2. ファイアウォール戦略:公開ポートの最小化

ファイアウォールを通じてポートへのアクセスを制限し、業務に必要なポートのみを開放することで、不正なアクセス経路を遮断します。ここではUFW(Uncomplicated Firewall)を例に解説します。

2.1 ファイアウォールのステータス確認と有効化

# UFWのステータスを確認
systemctl status ufw

# UFWを起動し、OS起動時の自動有効化を設定
systemctl start ufw
systemctl enable ufw

2.2 ポートの開放とブロックルール

業務に必要なポート(変更後のSSHポート、Webサービス用ポートなど)のみを許可し、リモートデスクトップ用などの高リスクなポートはブロックします。

# 新しいSSHポート(例:2222)を開放
ufw allow 2222/tcp

# Webサービスのポート(HTTP/HTTPS)を開放
ufw allow 80/tcp
ufw allow 443/tcp

# リモートデスクトップ用の3389ポートをブロック
ufw deny 3389/tcp

# 開放されているポート一覧を確認
ufw status

3. パスワードポリシーの強化:複雑性と定期的な更新

脆弱なパスワードはサーバーが突破される主要な原因の一つです。パスワードの複雑性と更新サイクルの両面から厳格に管理する必要があります。

3.1 パスワードの複雑性の設定

PAMモジュールを使用して、パスワードの複雑性要件(長さ、文字種など)を強制します。

vim /etc/pam.d/common-password

# 対応する行に複雑性パラメータを追加(例:12文字以上、数字・大小文字・特殊文字を含む)
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root

3.2 パスワード更新周期の設定

ログイン設定ファイルを編集し、パスワードの最大有効期限、最短使用期間、および期限切れ前の警告日数を定義します。

vim /etc/login.defs

# パスワードの最大有効日数(例:90日)
PASS_MAX_DAYS 90

# パスワードの最短使用日数(例:7日)
PASS_MIN_DAYS 7

# パスワード期限切れ前の警告日数(例:14日)
PASS_WARN_AGE 14

4. ブルートフォース攻撃のブロック:fail2banの導入と設定

fail2banはログインログを監視し、認証失敗を繰り返すIPアドレスを自動的にブロックすることで、ブルートフォース攻撃を効果的に防御します。

4.1 fail2banのインストールと起動

# fail2banのインストール
sudo apt update && sudo apt install fail2ban -y

# 起動および自動起動設定
systemctl start fail2ban
systemctl enable fail2ban

4.2 ステータス確認とデフォルトルール

fail2banのデフォルトルールには既にSSHなどのサービスに対する防御が含まれています。以下のコマンドでステータスを確認できます。

systemctl status fail2ban

5. 不要なサービスの停止とシステムアップデート

不要なサービスを停止することでアタックサーフェス(攻撃対象領域)を最小化し、定期的なシステム更新によって既知の脆弱性を修正します。

5.1 不要なサービスの特定と停止

# 有効化されているサービス一覧を表示
systemctl list-unit-files --type=service --state=enabled

# 不要なサービスを停止および無効化(service-nameを実際のサービス名に置き換え)
systemctl stop service-name
systemctl disable service-name

5.2 システムとパッケージのアップデート

# パッケージリストの更新とインストール済みパッケージのアップグレード
sudo apt update && sudo apt upgrade -y

6. まとめ

SSHのセキュリティ設定、ファイアウォールによる公開ポートの最小化、強力なパスワードポリシー、fail2banによる攻撃遮断、そして冗長なサービスの停止とシステムアップデート。これら5つの対策を講じることで、Linuxサーバーの防御能力を飛躍的に高めることが可能です。サーバーの初期セットアップ完了後、直ちにこれらの操作を実施し、入口からシステム層に至るまでの全方位的なセキュリティ防御体系を構築することを推奨します。

関連おすすめ