なんかSSLproxyをかませると見れないサイトがあるなと思って、生成AIに聞いたら以下回答
HSTS Preload対象ドメインは、事前登録されたポリシーにより、
たとえ正しく署名された偽造証明書であっても中間者攻撃と見なされ、接続が完全に遮断されます。
これにより、SSLproxyやUTM装置によるインスペクションは技術的に不可能となります。
対策としては、該当ドメインをインスペクション除外リストに追加する以外に方法はありません。
たとえ正しく署名された偽造証明書であっても中間者攻撃と見なされ、接続が完全に遮断されます。
これにより、SSLproxyやUTM装置によるインスペクションは技術的に不可能となります。
対策としては、該当ドメインをインスペクション除外リストに追加する以外に方法はありません。
対象ドメインがたくさんあって手動で例外ルールを作成するのは非現実的なのでスクリプトを作って対応したい。
1. HSTS Preloadに登録されているドメインのリストを取得する。
(対象ドメインが多すぎるので、例外ルールを作る対象を絞る必要がある。)
2. tranco-list.euなどのサイトからよく利用されるドメインを取得する。
3. Preload と tranco のリスト両方に存在するドメインを抽出する。
4. 上記の他にも無条件で除外しておきたいドメインの条件を列挙する。(googleやmicrosoft、jpドメインなど)
5. 作成したリストを元に、SSLproxyの除外ルールを作成する。
2. tranco-list.euなどのサイトからよく利用されるドメインを取得する。
3. Preload と tranco のリスト両方に存在するドメインを抽出する。
4. 上記の他にも無条件で除外しておきたいドメインの条件を列挙する。(googleやmicrosoft、jpドメインなど)
5. 作成したリストを元に、SSLproxyの除外ルールを作成する。
これで1300件ぐらいには絞れたので、(多すぎる?)とりあえず運用してみる。
#!/bin/bash
# update_hsts_preload.sh - SSLproxy用HSTS Preload除外ルール生成スクリプト
set -e
# ========================
# 設定
# ========================
WORKDIR="/usr/local/etc/sslproxy/hsts_preload"
TMPDIR="$WORKDIR/tmp"
TRANCOLIST_URL="https://tranco-list.eu/download/daily/top-1m.csv.zip"
PRELOAD_JSON_URL="https://raw.githubusercontent.com/chromium/chromium/main/net/http/transport_security_state_static.json"
EXCLUDE_CONF="$WORKDIR/hsts_preload_exclude.conf"
IMPORTANT_DOMAINS_LIST="$WORKDIR/important_domains.txt"
TOP_N=1000
logger -t update_hsts_preload "Started HSTS Preload rule update"
mkdir -p "$WORKDIR" "$TMPDIR"
cd "$WORKDIR"
# ========================
# Trancoリスト取得
# ========================
echo "[1/4] Trancoリストをダウンロード中..."
curl -s -o "$TMPDIR/tranco.zip" "$TRANCOLIST_URL"
unzip -p "$TMPDIR/tranco.zip" > "$TMPDIR/tranco_top1m.csv"
head -n "$TOP_N" "$TMPDIR/tranco_top1m.csv" | cut -d',' -f2 | sed 's/\r//' | sort -u > "$TMPDIR/tranco_top.txt"
# ========================
# Preload JSON取得と整形
# ========================
echo "[2/4] HSTS Preloadリストを取得中..."
curl -s -o "$TMPDIR/hsts_preload_raw.json" "$PRELOAD_JSON_URL"
echo "[3/4] HSTS Preloadリストからドメインを抽出中..."
sed '/^\s*\/\//d' "$TMPDIR/hsts_preload_raw.json" > "$TMPDIR/hsts_preload_clean.json"
jq -r '.entries[].name' "$TMPDIR/hsts_preload_clean.json" | sort -u > "$TMPDIR/hsts_preload_domains.txt"
# ========================
# 優先ドメイン定義
# ========================
cat <<EOF > "$IMPORTANT_DOMAINS_LIST"
google
microsoft
apple
facebook
twitter
amazon
cloudflare
youtube
EOF
: > "$TMPDIR/important_expanded.txt"
while read -r dom; do
grep -Ei "^$dom(\.|$)" "$TMPDIR/hsts_preload_domains.txt" >> "$TMPDIR/important_expanded.txt"
done < "$IMPORTANT_DOMAINS_LIST"
# TLD条件 (.jp, .org など)
grep -Ei '\.jp$|\.ac\.jp$|\.ed\.jp$|\.org$' "$TMPDIR/hsts_preload_domains.txt" > "$TMPDIR/tld_domains.txt"
# Tranco ∩ Preload
grep -Fxf "$TMPDIR/tranco_top.txt" "$TMPDIR/hsts_preload_domains.txt" > "$TMPDIR/tranco_preload_common.txt"
# 上記に含まれていないTranco対象を抽出
cat "$TMPDIR/important_expanded.txt" "$TMPDIR/tld_domains.txt" | sort -u > "$TMPDIR/preferred.txt"
grep -Fvxf "$TMPDIR/preferred.txt" "$TMPDIR/tranco_preload_common.txt" > "$TMPDIR/tranco_filtered.txt"
# 最終対象を結合
cat "$TMPDIR/preferred.txt" "$TMPDIR/tranco_filtered.txt" | sort -u > "$TMPDIR/final_domains.txt"
# ========================
# 除外ルール生成(仮ファイルで差分比較)
# ========================
NEW_CONF="$TMPDIR/hsts_preload_exclude_new.conf"
{
echo "# Auto-generated HSTS Preload Pass rules"
echo "# Updated: $(date -u)"
echo ""
while read -r domain; do
echo "Pass to sni *.$domain"
done < "$TMPDIR/final_domains.txt"
} > "$NEW_CONF"
# ========================
# 差分チェックと反映・再起動
# ========================
if ! cmp -s "$NEW_CONF" "$EXCLUDE_CONF"; then
cp -f "$EXCLUDE_CONF" "$EXCLUDE_CONF.bak" 2>/dev/null || true
mv "$NEW_CONF" "$EXCLUDE_CONF"
logger -t update_hsts_preload "Rules changed — restarting sslproxy"
systemctl restart sslproxy
else
logger -t update_hsts_preload "Rules unchanged — sslproxy not restarted"
fi
# ========================
# 後始末と完了
# ========================
rm -rf "$TMPDIR"
logger -t update_hsts_preload "Finished HSTS Preload rule update successfully"
echo "[✓] 除外ルールの生成が完了しました: $EXCLUDE_CONF"
これで生成されたconfファイルをsslproxyのコンフィグファイルの記述してsslproxyを再起動すれば適用される。ProxySpecの前に記述する必要があるとのこと。
Include hsts_preload_exclude.conf
コメント
コメントを投稿