セキュアなノード運用方法: Bitcoin / LNノードハードニング

セキュアなノード運用方法: Bitcoin / LNノードハードニング

本記事ではBitcoinノードやLNノードを運用しているサーバーをハッカーの攻撃から守るためのセキュリティ対策方法をまとめます。

はじめまして、日本ビットコイン産業株式会社の押川拓夢です。普段はビットコイン研究所で記事を書いているのでよければそちらも読んでみてください。

https://bitcoin-research.jp/author/wokashi/

ハードニングとは?

ハードニングとは、システムやネットワーク、アプリケーションの設定を適切に制限し、攻撃されにくい状態にすることです。

Bitcoin / LNノードをUmbrelやミニPC、自宅サーバーで運用している方は多いと思います。しかし、LNノードは以下の理由で攻撃対象になりやすいです。

Bitcoin / LNノードをUmbrelやミニPCを自宅で運用している方は多いと思います。LNノードのNode IDはtorを利用していない場合「公開鍵@IPアドレス:ポート番号(9735)」となっており、IPアドレスもポート番号も公開されてしまいます。

また、流動性提供の手数料で儲けを出したい人にとって、Tor接続でもroutingは可能ですが、低レイテンシや高可用性を重視するroutingノードではパブリックIPが選択されることが多いです。Lightningノードはチャネル資金およびオンチェーン資金をオンライン環境で管理することが多く、一般的なホットウォレットよりも攻撃対象になりやすい特徴があります。

VPS + 自宅ノードの推奨構成

自宅IPを公開してノードを運用することは推奨されません。

推奨構成:

  • VPSに固定IPを持たせる

  • WireGuard / Tailscaleで接続

  • 自宅ノードは非公開

メリット:

  • 自宅ネットワーク保護

  • DDoS耐性

  • IP変更不要

  • セキュリティ境界の分離

Lynis: セキュリティ監査ツール

LynisはLinuxサーバーのセキュリティ状態をチェックする監査ツールです。システムの設定やログ、サービス、カーネル、ネットワークなどを包括的に検査し、脆弱性や改善点をレポートとして提示してくれます。特にBitcoinノードやLightningノードのように長期間稼働するサーバーでは、定期的な監査によって設定の抜け漏れを防ぐことが重要です。

インストール:

sudo apt install lynis

実行:

sudo lynis audit system

出力の見方

  • Warnings(赤色): 今すぐ直した方がいい
  • Suggestions(黄色): セキュリティ強化の提案

検査がしばらく続き、以下のような結果出力される。

no warningsになっている状態が望ましい。おそらくデフォルトではいくつかwarningsがある。

以下のように表示されていたらその脆弱性に対処する必要があります。

Warnings (1): ----------------------------

Hardinig indexというスコアのようなものが出力されます。

  • 60以下: 危険
  • 70台: 普通
  • 80以上: 良好
  • 90以上: かなり堅牢

ただ注意が必要なのが、スコアが高いからといって攻撃されない、されにくいと言うわけではないです。あくまでよくある脆弱性をもとにLynisが設定している脆弱性項目をどれほど潰せているかの指標でしかないです。

⚠️注意:Umbrelでは影響する可能性があるため、慎重に設定してください。(もちろん誤った設定をした場合の事故に関して責任は取れません。)

また、セキュリティーの設定といえばufwの設定は重要ですが、本記事では省略します。

リスク評価の考え方

一般的なリスク評価は以下で表されます。

リスク値 = 情報資産価値 × 脅威 × 脆弱性

ハードニングでできるのはあくまで脆弱性を少なくすることです。

以下ではハードニングスコアを上げるおすすめの設定を記載済ます。あくまでおすすめなので設定する必要があるかは個人の判断です。また、脳死で実行するとバグる可能性も大いにあります。実行する際は自分で調べてから必要な場合のみ設定してください。

オススメのセキュリティツール

fail2ban(重要)

sudo apt install fail2ban

ログを監視し、不正アクセス(SSH・RPCなど)を自動ブロックします。ブルートフォース攻撃対策として必須です。

fail2ban設定

sudo cp -n /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
ignoreip = 127.0.0.1/8 ::1 YOUR_HOME_IP
sudo systemctl restart fail2ban

確認:

sudo fail2ban-client status

auditd(重要)

インストール

sudo apt install auditd audispd-plugins

起動:

sudo systemctl enable auditd

確認:

sudo auditctl -l

Linuxの監査ログを取得し、

  • ファイル変更

  • 権限変更

  • 不正操作

を記録します。侵入後のフォレンジックに必須です。

rkhunter(任意)

sudo apt install rkhunter

rootkit検出ツールです。

libpam-tmpdir(任意)

sudo apt install libpam-tmpdir

ユーザーごとに /tmp を分離し、情報漏洩を防ぎます。

apt-listbugs(任意)

sudo apt install apt-listbugs

APT実行時に重大なバグを警告します。

apt-listchanges(任意)

sudo apt install apt-listchanges

アップデート内容を確認できます。

SSH Hardening(最重要)

sudo vim /etc/ssh/sshd_config
PasswordAuthentication no 
PubkeyAuthentication yes 
PermitRootLogin no 

AllowTcpForwarding no 
AllowAgentForwarding no 
X11Forwarding no 

ClientAliveInterval 300 
ClientAliveCountMax 2 
LogLevel VERBOSE 
TCPKeepAlive no 

MaxAuthTries 3 
MaxSessions 2 
AllowUsers <user>

設定確認:

sudo sshd -t 
sudo systemctl restart ssh

SSHポート変更も推奨します。

Users, Groups and Authentication (優先度: 中) 

umask(重要)

umaskは、新しく作成されるファイルやディレクトリのデフォルト権限を制御する重要なセキュリティ設定です。適切に設定することで、意図しない情報漏洩や権限の過剰付与を防ぐことができます。

Linuxでは、ファイルは通常「666」、ディレクトリは「777」からumaskの値を引いた権限で作成されます。そのため、umaskの設定が緩いと、他ユーザーがファイルを読み取れる状態になる可能性があります。

特にBitcoinノードやLightningノードのように秘密鍵やウォレット情報を扱う環境では、他ユーザーからのアクセスを制限することが非常に重要です。

sudo vim /etc/login.defs
UMASK 027

この設定では以下のような権限になります。

  • ファイル: 640(所有者: 読み書き、グループ: 読み取り、その他: なし)

  • ディレクトリ: 750(所有者: フル、グループ: 読み取り・実行、その他: なし)

これにより、同一グループ内での共有は可能にしつつ、それ以外のユーザーからのアクセスを防ぐことができます。

PAM password strength

弱いパスワードを拒否する PAM モジュール導入(任意)。

sudo apt install libpam-pwquality

File Permissions (優先度: 中) 

sshd_config, cron関連のファイル権限を最小に設定しておく。

sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 600 /etc/crontab
sudo chmod 700 /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.weekly /etc/cron.monthly

Accounting

上述したauditdのインストールについてです。

sudo apt install auditd audispd-plugins

起動:

sudo systemctl enable auditd

確認:

sudo auditctl -l

Kernel Hardening(優先度: 高) 

Linuxカーネルの権限設定をしてセキュリティを向上しようという話。侵入された後に情報収集と攻撃を防ぐことが目的。です

⚠️ここは特にWireGuard、LND、Docker、Umbrelに影響する可能性があるので慎重に実行する必要があります。

sudo vim /etc/sysctl.d/99-lynis-hardening.conf

以下はあくまで設定例:

# ---- Kernel information leakage ----
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1

# ---- eBPF hardening ----
kernel.unprivileged_bpf_disabled = 1
net.core.bpf_jit_harden = 2

# ---- Core dumps ----
fs.suid_dumpable = 0
kernel.core_uses_pid = 1

# ---- Dangerous features ----
kernel.sysrq = 0

# ---- Network hardening ----
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.forwarding = 0

各設定を書くと長くなるので念の為「続き」の箇所に書いていますが、AIに聞くのがおすすめです。

設定を反映

sudo sysctl --system

まとめ

ノードを運用し始めてからようやく分かるオンラインの環境でBitcoinを運用する怖さがあります。LNノードのnode IDの構成、そしてノードの安全な運用方法にはやはりまだまだ課題がありますね。

せめてもの対策としてLynisを活用した継続的な監査は重要です。

この続き : 873字 / 画像 0枚
100

会員登録 / ログインして続きを読む

関連記事

記事を書いた人

日本ビットコイン産業株式会社 R&D事業部・ライトニング事業部の押川拓夢です。

SNSにシェア

このクリエイターの人気記事

lndmon / Prometheus / Grafanaを用いたLNDノードの監視環境の構築手順