# RDP-FIDO-GATE — الإعداد والتهيئة (خطوة بخطوة)

سطح مكتب بعيد (RDP) آمن مع **بوابة إلزامية بمفتاح عتاد FIDO2/WebAuthn**. يبقى منفذ RDP
محجوباً بجدار الحماية في جميع الأوقات، ويُفتح **فقط لعنوان IP الخاص بك، ولمدة نحو 90 ثانية**، بعد أن تلمس
المفتاح. يتطلب Windows 10 1903+ (WebAuthn + Windows Firewall). لا توجد خدمة مستضافة — بل تقوم أنت
بتنزيله وتثبيته بنفسك.

المكوّنان ومنافذهما:

| المكوّن | مكان تشغيله | المنافذ |
|-----------|---------------|-------|
| **Gate** | الجهاز الهدف (الحاسوب الذي تتصل به) | **7440/TCP** — التحكم + تأكيد FIDO؛ **3389/TCP** — RDP (يُفتح عند الطلب) |
| **Client** | جهازك | اتصالات صادرة إلى المنفذين 7440 و3389 على المضيف |

---

## Step 1. Host — تثبيت البوابة

1. نزّل `RdpFidoGate-Host.zip` وفكّ ضغطه على الجهاز الهدف.
2. شغّله **كمسؤول**:
   ```powershell
   powershell -ExecutionPolicy Bypass -File Install-Gate.ps1
   ```
   (منفذ البوابة الافتراضي 7440 ونافذة وصول نحو 90 ثانية؛ يمكنك ضبط `-Port` و`-GrantSeconds`).
3. يقوم السكربت بتمكين Remote Desktop (مع NLA)، و**يغلق 3389 في جدار الحماية**، ويبدأ خدمة البوابة
   على **7440**، ويطبع **رمزاً لمرة واحدة** لتسجيل المفتاح الأول.
4. **دوّن:** عنوان المضيف (الاسم / IP العام)، والمنفذ **7440**، و**الرمز** لمرة واحدة.

---

## Step 2. توجيه المنافذ في الموجّه (إذا كان المضيف خلف NAT/موجّه) — مطلوب للوصول عبر الإنترنت

إذا كنت تتصل **من الإنترنت** وكان الجهاز الهدف خلف موجّه منزلي/مكتبي، فيجب عليك
**توجيه منفذين** على الموجّه إلى عنوان LAN الخاص بالمضيف. بدون ذلك لن يصل العميل
لا إلى البوابة ولا إلى RDP.

وجّه (Port Forwarding / Virtual Servers / NAT في إدارة الموجّه):

| المنفذ الخارجي | البروتوكول | ← IP الداخلي (LAN المضيف) | المنفذ الداخلي |
|---------------|----------|--------------------------|---------------|
| **7440** | TCP | `192.168.x.x` (IP الخاص بشبكة LAN للمضيف) | **7440** |
| **3389** | TCP | نفس IP شبكة LAN للمضيف | **3389** |

الإجراء:
1. اعثر على IP شبكة LAN للمضيف: `ipconfig` ← "IPv4 Address" (مثلاً `192.168.1.50`).
2. **احجز ذلك العنوان** للمضيف (حجز DHCP حسب MAC في الموجّه) — وإلا فقد يتغيّر.
3. في الموجّه: **Port Forwarding / Virtual Servers** ← أضف القاعدتين من الجدول
   (المنفذ الخارجي = المنفذ الداخلي، البروتوكول TCP، IP الداخلي = LAN المضيف).
4. اعثر على **IP العام** الخاص بك (على المضيف افتح `https://api.ipify.org`، أو "WAN IP" في الموجّه). إذا كان
   عنوان IP الخاص بك **ديناميكياً**، فأعدّ **DDNS** (في الموجّه أو عبر no-ip/DuckDNS) واستخدم اسم DDNS بدلاً من IP.

> الأمان: البوابة فقط (7440) تستمع خارجياً. أما RDP (3389) فهو **مغلق** من الخارج حتى
> تؤكّد بالمفتاح — عندها يُفتح بشكل ضيّق، لعنوان IP الخاص بك فقط، لمدة نحو 90 ثانية. توجيه 3389 لا
> يمنح الوصول بحد ذاته؛ بل يسمح فقط لـ"النافذة" المؤقتة بالمرور عبر الموجّه.

---

## Step 3. Client — التثبيت والتسجيل

1. ثبّت العميل: `RdpFidoClient.exe` (ملف `RdpFidoGate.exe` المطابق مضمّن).
2. **التفعيل** عبر AccountServer: أدخل بريدك الإلكتروني ← يُرسل إليك رمز بالبريد ← أدخله.
   فترة سماح للتفعيل مدتها 14 يوماً؛ الفئة المجانية = حتى 10 جلسات محفوظة، المدفوعة = بلا حد.
3. **إضافة جلسة:**
   - العنوان: IP العام للمضيف أو اسم DDNS (من Step 2)، أو عنوان LAN إذا كنت على الشبكة نفسها.
   - منفذ البوابة: **7440**.
   - أدخل **الرمز لمرة واحدة** من Step 1 و**سجّل مفتاح FIDO2 الخاص بك** (المس).

---

## Step 4. الاتصال

اختر الجلسة ← **المس المفتاح** ← تتحقق منه البوابة و**تفتح 3389 لعنوان IP الحالي الخاص بك لمدة
نحو 90 ثانية** ← يشغّل العميل `mstsc` ويوصلك تلقائياً. كل 30 ثانية تعيد البوابة فرض
الحجب، فتبقى النافذة ضيّقة ومحصورة بعنوان IP.

---

## الفحص واستكشاف الأخطاء

- من العميل: `Test-NetConnection <public-ip-or-DDNS> -Port 7440` ← يجب أن يكون
  `TcpTestSucceeded : True`. إذا كان `False` — فإن المنفذ 7440 غير موجّه، أو أن جدار حماية المضيف يحجبه.
- المنفذ **3389 مغلق من الخارج حتى تؤكّد بالمفتاح** — وهذا متوقّع (لا تختبره قبل اللمس).
- "الجلسة لا تُفتح": تحقّق من أن 1) خدمة البوابة تعمل على المضيف، 2) **كلا** المنفذين
  موجّهان على الموجّه إلى IP شبكة LAN الحالية للمضيف، 3) أن IP العام لم يتغيّر (استخدم DDNS إن كان ديناميكياً).
- عدة مضيفين خلف موجّه واحد: استخدم منافذ خارجية مختلفة (مثلاً host-2 ← خارجي 7441→7440،
  3390→3389) وأدخل تلك المنافذ الخارجية في جلسة العميل.

---

## إلغاء التثبيت

على المضيف، كمسؤول: `powershell -ExecutionPolicy Bypass -File Uninstall-Gate.ps1`
(يزيل الخدمة، ويستعيد قواعد جدار الحماية). ثم، اختيارياً، أزل قواعد توجيه المنافذ على الموجّه.
