ローカル環境(Linuxサーバー)でDifyを運用する際、セキュリティ対策は避けて通れません。「動けばいい」で放置していると、不正アクセスやリソース枯渇のリスクにさらされます。
この記事では、Dify環境を堅牢に守るための「鉄壁の3騎士」とも呼べる3つのオープンソースツールを紹介し、その導入手順を解説します。
- Netdata (監視): リアルタイムでサーバーの健康状態を可視化
- Fail2Ban (防御): 攻撃者を検知して自動的にBAN(遮断)
- Trivy (予知): コンテナや設定の脆弱性を事前にスキャン
1. Trivy (予知):脆弱性を事前にチェック
まずは「守るべき対象(Dify)」自体に穴がないかを確認します。Trivyは、Dockerイメージや設定ファイルに含まれる既知の脆弱性をスキャンするツールです。
詳しいインストール方法やスキャン手順については、以下の詳細記事で解説しています。まずはここからチェックを始めましょう。
2. Fail2Ban (防御):攻撃を自動遮断
次に、外部からの攻撃に対する「盾」を用意します。Fail2Banはログを監視し、不正なログイン試行などを検知すると、そのIPアドレスをファイアウォールで自動的にブロックします。
インストールと設定
# インストールと設定ファイルの準備
sudo apt update && sudo apt install fail2ban -y
sudo cp /etc/jail.conf /etc/jail.local
設定ファイル(/etc/fail2ban/jail.local)を編集し、基本的な防御ルールを記述します。
[DEFAULT]
# 1時間に5回攻撃してきたIPを、24時間遮断する
findtime = 3600
maxretry = 5
bantime = 86400
# ホワイトリスト ← 自身のIPを除外(重要!)
ignoreip = 127.0.0.1/8 ::1 <あなたのPCのIPアドレス>
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
logpath = /var/log/nginx/error.log
[nginx-botsearch]
enabled = true
logpath = /var/log/nginx/access.log
起動と確認
sudo systemctl restart fail2ban
# 正しく動いているか確認
sudo fail2ban-client status
Jail listに sshd, nginx-http-auth, nginx-botsearch の3つが表示されていれば稼働中です。これで、パスワード総当たり攻撃などの脅威からサーバーが守られます。
fail2banの運用(起動/停止)
fail2banは通常、常時起動されますが、必要な内容がブロックされてしまった場合には、以下の停止、起動を実施します。
# 接続のブロックを解除
sudo fail2ban-client unban --all
# 一旦停止
sudo systemctl stop fail2ban
# jail.localに対してチェックを除外する様に「ホワイトリスト」に追加
sudo nano /etc/fail2ban/jail.local
# 起動
sudo systemctl start fail2ban
3. Netdata (監視):サーバーの健康状態を可視化
最後に、サーバー内部の状況をリアルタイムで監視する「目」を取り付けます。Netdataは、CPU負荷やトラフィック、Dockerコンテナの状態を美しいグラフィカルなダッシュボードで表示してくれます。
netdataは、リアルタイムパフォーマンスモニタリングができるツールで、長期間の監視データの蓄積などはできないので、過去のパフォーマンスグラフを参照すると言ったことはできません。
インストール
# インストールスクリプトの実行(数分かかります)
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel --no-updates
※途中で「Do you want to enable automatic updates?」と聞かれたら、勝手に設定が変わらないよう no を選択して進めて大丈夫です。
ファイアウォールの開放
netdataは、APIを使用しクライアントのブラウザに表示されるため、FireWall等でポートの開通をする必要があります。
LinuxのFireWallの設定は、以下のコマンドを実行してください。
# Netdataのポート(19999)を許可
sudo ufw allow 19999/tcp
# 設定を反映
sudo ufw reload
※サーバ側で接続Portを制限している場合には、19999のportも開放して下さい。
2. ダッシュボードへのアクセス確認
インストールが終わると、ブラウザから以下のURLで現在のサーバーの状況が見られるようになります。
- URL:
http://あなたのサーバーIP:19999

※画面右下の「Skip and use the dashboard anonymously」を選択するとダッシュボードが表示されます。
Difyコンテナ名の表示設定
標準のままだと、Difyのコンテナが「ID(英数字の羅列)」で表示されてしまい、どれが api か db か分かりにくいです。これを名前で表示するように設定します。
# NetdataがDockerグループにアクセスできるようにする
sudo usermod -aG docker netdata
# 設定を反映させるためにNetdataを再起動
sudo systemctl restart netdata
Fail2Banとの連携
Fail2Ban を導入した場合は、「今、何件ブロックしているか」をグラフで見られるようにします。
# Fail2Banログへのアクセス権限をNetdataに与える
sudo usermod -aG adm netdata
sudo systemctl restart netdata
ダッシュボードへのアクセス
ブラウザで http://{サーバーIP}:19999 にアクセスすると、以下のようなダッシュボードが表示されます。

右側のメニューから「Docker Containers」を選べば、Difyの各コンテナ(api, worker, weaviateなど)のリソース消費状況が一目瞭然です。また、「Fail2Ban」セクションでは、ブロックした攻撃の数を確認でき、守られている実感が湧きます。
まとめ
この3つのツールを導入することで、Difyの運用環境は劇的に安全になります。
- Trivyで穴を塞ぎ、
- Fail2Banで攻撃を弾き、
- Netdataで異常を即座に察知する。
どれも無料で利用でき、サーバーへの負荷も軽微です。ぜひ導入して、安心安全なAIライフを送ってください。
【推奨】業務システム化に有効なアイテム
生成AIを学ぶ



システム化のパートナー



VPSサーバの選定





コメント