ops-proxyns について
ops-proxyns は、Linux のネットワーク名前空間を使ってプロセスの通信を Tor 経由にする手順をまとめたスキルです。通信の分離、漏えい確認、回線の切り替えを扱い、セキュリティテスト担当者を対象としています。
主な機能
- 01プロセスの通信を Tor 経由に転送
- 02TCP、UDP、DNS、ICMP の分離
- 03IPv6 通信の遮断
- 04漏えい確認手順
- 05Tor 回線の切り替え方法
活用シーン
- 01Tor 経由でのコマンドライン偵察
- 02DNS と IPv6 の漏えい防止確認
- 03リクエスト間の Tor 出口回線切り替え
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ uphiago/ recon-skills --skill ops-proxynsインストール後、Claude Code で/ops-proxynsを入力して読み込まれたか確認します。
詳細
OPS-PROXYNS — カーネルレベルのプロキシ/OPSEC 保護
proxychains より proxy-ns を選ぶ理由
| 機能 | proxychains | proxy-ns |
|---|---|---|
| Go/Rust の静的バイナリに対応 | いいえ(LD_PRELOAD は機能しません) | はい(カーネルの名前空間) |
| DNS リーク保護 | 部分的 | 完全 |
| UDP の隔離 | いいえ | はい |
| アプリケーションによるバイパス | はい(直接ソケット接続) | いいえ |
| IPv6 リーク | よく発生 | ブロック |
| すべてのトラフィックタイプ | TCP のみ | TCP+UDP+DNS+ICMP |
proxy-ns は Linux のネットワーク名前空間を使って、プロセスからのすべてのトラフィックを Tor プロキシ経由でルーティングします。アプリケーションがこれを検出したり、バイパスしたりする方法はありません。アプリケーションから見えるのは Tor の出口ノードの IP アドレスだけです。
インストール
# Prerequisites
sudo apt update && sudo apt install -y tor proxychains4 git make gcc curl
# Clone and build proxy-ns
git clone https://github.com/OkamiW/proxy-ns.git /tmp/proxy-ns
cd /tmp/proxy-ns
CGO_ENABLED=0 make
sudo cp proxy-ns /usr/local/bin/
# Configure Tor
sudo tee /etc/tor/torrc << 'EOF'
SOCKSPort 9050
ControlPort 9051
CookieAuthentication 0
DataDirectory /var/lib/tor
EOF
# Restart Tor
sudo systemctl restart tor 2>/dev/null || sudo tor &
sleep 3
基本的な使い方
# Run a single command through Tor
sudo proxy-ns curl --max-time 30 --connect-timeout 10 -s ifconfig.me
# Output: [Tor exit node IP]
# Run a full shell through Tor (ALL commands go through Tor)
sudo proxy-ns $SHELL
# Inside the proxy-ns shell:
curl --max-time 30 --connect-timeout 10 -s ifconfig.me # Tor IP
nmap -sT target.com # Works (Go binary)
masscan 10.0.0.0/24 -p80 --rate 100 # Works
python3 -c "import requests; print(requests.get('https://ifconfig.me').text)" # Works
whois target.com # Works (DNS queries also routed through Tor)
Tor 回線のローテーション
# Rotate to a new exit node IP
echo -e "AUTHENTICATE\r\nSIGNAL NEWNYM\r" | nc -w1 127.0.0.1 9051
sleep 2
# Verify new IP
sudo proxy-ns curl --max-time 30 --connect-timeout 10 -s ifconfig.me
自動ローテーションスクリプト
#!/bin/bash
# rotate-tor.sh — Rotate Tor circuit and wait for new IP
rotate() {
echo -e "AUTHENTICATE\r\nSIGNAL NEWNYM\r" | nc -w1 127.0.0.1 9051
sleep $(awk -v min=3 -v max=8 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')
}
NEW_IP=$(sudo proxy-ns curl --max-time 30 --connect-timeout 10 -s ifconfig.me 2>/dev/null)
echo "[+] New Tor IP: $NEW_IP"
# Usage: rotate between every N requests
IPv6 リークの防止
proxy-ns は IPv6 を自動的にブロックします。次のコマンドで確認してください。
# Inside proxy-ns shell, test for leaks:
sudo proxy-ns bash -c '
echo "=== IPv4 check ==="
curl --max-time 30 --connect-timeout 10 -s ifconfig.me
echo ""
echo "=== IPv6 check (should fail) ==="
curl --max-time 30 --connect-timeout 10 -6 -s ifconfig.me 2>&1 || echo "[OK] No IPv6"
echo "=== DNS leak check ==="
dig +short myip.opendns.com @resolver1.opendns.com
'
ステルスヘッダーとジッター
User-Agent をローテーションし、リクエスト間にジッターを常に入れてください。
# stealth_headers.py — Use inside proxy-ns shell
import requests, random, time
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/[REDACTED_IP]",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Safari/605.1.15",
"Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0",
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15",
]
ACCEPT_LANGS = ["en-US,en;q=0.9", "en-GB,en;q=0.8", "en-CA,en;q=0.7"]
def stealth_session():
s = requests.Session()
s.headers.update({
"User-Agent": random.choice(USER_AGENTS),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": random.choice(ACCEPT_LANGS),
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
})
return s
def stealth_get(url, session=None, min_delay=2, max_delay=6):
"""Make a stealth GET with jitter"""
s = session or stealth_session()
time.sleep(random.uniform(min_delay, max_delay))
return s.get(url, timeout=30)
# Usage:
# session = stealth_session()
# r = stealth_get("https://target.com/.env", session=session)
実際に起こり得るリスク
| リスク | 発生の仕組み | 結果 |
|---|---|---|
| IP アドレスの漏えい | サーバーログ、WebRTC、DNS リーク | ブロック、追跡 |
| フィンガープリンティング | User-Agent、TLS フィンガープリント(JA3)、ヘッダー | ボットとして特定 |
| レート制限 | 短時間にリクエストを送りすぎる | IP アドレスの恒久的なブロック |
| ハニーポット | セキュリティチームに警告する偽のエンドポイント | 法的措置 |
| SIEM/Splunk | 一元化されたログがパターンを検出 | セキュリティチームへの警告 |
| Cloudflare WAF | 403/503 が連続して多数発生 | IP アドレスがブラックリストに追加 |
| 追跡された SA キー | サービスアカウントの過剰な使用 | キーの失効 |
| GitHub API | 検索 API へのクエリが多すぎる | レート制限、トークンの失効 |
テスト前の OPSEC チェックリスト
対象に何らかのリクエストを送る前に、次の項目を確認してください。
[ ] VPN/Tor active and verified (ifconfig.me shows non-originating IP)
[ ] IP not leaking? (check https://ipleak.net)
[ ] DNS not leaking (dig myip.opendns.com @resolver1.opendns.com)
[ ] WebRTC disabled?
[ ] IPv6 disabled/blocked (curl -6 ifconfig.me should fail)
[ ] Generic and rotating User-Agent?
[ ] Random delay (2-6s jitter between requests)?
[ ] GitHub credentials NOT logged in (or use dedicated burner account)
[ ] Nmap using -sT (SYN scan -sS is unsupported via proxy)
[ ] proxy-ns shell active for ALL commands (not just curl)
[ ] GitHub credentials logged in only when needed?
レート制限の保護
# Rotate IP between every N requests automatically
for i in $(seq 1 10); do
echo "Request $i"
sudo proxy-ns curl --max-time 30 --connect-timeout 10 -s "https://target.com/.env" > /dev/null
sleep 3
done
# After 10 requests, rotate Tor circuit
echo -e "AUTHENTICATE\r\nSIGNAL NEWNYM\r" | nc -w1 127.0.0.1 9051
sleep 3
NEW_IP=$(sudo proxy-ns curl --max-time 30 --connect-timeout 10 -s ifconfig.me)
echo "[+] Rotated to IP: $NEW_IP"
proxy-ns 経由の偵察
偵察ツールチェーン全体を proxy-ns 内で実行してください。
# Start proxy-ns shell
sudo proxy-ns $SHELL
# Inside the protected shell:
TARGET="target.com"
# subfinder works (Go binary)
subfinder -d "$TARGET" -silent > subs.txt
# httpx works
cat subs.txt | httpx -silent -status-code > live.txt
# curl works
curl --max-time 30 --connect-timeout 10 -sk "https://$TARGET/.env" | grep -i "DB_PASSWORD"
# nuclei works
nuclei -l live.txt -t ~/nuclei-templates/ -severity critical,high
# Python requests work
python3 -c "
import requests
r = requests.get('https://target.com/wp-json/wp/v2/users')
print(r.status_code, len(r.text))
"
よくある問題
| 問題 | 解決策 |
|---|---|
sudo: proxy-ns: command not found | 再ビルドします。cd /tmp/proxy-ns && sudo make install |
| Tor が実行されていない | sudo systemctl start tor または sudo tor & |
ポート 9050 で Connection refused が発生する | `sudo netstat -tlnp |
| Nmap の SYN スキャンが失敗する | -sS の代わりに nmap -sT(TCP 接続スキャン)を使います |
| Masscan のバナー取得 | ホスト上のインターフェース IP を指定して --source-ip を使います |
| Go バイナリが依然として実際の IP アドレスを表示する | proxy-ns が正しくインストールされていることを確認します。CGO_ENABLED=0 make |
| 遅すぎる(Tor の遅延) | Tor は本来遅いものです。ジッターを増やすか、代替としてプレミアム VPN を使います。 |
代替手段
お使いのカーネルで proxy-ns が動作しない場合:
# Level 1: proxychains (works for Python/curl, NOT for Go/static binaries)
sudo apt install proxychains4
proxychains4 curl ifconfig.me
# Level 2: Full VPN (best performance, worst OPSEC — VPN logs)
# Level 3: Tails OS / Whonix (entire OS is Tor-routed)
# Level 4: Dedicated pentest VPS (separate jurisdiction)
検証
- プロキシテスト — プロキシ接続を確認します。
curl --max-time 30 --connect-timeout 10 -s --proxy "http://127.0.0.1:8080" "https://httpbin.org/ip" 2>/dev/null | python3 -m json.tool 2>/dev/null || echo "NOTE: no proxy configured locally" - DNS リークテスト — DNS 解決経路を確認します。
dig +short example.com 2>/dev/null | head -1 && echo "PASS: DNS resolution works" || echo "FAIL: dig not available"
すべてのテストで、プロキシが使用可能な状態かを確認できます。
注意事項
- プロキシがローテーションしない — すべてのリクエストで同じ IP アドレスが使われる場合、レート制限や IP アドレスの禁止は避けられません。ローテーションが実際に機能していることを確認してください。
- プロキシログに認証情報が含まれる — HTTP プロキシは完全なリクエスト URL を記録します。共有する前に、プロキシログがサニタイズされていることを確認してください。
- プロキシ経由の DNS リーク — プロキシの構成によっては DNS が漏えいすることがあります。機密性の高い操作を行う前に、
dnsleaktest.com相当のテストで確認してください。 - プロキシチェーンの遅延 — 複数ホップのプロキシチェーンは遅延を増加させ、タイミングベースの攻撃に支障をきたします。時間に制約のあるプローブを実行する前に、スループットをテストしてください。
- SOCKS と HTTP プロキシの混同 — SOCKS5 プロキシは TCP をトンネルしますが、HTTP プロキシがトンネルするのは HTTP のみです。プロトコルに合ったものを使用してください。
コメント
Markdown 対応