#署名つきデータの更新の状態を見る
Server Edition は、カーネルの CVE マップ、Web ルール、KEV の一覧などを、署名を確かめてから受け取ります。これが 署名つきの脅威データの自動更新 です。受け取るのは roamswitch-updater で、roamswitch-update.timer が1日に1回動かします。
タイマーは、起動の 15 分後に初めて動き、そのあとは 24 時間ごとです。台数が多くても同じ時刻に集まらないよう、最大 3 時間ずらします(タイマーの設定 OnBootSec=15min、OnUnitActiveSec=24h、RandomizedDelaySec=3h)。
初めて入れた直後の状態です。初めて入れるときは、パッケージの処理が、署名つきデータを 1 回取りに行きます。
ls /var/lib/roamswitch/*.VERSION
systemctl list-timers roamswitch-update.timer --all --no-pager
sudo roamswitch doctor | grep 署名/var/lib/roamswitch/cve_kernel_map.VERSION
/var/lib/roamswitch/epss_scores.VERSION
/var/lib/roamswitch/kev_catalog.VERSION
/var/lib/roamswitch/package_cve_map_homebrew.VERSION
/var/lib/roamswitch/package_cve_map_ubuntu.VERSION
/var/lib/roamswitch/web_rules.VERSION
NEXT LEFT LAST PASSED UNIT ACTIVATES
Thu 2026-11-12 04:19:39 UTC 2h 21min - - roamswitch-update.timer roamswitch-update.service
1 timers listed.
[正常] 署名つきデータの更新は動いています。最後の成功: 2026-11-12 01:57 UTC*.VERSION のファイルが、もうあります。入れたときの 1 回の取得で、届いたものです。タイマーの LAST は - のままです。この取得はタイマーではなく、パッケージの処理が動かしたためです。
パッケージの処理は、取得を始めるだけで、終わりを待ちません。apt の直後に見ると、まだ届く途中のこともありました。そのときは *.VERSION が一部だけで、doctor は「まだ1度も動いていません」と出ます。数秒後には、6 つそろいました。
1 回だけ、手で動かします。
sudo systemctl start roamswitch-update.service
sudo journalctl -u roamswitch-update.service --no-pager -o cat | grep -E "installed|already"
for f in /var/lib/roamswitch/*.VERSION; do echo "$f: $(cat $f)"; done
sudo roamswitch doctor | grep 署名2026-11-12T01:57:47.396749Z INFO cve kernel map installed: 2026-11-09 (7763393 bytes)
2026-11-12T01:57:48.437448Z INFO Ubuntu package-CVE map installed: 2026-11-09 (8628608 bytes)
2026-11-12T01:57:48.795744Z INFO Homebrew CVE map installed as package_cve_map_homebrew.json (Linux uses its node, php and gitlab rows for the runtime checks): 2026-11-11 (1973025 bytes)
2026-11-12T01:57:49.148917Z INFO web rules installed: 2026-11-11 (33126 bytes)
2026-11-12T01:57:49.386060Z INFO KEV list installed: 2026-11-10.1903 (29654 bytes)
2026-11-12T01:57:49.641100Z INFO EPSS scores installed: 2026-11-11 (573614 bytes)
2026-11-12T01:58:28.739960Z INFO web rules already at 2026-11-11
2026-11-12T01:58:28.739993Z INFO KEV list already at 2026-11-10.1903
2026-11-12T01:58:28.740000Z INFO EPSS scores already at 2026-11-11
/var/lib/roamswitch/cve_kernel_map.VERSION: 2026-11-09
/var/lib/roamswitch/epss_scores.VERSION: 2026-11-11
/var/lib/roamswitch/kev_catalog.VERSION: 2026-11-10.1903
/var/lib/roamswitch/package_cve_map_homebrew.VERSION: 2026-11-11
/var/lib/roamswitch/package_cve_map_ubuntu.VERSION: 2026-11-09
/var/lib/roamswitch/web_rules.VERSION: 2026-11-11
[正常] 署名つきデータの更新は動いています。最後の成功: 2026-11-12 01:58 UTCログの前の 6 行は、入れたとき(01:57)の取得です。後の 3 行が、いま手で動かした分です。版が変わっていないので、何も受け取らずに「already at」で終わりました。それでも、doctor の「最後の成功」は 01:58 に進みます。(この VM のジャーナルには、前に入れたときの行も残っていました。抜粋は、最後に入れたときの分だけです。)
*.VERSION には、データごとの版(日付)が1行ずつ入ります。package_cve_map_homebrew.VERSION は、ログの「Homebrew CVE map」の版です。名前は Homebrew ですが、Linux では、その中の node・php・gitlab の行を、実行中のプログラムの検査に使います(ログの文)。
doctor の時刻は UTC です。この例は、日本時間の 11 月 12 日 10 時 58 分です。
doctor の更新の行は、状態によって分かれます(ソースの文言。上の 3 つは、この講座の VM でも出ました)。
| 表示 | 意味 |
|---|---|
| 正常 「更新は動いています」 | 直近の実行が成功した |
| 正常 「運用者の設定で止めてあります」 | cve_kernel_map_updates_enabled が false |
| 正常 「まだ1度も動いていません」 | 1 度も成功していない。入れたときの取得がまだ終わっていないか、行われず、タイマーの最初の実行を待っている |
| 注意 「直近の実行が失敗しました」 | 失敗の理由と、最後の成功の時刻が出る |
| 注意 「更新タイマー … が止まっています」 | 動かすコマンドが一緒に出る |
| 注意 「最後の実行は … で、1週間以上たっています」 | タイマーは動いているが、実行が止まっている |
#通信先を確かめて、止めて、戻す
更新は、受け取るだけです。外へ出るのは roamswitch-updater の HTTPS の GET だけで、待ち受けるポートはありません。設定とログで、そのとおりかを見ます。
変更を伴う操作です(設定を変えて、デーモンを再起動します)。最後に元へ戻します。
まず、通信先を見ます。デバッグのログを出して、updater を手で1回動かします。手で動かすと、systemd の制限の外で動くので、確かめるときだけに使います。
sudo RUST_LOG=debug /usr/bin/roamswitch-updater 2>&1 | sed -n "/writing prelude/,/^\$/p" | head -20
sudo ss -ltnupH | grep -c roamswitch
sudo ss -xlpH | grep roamswitch2026-11-12T01:58:40.442031Z DEBUG writing prelude: GET /updates/v1/manifest HTTP/1.1
Host: lafine.net
User-Agent: RoamSwitch-Updater
Accept: */*
2026-11-12T01:58:40.667525Z DEBUG Streaming body until content-length: 6968
2026-11-12T01:58:40.667545Z DEBUG response 200 to GET https://lafine.net/updates/v1/manifest
2026-11-12T01:58:40.667566Z DEBUG adding stream to pool: https|lafine.net|443 -> Stream(RustlsStream)
2026-11-12T01:58:40.667581Z DEBUG pulling stream from pool: https|lafine.net|443 -> Stream(RustlsStream)
2026-11-12T01:58:40.667586Z DEBUG sending request (reused connection) GET https://lafine.net/updates/v1/manifest.sig
2026-11-12T01:58:40.667588Z DEBUG writing prelude: GET /updates/v1/manifest.sig HTTP/1.1
Host: lafine.net
User-Agent: RoamSwitch-Updater
Accept: */*
2026-11-12T01:58:40.909261Z DEBUG Body entirely buffered (length: 89)
2026-11-12T01:58:40.909293Z DEBUG adding stream to pool: https|lafine.net|443 -> Stream(RustlsStream)
2026-11-12T01:58:40.909299Z DEBUG response 200 to GET https://lafine.net/updates/v1/manifest.sig
2026-11-12T01:58:40.913498Z INFO web rules already at 2026-11-11
2026-11-12T01:58:40.913524Z INFO KEV list already at 2026-11-10.1903
2026-11-12T01:58:40.913529Z INFO EPSS scores already at 2026-11-11
0
u_str LISTEN 0 4096 /run/roamswitch/events.sock 14720 * 0 users:(("roamswitch-serv",pid=1798,fd=25))読み方は次のとおりです。
- 通信先は
lafine.netだけです。署名つきの一覧(manifest)と、その署名(manifest.sig)を、同じ接続で取ります。データの版が変わっていなければ、ここで終わります - 送るヘッダーは
Host、User-Agent: RoamSwitch-Updater、Acceptだけです。問い合わせの文字列もありません - TCP と UDP の待ち受けは 0 件です。あるのは、同じマシンの中だけで使う UNIX ソケットです
次に、更新を止めます。設定のキーは cve_kernel_map_updates_enabled で、既定は true です。反映には再起動が要ります。
sudo roamswitch server config get cve_kernel_map_updates_enabled
sudo roamswitch server config set cve_kernel_map_updates_enabled false
grep -o '"enabled": [a-z]*' /var/lib/roamswitch/updates.json | head -1
sudo systemctl restart roamswitch-server; sleep 5
grep -o '"enabled": [a-z]*' /var/lib/roamswitch/updates.json | head -1
sudo journalctl -u roamswitch-server --since "-30s" --no-pager -o cat | grep -i "CVE data updates"
sudo RUST_LOG=debug /usr/bin/roamswitch-updater 2>&1 | tail -5
grep '"lastSuccess"' /var/lib/roamswitch/updates.json
sudo roamswitch doctor | grep 署名true
✓ サーバー設定を更新・保存しました。 (cve_kernel_map_updates_enabled = false)
反映するには: sudo systemctl restart roamswitch-server または sudo roamswitch server restart
"enabled": true
"enabled": false
2026-11-12T01:58:42.089522Z INFO roamswitch_server_daemon: CVE data updates: disabled by the operator — no network contact; using the embedded baseline (kernel CVE map, web rules, KEV list, EPSS scores, Ubuntu package-CVE map)
2026-11-12T01:58:47.344666Z INFO updates disabled — nothing to do, no network contact
"lastSuccess": "2026-11-12T01:58:40.913591712+00:00",
[正常] 署名つきデータの更新は、運用者の設定で止めてあります(server.conf: cve_kernel_map_updates_enabled = false)。更新のための接続はせず、同梱のデータで動きます。保存しただけでは、updates.json は true のままです。デーモンが起動するときに、server.conf の値を updates.json へ写します。止めたあとの updater は、通信せずに終わりました。lastSuccess は、止める前に手で動かした 01:58 のままです。doctor は、設定で止めてあることを示します。
元に戻します。
sudo roamswitch server config set cve_kernel_map_updates_enabled true
sudo systemctl restart roamswitch-server; sleep 5
grep -o '"enabled": [a-z]*' /var/lib/roamswitch/updates.json | head -1
sudo roamswitch doctor | grep 署名 ✓ サーバー設定を更新・保存しました。 (cve_kernel_map_updates_enabled = true)
反映するには: sudo systemctl restart roamswitch-server または sudo roamswitch server restart
"enabled": true
[正常] 署名つきデータの更新は動いています。最後の成功: 2026-11-12 01:58 UTC戻したあとの「最後の成功: 01:58」は、止める前の実行の時刻です。止めていた間に updater が「何もしない」で終わった実行では、updates.json の lastRun も lastSuccess も書き換わりません。doctor の時刻が古ければ、止めていた期間があったと読めます。
#デーモンが落ちても戻ることを確かめる
自己監視と自動再起動 は、Server Edition では systemd とデーモンが分けて受け持ちます。異常終了したデーモンを、systemd が起動し直します(Restart=always、RestartSec=3)。ユニットは Type=notify と WatchdogSec=30 で、デーモンが 30 秒応えなければ、ハングとみなして起動し直します。起動し直したデーモンは、前回が異常終了だったことを、通知で知らせます。
変更を伴う操作です(デーモンを止めます)。最後に systemctl start で戻します。
systemctl cat roamswitch-server | grep -E "^(Restart|RestartSec|Type|NotifyAccess|WatchdogSec)="
systemctl show roamswitch-server -p NRestarts -p MainPID
sudo kill -9 $(systemctl show roamswitch-server -p MainPID --value)
sleep 1; systemctl is-active roamswitch-server
sleep 4; systemctl is-active roamswitch-server
systemctl show roamswitch-server -p NRestarts -p MainPID
sudo journalctl -u roamswitch-server --since "-15s" --no-pager -o short-iso | grep -E "systemd\[1\]"Type=notify
NotifyAccess=main
WatchdogSec=30
Restart=always
RestartSec=3
MainPID=3297
NRestarts=0
activating
active
MainPID=3631
NRestarts=1
2026-11-12T01:59:47+00:00 ubuntu systemd[1]: roamswitch-server.service: Main process exited, code=killed, status=9/KILL
2026-11-12T01:59:47+00:00 ubuntu systemd[1]: roamswitch-server.service: Failed with result 'signal'.
2026-11-12T01:59:47+00:00 ubuntu systemd[1]: roamswitch-server.service: Consumed 1.917s CPU time, 59.3M memory peak, 0B memory swap peak.
2026-11-12T01:59:50+00:00 ubuntu systemd[1]: roamswitch-server.service: Scheduled restart job, restart counter is at 1.
2026-11-12T01:59:50+00:00 ubuntu systemd[1]: Starting roamswitch-server.service - RoamSwitch Server Edition Daemon (eBPF Runtime Guard & FIM)...
2026-11-12T01:59:51+00:00 ubuntu systemd[1]: Started roamswitch-server.service - RoamSwitch Server Edition Daemon (eBPF Runtime Guard & FIM).PID が変わり、NRestarts が 1 増えました。落ちてから起動し直すまでは、約 3 秒でした。Type=notify なので、デーモンが準備を終えて知らせるまでは activating です。
通知の履歴を見ます。
sudo roamswitch notifications | sed -n 5,10p 2026-11-12T01:59:50.883309296+00:00
RoamSwitch Server が異常終了し、再起動しました
ホスト: ubuntu (IP: 192.168.64.26)
RoamSwitch Server が異常終了し、systemd が再起動しました。いまは動いています。
終了した理由は `sudo journalctl -u roamswitch-server --since "2026-11-12 01:59:06"` で確かめてください。
時刻: 2026-11-12 01:59:50起動し直した時刻に、1 件の通知が入りました。この VM の中の Webhook の受け取り側にも、同じ本文が届きました。--since の時刻は、落ちる前の起動の時刻です。通知の履歴は、読む人の言語で出ます(LANG=en_US.UTF-8 なら英語)。Webhook に送る本文は、server.conf の language の言語です。
続けて 2 回目の kill -9 をすると、通知は増えませんでした。デーモンのログには「told together with the next notice (at most one an hour)」と出ます。落ち続けるときも、通知は 1 時間に 1 回にまとめます。systemctl restart のあとには、通知は出ませんでした。
systemctl stop で止めたときは、戻りません。運用者が止めたものとして扱われるからです。
sudo systemctl stop roamswitch-server; sleep 6; systemctl is-active roamswitch-server
sudo nft list tables | grep -c roamswitch
sudo systemctl start roamswitch-server; sleep 5; systemctl is-active roamswitch-serverinactive
6
active止めている間も、RoamSwitch の nft のテーブルは 6 つ残っていました。サービスを止めても、ネットワークの規則は消えません。systemctl stop は運用者の操作なので、起動し直したあとも、異常終了の通知は出ません。
長く止めたときは、別の通知が出ます。ログ改ざん監視が有効なとき、3 分以上止めてから起動すると、「RoamSwitch のデーモンが止まっていました」と、止まっていた時間(この VM では約 4 分)が、次の起動のときに届きました。止まっている間は、何も知らせられません。
systemctl stop や disable だけでは、nft のテーブルはカーネルに残ります。規則を書き直すものがいなくなるだけです。RoamSwitch を外すときは、次の章の roamswitch uninstall を使います。
#apt で版が上がったときに見ること
アップグレードは apt で行います。パッケージは、動いているデーモンだけを再起動します。止めてあったサービスは、止めたままにします。サービスが無効なときは、有効にするコマンド(sudo systemctl enable --now roamswitch-server.service)を1行で示します。例外は更新のタイマーで、更新が有効なら動かします(パッケージのスクリプト)。
変更を伴う操作です(パッケージを入れ替えます)。リポジトリにある版は1つだけです(apt-cache policy roamswitch-server)。前の版に戻して上げ直すことは、apt ではできません。そこで、同じ版を --reinstall で入れ直します。パッケージの処理は、版が上がったときと同じ道を通ります(出力の「was upgraded」)。新しい版が出たときは、sudo apt-get update && sudo apt-get upgrade のあとに、同じことを確かめます。
sudo apt-get install --reinstall -y roamswitch-server 2>&1 | grep RoamSwitch
systemctl is-enabled roamswitch-server; systemctl is-active roamswitch-server
sudo roamswitch doctor | grep -E "パッケージ|デーモン|署名|失敗"RoamSwitch Server Edition was upgraded. Check: roamswitch doctor
enabled
active
[正常] パッケージ roamswitch-server のファイルは、インストール時のままです
[正常] RoamSwitch のデーモンが動いています
[正常] 署名つきデータの更新は動いています。最後の成功: 2026-11-12 01:58 UTC
失敗はありません(注意 2 件)見るのは3つです。
- パッケージのファイル: 入れ替えたファイルが、パッケージのとおりかを示します
- デーモン: 入れ替えたプログラムで、動き直しています
- 署名つきデータ: 受け取ったデータは、入れ替えでは消えません。「最後の成功」の時刻は、入れ直す前と同じ 01:58 でした
1 分ほど待って、もう一度実行します。
sleep 60; sudo roamswitch doctor | grep -E "パッケージ|デーモン|署名|失敗"[正常] パッケージ roamswitch-server のファイルは、インストール時のままです
[正常] RoamSwitch のデーモンが動いています
[正常] 署名つきデータの更新は動いています。最後の成功: 2026-11-12 01:58 UTC
失敗はありません(注意 3 件)1 分後は、注意が 3 件に増えました。増えたのは fail2ban の行です。SSH の守りが起動して状態を書き出すまで、直後の doctor には出ませんでした。残りの 2 件は、外向き通信の遮断リストが空であることと、Web ルールです(この VM は Webhook を設定してあるので、緊急通知の経路の注意は出ません)。入れ直しで増えた注意はありません。
サービスを無効にしてから入れ直すと、パッケージは起動せず、roamswitch-server.service is not enabled, so it does not protect this host. To turn it on: sudo systemctl enable --now roamswitch-server.service と出ました。
アップグレードや再起動の直後は、まだ状態を書き出していない項目があります。直後の 1 回で終えず、1 分ほど待ってから、もう一度実行して比べます。件数が変わったら、増えた行を読みます。
#アンインストールの前後を比べる
元に戻せるアンインストール は、roamswitch uninstall で行います。プログラムを消す前に、ネットワークを元へ戻し、囮ファイルと、セットアップが足した設定ファイルを取り除きます。囮ファイルは、中身に RoamSwitch の印があるものだけを消します。
- 付けない:
/etc/roamswitch(設定)と/var/lib/roamswitch(状態、履歴、受け取ったデータ)を残します。入れ直す予定があるとき - 付ける: その2つも消します。マシンを手放すとき、最初からやり直したいとき
どちらでも、ネットワークの規則、サービス、囮ファイルは取り除きます。apt のリポジトリの設定と署名鍵は、どちらでも残ります。
変更を伴う操作です(RoamSwitch を消します)。使い捨ての VM で試してください。元に戻すには、apt install で入れ直します。
比べるための、状態を書き出すスクリプトを用意します。本物のファイルが消えないことも見るため、囮と同じ場所に、AWS の公開サンプルの鍵で、ダミーの /root/.aws/credentials を置きます。
sudo mkdir -p /root/.aws
printf '[default]\naws_access_key_id = AKIAIOSFODNN7EXAMPLE\naws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\n' | sudo tee /root/.aws/credentials >/dev/null
cat > /tmp/snap.sh <<'EOF'
echo "## nft"; sudo nft list tables | grep roamswitch
echo "## units"; systemctl list-unit-files 'roamswitch*' --no-legend | awk '{print $1, $2}'
echo "## etc"; sudo ls -A /etc/roamswitch 2>&1
echo "## varlib"; sudo ls -A /var/lib/roamswitch 2>&1 | tr '\n' ' '; echo
echo "## decoys"; sudo find / -xdev -name '.roamswitch_security_canary_do_not_delete.*' 2>/dev/null | sort
echo "## awsdummy"; sudo ls -l /root/.aws/credentials 2>&1
echo "## pkg"; dpkg-query -W -f '${db:Status-Abbrev} ${Package}\n' roamswitch-server 2>&1
EOF
sh /tmp/snap.sh## nft
table inet roamswitch_server
table inet roamswitch_metadata_watch
table inet roamswitch_egress_block
table inet roamswitch_portscan
table inet roamswitch_dev_guard
table inet roamswitch_dnstunnel
## units
roamswitch-server.service enabled
roamswitch-update.service static
roamswitch-webgate.service disabled
roamswitch-update.timer enabled
## etc
.roamswitch_security_canary_do_not_delete.pdf
.roamswitch_security_canary_do_not_delete.xlsx
.roamswitch_security_canary_do_not_delete.zip
guard.yaml.example
hooks
server.conf
server.conf.example
## varlib
allowlist_clock canary cve_kernel_map.VERSION cve_kernel_map.json ebpf_heartbeat.json epss_scores.VERSION epss_scores.json exec_log fim.db honeytokens_watch.pid incident_timeline.json incident_timeline.json.lock kev_catalog.VERSION kev_catalog.json last_cve_refresh log_tamper_baseline.json notification_history.json package_cve_map_homebrew.VERSION package_cve_map_homebrew.json package_cve_map_ubuntu.VERSION package_cve_map_ubuntu.json port_guard.json quarantine server.conf.last-good server_abnormal_exit.json server_running.json suid_baseline.json updates.json updates.json.lock web_rules.VERSION web_rules.json
## decoys
/etc/roamswitch/.roamswitch_security_canary_do_not_delete.pdf
/opt/.roamswitch_security_canary_do_not_delete.pdf
/root/.roamswitch_security_canary_do_not_delete.pdf
/srv/.roamswitch_security_canary_do_not_delete.pdf
## awsdummy
-rw------- 1 root root 116 Nov 12 02:06 /root/.aws/credentials
## pkg
ii roamswitch-server囮ファイルは、4 つのフォルダーに 3 つずつ、計 12 個ありました(抜粋では .pdf だけを載せています)。
--purge を付けずに消します。
sudo roamswitch uninstall --yes
sh /tmp/snap.sh 次のものを取り除きます:
- RoamSwitchのサービスとタイマー(停止して無効化)
- 通信を止めうる全ての変更(ファイアウォール、DNS、隔離)
- 配置した囮ファイル(中身にRoamSwitchの印があるものだけ。本物のファイルには触れません)
- セットアップが追加した設定ファイル(aptのフック、Falco、logrotate)
- プログラム本体(パッケージマネージャーで)
(設定・状態・履歴は残します。消すには --purge)
現在の状態:
隔離の記録はありません(残った規則は、ここで取り除きます)
✓ RoamSwitchのサービスの停止と無効化
✓ 隔離の記録
✓ 通信を止めうるファイアウォールのテーブル
✓ DNSの設定
✓ 接続の追跡
✓ RoamSwitchのファイアウォールのテーブル(残り全部)
✓ 配置した囮ファイル(ランサムウェア用・認証情報用)
✓ システムに追加した設定ファイル
プログラム本体を削除しています...
✓ プログラム本体 (apt)
✓ RoamSwitchを削除しました。
aptのリポジトリ設定(/etc/apt/sources.list.d/roamswitch.list)と署名鍵は、そのまま残しています。
## nft
## units
## etc
hooks
server.conf
## varlib
allowlist_clock canary cve_kernel_map.VERSION cve_kernel_map.json ebpf_heartbeat.json ebpf_status.json epss_scores.VERSION epss_scores.json exec_log fim.db honeytokens_watch.pid incident_timeline.json incident_timeline.json.lock kev_catalog.VERSION kev_catalog.json last_cve_refresh log_tamper_baseline.json notification_history.json package-removed package_cve_map_homebrew.VERSION package_cve_map_homebrew.json package_cve_map_ubuntu.VERSION package_cve_map_ubuntu.json port_guard.json quarantine server.conf.last-good server_abnormal_exit.json suid_baseline.json updates.json updates.json.lock web_rules.VERSION web_rules.json
## decoys
## awsdummy
-rw------- 1 root root 116 Nov 12 02:06 /root/.aws/credentials
## pkg
rc roamswitch-server前と後で、次のように変わりました。
| 見た場所 | 消す前 | uninstall のあと |
|---|---|---|
| nft のテーブル | roamswitch_* が 6 つ | なし |
| systemd のユニット | 4 つ | なし |
| 囮ファイル | 12 個 | なし |
/etc/roamswitch | 設定と囮 | server.conf と hooks が残る |
/var/lib/roamswitch | 状態とデータ | 残る(server_running.json が消え、package-removed と ebpf_status.json が増える) |
ダミーの /root/.aws/credentials | あり | 残る(印がないため) |
| パッケージ | ii | rc(設定ファイルだけ残る) |
/var/lib/roamswitch に増えた package-removed は、パッケージを消したときに置かれる印です。次の入れ直しで、パッケージがこれを見て消します。消す前にあった server_running.json は、デーモンが動いている間の印で、正常に止まったので消えました。server_abnormal_exit.json は、異常終了の通知の記録です。
入れ直します。
sudo apt-get install -y roamswitch-server
systemctl is-enabled roamswitch-server; systemctl is-active roamswitch-server
sleep 3; systemctl is-active roamswitch-serverCreated symlink /etc/systemd/system/multi-user.target.wants/roamswitch-server.service → /usr/lib/systemd/system/roamswitch-server.service.
Created symlink /etc/systemd/system/timers.target.wants/roamswitch-update.timer → /usr/lib/systemd/system/roamswitch-update.timer.
RoamSwitch Server Edition was installed again with the settings kept by the earlier removal; the service is enabled and running. Check: roamswitch doctor
enabled
active
active残した設定で、サービスが有効になり、動き出しました。apt の最後の行も、有効で動いていることを示します。apt は 6 秒ほどで終わり、終わった時点で active でした。更新タイマーも enabled と active でした(server.conf の cve_kernel_map_updates_enabled に従います)。server.conf の SHA-256 は、消す前と、入れ直したあとで同じでした。
最後に、--purge で消します。この回は、別の処理が dpkg のロックを持っている間に実行します。練習用に、python3 で 25 秒だけロックを持ちます。
sudo python3 -c 'import fcntl,time; f=open("/var/lib/dpkg/lock-frontend","w"); fcntl.lockf(f, fcntl.LOCK_EX); time.sleep(25)' &
sleep 2
sudo roamswitch uninstall --purge --yes
sh /tmp/snap.sh - 設定・状態・履歴(/var/lib/roamswitch、/etc/roamswitch、各ユーザーの設定)
✓ 設定・状態・履歴
プログラム本体を削除しています...
別のパッケージ管理の処理(python3)が動いています。終わるのを待ってから削除します(最長 5 分)。
✓ プログラム本体 (apt)
✓ RoamSwitchを削除しました。
## nft
## units
## etc
ls: cannot access '/etc/roamswitch': No such file or directory
## varlib
ls: cannot access '/var/lib/roamswitch': No such file or directory
## decoys
## awsdummy
-rw------- 1 root root 116 Nov 12 02:06 /root/.aws/credentials
## pkg
dpkg-query: no packages found matching roamswitch-server別の処理が動いていると、何を待っているかを 1 行で示し、終わってから削除しました(最長 5 分待ちます)。--purge では、/etc/roamswitch と /var/lib/roamswitch も消え、パッケージの記録も残りません。ダミーの鍵のファイルは、どちらでも残りました。消したあとも、同じ VM から https://lafine.net/updates/v1/manifest を HTTPS で取れました(応答 200)。
入れ直した直後の doctor は、この VM では「[正常] RoamSwitch のデーモンが動いています」と出ました。入れ直しは、サービスを有効にして起動します(apt の最後の行が「the service is enabled and running」)。止めておきたいサーバーでは、入れ直したあとで sudo systemctl disable --now roamswitch-server を実行します。
#見えない部分
使い捨ての Ubuntu 24.04(arm64)の VM で確かめた範囲では、次のようになります。
- doctor の更新の行は、正常のときも3つの意味があります。「まだ1度も動いていません」「動いています」「止めてあります」です。正常の印だけで判断せず、文と時刻を読みます
- 「最後の成功」は、データを受け取った時刻とは限りません。版が変わっていなければ、何も受け取らずに成功になります(ログは「already at」)。データの新しさは
*.VERSIONの日付で見ます - 通信先は、デバッグのログで見ました。手で動かした updater は、systemd の制限の外で動きます。タイマーから動くときは、ユニットの
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIXなどの制限の中で動きます - アンインストールは、名前に
roamswitchが付く nft のテーブルだけを消します(ソースで確認)。ほかの道具が作ったテーブルには触れません --purgeのあとは、/var/log/roamswitchも残りませんでした。apt のリポジトリの設定と署名鍵は残ります
roamswitch uninstall --yes(--purge なし)のあと、残っているものはどれですか
解説を見る
--purgeなしでは、設定と状態と履歴を残します。ネットワークの規則と囮ファイルは、どちらでも取り除きます。入れ直すと、残した設定のまま、サービスが有効になって動き出します。
sudo systemctl stop roamswitch-server のあと、正しいのはどれですか
解説を見る
Restart=alwaysで起動し直すのは、異常終了したときです。運用者が止めたときは、止めたままで、異常終了の通知も出ません。規則はカーネルに残るので、外すときはroamswitch uninstallを使います。
#次に学ぶこと
- 通知の届け先と、届いたかの確かめ方は、「通知と転送の設定」(準備中)で扱います
- ネットワークの隔離と、その解き方は、「自動隔離の方針の設定」(準備中)で扱います
- 設定ファイルの全項目は、Linux Server の運用マニュアル にあります
対応する攻撃手法 (ATT&CK): T1685
2026-11-12に確認しました。対象は Linux 1.17.39 です。使い捨ての Ubuntu 24.04(arm64)の VM で、公開の apt から 1.17.39 を purge のあと入れ直し、*.VERSION・doctor・デバッグログの通信先、cve_kernel_map_updates_enabled の切り替え、kill -9 からの再起動と異常終了の通知(履歴と VM の中の Webhook)、3 分以上の systemctl stop、--reinstall での入れ替え、uninstall と --purge(dpkg のロックを持たせた状態)の前後比較と入れ直しを、日本語と英語で実行しました。
コマンドの出力は、製品の版や環境によって変わります。違いが出たら、まず製品の版を確かめてください。