投稿者: manualmaton Page 1 of 280

GROWIスタックの運用を効率化するBashスクリプトの作成

1. はじめに

GROWI(Wikiシステム)をセルフホストする場合、本体の他にMongoDB、Elasticsearch、そしてリバースプロキシとしてのApacheなど、複数のサービスを管理する必要があります。これらを個別に手動で起動・停止するのは手間がかかり、手順ミスも起きやすくなります。

そこで、サービス間の依存関係を考慮し、安全かつ簡潔に管理するためのBashスクリプトを作成しました。

1-1. 筆者環境

  • Ubuntu 24.04
  • Growi (systemdにサービス登録済み)
  • Apacheのバーチャルホストでリバースプロキシ運用
  • mongodb
  • elasticsearch

2. スクリプトの主な特徴

  • 依存関係を考慮した起動順序:
    • DB → 検索エンジン(起動待ち含む) → Apache設定 → GROWI本体の順で確実に立ち上げます。
  • Apache設定の動的切り替え:
    • a2ensite / a2dissite を活用し、サービス停止時にはApache自体は止めず、GROWIへのアクセスパスのみをクリーンに遮断します。
  • 対話モードとコマンドライン引数の両対応:
    • 単体実行ではメニューが表示され、引数を渡せば自動実行が可能です。
  • エラーハンドリング: 各ステップで実行状態をチェックし、異常があれば即座に中断・通知します。

3. 管理スクリプト: manage-growi.sh

systemctlをいじるので、root権限で作っておきます。

#!/bin/bash

# ==============================================================================
# GROWIスタック管理スクリプト
# 対応サービス: MongoDB, Elasticsearch, Apache2, GROWI
# ==============================================================================

# --- [ 設定セクション ] ---
APACHE_CONF_NAME="growi.conf"
SITE_NAME="${APACHE_CONF_NAME%.conf}"
SERVICES=("mongod.service" "elasticsearch.service" "apache2.service" "growi.service")

# カラー出力設定
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# --- [ ユーティリティ関数 ] ---

log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_err()  { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }
log_ok()   { echo -e "${GREEN}[SUCCESS]${NC} $1"; }

# 実行権限チェック
if [[ $EUID -ne 0 ]]; then
   log_err "このスクリプトの実行にはroot権限(sudo)が必要です。"
fi

# サービスの状態確認
is_active() {
    systemctl is-active --quiet "$1"
    return $?
}

# --- [ メイン機能 ] ---

start_services() {
    log_info "GROWIスタックの起動を開始します。"

    # 1. MongoDB
    log_info "データベース (MongoDB) を起動中..."
    systemctl start mongod.service
    is_active mongod.service || log_err "MongoDBの起動に失敗しました。"

    # 2. Elasticsearch
    log_info "検索エンジン (Elasticsearch) を起動中..."
    systemctl start elasticsearch.service
    # 応答待ち(最大75秒)
    for i in {1..15}; do
        if is_active elasticsearch.service; then break; fi
        [[ $i -eq 15 ]] && log_err "Elasticsearchの起動がタイムアウトしました。"
        sleep 5
    done

    # 3. Apache (設定の有効化)
    log_info "Apacheのリバースプロキシ設定を有効化しています..."
    if [ ! -L "/etc/apache2/sites-enabled/${APACHE_CONF_NAME}" ]; then
        a2ensite "${SITE_NAME}" > /dev/null
    fi
    systemctl reload apache2.service || systemctl start apache2.service

    # 4. GROWI 本体
    log_info "GROWI本体を起動中..."
    systemctl start growi.service
    sleep 3
    if is_active growi.service; then
        log_ok "すべてのサービスが正常に起動しました。"
    else
        log_err "GROWIの起動に失敗しました。ログを確認してください。"
    fi
}

stop_services() {
    log_info "GROWIスタックを停止します。"

    # サービス影響を最小限にするため、リバースプロキシから先に遮断
    log_info "GROWI本体を停止中..."
    systemctl stop growi.service

    log_info "Apacheの設定を無効化しています..."
    if [ -L "/etc/apache2/sites-enabled/${APACHE_CONF_NAME}" ]; then
        a2dissite "${SITE_NAME}" > /dev/null
        systemctl reload apache2.service
    fi

    log_info "バックエンドサービスを停止中..."
    systemctl stop elasticsearch.service
    systemctl stop mongod.service

    log_ok "すべての関連サービスが正常に停止しました。"
}

show_status() {
    echo -e "\n${YELLOW}--- サービス稼働状況 ---${NC}"
    printf "%-25s %s\n" "サービス名" "ステータス"
    printf "%-25s %s\n" "------------------------" "-------"
    for s in "${SERVICES[@]}"; do
        if is_active "$s"; then
            printf "%-25s ${GREEN}RUNNING${NC}\n" "$s"
        else
            printf "%-25s ${RED}STOPPED${NC}\n" "$s"
        fi
    done

    if [ -L "/etc/apache2/sites-enabled/${APACHE_CONF_NAME}" ]; then
        echo -e "Apache設定 (${APACHE_CONF_NAME}): ${GREEN}ENABLED${NC}"
    else
        echo -e "Apache設定 (${APACHE_CONF_NAME}): ${RED}DISABLED${NC}"
    fi
    echo ""
}

# --- [ エントリポイント ] ---
ACTION=${1:-"menu"}

case "$ACTION" in
    start)   start_services ;;
    stop)    stop_services ;;
    status)  show_status ;;
    restart) stop_services; start_services ;;
    menu)
        echo -e "${YELLOW}実行する操作を選択してください:${NC}"
        select opt in "Start" "Status" "Stop" "Restart" "Exit"; do
            case $opt in
                Start) start_services; break ;;
                Status) show_status; break ;;
                Stop) stop_services; break ;;
                Restart) stop_services; start_services; break ;;
                Exit) exit 0 ;;
                *) echo "無効な選択です。" ;;
            esac
        done
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac

4. 利用前の事前準備

スクリプトを使用するには、実行権限の付与と、システム上のファイル名の確認が必要です。

  1. 保存と実行権限の付与

ファイルを manage-growi.sh として保存した場合、以下のコマンドを実行します。

sudo chmod +x manage-growi.sh
  1. 設定の確認(重要)

スクリプト内の APACHE_CONF_NAME="growi.conf" が、実際に /etc/apache2/sites-available/ に存在するファイル名と一致しているか確認してください。

5.使い方(コマンド一覧)

このスクリプトは root権限(sudo) が必要です。

A. 対話型メニューで操作する

引数なしで実行すると、メニューが表示されます。

sudo ./growi-stack.sh

B. 直接コマンドを指定する

特定の操作を即座に実行したい場合に使用します。

  • 起動: sudo ./growi-stack.sh start
  • 停止: sudo ./growi-stack.sh stop
  • 状態確認: sudo ./growi-stack.sh status
  • 再起動: sudo ./growi-stack.sh restart

6. 表示・実行例

ステータス確認時の表示 (status)

現在の各サービスの稼働状況が一覧で表示されます。

--- サービス稼働状況 ---
サービス名                  ステータス
------------------------   -------
mongod.service             RUNNING
elasticsearch.service      RUNNING
apache2.service            RUNNING
growi.service              RUNNING
Apache設定 (growi.conf): ENABLED

起動処理の実行例 (start)

依存関係を考慮し、DBから順に起動していきます。

[INFO] GROWIスタックの起動を開始します。
[INFO] データベース (MongoDB) を起動中...
[INFO] 検索エンジン (Elasticsearch) を起動中...
[INFO] Apacheのリバースプロキシ設定を有効化しています...
[INFO] GROWI本体を起動中...
[SUCCESS] すべてのサービスが正常に起動しました。

7. スクリプトの主な特徴と処理順序

このスクリプトは、単なる一括起動ではなく、GROWIの依存関係を考慮した設計になっています。

順序起動時 (Start)停止時 (Stop)理由
1MongoDBGROWI本体DBがないとアプリが落ちるため / 停止は入り口から。
2ElasticsearchApache設定無効検索エンジンを準備。
3Apache設定有効Elasticsearchインフラが整ってから外部公開。
4GROWI本体MongoDB最後にアプリを立ち上げる。

8. 運用のヒント

  • トラブルシューティング: もし [ERROR] が出た場合は、個別のログを確認してください。
  • GROWIのログ: journalctl -u growi.service -f
  • Elasticsearchのログ: journalctl -u elasticsearch.service -f
  • 自動起動設定: サーバー再起動時に自動で立ち上げたい場合は、このスクリプトを使わず systemctl enable [サービス名] を各サービスに設定するのが一般的です。このスクリプトは、メンテナンス時の手動メンテナンス用として最適です。

王道、ダー・シュワーム。(アプリ版『ガイアプロジェクト』記録)

安定した強さを誇り、カットされなければ覇道を進むことができるダー・シュワーム。

しかも、マジョリティが

  • 施設数
  • 同盟の施設数

と、ダー・シュワームのためにあるようなものだったので、むしろ三番手でなぜ誰も取らなかったのかと思いながらスタート。

研究も3ゴールと上位タイル1つ(鉱山×2点)

得点は188点と、相当の点数をたたき出せました。

  • Pros
    • 受動パワーがとにかく強かった
    • 研究のタイミングがよかった
  • Cons
    • 特になし

と、ミスった部分がほぼない珍しい状況でした。

新たなPCのサプライ購入。

今月届いたノートパソコン、ThinkPad。

こちらのサプライを少し揃えました。

ダイソーで

  • ワイヤレスイヤホン
  • メモリーカードリーダー

イヤホンは元々持っていますけど、別に分けておけばペアリングの手間を省けます。

存外小さめのケースも好感触。

これに加えて

  • マウス
  • ACアダプター

一式をお気に入りのポーチにまとめることができました。

防衛戦の後始末。広域IPブロックによる外部ストレージ(Wasabi)およびNextcloudの疎通不能と復旧

クリスマスに喰らった広域IPからのDDoSを排除した話。そこでの「友軍相撃(Friendly Fire)」をやらかしたという失敗談です。

事前背景

  1. クリスマスに自分のWebサイトを狙ったDDoSを喰らいました。
  2. そのとき、ipsetで /8という超高域ブロックを実施。

このときのメモはこちらにまとめています

その結果 何が起きたか(事象)

  • s3fsの不調: Wasabi(東京リージョン)のバケットがマウントされず、df -h コマンドが数分間フリーズ(Dステート一歩手前の待機状態)。
  • Nextcloudの孤立: 管理画面に「このサーバーにはインターネット接続がありません」と警告が表示され、アプリストアやアップデートチェックなどの外部通信がすべて遮断された。
  • システム負荷: 通信のタイムアウト待ちにより、VFS(仮想ファイルシステム)レイヤーでプロセスが滞留しました。

2. 原因切り分け(診断)

調査の結果、ネットワーク層およびカーネル層での遮断を確認しました。

エンドポイント疎通確認:

curl -v を実行した際、特定のIP帯域(103.151.x.x 等)へのTCPハンドシェイクが Trying... のまま進まず、タイムアウトすることを確認。

この時点で、「ああ、超・広範囲のブロックが徒になったか」と実感です。

ブロックルールの特定:

ipset list コマンドにより、自作の防御システム『ONE OUTS』で使用している ufw-blocklist に、以下の広域ブロックが登録されていることを突き止めました。

  • 103.0.0.0/8 (Wasabi東京リージョンを含むアジア圏の広大な帯域)
  • 85.0.0.0/8 (Nextcloud公式サーバーを含む欧州圏の広大な帯域)

結論: 昨年末のDDoS攻撃を鎮圧するために設定した「第1オクテット(/8)単位のブロック」が、正常な業務通信を巻き添えにする(Friendly Fire)結果を引きおこしたのです。

3. 対処(ufw-blocklistの解除)

干渉していた巨大なブロックエントリを ipset から削除し、通信路を復旧させました。

  • Wasabi (Tokyo) への疎通を確保
sudo ipset del ufw-blocklist 103.0.0.0/8
  • Nextcloud 公式サーバーへの疎通を確保
sudo ipset del ufw-blocklist 85.0.0.0/8
  • 設定の永続化
sudo ipset save ufw-blocklist -f /etc/ufw/ipsets.save

この状態では、まだs3fsプロセスが固まっていますので、これも対処。

  • 念のためs3fsプロセスを強制終了。
sudo killall -9 s3fs
  • 固まっていたマウントを解除。
sudo fusermount -u -z /mnt/wasabi2
  • fstabに基づく再マウント
sudo mount -a

4. 復旧確認(検証)

各サービスが正常なステータスに戻ったことを確認しました。

通信確認:

curl -I https://s3.ap-northeast-1.wasabisys.com303 See Other が即座に返ることを確認。

マウント確認:

df -h が遅延なく応答し、Wasabiバケットの容量が表示されることを確認。

Nextcloud確認:

管理画面の「インターネット接続なし」の警告が消え、外部連携機能が復旧したことを確認。

なぜ気づくのが遅れたか?

「このマウントはバックアップのため、普段めったに触れなかった」に尽きます。

今回、バックアップをいじるようになってからようやく気づいた次第です。これに関しては反省。

「使ってなければそれは見えていないのと同じ」というバイアスでした。

今回の教訓

私がipsetの搭載で言及した

これは、対象のIPアドレスをシャットアウトする「慈悲なき王」です。

を身を以て体感しました。なので、これを振るう時は更に注意する必要がありました。

それにしても、「自分だけが使うサーバのため、被害が自分だけで済んで良かった」と改めて思った次第です。こちらの記事にて

「『いい鉄砲は打ち手を選ぶ』ってことわざ知ってるか?
威力のある鉄砲は その分扱いも難しく危険
だから未熟者が使うと打ち手の方がケガをするってことさ」

が自分へ向かうことのないよう、日々、管理/監視を怠らないようにする必要があると知った出来事でした。

が、まさに自分に向かっていったというお話しで、本件を締めます。

WAFの「やりすぎ」と「見逃し」を飼い慣らす:ModSecurityチューニング実践

OSSでのWAFとして非常にメジャーなModSecurityとCRS(Core Rule Set)。

デフォルトでは非常に強力な保護が得られます。しかし、そのままではRedmineやNextcloudといった「複雑なリクエストを投げるアプリ」はまともに動きません。

今回は、筆者の例を元に、偽陽性(誤検知)を回避しつつ、偽陰性(すり抜け)を最小限に抑える設定術を解説します。

筆者環境

  • Ubuntu 24.04
  • Apache 2.4
  • Mod Security v2

動いているWebアプリ

  • Nextcloud
  • Redmine
  • BookStack

と、WAFが偽陽性を誘発するようなWebアプリ群です。

1. そもそも「偽陽性」「偽陰性」とは?

WAFを運用する上で避けて通れない2つの概念です。

用語状態影響対策
偽陽性 (False Positive)正常な通信を攻撃と判定ユーザーがログインできない、投稿が消えるルールの除外設定(Exclusion)を行う
偽陰性 (False Negative)攻撃的な通信を正常と判定脆弱性を突かれ、被害が出るシグネチャの更新、独自ルールの追加

「守りを固めれば不便になり、利便性を取れば危うくなる」。このジレンマを解決するのが、筆者が設定している個別除外ルールの設計です。

2. 確実だけど偽陰性を産むやり方「ID除外」

これは筆者が2025年9月まで実施していた例です。

たとえば、自分がRedmineで投稿した記事がエラーとなってしまった。そのエラーを

awk '
/ModSecurity/ {
  if (match($0, /\[client ([0-9\.]+):/, ip_arr) && match($0, /\[id "([0-9]+)"\]/, id_arr)) {
    print id_arr[1], ip_arr[1];
  }
}' /var/log/nextcloud_error.log | sort | uniq -c

等として調査。以下の結果が出てきたとします。

     36 911100 127.0.0.1
    267 911100 aaa.bbb.ccc.ddd
     65 920420 aaa.bbb.ccc.ddd
     36 949110 127.0.0.1
    267 949110 aaa.bbb.ccc.ddd
     36 980130 127.0.0.1
    267 980130 aaa.bbb.ccc.ddd
IDルール名(概要)挙動の説明
911100Method is not allowed by policy許可されていないHTTPメソッド(GET/POST以外など)を検知します。
920420Request content type is not allowed by policyContent-Typeヘッダーが許可リストにない場合に反応します。
949110Inbound Anomaly Score Exceeded重要: これは特定の攻撃を指すものではなく、他のルールの合計スコアが閾値を超えたため「ブロックした」という最終結果を示すIDです。
980130Inbound Anomaly Score Exceeded (Reporting)949110と同様に、リクエスト全体の異常スコアが高かったことを報告するログ用のIDです。

これらの偽陽性に引っかかったIDを割り出し、/etc/apache2/sites-available/example.confなどで

 ## 最初は検知モード

 SecRuleEngine DetectionOnly
+
+## 偽陽性と判断したID
+SecRuleRemoveById 911100
+SecRuleRemoveById 920420
+SecRuleRemoveById 949110
+SecRuleRemoveById 980130
+
 </VirtualHost>

を追加するのは確実に偽陽性“は”防ぐことができます。しかし、これでは「本当に上記の脆弱性を突いた攻撃」は素通しとなってしまいます。

特に、攻撃者は、クローリングスクリプトなどで内容を確認し、「この記事があればこのルールは無効化されているはず」と当たりをつけます。定番の防御ツール、ましてやOSSともなると、

  • 偽陽性になりやすい(取り除かれやすい)ルール
  • 一発アウトになりやすい文章

は極めて多いのです。

特に、技術ブログのように

  • コマンド羅列
  • SQLコマンドをベタ打ち
  • スクリプト文の紹介

などは、投稿した瞬間にエラーとなったため、渋々SecRuleRemoveIdで検知しないようにした方は極めて多いのではないでしょうか。

3. CRSの裏をかく「防御未満の攻撃」

また、CRSは「このラインまでだったら大丈夫だ」という「甘い判断基準」が悲しいことに存在します。

以下は、ある日のModSecurityエラーログの一部です(情報は無害化済み)。

# 1. Slowloris攻撃を疑わせる矛盾したConnectionヘッダーの検知
[Wed Jan 14 12:00:00 2026] [security2:error] [client 192.0.2.100] ModSecurity: Warning. Pattern match "(?i)(?:keep-alive(?:,\\\\s*close|...)" at REQUEST_HEADERS:Connection. [id "10001"] [msg "[CUSTOM RULE] Contradictory Connection header, possible Slowloris probe."]

# 2. IPアドレスでの直接アクセスを検知
[Wed Jan 14 12:00:00 2026] [security2:error] [client 192.0.2.100] ModSecurity: Warning. Pattern match "(?:^([\\\\d.]+|...)" at REQUEST_HEADERS:Host. [id "920350"] [msg "Host header is a numeric IP address"]

# 3. アノマリスコアが閾値を超えたため遮断
[Wed Jan 14 12:00:00 2026] [security2:error] [client 192.0.2.100] ModSecurity: Access denied with code 403 (phase 2). Operator GE matched 5 at TX:blocking_inbound_anomaly_score. [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 6)"]

ログから読み取れる攻撃者の意図

  • 矛盾したConnectionヘッダー:
  • Connection: keep-alive, close という通常ではありえないヘッダーが含まれていました。これは Slowloris などのDoS攻撃ツールに見られる特徴です。
  • IPアドレスでのホスト指定:
  • ドメイン名ではなくIPアドレス(例: 203.0.113.1)を指定してアクセスしています。これはボットによる無差別なスキャンの典型的な挙動です。

この、Mod_Securityのルールの外を狙った「じわじわとリソースを削っていく」攻撃こそ遮断する必要があります。

4. 「Webは守る」「投稿はスルーする」の「両方」をやる

この「偽陽性は防ぎつつ本来の防御を確立する」ために筆者が行っている手段は「例外ルールによるチューニング」です。

前提として:

こちらのリンク先のような形でCRSを設置。筆者記事:ModSecurityインストール

cd /usr/share/modsecurity-crs/coreruleset/rules && pwd

として、

REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.confファイルを作成します。

提示コンフィグ(ドメイン匿名化済み)

以下、筆者の例です。

  • 自身の環境に合わせてください。
  • 特に、正規表現としてドメイン名を利用しています。
  • 確実な正規表現の書き方は、あなたが今見ている機器で探してください。
#
# === CRS Exclusions - Before Rules Execution (Organized) ===
#

# ===================================================================
# 1. 共通ルール・汎用ルール (General/Common Rules)
# ===================================================================

# 1-1. 遅い通信(Slowloris)対策
# 矛盾するConnectionヘッダーを持つリクエストを遮断
SecRule REQUEST_HEADERS:Connection "@rx (?i)(?:keep-alive(?:,\sclose|,\skeep-alive)|close(?:,\skeep-alive|,\sclose))" \
    "id:10001,phase:1,t:none,block,msg:'[CUSTOM RULE] Contradictory Connection header, possible Slowloris probe.',tag:'application-attack',tag:'PROTOCOL_VIOLATION/INVALID_HREQ',setvar:'tx.inbound_anomaly_score_pl1=+%{tx.critical_anomaly_score}'"

# 1-2. WordPress スキャン対策
# 存在しないWPパスへのアクセスは、問答無用でスコアを加算して404へ飛ばす
# wordpressを設置している方は、このセクションを無効化してください
SecRule REQUEST_URI "@rx /(?:wordpress|wp-admin|wp-content|wp-includes|xmlrpc\\.php)" \
    "id:10002,phase:2,pass,nolog,capture,msg:'[CUSTOM] WordPress Probe Detected. Scored +5.',tag:'ATTACK_WP_PROBE',setvar:'tx.anomaly_score_pl1=+5',setvar:'tx.lfi_score=+5',setvar:'tx.wp_probe_detected=1'"

SecRule TX:wp_probe_detected "@eq 1" \
    "id:10003,phase:2,deny,nolog,msg:'[CUSTOM] Final action: Deny with 404 status.',status:404"

# 1-3. IPアドレス直打ちアクセス対策
# ホスト名ではなくIPで直接アクセスしてくる怪しい挙動を即座にマーク
SecRule REQUEST_HEADERS:Host "@rx ^[\d.]+$" \
    "id:10004,\
    phase:1,\
    deny,\
    status:403,\
    log,\
    msg:'[CUSTOM RULE] Host header is a numeric IP address. Blocked immediately.',\
    tag:'application-attack',\
    tag:'PROTOCOL_VIOLATION/INVALID_HREQ'"

# ===================================================================
# 2. アプリ別除外: BookStack (Knowledge Base)
# ===================================================================
SecRule SERVER_NAME "@streq bookstack.example.com" \
    "id:1001,phase:1,nolog,pass,skipAfter:END_BOOKSTACK_RULES_PRE"

# PUTメソッドの許可(下書き保存用)
SecRule REQUEST_URI "@rx ^/(ajax/page|books|pages)/" \
    "id:1003,phase:1,nolog,pass,setvar:'tx.allowed_methods=%{tx.allowed_methods} PUT',ctl:ruleRemoveById=911100"

# 記事投稿時のSQLi/XSS誤検知を除外
SecRule REQUEST_URI "@rx ^/(books|ajax/page|pages)/" \
    "id:1005,phase:2,nolog,pass, \
    ctl:ruleRemoveByTag=OWASP_CRS/ATTACK-RCE, \
    ctl:ruleRemoveByTag=OWASP_CRS/ATTACK-LFI, \
    ctl:ruleRemoveByTag=OWASP_CRS/ATTACK-XSS, \
    ctl:ruleRemoveByTag=OWASP_CRS/ATTACK-SQLI, \
    ctl:ruleRemoveById=921130, \
    ctl:ruleRemoveById=934130"

SecMarker END_BOOKSTACK_RULES_PRE

# ===================================================================
# 3. アプリ別除外: Nextcloud (Cloud Storage)
# ===================================================================
SecRule SERVER_NAME "@streq nextcloud.example.com" \
    "id:3001,phase:1,nolog,pass,skipAfter:END_NEXTCLOUD_RULES_PRE"

# WebDAV関連メソッド(PROPFIND等)を許可しないと同期が壊れるため除外
SecRule REQUEST_URI "@rx ^/remote\.php/" \
    "id:3002,phase:1,nolog,pass, \
    setvar:'tx.allowed_methods=%{tx.allowed_methods} PROPFIND OPTIONS REPORT PUT DELETE MKCOL', \
    ctl:ruleRemoveById=911100,ctl:ruleRemoveById=920420"

SecMarker END_NEXTCLOUD_RULES_PRE

# ===================================================================
# 4. アプリ別除外: Redmine (Project Management)
# ===================================================================
SecRule SERVER_NAME "@rx ^(redmine|projects)\.example\.com$" \
    "id:4001,phase:1,nolog,pass,skipAfter:END_REDMINE_RULES_PRE"

# PATCHメソッド(チケット更新)の許可
SecRule REQUEST_URI "@rx ^/(issues|projects)/" \
    "id:4002,phase:1,nolog,pass,setvar:'tx.allowed_methods=%{tx.allowed_methods} PATCH',ctl:ruleRemoveById=911100"

# チケット内容(コードブロック等)がSQLiやRCEと誤認されるのを防ぐ
SecRule REQUEST_URI "@rx ^/projects/[^/]+/(issues|knowledgebase/articles|news|issue_templates)|/issues|/journals|/questions|/issue_templates" \
    "id:4003,phase:2,nolog,pass, \
    ctl:ruleRemoveByTag=OWASP_CRS/ATTACK-RCE, \
    ctl:ruleRemoveByTag=OWASP_CRS/ATTACK-SQLI, \
    ctl:ruleRemoveByTag=OWASP_CRS/ATTACK-LFI, \
    ctl:ruleRemoveByTag=OWASP_CRS/ATTACK-XSS, \
    ctl:ruleRemoveByTag=OWASP_CRS/PROTOCOL-ATTACK"

# View CustomizeプラグインでJS/CSSを編集する際の広範な除外
SecRule REQUEST_URI "@rx ^/view_customizes(?:/\d+)?$" "id:4006,phase:2,nolog,pass,t:none,chain"
  SecRule REQUEST_METHOD "@rx ^(POST|PUT|PATCH)$" \
    "ctl:ruleRemoveTargetByTag=OWASP_CRS/ATTACK-RCE;ARGS:view_customize[code],\
     ctl:ruleRemoveTargetByTag=OWASP_CRS/ATTACK-XSS;ARGS:view_customize[code]"

SecMarker END_REDMINE_RULES_PRE

なぜこれが必要なのか

  1. プロトコルの柔軟性: 標準のCRSは「GET/POST」以外のメソッド(PUT, PATCH, PROPFINDなど)を攻撃の兆候として厳しく制限します。しかし、モダンなWebアプリ(特にNextcloud)にはこれらが不可欠です。
  2. 偽陽性の温床「本文検査」: Redmineで「SQLの書き方」をチケットに書くと、WAFはそれを「SQLインジェクション攻撃」とみなしてブロックします。特定のパスに対してのみ、特定の検査(Tag)をオフにすることで、利便性を確保しています。
  3. 無駄なスキャンの排除: WordPressを使っていないサーバーへのWordPress用スキャンは、リソースの無駄です。これを早期に検知して「スコア加算+404応答」とすることで、後続の重い検査をスキップしつつ攻撃者をあしらいます。
  4. SecRuleRemoveByTag の威力: IDを1つずつ消すと、CRSがアップデートされた際に追加された「新しいSQLi検知ルール」に対応できません。今回のように OWASP_CRS/ATTACK-SQLI というタグ単位で除外することで、将来のアップデート後も「投稿機能だけは常に使える」状態を維持できます。
  5. 「404」で返す心理的効果: 攻撃者(のボット)は、403を返すと「あ、WAFがあるな」と判断して攻撃手法を変えてくることがありますが、404を返すと「このIPには何も存在しない」と判断してリストから外してくれる可能性が高まります。

設定のテストと反映

上記、設定を行ったら

  • 構文チェック
sudo apache2ctl configtest

apache 再起動

sudo systemctl restart apache2.service

apache 再起動確認

systemctl status apache2.service

active(running)を確認します。

偽陽性排除確認

実際にRedmine / Nextcloud等にアクセスして、投稿をしても偽陽性にならない(エラーにならない)を確認できれば成功です。

5. 賢いWAF運用のコツ

WAFは一度設定して終わりではありません。

ログを確認する:

/var/log/apache2/error.log や ModSecurityのアAuditログを監視し、id:xxxxx が出たら「それは本当に攻撃か?」を疑い、必要なら今回のコンフィグに除外ルールを追記します。

身内には優しく、外敵には厳しく:

特定のソースIPや、自社ドメイン宛の正常な操作(Redmineの更新など)は、今回のようにパスやメソッドで丁寧に除外を作るのが、運用を長続きさせる秘訣です。

この、例外ルールを正しく使うことで、スクリプトキディやクローラーに対して、このような大見得を切ってやりましょう。

『任務は遂行する』
…………
部下も守る
おまえごときに両方やるというのは
そうムズかしい事じゃあないな

2026年1月の統率者会メモ。

  • 釣り合った天秤、テヴァル
  • 世界播種、ハースハル
  • 元ソルジャー、クラウド

がいる中、「高名な者、ミシュラ」デッキにて対戦。

デッキリストはこちら。

身代わり合成機がある中で
金属製の巨像→無情な屍術師で巨像をサクって宝物11個、墓地に落としたミシュラを釣り上げ、残りのトークン使ってゴンティの無限心臓を発明品の唸り。後は無限ターン成立(『ミシュラの戦機』という名前のゴンティの無限心臓が出る→合成機が誘発してアーティファクトが出る→追加ターンの要件をミシュラの戦機を追放。オリジナルは残るので、後はターンを一切返さず同じ手順の繰り返し)

ライブラリーの中にシンクロ解除があるので相手のトークンもケアするまでもなく勝利。

過酷な消耗戦。全除去やピン除去でミシュラの統率者税は6マナ。眼前にはゼンディカーの報復者によるトークン軍団やハーシュハルの猛攻、装備品を山ほど積んだクラウドがいる中での逆転は『グラップラー刃牙 特別編』

プロレスは甘くない!!!
敗北ギリギリまで相手の攻撃を受けきり
紙一重で逆転!!!

を体感です。

新たな道具、追加。(ThinkPad P14s Gen 6 AMD)

昨今のPCの価格急騰に伴い、PC購入を一念発起。

項目詳細スペック備考
プロセッサーAMD Ryzen™ AI 5 PRO 340 (2.00 GHz / 最大 4.80 GHz)最新のZen 5世代・AIエンジン(NPU)搭載
グラフィックスAMD Radeon™ 840M (内蔵)軽めの3Dゲームも動作する強力な内蔵GPU
メモリー16 GB DDR5-5600MT/s (SODIMM)空きスロット×1あり(最大96GBまで拡張可)
ストレージ512 GB SSD M.2 2280 PCIe-NVMe Gen4高速NVMe規格
ディスプレイ14.0" WUXGA (1920x1200) IPS液晶400 nit、16:10の縦広画面
本体重量約 1.39 kg 〜14型ワークステーションとして最軽量クラス
キーボード日本語配列、バックライト付独立クリックボタン+トラックポイント搭載
生体認証指紋センサーあり電源ボタン一体型
カメラ500万画素(プライバシーシャッター付)高精細なWeb会議対応
無線LANWi-Fi 7対応 (IEEE 802.11be)Bluetooth v5.4対応
インターフェースUSB4 (Thunderbolt互換)×2、USB-A×2、HDMI 2.1、RJ-45有線LAN(RJ-45)を標準搭載
バッテリー4セル リチウムイオン 52.5 Wh急速充電対応
OSWindows 11 Home 64bit

なぜこれにしたか

トラックポイントがある

これにつきます。ホームポジションから手を離すことなくストレートに操作できる「手の拡張機能」は特権です。

軽めの3Dゲームが動く

こちらを見てお分かりのように『ライザのアトリエ3』DXが動きました。これは最高のキラーコンテンツです。

その他、使用感は改めてレビューします。

鍋、海鮮丼。

今年始まって早々の豪華料理はお節だけに留まらず、でした。

その日訪れた料理屋。予約はしていたとはいえ、いきなり卓に置かれていたのが

紙鍋。中にはぶりの切り身がまるまる。

煮えている間に海老入りのサラダ。

トラフグの唐揚げまで出てきます。

そして、メインディッシュの海鮮丼。ここで特筆すべきは右下。「河豚の皮の煮こごり」まで入っていたこと。この時点で、この店は先のトラフグをきちんと捌いていたことが見て取れます。

下手な旅行でも食べられないという豪華な正月料理の延長という形でした。

備考-なぜ「あく」が自然に取れるのか?

紙鍋に使われている和紙などの特殊な紙には、金属や土鍋にはない「吸着力」と「透過性」があります。

  • フィルター効果: 煮立って対流が起こると、具材から出た「あく」が水面に浮き、波打ち際に打ち寄せられるように紙の壁面へと運ばれます。
  • 毛細管現象: 紙の繊維には目に見えない隙間が無数にあり、そこへ「あく」を含んだ水分が吸い込まれます。
  • 表面に固着: 紙の縁の部分は、火の熱で水分が蒸発しやすくなっています。水分が蒸発すると、残ったタンパク質などの不純物(あく)だけが紙の繊維に「乾いて張り付いた状態」になります。

このように、紙鍋自体が「常に機能し続ける巨大なあく取りシート」として働いているため、自分でお玉を使ってあくをすくわなくても、透明度の高い綺麗なお出汁が保たれるのです。

足回り強化のブラケット2。(統率者メモ2026/01/11)

この、英国テーマのデッキは大好きというお話です。

MtGユニバースビヨンド『ドクター・フーコラボ』パラドックスパワー。なんだかんだで使い続けて2年目を迎えようとしています。

現在のリストはこの形。

デッキの色

ティムールカラー

統率者

  1. 《13代目ドクター/The Thirteenth Doctor(WHO)》

The Thirteenth Doctor / 13代目ドクター (1)(緑)(青)
伝説のクリーチャー — タイム(Time) ロード(Lord) ドクター(Doctor)
パラドックス ― あなたがあなたの手札以外から呪文1つを唱えるたび、クリーチャー1体を対象とする。それの上に+1/+1カウンター1個を置く。
チーム・ターディス ― あなたの終了ステップの開始時に、あなたがコントロールしていてカウンターが置かれている各クリーチャーをそれぞれアンタップする。

2/2

  1. 《ヤズミン・カーン/Yasmin Khan(WHO)》

Yasmin Khan / ヤズミン・カーン (3)(赤)
伝説のクリーチャー — 人間(Human) 探偵(Detective)
(T):あなたのライブラリーの一番上にあるカード1枚を追放する。次のあなたの終了ステップまで、それをプレイしてもよい。
ドクターのコンパニオン(もう一方がドクター(Doctor)であるなら、あなたは統率者2体を使用できる。)

3/3

デッキ

クリーチャー

  • 《熱心な秘儀術師、ハルダン/Haldan, Avid Arcanist(C20)》
  • 《ダニー・ピンク/Danny Pink(WHO)》
  • 《オペレーション・ダブル、オスグッド/Osgood, Operation Double(WHO)》
  • 《メモリーワーム/Memory Worm(WHO)》
  • 《ライアン・シンクレア/Ryan Sinclair(WHO)》
  • 《再鍛の刃、ラエリア/Laelia, the Blade Reforged(MH3)》
  • 《火星の女王、イラクサ/Iraxxa, Empress of Mars(WHO)》
  • 《骨集めのドラコサウルス/Bonehoard Dracosaur(LCI)》
  • 《燃え盛るティラノサウルス/Flaming Tyrannosaurus(WHO)》
  • 《極楽鳥/Birds of Paradise(RAV)》
  • 《探索するドルイド/Questing Druid(WOE)》
  • 《グレアム・オブライエン/Graham O'Brien(WHO)》
  • 《義理堅いルパリ族、カルバニスタ/Karvanista, Loyal Lupari(WHO)》
  • 《秘儀を運ぶもの、パコ/Pako, Arcane Retriever(C20)》
  • 《戦慄の狼の伝令官、ファルドーン/Faldorn, Dread Wolf Herald(CLB)》
  • 《氷刻み、スヴェラ/Svella, Ice Shaper(KHM)》
  • 《自然の怒りのタイタン、ウーロ/Uro, Titan of Nature's Wrath(THB)》
  • 《フロストフェアのチョウチンアンコウ/Frost Fair Lure Fish(WHO)》
  • 《月の雛/Lunar Hatchling(WHO)》
  • 《不死者、ミー/Me, the Immortal(WHO)》
  • 《のたうつ嵐、ザイリス/Xyris, the Writhing Storm(DMC)》

インスタント

  • 《熟慮/Think Twice(WHO)》
  • 《光輝の高揚/Surge of Brilliance(WHO)》
  • 《サイバーへの変換/Cyber Conversion(WHO)》
  • 《混沌のねじれ/Chaos Warp(WHO)》
  • 《英雄的介入/Heroic Intervention(WHO)》
  • 《活性の力/Force of Vigor(OTP)》
  • 《成長のらせん/Growth Spiral(WHO)》
  • 《感電の反復/Galvanic Iteration(MID)》
  • 《マグマ・オパス/Magma Opus(STX)》

ソーサリー

  • 《思案/Ponder(WHO)》
  • 《定業/Preordain(WHO)》
  • 《量子ずれ/Quantum Misalignment(WHO)》
  • 《アールンドの天啓/Alrund's Epiphany(KHM)》
  • 《信仰無き物あさり/Faithless Looting(DMC)》
  • 《一攫千金/Strike It Rich(MH2)》
  • 《迫りくるフラックス/Impending Flux(WHO)》
  • 《混沌の辛苦/Throes of Chaos(WHO)》
  • 《タイム・ボルテックスの中へ/Into the Time Vortex(WHO)》
  • 《冒涜の行動/Blasphemous Act(CMM)》
  • 《三顧の礼/Three Visits(WHO)》
  • 《遥か見/Farseek(WHO)》
  • 《耕作/Cultivate(WHO)》
  • 《明日への探索/Search for Tomorrow(WHO)》
  • 《表現の反復/Expressive Iteration(BRC)》
  • 《間の悪い爆発/Ill-Timed Explosion(MKM)》
  • 《倒壊と再建/Wreck and Rebuild(WHO)》

エンチャント

  • 《プロパガンダ/Propaganda(WHO)》
  • 《パイロットにする/Become the Pilot(WHO)》
  • 《鏡割りの寓話/Fable of the Mirror-Breaker(NEO)》
  • 《過去へ帰還せよ/Return the Past(WHO)》
  • 《花の絨毯/Carpet of Flowers(WHO)》
  • 《中はとても広い/Bigger on the Inside(WHO)》

アーティファクト

  • 《太陽の指輪/Sol Ring(WHO)》
  • 《秘儀の印鑑/Arcane Signet(WHO)》
  • 《ターディス/TARDIS(WHO)》
  • 《衝動のタリスマン/Talisman of Impulse(WHO)》
  • 《好奇のタリスマン/Talisman of Curiosity(WHO)》
  • 《レーザー・スクリュードライバー/Laser Screwdriver(WHO)》
  • 《コンフェッション・ダイアル/Confession Dial(WHO)》

プレインズウォーカー

  • 《反逆の先導者、チャンドラ/Chandra, Torch of Defiance(KLD)》

土地

  • 《島/Island(WHO)》
  • 《島/Island(WHO)》
  • 《山/Mountain(WHO)》
  • 《山/Mountain(WHO)》
  • 《森/Forest(WHO)》
  • 《森/Forest(WHO)》
  • 《森/Forest(WHO)》
  • 《森/Forest(WHO)》
  • 《隠された火山/Hidden Volcano(LCI)》
  • 《トレンザロアの時計塔/Trenzalore Clocktower(WHO)》
  • 《凍沸の交錯/Frostboil Snarl(WHO)》
  • 《焦熱島嶼域/Fiery Islet(WHO)》
  • 《眠らずの尖塔/Restless Spire(WOE)》
  • 《嵐削りの海岸/Stormcarved Coast(WHO)》
  • 《轟音の滝/Thundering Falls(MKM)》
  • 《商業地区/Commercial District(MKM)》
  • 《燃えがらの林間地/Cinder Glade(WHO)》
  • 《根縛りの岩山/Rootbound Crag(WHO)》
  • 《落石の谷間/Rockfall Vale(WHO)》
  • 《獲物道/Game Trail(WHO)》
  • 《隠れた茂み/Sheltered Thicket(WHO)》
  • 《夢根の滝/Dreamroot Cascade(WHO)》
  • 《迷路庭園/Hedge Maze(MKM)》
  • 《繁殖池/Breeding Pool(DIS)》
  • 《冠水樹林帯/Waterlogged Grove(WHO)》
  • 《神秘の神殿/Temple of Mystery(WHO)》
  • 《蔦明の交錯/Vineglimmer Snarl(WHO)》
  • 《ケトリアのトライオーム/Ketria Triome(IKO)》
  • 《祖先の道/Path of Ancestry(WOC)》
  • 《風変わりな果樹園/Exotic Orchard(WHO)》
  • 《開拓地の野営地/Frontier Bivouac(WHO)》
  • 《ギャリフレイ評議堂/Gallifrey Council Chamber(WHO)》
  • 《統率の塔/Command Tower(WHO)》
  • 《樹木茂る山麓/Wooded Foothills(ONS)》
  • 《僻地の灯台/Desolate Lighthouse(WHO)》
  • 《有望な鉱脈/Promising Vein(LCI)》
  • 《不吉な墓地/Ominous Cemetery(WHO)》

1. デッキの心臓部:統率者の相互作用

このデッキは、2体の統率者が完璧なエンジンとして機能します。

  • 《ヤズミン・カーン》が燃料を供給する(パラドックスの始動)
  • タップ起動でライブラリートップを追放し、それをプレイ可能にします(いわゆる「衝動的ドロー」)。この追放領域からのプレイが「手札以外から唱える」条件を満たします。
  • 《13代目ドクター》が出力を上げる(パラドックスの誘発)
  • ヤズミン(や他のカード)の効果で呪文を唱えると、「パラドックス」能力が誘発し、クリーチャー1体に+1/+1カウンターを置きます。
  • さらに、「チーム・ターディス」能力で、ターン終了時にカウンターが乗ったクリーチャーをアンタップします。

【ポイント】

ヤズミンでカードを確保し、ドクターで強化し、ドクターの効果でヤズミンをアンタップすることで、「メインで能力を使いつつ、次のターンもブロックに回れる(あるいはマナさえあれば再度能力を使える)」という攻守の隙のなさが生まれます。

2.「パラドックス」を誘発させる多彩な手段

「手札以外から唱える」手段を多角的に搭載

A. 衝動的ドロー(追放してプレイ)

赤の十八番となりました。。手札を消費せずリソースを伸ばせます。

  • 《探索するドルイド》《再鍛の刃、ラエリア》《戦慄の狼の伝令官、ファルドーン》
  • 《反逆の先導者、チャンドラ》: +1能力で衝動的ドローが可能です。

B. 墓地や追放領域からの再利用

一度使った呪文を「おかわり」することでパラドックスを誘発させます。

  • フラッシュバック: 《熟慮》《信仰無き物あさり》、《過去へ帰還せよ》
  • 脱出: 《自然の怒りのタイタン、ウーロ》、《コンフェッション・ダイアル》
  • ウーロは「ライフ回復」「ドロー」「土地セット」を行いつつ、墓地から唱え直すことでドクターの能力を誘発させる、このデッキの影の功労者です。
  • 能力としての《不死者、ミー》
  • 続唱・発見: 《タイム・ボルテックスの中へ》《隠された火山》
  • これらは「唱える」扱いの効果を含むため、パラドックスが誘発します。
  • 出来事/当事者カード。クリーチャーとして唱える際にパラドックスが誘発。

C. その他の領域(予顕、待機など)

  • 《アールンドの天啓》: 予顕(Foresee)経由で追放領域から唱えられます。
  • 《明日への探索》**: 待機明けのキャストも「手札以外」にカウントされます。

3. デッキの「勝ち筋」と「ビッグアクション」

コンボがない分、盤面の圧倒的な制圧力で勝利を目指します。

《燃え盛るティラノサウルス》による火力制圧

Flaming Tyrannosaurus / 燃え盛るティラノサウルス
パラドックス ― …任意の対象1つに3点のダメージを与える。

このデッキのフィニッシャーの一つです。ヤズミンやフラッシュバック呪文を使うたびに《稲妻》が飛び交います。除去としても、プレイヤーへの直接火力としても強力です。

《骨集めのドラコサウルス》と《再鍛の刃、ラエリア》のサイズアップ

これらは放っておくと手がつけられないアドバンテージを生み出します。特にラエリアは追放するたびに大きくなるため、ヤズミンの能力とも相まって統率者ダメージに近い脅威となります。

《秘儀を運ぶもの、パコ》&《熱心な秘儀術師、ハルダン》

統率者セットの看板コンビです。パコが攻撃するたびに手札以外(追放領域)にカードを溜め込み、ハルダンがそれを利用可能にします。

  • パコ自身も急速に巨大化するため、13代目ドクターとは別の「サブ統率者」のような動きで対戦相手にプレッシャーをかけます。

4. 特筆すべきシナジー(テクニック)

デッキの動きを滑らかにする、いぶし銀な組み合わせです。

★《ダニー・ピンク》×《13代目ドクター》=ドローエンジン

Danny Pink / ダニー・ピンク
あなたがコントロールしているクリーチャー1体の上に初めて1個以上のカウンターが置かれるたび、カード1枚を引く。

13代目ドクターの効果で+1/+1カウンターを置くたびに、ダニー・ピンクの効果でドローができます。
「手札以外から唱える(パラドックス)」→「カウンターを置く」→「ドローする」という、リソースが尽きない循環が完成します。

★マナクリーチャーのアンタップ

13代目ドクターの「チーム・ターディス(終了ステップのアンタップ)」は、マナクリーチャーとも相性抜群です。

  • 《極楽鳥》《氷刻み、スヴェラ》《ヤズミン・カーン》
    自分のターンにマナを出したり能力を使ったりした後、ドクターの効果でアンタップすれば、相手のターンにブロッカーとして立たせたり、インスタントタイミングのアクションに備えたりできます。
    特に《氷刻み、スヴェラ》はマナ加速だけでなく、後半に大型呪文を踏み倒す(パラドックス誘発)能力を持っているため、アンタップの恩恵が大きいです。

まとめ:このデッキのプレイ指針

  1. 序盤: 緑の土地加速呪文(《耕作》《三顧の礼》など)やマナクリーチャーでマナ基盤を固める。
  2. 中盤: 統率者2体を戦場に出し、ヤズミンや《探索するドルイド》などでアドバンテージを稼ぎ始める。
  3. 終盤: 《燃え盛るティラノサウルス》などのシステムクリーチャーを着地させ、パラドックスを連打して盤面を制圧、一斉攻撃でフィニッシュする。

統率者メモ:2026/01/10

かなり久しぶりに統率者デッキをいじりました。

霊気走破の構築済みなどからも入れ替え。

統率者

  • 《高名な者、ミシュラ/Mishra, Eminent One(BRC)》

デッキ

クリーチャー

  • 《K-9 マークI型/K-9, Mark I(WHO)》
  • 《湖に潜む者、エムリー/Emry, Lurker of the Loch(BRC)》
  • 《発明の領事、パディーム/Padeem, Consul of Innovation(BRC)》
  • 《練達の変成者/Master Transmuter(BRC)》
  • 《オートンの兵士/Auton Soldier(WHO)》
  • 《無情な屍技術師/Ruthless Technomancer(NEC)》
  • 《ゴブリンの溶接工/Goblin Welder(C14)》
  • 《ゴブリンの修繕屋スロバッド/Slobad, Goblin Tinkerer(BRC)》
  • 《ゴブリンの技師/Goblin Engineer(MH2)》
  • 《大胆な再製者/Audacious Reshapers(BRC)》
  • 《爆発炉のヘルカイト/Blast-Furnace Hellkite(BRC)》
  • 《歩行格納庫の自動機械/Stridehangar Automaton(DRC)》
  • 《クルーグの災い魔、トラクソス/Traxos, Scourge of Kroog(BRC)》
  • 《ワームとぐろエンジン/Wurmcoil Engine(SOM)》
  • 《飛行機械の組立工/Thopter Assembly(MOC)》
  • 《サイバーマン軍団/Cybermen Squadron(WHO)》
  • 《金属製の巨像/Metalwork Colossus(BRC)》
  • 《求道の達人、サイラス・レン/Silas Renn, Seeker Adept(BRC)》
  • 《ウェザーライトの艦長、ジョイラ/Jhoira, Weatherlight Captain(BRC)》
  • 《テルカーの技師、ブルーディクラッド/Brudiclad, Telchor Engineer(BRC)》
  • 《増殖されし者、マスター/The Master, Multiplied(WHO)》

インスタント

  • 《知識の渇望/Thirst for Knowledge(BRC)》
  • 《発明品の唸り/Whir of Invention(AER)》
  • 《シンクロ解除/Desynchronization(ACR)》
  • 《削剥/Abrade(BRC)》
  • 《ラクドスの魔除け/Rakdos Charm(EOC)》
  • 《魔性/Bedevil(BRC)》

ソーサリー

  • 《加工/Fabricate(M10)》
  • 《ロリアンの発見/Lorien Revealed(LTR)》
  • 《テリシアの終焉/Terisiare's Devastation(BRC)》
  • 《大群への給餌/Feed the Swarm(BRC)》
  • 《冒涜の行動/Blasphemous Act(BRC)》
  • 《消却/Delete(WHO)》
  • 《財宝発掘/Trash for Treasure(C16)》

エンチャント

  • 《武器製造/Weapons Manufacturing(EOE)》
  • 《鏡割りの寓話/Fable of the Mirror-Breaker(NEO)》

アーティファクト

  • 《太陽の指輪/Sol Ring(PIP)》
  • 《虚無の呪文爆弾/Nihil Spellbomb(BRC)》
  • 《旅人のガラクタ/Wayfarer's Bauble(BRC)》
  • 《改良式鋳造所/Retrofitter Foundry(DRC)》
  • 《ディミーアの印鑑/Dimir Signet(BRC)》
  • 《ラクドスの印鑑/Rakdos Signet(BRC)》
  • 《忘却の偶像/Idol of Oblivion(BRC)》
  • 《順応する万能工具/Adaptive Omnitool(DRC)》
  • 《精神石/Mind Stone(BRC)》
  • 《マイコシンスの水源/Mycosynth Wellspring(BRC)》
  • 《胆液の水源/Ichor Wellspring(BRC)》
  • 《スカイクレイブの秘宝/Skyclave Relic(ZNR)》
  • 《ソニック・ドライバー/Sonic Screwdriver(WHO)》
  • 《忘却石/Oblivion Stone(BRC)》
  • 《溶鉄の大桶/Smelting Vat(BRC)》
  • 《スランの発電機/Thran Dynamo(BRC)》
  • 《石成エンジン/Lithoform Engine(BRC)》
  • 《面晶体の記録庫/Hedron Archive(BRC)》
  • 《ゴンティの霊気心臓/Gonti's Aether Heart(AER)》
  • 《イシュ・サーの背骨/Spine of Ish Sah(BRC)》
  • 《身代わり合成機/Simulacrum Synthesizer(BIG)》
  • 《税血の刃/Tithing Blade(LCI)》
  • 《呪われた鏡/Cursed Mirror(WHO)》
  • 《時の篩/Time Sieve(2XM)》

プレインズウォーカー

  • 《屑鉄の学者、ダレッティ/Daretti, Scrap Savant(C16)》

基本土地

  • 3《島/Island》
  • 3《沼/Swamp》
  • 3《山/Mountain》
  • 《教議会の座席/Seat of the Synod(BRC)》
  • 《囁きの大霊堂/Vault of Whispers(BRC)》
  • 《大焼炉/Great Furnace(BRC)》
  • 《モリアの坑道/Mines of Moria(LTR)》
  • 《血の墓所/Blood Crypt(DIS)》
  • 《湿った墓/Watery Grave(RAV)》
  • 《轟音の滝/Thundering Falls(MKM)》
  • 《硫黄泉/Sulfurous Springs(M10)》
  • 《Underground Sea(3ED)》
  • 《闇滑りの岸/Darkslick Shores(SOM)》
  • 《黒割れの崖/Blackcleave Cliffs(SOM)》
  • 《竜髑髏の山頂/Dragonskull Summit(M12)》
  • 《水没した地下墓地/Drowned Catacomb(M10)》
  • 《銀色険の橋/Silverbluff Bridge(BRC)》
  • 《霧霊堂の橋/Mistvault Bridge(BRC)》
  • 《鉱滓造の橋/Drossforge Bridge(BRC)》
  • 《燻る湿地/Smoldering Marsh(BRC)》
  • 《窪み渓谷/Sunken Hollow(BRC)》
  • 《崩れゆく死滅都市/Crumbling Necropolis(BRC)》
  • 《風変わりな果樹園/Exotic Orchard(BRC)》
  • 《ザンダーの居室/Xander's Lounge(SNC)》
  • 《統率の塔/Command Tower(SNC)》
  • 《産業の塔/Spire of Industry(DRC)》
  • 《血染めのぬかるみ/Bloodstained Mire(ONS)》
  • 《汚染された三角州/Polluted Delta(ONS)》
  • 《フォモーリの宝物庫/Fomori Vault(BIG)》
  • 《アカデミーの廃墟/Academy Ruins(DRC)》
  • 《ヨーグモスの墳墓、アーボーグ/Urborg, Tomb of Yawgmoth(PLC)》
  • 《灰のやせ地/Ash Barrens(BRC)》

相も変わらず「ブラケット4に近い3」。身内卓だから許されるデッキです。ウルザデッキと違って使って楽しいデッキなので回している形。

Page 1 of 280

Powered by WordPress & Theme by Anders Norén