Ubuntu VPSのセキュリティ設定 — 初期構築で必ずやること

  • URLをコピーしました!

VPSを契約してUbuntuをインストールしたものの、「とりあえず動いたから大丈夫」と思っていませんか?

実は、その“初期状態”のままでは思わぬリスクにさらされていることがあります。特にSSHの設定やファイアウォール、アップデートの未整備は、外部からの攻撃の格好の的になりがちです。

この記事では、「Ubuntu VPSを安心して使い始めるために最低限やっておくべきこと」を、実践的にまとめました。まずは必要なところから、一緒にセキュリティ対策を始めてみましょう。

この記事を読むとわかること

  • SSHのパスワードログイン無効化と公開鍵認証の設定方法
  • UFWを使ったポート制限とファイアウォール運用の基本
  • fail2banや自動アップデートによる不正アクセス・脆弱性対策
目次

Ubuntu VPSのセキュリティ設定はどこまで必要か

VPSを契約した直後、Ubuntuをインストールしただけの状態は、意外と脆い構成のままです。

SSHは誰でもアクセス可能な状態で開いており、ファイアウォールも初期設定では無効になっていることが多く、運用前に何らかのセキュリティ対策を施すのは前提になります。

とはいえ、最初からすべてを完璧にこなすのは現実的ではありません。まずは「最低限どこまでやれば“使って大丈夫な状態”になるか」を押さえ、それを基準に少しずつ理解を深めていくのが現実的な進め方だと思います。

初期状態のUbuntuが抱えるリスクとは

Ubuntu自体は堅牢なOSですが、「初期状態で安全か」と問われると、答えはNoです。

VPSでインターネットに晒されている場合、狙われやすいのがSSHポート(デフォルトで22番)です。何も設定しないままだと、世界中からの総当たり攻撃(ブルートフォース)が即座に始まります。

加えて、未使用のポートが無防備に空いていたり、自動アップデートが無効な状態だったりすることも多いです。たった1つの設定ミスや放置が、思いもよらない侵入経路になってしまうのです。

自分も最初は「Ubuntuならセキュアだろう」と思い込んでいましたが、上司から「そのまま公開するのは危険すぎる」と指摘されて、一から見直すことになりました。

「最低限やっておくべき設定」とは何か

では、何をすれば「最低限は安心」と言えるのでしょうか。

以下の4点を抑えておけば、少なくとも「不用心なサーバー」ではなくなります。

  1. SSHのパスワードログインを無効化し、公開鍵認証を使う
  2. UFW(Uncomplicated Firewall)で必要なポートだけを開ける
  3. 自動アップデートを有効化する、もしくは定期的にアップデートを確認する
  4. fail2banの導入で、一定回数失敗したアクセス元を自動でブロックする

これらは、すべて無料で、Ubuntu標準のツールやaptで簡単に導入できるものばかりです。

まず行うべきSSHの基本設定

SSHの設定は、VPSを立てたあと最初に手を入れるべきポイントです。ここをちゃんとしておくだけで、不正アクセスのリスクはぐっと下がります。

SSHのパスワードログインを無効化する

パスワード認証は、一見便利に見えますが、総当たり攻撃に非常に弱いという弱点があります。よほど強力なパスワードを使わない限り、ブルートフォースで突破される可能性が高くなります。

そこで、公開鍵認証に切り替えることで、パスワードが無くても安全な接続が可能になります。この方式では、ローカルにある秘密鍵と、サーバーに登録された公開鍵がセットでなければログインできません。

SSH設定ファイルの中で、以下のようにパスワードログインを無効にできます。

# /etc/ssh/sshd_config の一部を変更
PasswordAuthentication no
PermitRootLogin no

このあと、鍵認証が正しく動いているかテストしてから、設定を有効(SSHサービスの再起動)にしてください。

いきなり切り替えると、ログイン不能になる危険がありますのでご注意ください。

公開鍵認証の設定手順とコマンド

クライアント側で鍵を作り、それをサーバーへ配置する流れです。Ubuntu環境なら、以下の手順でセットアップできます。

# ローカルで鍵を生成(.sshディレクトリに作られる)
ssh-keygen -t rsa -b 4096

# 公開鍵をサーバーに送る(ユーザー名とIPは適宜変更)
ssh-copy-id user@your.server.ip

# 鍵を使って接続できるか確認
ssh user@your.server.ip

公開鍵の配置後は、~/.ssh/authorized_keys に登録されていることを確認してください。失敗するとログイン不能になるので、別のターミナルでログイン状態を維持したまま作業すると安心です。

実は使っていないポートを空けっぱなしだった話

自分が最初にVPSを構築したとき、Nginxだけ使っていたのに、PostgreSQLやSMTPなどのポートが無防備に開いていました。これはインストール時にデフォルトで開いてしまっていたもので、ファイアウォールを設定していなかったためそのまま放置していたためでした。

実際にss -tulnnmapで調べてみると、予想以上に“いらない穴”が空いていることに驚きます。

こうした不要ポートはUFWで塞ぐか、そもそも該当サービスをアンインストールしておくのが基本です。

ファイアウォール(UFW)の設定と運用のコツ

次にやるべきなのが、ファイアウォールの設定です。Ubuntuでは、UFW(Uncomplicated Firewall)というツールが標準で使えます。

UFWで押さえておくべきルールの考え方

UFWの基本は「許可された通信だけ通す」です。

つまり、“何をブロックするか”ではなく“何を許すか”を決めるのが鉄則です。

実際にやってみるとわかりますが、最初にUFWを有効にした瞬間に、SSH接続すら切断されてしまうことがあります。なので、UFWを有効にする前に、必ずSSHポートを許可しておきましょう。

# SSH(ポート22)を許可
sudo ufw allow 22

# UFWを有効化
sudo ufw enable

# 現在のルールを確認
sudo ufw status verbose

このルールを一度設定しておけば、あとは使っていないポートを塞いだり、新しいサービスを導入したときだけルールを追加すればOKです。

必要なポートだけを開ける設定例

例えば、SSHとHTTP(Web)しか使わない構成なら、以下のように設定を絞ります。

# 必要なポートだけを許可
sudo ufw allow OpenSSH
sudo ufw allow http

# それ以外はデフォルトで拒否(デフォルト設定を確認)
sudo ufw default deny incoming
sudo ufw default allow outgoing

この設定にするだけで、外部からの不要なアクセスはかなり減らせます。特に、自分が使っていないサービスのポートを空けっぱなしにしない意識が大切です。


セキュリティアップデートの管理

意外と見落とされがちなのが、ソフトウェアのアップデートです。Ubuntuは日々脆弱性に関する修正が行われており、それを取り込まないまま運用を続けると、どれだけ設定を頑張っても穴が空いたままになります。

VPSのように常時インターネットに接続された環境では、OSやパッケージの最新のセキュリティパッチを適用しておくことが前提になります。とはいえ、毎日 apt update するのも現実的ではないので、Ubuntuが用意してくれている自動アップデート機能を活用するのが安全かつ手軽な方法です。

自動アップデートを有効にする方法(unattended-upgrades)

Ubuntuでは unattended-upgrades という仕組みが標準で使えます。これを有効にすることで、セキュリティに関する更新だけを自動でインストールできます。

# 必要なパッケージをインストール
sudo apt install unattended-upgrades

# 自動起動の設定(必要な場合)
sudo dpkg-reconfigure --priority=low unattended-upgrades

これで、セキュリティ関連のアップデートがあると、自動でバックグラウンドで処理してくれるようになります。

さらに細かい挙動を調整したい場合は、以下のファイルを編集することで、ログの場所や再起動の有無などをコントロールできます。

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

自動にしない場合でも、定期的な確認は必須

もし自動化せず、手動で管理したいなら、少なくとも週に1回は以下のようなコマンドで確認と更新を行うことをおすすめします。

# パッケージ情報の更新
sudo apt update

# 利用可能なアップデートを表示
apt list --upgradable

# アップデートを実行
sudo apt upgrade

この運用が意外と忘れがちなので、カレンダーにリマインダーを入れておくと安心です。

fail2banで不正アクセスを自動ブロック

ファイアウォールとSSHの設定に加えて、fail2banを導入すると、「一定回数の不正ログイン試行を自動でブロック」できるようになります。

SSH攻撃への対応として何を防げるか

fail2banは、ログファイルを監視して、繰り返しログインに失敗しているIPアドレスを検出し、自動で一時的にBANしてくれます。特にSSHに対するブルートフォース攻撃に強力です。

私の環境でも、ログを見ると海外IPからの不審なアクセスが1日に数十件単位であることに驚きました。fail2banは、そうした攻撃に対して“静かに対処してくれる”守護者のような存在です。

導入から設定までの流れ

導入は非常に簡単で、以下のようにインストール・設定できます。

# インストール
sudo apt install fail2ban

# SSH用の基本的な設定ファイルを作成(コピーしてカスタマイズ)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

jail.local の中に、以下のようなSSH設定があることを確認します。

[sshd]
enabled = true
port    = ssh
filter  = sshd
logpath = /var/log/auth.log
maxretry = 5

この設定で、5回失敗したIPは自動で一定時間ブロックされるようになります。設定を変更したら、sudo systemctl restart fail2ban で再起動してください。

まとめ:Ubuntu VPSのセキュリティを安心レベルにするには

セキュリティ対策というと難しそうに感じますが、「SSH設定」「ファイアウォール」「fail2ban」「アップデート管理」の4点だけを押さえれば、少なくとも“素の状態”からはかなり安全に近づけます

設定が完了したあとは、実際に外部からポートスキャンをしてみる、nmapで意図しないポートが開いていないか確認する、ログに異常が出ていないかを見る…といった“振り返り”が大切になります。

自分も、最初は「設定したつもり」でも小さな穴が残っていたことが何度もありました。でも、そうやって試行錯誤するうちに、サーバーの動き方や脆弱性のポイントが少しずつ見えてきました。

不安を感じたときこそ、今どこまでできているかをチェックして、小さくても次の対策を積み重ねていく・・。
それだけでも、VPSのセキュリティは確実に“安心できるレベル”に近づいていきます。

セキュリティ対策が終わったら…

初期設定が完了したあとは、実際の運用フェーズで発生しがちな「動作が重い」「応答が遅い」といったトラブルにも備えておきましょう。

再起動せずにUbuntuの高負荷の原因を特定する方法については、以下の記事で詳しく紹介しています:

この記事を書いた人

業務システムとWebアプリの開発に20年以上携わるフリーランスエンジニア。
製造業や物流業界のシステム保守・改修を中心に、要件定義から運用改善まで幅広く対応してきました。Laravelや業務改善、AI活用など、現場で実際に試し・使い続けている技術や設計の工夫を、トラブル対応の視点も交えてブログに記録しています。

日々の業務で直面した「困ったこと」をベースに、再現性のあるノウハウをシンプルな言葉で伝えることを意識しています。

目次