docs: vendor the documentation site into the monorepo

Fold the standalone 3x-ui-docs project (Next.js 16 + Fumadocs, deployed to
docs.sanaei.dev) into docs/ so the panel and its documentation share a single
source of truth, the way sing-box keeps its docs in-tree. The old repo becomes
redundant and can be retired.

- Import the full site under docs/ (app, components, content, lib, public,
  scripts, config). The self-contained pnpm project sits alongside the existing
  engineering notes with no filename collisions.
- Re-point "Edit on GitHub" links from MHSanaei/3x-ui-docs to this repo's
  docs/content/docs path (docs/lib/shared.ts, docs/app/.../page.tsx).
- Add docs-ci.yml and docs-deploy.yml under .github/workflows/, scoped to
  docs/** and run with working-directory: docs, since GitHub only runs
  workflows from the repo-root .github/. deploy-static.yml's GitHub Pages
  publish (CNAME docs.sanaei.dev) carries over unchanged.

Follow-up (outside this commit): attach the docs.sanaei.dev custom domain to
this repository's Pages (or set the Vercel project's root directory to docs),
confirm the site is live from the monorepo, then delete MHSanaei/3x-ui-docs.
This commit is contained in:
MHSanaei
2026-07-07 23:07:14 +02:00
parent 2c49dbf54e
commit 9b91f0f42e
283 changed files with 44179 additions and 0 deletions
@@ -0,0 +1,53 @@
---
title: امنیت
description: سخت‌سازی 3x-ui — احراز هویت پنل و 2FA، محدودیت IP با Fail2ban، قوانین فایروال، BBR و به‌روز ماندن.
icon: ShieldCheck
---
یک پنل پروکسی هدفی پرارزش است. چند لایه سخت‌سازی تأثیر زیادی دارد.
## سخت‌سازی پنل
- اعتبارنامه‌های قوی و یکتا و **احراز هویت دومرحله‌ای** (TOTP).
- یک پورت غیرپیش‌فرض برای پنل و یک مسیر پایه وب طولانی و تصادفی.
- TLS روی پنل (مستقیماً یا از طریق یک [پروکسی معکوس](/docs/operations/reverse-proxy)).
- **محدودکننده ورود** داخلی، یک IP/نام کاربری را پس از ۵ تلاش ناموفق در بازه ۵ دقیقه (به مدت ۱۵ دقیقه) مسدود می‌کند، و پنل می‌تواند ترافیک خروجی خود را از طریق یک outbound مسیریابی کند.
برای فهرست کامل به [نخستین ورود](/docs/guide/first-login) مراجعه کنید.
## Fail2ban و محدودیت‌های IP
برای هر کلاینت یک **محدودیت IP** تنظیم کنید (به [کلاینت‌ها](/docs/config/clients) مراجعه کنید) تا تعداد IPهای مبدأ همزمان محدود شود. اعمال این محدودیت توسط **Fail2ban** انجام می‌شود که 3x-ui آن را برای شما نصب و پیکربندی می‌کند (در نصب‌های اسکریپتی به‌طور پیش‌فرض فعال است و در Docker از طریق `XUI_ENABLE_FAIL2BAN=true`).
آن را از منوی `x-ui` مدیریت کنید (**۲۲ — IP Limit Management**): نصب/پیکربندی، تغییر مدت مسدودسازی (پیش‌فرض **۳۰ دقیقه**)، مسدودسازی/رفع مسدودی یک IP، مشاهده لاگ‌های مسدودسازی و بررسی وضعیت. در پشت صحنه:
- این jail با نام **`3x-ipl`** شناخته می‌شود؛ لاگ‌های مسدودسازی در `/var/log/x-ui/3xipl.log` و `/var/log/x-ui/3xipl-banned.log` قرار دارند (همچنین از طریق `x-ui banlog`).
- مسدودسازی‌ها همه TCP/UDP را پوشش می‌دهند **به‌جز** پورت‌های SSH و پنل شما، بنابراین یک مسدودسازی نمی‌تواند شما را از سرور یا پنل بیرون بیندازد.
<Callout type="warn">
در Docker، Fail2ban با `iptables` مسدودسازی می‌کند که به قابلیت `NET_ADMIN` (و
`NET_RAW`) نیاز دارد — `docker-compose.yml` آن‌ها را اعطا می‌کند. با یک
`docker run` ساده، `--cap-add=NET_ADMIN --cap-add=NET_RAW` را اضافه کنید وگرنه
مسدودسازی‌ها لاگ می‌شوند اما هرگز اعمال نمی‌شوند.
</Callout>
## فایروال
تنها پورت‌هایی را باز کنید که واقعاً استفاده می‌کنید: SSH، پورت پنل، پورت اشتراک و پورت‌های inbound خود. منوی `x-ui` (**۲۳ — Firewall Management**) ابزار `ufw` را در بر می‌گیرد، یا اینجا قوانین را تولید کنید:
<FirewallRulesGenerator />
<Callout type="warn">
پیش از فعال‌سازی یک فایروال با سیاست رد پیش‌فرض، مطمئن شوید که SSH همچنان مجاز
می‌ماند، وگرنه ممکن است خودتان را بیرون بیندازید. با یک نشست دوم باز آن را آزمایش
کنید.
</Callout>
## تنظیم شبکه (BBR)
منوی `x-ui` (**۲۶ — Enable BBR**) کنترل ازدحام BBR گوگل را فعال/غیرفعال می‌کند
(`net.ipv4.tcp_congestion_control = bbr`، `net.core.default_qdisc = fq`) که اغلب توان عملیاتی را روی لینک‌های شلوغ بهبود می‌بخشد.
## به‌روز ماندن
3x-ui و Xray-core را به‌طور منظم به‌روزرسانی کنید — اصلاحات امنیتی در نسخه‌های جدید منتشر می‌شوند. [صفحه انتشارها](https://github.com/MHSanaei/3x-ui/releases) را دنبال کنید و به [به‌روزرسانی و حذف نصب](/docs/guide/update-uninstall) مراجعه کنید.