Ubuntu Serverセキュリティ:実用的なLinux強化チェックリスト

Table of Contents
AWS、DigitalOcean、Hetznerで新しい仮想マシンをプロビジョニングし、パブリックIPv4アドレスを割り当ててから60秒以内に、自動ボットネットとスキャンクローラーがポート22へのプローブを開始します。これらのボットは、rootに対して継続的な辞書攻撃を実行し、既知のデフォルトパスワードをテストし、古いソフトウェアの脆弱性を探ります。
Ubuntu Serverは安定したデフォルト設定で出荷されていますが、強化されていないインストールでは、SSHでパスワード認証が有効になっていること、無制限のオープンネットワークポート、セキュリティパッチの自動化の欠如、ブルートフォースレート制限のゼロなど、危険な攻撃ベクトルが残されています。
セキュリティは理論的な演習ではなく、運用上の規律です。このガイドでは、アプリケーションワークロードをデプロイする前に、新しいUbuntu 24.04 / 22.04 LTSサーバーを強化するための、意見が明確で本番環境でテスト済みのチェックリストを順を追って説明します。
モダンLinux & ターミナルマスターシリーズ

無料開発者ツール:Linux Chmodパーミッション計算機
Linuxサーバーのユーザー、グループ、およびワールドのファイルパーミッションを管理していますか?視覚的なLinux Chmodパーミッション計算機を使用して、完全なumaskサポート付きで正確な8進数および記号パーミッションフラグを生成してください。
1. 非ルートユーザーのプロビジョニングと権限分離
本番アプリケーションや対話型ターミナルセッションをrootとして直接実行しないでください。Bashコマンドのタイプミスやアプリケーションの依存関係の脆弱性により、無制限のカーネル機能で実行される可能性があります。
専用のSudoユーザーを作成する
rootとしてログインし、専用の管理者ユーザーを作成します。
# Add a new administrative user
adduser deployer
# Grant administrative sudo privileges
usermod -aG sudo deployer
# Copy your local SSH public key to the new user
mkdir -p /home/deployer/.ssh
cp /root/.ssh/authorized_keys /home/deployer/.ssh/
chown -R deployer:deployer /home/deployer/.ssh
chmod 700 /home/deployer/.ssh
chmod 600 /home/deployer/.ssh/authorized_keys
2. OpenSSHの強化 (sshd_config)
SSHデーモンはサーバーの主要な玄関口です。アクセスを最新の公開鍵暗号化に限定し、パスワード認証を完全に無効にする必要があります。

/etc/ssh/sshd_config.d/99-hardened.confを編集します(ドロップイン設定ファイルを使用すると、パッケージのアップグレードによってカスタムルールが上書きされるのを防ぎます)。
# /etc/ssh/sshd_config.d/99-hardened.conf
# Completely disable root login over SSH
PermitRootLogin no
# Disable password authentication (Keys required)
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
# Restrict authentication attempts before dropping connection
MaxAuthTries 3
MaxSessions 2
# Modern cryptographic ciphers and key exchanges (Disables legacy RSA/SHA1)
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com
# Disable unused forwarding capabilities to prevent proxy tunneling
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
デーモンを再起動する前に、設定構文を検証します。
# Test sshd configuration syntax
sudo sshd -t
# Restart SSH service
sudo systemctl restart ssh
重要な健全性チェック
既存のターミナルセッションはまだ閉じないでください!新しいターミナルタブを開き、SSHキーを使用してssh deployer@your_server_ip経由で正常に接続できることを確認してください。
3. UFW(Uncomplicated Firewall)によるファイアウォールセグメンテーション
デフォルトでは、Ubuntuはすべてのインバウンドおよびアウトバウンドネットワーク接続を許可します。デフォルト拒否のイングレスポリシーを強制し、ワークロードが必要とするポートのみを明示的に開く必要があります。

# Reset UFW to default clean state
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Allow SSH with rate limiting (Blocks IPs making >6 connections in 30s)
sudo ufw limit 22/tcp comment 'SSH Rate Limited'
# Open standard web traffic ports
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Enable the firewall
sudo ufw enable
# Verify active status
sudo ufw status verbose
アプリケーションデータベース(例:ポート5432のPostgreSQL)にリモートでアクセスする必要がある場合、ポート5432をインターネット全体に開かないでください。アクセスは厳密に内部プライベートサブネットまたはVPN IPに制限してください。
# Restrict PostgreSQL to internal VPN or backend IP
sudo ufw allow from 10.8.0.5 to any port 5432 proto tcp comment 'Postgres VPN Only'
4. Fail2banによる自動ブルートフォース防御
パスワード認証が無効になっていても、ボットネットがSSHハンドシェイクを繰り返しスパムすると、CPUサイクルを消費し、システムログファイルを散らかします。
Fail2banは、ログファイル(/var/log/auth.log)を監視して繰り返される認証失敗を検出し、一時的なiptablesドロップルールを動的に挿入して、不正なIPアドレスをブロックします。
# Install Fail2ban
sudo apt-get update && sudo apt-get install -y fail2ban
# Create local configuration override
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
/etc/fail2ban/jail.localを設定します。
[DEFAULT]
# Ban IP for 1 hour after 5 failures in 10 minutes
bantime = 1h
findtime = 10m
maxretry = 5
banaction = ufw
[sshd]
enabled = true
port = 22
mode = aggressive
Fail2banのステータスを再起動して確認します。
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
5. 自動セキュリティパッチ適用: unattended-upgrades
OpenSSL、Linuxカーネル、または標準システムライブラリのゼロデイ脆弱性は定期的に発見されます。手動のapt upgradeコマンドに頼ると、メンテナンス期間中にサーバーが脆弱なパッケージを実行することが保証されます。
自動セキュリティパッチ適用を有効にします。
sudo apt-get install -y unattended-upgrades update-notifier-common
sudo dpkg-reconfigure --priority=low unattended-upgrades
/etc/apt/apt.conf.d/50unattended-upgradesを編集します。
// Automatically install critical security updates
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
// Automatically remove unused dependencies
Unattended-Upgrade::Remove-Unused-Dependencies "true";
// Automatically reboot if a kernel update requires it (at 03:00 AM)
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
6. カーネルとネットワークパラメータの強化 (sysctl)
SYNフラッド、IPスプーフィング、中間者パケットリダイレクトからLinuxネットワークスタックを強化するために、これらのパラメータを/etc/sysctl.d/99-security.confに追加します。
# /etc/sysctl.d/99-security.conf
# Ignore ICMP echo broadcasts (Prevents Smurf attacks)
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Protect against SYN flood denial of service
net.ipv4.tcp_syncookies = 1
# Disable ICMP redirect acceptance (Prevents routing table poisoning)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# Enable IP spoofing protection (Reverse Path Filtering)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Disable source routing packet acceptance
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Restrict dmesg kernel log access to root
kernel.dmesg_restrict = 1
再起動せずにsysctlの変更をすぐに適用します。
sudo sysctl --system
Linux強化検証マトリックス
| 強化ステップ | 検証コマンド | 期待される出力 |
|---|---|---|
| ルートSSH無効 | ssh root@<IP> | Permission denied (publickey) |
| パスワード認証無効 | ssh -o PubkeyAuthentication=no deployer@<IP> | Permission denied (publickey) |
| ファイアウォール有効 | sudo ufw status | Status: active (Deny incoming) |
| Fail2ban実行中 | sudo fail2ban-client ping | Server replied: pong |
| 自動アップグレード設定済み | systemctl is-active unattended-upgrades | active |
よくある質問
デフォルトのSSHポートを22からランダムなポートに変更すべきですか?
SSHを非標準ポート(例:ポート2222)に移動すると、/var/log/auth.logでの自動ボットノイズは減少しますが、これはセキュリティ・バイ・オブスキュリティです。標的型ポートスキャンから保護するものではありません。SSHキーの強制、パスワードの無効化、Fail2banの実行は、ポート番号に関係なく真のセキュリティを提供します。
ロックアウトせずにファイアウォールを安全にテストするにはどうすればよいですか?
リモートサーバーでUFWを設定する際、接続が失われた場合にUFWをリセットするスケジュールされたcronジョブまたはバックグラウンドスリープコマンドを実行します。
sudo sh -c "sleep 300 && ufw disable" &
新しいルールでロックアウトされた場合、タイマーがUFWを無効にしてアクセスを復元するまで5分待ちます。接続が機能することを確認したら、バックグラウンドタスクをキャンセルします。
SSHキーはどのくらいの頻度でローテーションすべきですか?
最新のEd25519キーは数学的に期限切れになりませんが、組織はチームメンバーが退職した場合、または標準的なセキュリティ監査の一環として年に一度、キーをローテーションすべきです。エンタープライズフリートには、OpenSSH認証局またはハードウェアセキュリティキー(FIDO2対応のYubiKey)の使用を検討してください。
こちらもおすすめです
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

SSHとSCP:開発者が本当に理解すべき2つのツール
ポート22、鍵認証、SSHconfigファイル、安全なファイル転送、サーバー強化のヒントなど、開発者が知っておくべきSSHとSCPの要点を解説するガイド。
Read more
本番環境におけるeBPF:低オーバーヘッドなLinuxオブザーバビリティ、トレーシング、カーネルプロファイリング
eBPFを使用して、オーバーヘッドを最小限に抑えたLinuxカーネルのオブザーバビリティを実装します。システムコールのレイテンシ測定、メモリ割り当ての追跡、サイドカーなしでのネットワークソケット監視を解説します。
Read more
Kubernetesにおけるゼロトラストセキュリティの実装: 完全なプロダクションガイド
Kubernetesにおけるフラットネットワークの境界セキュリティを排除するための実用的なガイドで、default-deny NetworkPolicies、SPIFFE/SPIREワークロードアイデンティティ、厳格なmTLSについて解説します。
Read more