この記事は、メイン記事『【構築】ConoHa VPSではじめるDifyコミュニティ版 導入・起動ガイド』の補足記事です。 Difyをインターネット上で安全に公開・運用するために強く推奨される、以下の3つの初期セキュリティ設定について詳しく解説します。
- SSHのセキュリティ強化: 不正アクセスを防ぐため、サーバーへの入り口を固めます。
- OS標準ファイアウォール(UFW)の設定: 必要な通信(Dify用)以外をすべて遮断します。
- Dockerの
sudoなし実行設定: Difyの管理を便利にします。
1. SSHのセキュリティ強化(ポート変更・rootログイン禁止)
サーバー契約時のデフォルト設定(22番ポート、パスワード認証可)は、世界中からの攻撃対象となり非常に危険です。必ず設定を変更してください。
前提条件: ConoHa VPSの契約時にSSHキーを登録し、ローカルPCからSSHキーを使ってroot(またはdifyadmin)でログインできることを確認していること。
ステップ 1.1: SSH設定ファイルを開く
difyadmin ユーザー(または root)でサーバーにログインし、SSHの設定ファイル sshd_config を編集します。
# 'vi' (または 'nano') エディタで設定ファイルを開きます
sudo vi /etc/ssh/sshd_config
ステップ 1.2: SSHポートの変更
攻撃者は決まって 22 番ポート(SSHの標準ポート)を狙ってきます。これを推測されにくい番号(例: 10022など、1024〜65535の間)に変更します。
# viエディタ内で「/Port 22」と入力して検索
- #Port 22
+ Port 10022
Port 22の行を探し(コメントアウト#されている場合は解除し)、番号を変更します。
ステップ 1.3: rootユーザーでの直接ログインを禁止
万が一パスワードが漏洩しても、最高権限の root で直接ログインされるのを防ぎます。
# viエディタ内で「/PermitRootLogin」と入力して検索
- #PermitRootLogin prohibit-password
+ PermitRootLogin no
PermitRootLoginの行を探し、値をnoに変更します。
ステップ 1.4: パスワード認証の禁止(SSHキー認証のみに限定)
パスワードを使った総当たり攻撃を完全に無効化し、SSHキーを持つPCからしかログインできないようにします。これが最も重要な設定です。
# viエディタ内で「/PasswordAuthentication」と入力して検索
- #PasswordAuthentication yes
+ PasswordAuthentication no
PasswordAuthenticationの行を探し(コメントアウト#されている場合は解除し)、値をnoに変更します。
ステップ 1.5: 設定を保存し、SSHサービスを再起動
vi エディタで、Esc キーを押し、:wq と入力してEnterを押し、保存終了します。
# 変更した設定をSSHサービスに反映させます
sudo systemctl restart sshd
[重要] 接続テスト(ロックアウト防止) 絶対に現在ログイン中のターミナルは閉じないでください。 別の新しいターミナルウィンドウを開き、変更後の設定でSSHログインできるかを必ずテストします。
# 別のターミナルから、変更後のポートとSSHキーでログインを試す ssh -i [あなたの秘密鍵のパス] -p 10022 difyadmin@[サーバーのIPアドレス]もしログインに失敗した場合は、開いたままの古いターミナルで
sshd_configの設定を見直してください。
2. OS標準ファイアウォール(UFW)の詳細設定
ConoHaが提供する「セキュリティグループ」(サーバーの外側)とは別に、OS内部のファイアウォール(UFW)も設定することで、セキュリティを二重に強化します。
ここでは、「新しく設定したSSHポート」と「Difyが使うWebポート(80/443)」以外のすべての着信を拒否します。
ステップ 2.1: UFWの初期設定
# 1. まず、すべての着信を拒否(deny)し、発信(outgoing)は許可する設定にします
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. 【最重要】ステップ1で変更した「新しいSSHポート」を許可します
# (これを忘れると、UFW有効化後にサーバーからロックアウトされます)
sudo ufw allow 10022/tcp # (例: 10022番ポートの場合)
# 3. Difyが使用するWebポートを許可します
sudo ufw allow 80/tcp # (HTTP用)
sudo ufw allow 443/tcp # (HTTPS用。SSL化ガイドで必須)
ステップ 2.2: UFWの有効化
# 1. UFWを有効にします
sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?(SSH接続が切断されるかも)と警告されますが、yを入力してEnterを押します。
ステップ 2.3: UFWの状態を確認
# 1. 設定が正しく反映されているか確認します
sudo ufw status verbose
Status: activeと表示され、Toの欄に許可したポート(例:10022/tcp,80/tcp,443/tcp)のみがALLOW INとなっていれば成功です。
3. Dockerを sudo なしで実行する設定
メイン記事の手順では、Difyの起動に sudo docker compose up -d のように毎回 sudo が必要でした。これは、difyadmin ユーザーにDockerを操作する権限がないためです。
以下の設定を行うと、difyadmin ユーザーが sudo なしで docker コマンドを実行できるようになり、管理が便利になります。
ステップ 3.1: difyadmin ユーザーを docker グループに追加
ConoHaのDockerイメージでは、最初から docker というグループが作成されています。
# 1. 'difyadmin' ユーザーを 'docker' グループに追加します
sudo usermod -aG docker difyadmin
[注意] セキュリティ上の意味
dockerグループに所属するユーザーは、実質的にrootと同等の権限を持つことになります(Dockerコンテナを通じてホストOSを操作できるため)。信頼できるユーザーのみをこのグループに追加してください。
ステップ 3.2: 設定を反映させる(再ログイン)
グループの変更をOSに認識させるため、サーバーから一度ログアウトし、再度ログインします。
# 1. ログアウト
exit
# 2. 再度SSHで 'difyadmin' としてログイン
# ssh -i [あなたの秘密鍵のパス] -p 10022 difyadmin@[サーバーのIPアドレス]
ステップ 3.3: 動作確認
再ログイン後、sudo を付けずに docker コマンドが実行できるか確認します。
# 1. dify/docker ディレクトリに移動
cd dify/docker
# 2. "sudo" なしでコンテナの状態を確認
docker compose ps


コメント