پیکربندی پیشرفته (Configuration)
به بخش پیکربندی پیشرفته خوش آمدید! با توجه به امکانات گسترده ققنوس، این صفحه طولانی و شامل بخشهای متعددی است. اما نگران نباشید! شما نیازی به خواندن تمام این صفحه ندارید. کافیست بر اساس نیاز خود، فقط یک یا دو بخش دلخواه را انتخاب و اجرا کنید.
راهنمای سریع مطالعه این صفحه
- اگر بالاترین امنیت را میخواهید (پیشنهادی): فقط بخشهای ۱ و ۲ (مربوط به mTLS) را بخوانید.
- اگر سرور شما پشت CDN نیست: بخش ۳ (حالت Insecure TLS) را بخوانید.
- اگر اپراتور شما به پروتکلهای غیرعادی حساس است: علاوه بر مراحل فوق، بخش ۴ (جعل اثرانگشت) را هم ببینید.
۱. پیکربندی One-Way TLS (مانند HTTPS)
در این حالت، سرور دارای کلید خصوصی است و کلاینت با داشتن کلید عمومی سرور، از صحت اتصال اطمینان حاصل میکند.
مرحله ۱: ایجاد کلید سرور
در سرور (VPS) دستور زیر را اجرا کنید:
./phoenix-server -gen-keysخروجی این دستور شامل دو مورد است:
- یک فایل به نام
private.keyدر همان پوشه ساخته میشود. - یک Public Key (کلید عمومی) در خروجی ترمینال چاپ میشود. آن را کپی و ذخیره کنید.
سپس برای هماهنگی با فایل کانفیگ پیشفرض، نام فایل کلید خصوصی را تغییر دهید:
mv private.key server.private.keyمرحله ۲: تنظیم سرور (server.toml)
فایل server.toml را باز کنید و خط مربوط به private_key را از حالت کامنت (با حذف #) خارج کنید:
[security]
# ...
private_key = "server.private.key"مرحله ۳: تنظیم کلاینت (client.toml)
در کامپیوتر خود، فایل client.toml را باز کنید. متغیر server_public_key را پیدا کرده، از کامنت خارج کنید و مقدار آن را برابر با کلید عمومی سرور (که در مرحله ۱ ذخیره کردید) قرار دهید:
server_public_key = "YOUR_SERVER_PUBLIC_KEY..."تبریک! اکنون حالت One-Way TLS فعال شده است و میتوانید از برنامه استفاده کنید.
۲. پیکربندی mTLS (احراز هویت دوطرفه - پیشنهادی)
برای حداکثر امنیت (ضد-Probing)، پس از انجام مراحل بالا (One-Way TLS)، مراحل زیر را نیز انجام دهید.
مرحله ۴: ایجاد کلید کلاینت
در کامپیوتر خود (سمت کلاینت) دستور زیر را اجرا کنید:
./phoenix-client -gen-keys
# یا در ویندوز:
# .\phoenix-client.exe -gen-keysخروجی مانند قبل است:
- فایل
private.keyساخته میشود. - یک Public Key به شما نمایش داده میشود. آن را کپی و ذخیره کنید.
نام فایل کلید خصوصی را تغییر دهید:
mv client_private.key client.private.key
# یا در ویندوز (PowerShell):
# Rename-Item client_private.key client.private.keyمرحله ۵: تنظیم کلاینت (client.toml)
فایل client.toml را باز کنید و خط مربوط به private_key را از کامنت خارج کنید:
# مسیر کلید خصوصی کلاینت که همین الان ساختید
private_key = "client.private.key"مرحله ۶: تنظیم سرور (server.toml)
به سرور برگردید و فایل server.toml را باز کنید. متغیر authorized_clients (لیست کلاینتهای مجاز) را از کامنت خارج کنید و کلید عمومی کلاینت (که در مرحله ۴ گرفتید) را داخل آن قرار دهید:
[security]
# ...
authorized_clients = [
"CLIENT_PUBLIC_KEY..."
]تمام شد! حالا کافیست سرور و کلاینت را اجرا کنید. در این حالت فقط کلاینت شما اجازه اتصال به سرور را دارد.
نکته مهم در مورد نام فایلها
در تمام مراحل بالا ما با دستور mv (تغییر نام) نام فایلهای private.key ایجاد شده را به server.private.key و client.private.key تغییر دادیم تا با فایلهای کانفیگ پیشفرض (server.toml و client.toml) هماهنگ شوند. اگر نمیخواهید نام فایلها را تغییر دهید، باید مقدار متغیر private_key را در فایلهای کانفیگ ویرایش کرده و آدرس/نام فایل خود را وارد کنید.
بازگشت به اجرا
حالا که حداقل یکی از حالتهای امنیتی را فعال نمودهاید، میتوانید به صفحه قبل (نصب و راهاندازی) بازگشته و با مطالعه بخش اجرای برنامه، سرویس خود را با خیالی آسوده اجرا کنید.
۳. حالت Insecure TLS (اتصال مستقیم با سرتیفیکت خودامضا)
این حالت برای زمانی مناسب است که سرور شما پشت CDN نیست و میخواهید TLS داشته باشید اما نمیتوانید سرتیفیکت معتبر (Let's Encrypt) دریافت کنید.
توجه امنیتی
در این حالت، کلاینت صحت سرتیفیکت سرور را بررسی نمیکند. این یعنی در برابر حملات Man-in-the-Middle (MITM) آسیبپذیر است. برای امنیت بیشتر، از حالت One-Way TLS یا mTLS استفاده کنید.
مرحله ۱: پیکربندی سرور
سرور باید یک کلید خصوصی داشته باشد. اگر هنوز کلید نساختهاید، از دستور زیر استفاده کنید:
./phoenix-server -gen-keys
mv private.key server.private.keyسپس در server.toml:
[security]
private_key = "server.private.key"
enable_socks5 = true
enable_udp = trueمرحله ۲: پیکربندی کلاینت
در client.toml مقدار tls_mode را روی "insecure" تنظیم کنید:
remote_addr = "your-server-ip:443"
# حالت TLS بدون بررسی صحت سرتیفیکت
tls_mode = "insecure"
[[inbounds]]
protocol = "socks5"
local_addr = "127.0.0.1:1080"
enable_udp = true۴. جعل اثرانگشت مرورگر (TLS Fingerprint) — برای عبور از DPI اپراتور
مشکل چیست؟
سیستمهای DPI (بازرسی عمیق بسته) اپراتورها میتوانند از روی TLS ClientHello تشخیص بدهند که ترافیک از یک برنامه Go است (نه مرورگر). این به خاطر «اثرانگشت» منحصربهفرد کتابخانه استاندارد TLS زبان Go است.
علائم این مشکل
- درخواست از کلاینت به سرور میرسد (لاگ سرور نشان میدهد)
- اما پاسخ سرور به کلاینت نمیرسد (timeout در کلاینت)
- این مشکل در برخی اپراتورهای ایرانی رایج است
راهحل: جعل اثرانگشت Chrome
ققنوس با استفاده از کتابخانه utls میتواند TLS ClientHello را دقیقاً شبیه مرورگرهای واقعی جعل کند.
در client.toml (همراه با tls_mode):
remote_addr = "your-server-ip:443"
# فعالسازی TLS (الزامی برای کارکرد fingerprint)
tls_mode = "insecure"
# جعل اثرانگشت مرورگر
fingerprint = "chrome"
[[inbounds]]
protocol = "socks5"
local_addr = "127.0.0.1:1080"مقادیر مجاز fingerprint
| مقدار | توضیحات |
|---|---|
"chrome" | جعل Chrome 120 — پیشنهادی (بیشترین سازگاری) |
"firefox" | جعل Firefox 120 |
"safari" | جعل Safari |
"random" | یک مرورگر تصادفی در هر اتصال |
| خالی (پیشفرض) | TLS استاندارد Go (بدون جعل) |
محدودیت مهم
قابلیت fingerprint فقط هنگامی فعال است که TLS فعال باشد:
tls_mode = "insecure"یاtls_mode = "system"- یا
server_public_key/private_keyتنظیم شده باشند.
در حالت h2c (بدون TLS)، این تنظیم تأثیری ندارد.
۵. احراز هویت با توکن (Token Auth)
برای افزودن یک لایه امنیتی اضافی میتوانید از توکن احراز هویت استفاده کنید. این قابلیت با تمام حالتهای TLS ترکیبپذیر است.
مرحله ۱: ساخت توکن
# در سرور یا کلاینت
./phoenix-server -gen-tokenخروجی یک رشته تصادفی ۶۴ کاراکتری است. آن را ذخیره کنید.
مرحله ۲: تنظیم سرور
[security]
auth_token = "توکن-ساخته-شده-را-اینجا-بگذارید"
enable_socks5 = trueمرحله ۳: تنظیم کلاینت
auth_token = "توکن-ساخته-شده-را-اینجا-بگذارید"ترکیب با سایر حالتها
Token Auth با تمام حالتهای TLS (h2c، Insecure، One-Way TLS، mTLS) ترکیب میشود. برای بالاترین امنیت: mTLS + Token Auth.
