Linuxホームサーバーを安全に守るための完全ガイド

ホームサーバーを構築する理由はたくさんあります。メディアサーバー、ファイルサーバー、あるいはローカルバックアップサーバーとして活用することもできるでしょう。基本的に、インターネット上に置く必要のないファイルは、すべてホームサーバー向きのデータだと言えます。最近ではLinuxを使ったホームサーバーの構築自体は比較的簡単になりました。しかし、そのサーバーを安全に保ち続けることは別問題です。セキュリティは重要であると同時に、決して簡単ではないテーマなのです。
必要最小限のものだけをインストールする
ホームサーバーのセキュリティを維持する最も簡単な方法の一つは、最初の段階からセキュリティを意識することです。これはインストール作業から始まります。「このアプリケーションやサービスが必要かどうかわからない」と感じたら、インストールしないことです。後からいつでも追加できます。
Linuxのインストール経験が何度かあれば、この作業はさらに楽になります。デフォルト設定に頼らず、「エキスパートモード」などと呼ばれる、インストール内容を細かく制御できるモードを選びましょう。
インストールオプションを慎重に管理しておけば、後になってセキュリティ上の理由からサービスを一つずつ無効化する手間を大幅に省けます。
sudoを設定する
他の作業に進む前に、まずsudoを設定しておく必要があります。なぜなら、この記事の手順を完了すると、SSH経由でのみサーバーにログインすることになり、rootアカウントでは直接ログインできなくなるからです。以降のシステム変更はすべてsudo経由で行うことになります。
まず、現在のユーザーがすでにsudoを使えるかどうか確認しましょう。USERNAMEを自分のユーザー名に置き換えて、以下のコマンドを実行します。
sudo -lU USERNAME
「(ALL) ALL」といった表示が出れば、sudoは利用可能です。次に進みましょう。
続いて、サーバー上でrootアカウントとして以下を実行し、「/etc/sudoers」ファイルを編集します。nano以外のエディタが好みであれば、置き換えてください。
EDITOR=nano visudo
USERNAMEを自分のユーザー名に置き換えたうえで、以下の行を追記します。
USERNAME ALL=(ALL) ALL
SSHを設定する

ホームサーバーでSSHがすでに有効になっているかもしれません。実際、サーバーとのやり取りは通常SSH経由で行うため、有効になっている可能性は高いでしょう。
まず、OpenSSHがインストールされていることを確認します。ディストリビューションによってコマンドは異なりますが、パッケージ名はほぼ共通しています。Ubuntuでは以下を実行します。
sudo apt install openssh-server
パスワード認証よりも公開鍵認証の方がはるかに安全なため、SSHを鍵認証方式で動作するよう設定します。ここからの作業は、サーバー本体ではなく、サーバーへの接続に使うクライアント側で行ってください。まず、すでにSSH鍵を持っていないか確認します。
ls ~/.ssh/
一覧の中に「id_rsa」と「id_rsa.pub」が見つかれば、すでに鍵ペアが存在します。次のステップはスキップしてください。
ssh-keygen -t rsa -b 4096 -C "youremail@domain.com"
次に、生成したSSH鍵をサーバーへコピーします。
ssh-copy-id USERNAME@SERVER
ホームサーバーの場合、ホスト名ではなくIPアドレスで接続していることも多いでしょう。サーバー名が不明な場合は、SERVERの部分をIPアドレスに置き換えてください。
続いて、SSHの設定をより厳格なものにしていきます。鍵を作成したクライアントからサーバーにログインしてください。こうしておけば、設定変更後も再ログインできます。nanoをお好みのエディタに置き換えて、以下を実行します。
sudo nano /etc/ssh/sshd_config
ファイル内の該当箇所を編集し、以下の設定を反映させます。各項目はファイル内のあちこちに散らばっているため、重複がないよう注意してください。同じ設定が複数ある場合、最初に出現した行だけが有効になります。
ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no PermitRootLogin no
なお、新しいバージョンのOpenSSHでは「ChallengeResponseAuthentication」が廃止予定となり、代わりに「KbdInteractiveAuthentication no」を使用する場合があります。お使いの環境に合わせて設定してください。
最後に、以下のコマンドでSSHサーバーを再起動します。
Ubuntuでは次のように実行します。
sudo systemctl restart ssh
ファイアウォールを設定する
稼働しているサービスの種類や、サーバーがインターネットとやり取りする頻度によっては、ファイアウォールの導入を検討すべきです。選択肢はいくつかありますが、Linuxで長年の実績がある定番はiptablesです。
iptablesの詳細な設定は本記事の範囲外ですが、心配はいりません。iptablesを設定するための専用ガイドもぜひ参考にしてください。
もう少し手軽な方法としては、ufw(Uncomplicated Firewall)を使うのがおすすめです。以下のコマンドでインストールできます。
sudo apt install ufw
ufwはデフォルトですべてのポートをブロックします。WebアクセスとSSHアクセスを許可するには、ポート80(HTTP)、443(HTTPS)、22(SSH)を開放します。
sudo ufw allow 80 sudo ufw allow 443 sudo ufw allow 22
最後に、ufwサービスを有効化します。
sudo ufw enable
常に最新の状態を保つ

サーバーは正常に動き続けていると、つい存在を忘れがちです。しかしそれは危険な状態です。ソフトウェアは必ず最新の状態に保ちましょう。「unattended-upgrades」による自動アップデートも使えますが、挙動が予測できない場面もあります。最も確実なのは、週次または月次で定期的なメンテナンス時間を設け、システム全体が最新であることを確認する習慣をつけることです。
次のステップへ
ここまでの作業で、外部からの脅威に対してサーバーを守る土台は整いました。ただし、「外出先から自宅のサーバーにアクセスしたい」というニーズが出てきたらどうすればよいでしょうか?開けた扉はすべて攻撃者に利用される可能性があり、開放するポートが増えるほど脆弱性も高まります。
外部からホームネットワークへ安全にアクセスする最も簡単な方法の一つがVPNの活用です。VPNの構築は本記事の範囲外ですが、信頼性の高いVPNサービスの比較リストを参考にすれば、自分に合った選択肢が見つかるはずです。
-
Windows 10でSSHセキュアシェルを使う方法!おすすめクライアント5選を徹底解説
パソコンをリモートデスクトップに接続したり、ネットワーク経由でデータを共有したりするには、セキュアシェル(SSH)が必要です。この記事では、Windows 10でSSHセキュアシェルを使用する方法について詳しく解説します。 SSHセキュアシェルは、デバイスとインターネットを含む任意のネットワーク間の通信システムと考えることができます。通信が暗号化されているため安全であり、ハッカーやスパイウェア、アドウェア、マルウェアなどから、ユーザーがどのサイトや場所にアクセスしているか、どこからデータを受信しているかといった情報を守ることができます。 Linux系OSはWindowsよりも安全性が高いと言わ
-
SSHサーバーを使って動かなくなったWindows PCにアクセス・復旧させる方法
システムが突然クラッシュし、どんなコマンドにも応答しなくなることは珍しくありません。さらに困るのは、大事なファイルにアクセスしたいのにPCがまったく動かせない状態になってしまったときです。しかし、心配はいりません。SSHサーバーを活用すれば、不具合を起こしたWindows PCにもアクセスでき、事態を打開できる可能性があります。まずは、SSHについて簡単におさらいしておきましょう。SSHサーバーとは?SSH(Secure Shell)は、安全性の確保されていないネットワーク上でも、ネットワークサービスを安全に操作できるように設計された暗号化通信プロトコルです。代表的な用途としては、別のコンピュ