Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
openvpn-install — قم بإعداد خادم OpenVPN الخاص بك على Debian وUbuntu وFedora وCentOS وArch Linux والمزيد | Kitploit
أدوات/GitHubGitHub/angristan/openvpn-install
أدوات التشفير/فك التشفيرالبرمجة النصية والأتمتةأمن الشبكاتالخصوصية
GitHubangristan/openvpn-install

openvpn-install

قم بإعداد خادم OpenVPN الخاص بك على Debian وUbuntu وFedora وCentOS وArch Linux والمزيد

عرض المستودع
16.1k3.3k52منذ شهر واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

openvpn-install

Say Thanks!

مثبّت OpenVPN لأنظمة Debian وUbuntu وFedora وopenSUSE وCentOS وAmazon Linux وArch Linux وOracle Linux وRocky Linux وAlmaLinux.

سيمكّنك هذا السكربت من إعداد وإدارة خادم VPN آمن خاص بك في ثوانٍ معدودة.

ما هذا؟

صُمم هذا السكربت ليعمل على خادمك الخاص، سواء كان VPS أو خادمًا مخصصًا، أو حتى جهاز كمبيوتر في المنزل.

بعد الإعداد، ستتمكن من إنشاء ملفات إعدادات العميل لكل جهاز تريد توصيله.

سيتمكن كل عميل من توجيه حركة مرور الإنترنت الخاصة به عبر الخادم، مع تشفير كامل.```mermaid graph LR A[Phone] -->|Encrypted| VPN B[Laptop] -->|Encrypted| VPN C[Computer] -->|Encrypted| VPN

VPN[OpenVPN Server]

VPN --> I[Internet]

root@kitploit:~
## لماذا OpenVPN؟

كان OpenVPN المعيار الفعلي لشبكات VPN مفتوحة المصدر عند إنشاء هذا السكربت. جاء WireGuard لاحقًا وهو أبسط وأسرع لمعظم حالات الاستخدام. اطّلع على [wireguard-install](https://github.com/angristan/wireguard-install).

ومع ذلك، لا يزال OpenVPN خيارًا منطقيًا عندما تحتاج إلى:

- **دعم TCP**: يعمل في البيئات التقييدية التي يُحظر فيها UDP (شبكات الشركات، المطارات، الفنادق، إلخ.)
- **مفاتيح خاصة محمية بكلمة مرور**: تخزّن إعدادات WireGuard المفتاح الخاص كنص عادي
- **التوافق مع الأنظمة القديمة**: يتوفر عملاء لكل المنصات تقريبًا، بما في ذلك الأنظمة الأقدم

## الميزات

- تثبيت وإعداد خادم OpenVPN جاهز للاستخدام
- واجهة سطر أوامر للأتمتة والبرمجة النصية (وضع غير تفاعلي مع مخرجات JSON)
- تجديد الشهادات لكل من شهادات العميل والخادم
- عرض ومراقبة العملاء المتصلين
- فصل فوري للعميل عند إبطال الشهادة (عبر واجهة الإدارة)
- استخدام [مستودعات OpenVPN الرسمية](https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos) عندما يكون ذلك ممكنًا للحصول على أحدث الإصدارات المستقرة
- إدارة قواعد جدار الحماية وإعادة التوجيه بسلاسة (دعم أصلي لـ firewalld و nftables، مع ارتداد إلى iptables)
- شبكات فرعية قابلة للتهيئة لـ VPN (IPv4: الافتراضي `10.8.0.0/24`، IPv6: الافتراضي `fd42:42:42:42::/112`)
- MTU نفق قابل للتهيئة (الافتراضي: `1500`)
- عند الحاجة، يمكن للسكربت إزالة OpenVPN بشكل نظيف، بما في ذلك الإعدادات وقواعد جدار الحماية
- إعدادات تشفير قابلة للتخصيص، مع إعدادات افتراضية محسّنة (انظر [الأمان والتشفير](#security-and-encryption) أدناه)
- استخدام أحدث ميزات OpenVPN عند توفرها (انظر [الأمان والتشفير](#security-and-encryption) أدناه)
- مجموعة متنوعة من محللات DNS ليتم دفعها إلى العملاء
- خيار استخدام محلل مستضاف ذاتيًا عبر Unbound (يدعم تثبيتات Unbound الموجودة مسبقًا)
- الاختيار بين TCP و UDP
- دعم مرن لـ IPv4/IPv6:
  - نقطة نهاية الخادم IPv4 أو IPv6 (كيفية اتصال العملاء)
  - عملاء IPv4 فقط، أو IPv6 فقط، أو ثنائي الرصة (عنونة VPN والوصول إلى الإنترنت)
  - جميع التركيبات مدعومة: 4→4، 4→4/6، 4→6، 6→4، 6→6، 6→4/6
  - منع تسرب تلقائي: حظر البروتوكول غير المرغوب فيه في أوضاع الرصة الأحادية
- وضع بصلاحيات منخفضة: التشغيل كـ `nobody`/`nogroup`
- حظر تسريبات DNS على ويندوز 10
- اسم عشوائي لشهادة الخادم
- خيار حماية العملاء بكلمة مرور (تشفير المفتاح الخاص)
- خيار السماح لأجهزة متعددة باستخدام نفس ملف تعريف العميل في نفس الوقت (يعطّل عناوين IP الثابتة)
- **مصادقة بصمة النظير** (OpenVPN 2.6+): مصادقة مبسّطة شبيهة بـ WireGuard بدون مرجعية تصديق (CA)
- والعديد من الأشياء الصغيرة الأخرى!

## التوافق

يدعم السكربت توزيعات Linux التالية:

|                     | الدعم |
| ------------------- | ------- |
| AlmaLinux >= 8      | ✅ 🤖   |
| Amazon Linux 2023   | ✅ 🤖   |
| Arch Linux          | ✅ 🤖   |
| CentOS Stream >= 8  | ✅ 🤖   |
| Debian >= 11        | ✅ 🤖   |
| Fedora >= 40        | ✅ 🤖   |
| openSUSE Leap >= 16 | ✅ 🤖   |
| openSUSE Tumbleweed | ✅ 🤖   |
| Oracle Linux >= 8   | ✅ 🤖   |
| Rocky Linux >= 8    | ✅ 🤖   |
| Ubuntu >= 18.04     | ✅ 🤖   |

مما تجب ملاحظته:

- يتم اختبار السكربت بانتظام ضد التوزيعات الموسومة بـ 🤖 فقط.
  - يتم اختباره على بنية `amd64` فقط.
- يتطلب السكربت `systemd`.

### المزوّدون الموصى بهم

- [Vultr](https://umami.stanislas.cloud/q/1HH9Thp8i): مواقع حول العالم، دعم IPv6، يبدأ من \$2.5 شهريًا
- [Hetzner](https://umami.stanislas.cloud/q/HdzaOJWq7): مواقع حول العالم، IPv6، 20 تيرابايت من حركة المرور، يبدأ من €3.59 شهريًا
- [Digital Ocean](https://umami.stanislas.cloud/q/sEVh1l79B): مواقع حول العالم، دعم IPv6، يبدأ من \$4 شهريًا

## الاستخدام

أولاً، نزّل السكربت على خادمك واجعله قابلاً للتنفيذ:```bash
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh

تحتاج إلى تشغيل السكربت بصلاحيات root وتفعيل وحدة TUN.

الوضع التفاعلي

أسهل طريقة للبدء هي القائمة التفاعلية:```bash ./openvpn-install.sh interactive

root@kitploit:~
سيرشدك هذا خلال عملية التثبيت وإدارة العملاء.

في مجلدك الرئيسي، سيكون لديك ملفات `.ovpn`. هذه هي ملفات إعدادات العملاء. نزّلها من خادمك (باستخدام `scp` على سبيل المثال) واتصل باستخدام عميل OpenVPN المفضل لديك.

إذا كان لديك أي سؤال، توجه إلى [الأسئلة الشائعة](#faq) أولاً. وإذا كنت بحاجة إلى مساعدة، يمكنك فتح [نقاش](https://github.com/angristan/openvpn-install/discussions). يرجى البحث في المشكلات والنقاشات الموجودة أولاً.

### وضع CLI

> [!WARNING]
> لا يُضمن التوافق مع واجهة برمجة التطبيقات (API). قد تحدث تغييرات جذرية بين الإصدارات. إذا كنت تستخدم هذا السكربت برمجيًا (مثلًا في الأتمتة أو CI/CD)، فثبّت الإصدار على commit محدد بدلاً من استخدام فرع master.

للأتمتة والبرمجة النصية، استخدم واجهة سطر الأوامر:```bash
# Install with defaults
./openvpn-install.sh install

# Add a client
./openvpn-install.sh client add alice

# List clients
./openvpn-install.sh client list

# Revoke a client (immediately disconnects if connected)
./openvpn-install.sh client revoke alice

الأوامر```text

openvpn-install [options]

Commands: install Install and configure OpenVPN server uninstall Remove OpenVPN server client Manage client certificates server Server management interactive Launch interactive menu

Global Options: --verbose Show detailed output --log Log file path (default: openvpn-install.log) --no-log Disable file logging --no-color Disable colored output -h, --help Show help

root@kitploit:~
شغّل `./openvpn-install.sh <command> --help` للحصول على الخيارات الخاصة بالأوامر المحددة.

#### إدارة العملاء```bash
# Add a new client
./openvpn-install.sh client add alice

# Add a password-protected client
./openvpn-install.sh client add bob --password

# Revoke a client
./openvpn-install.sh client revoke alice

# Renew a client certificate
./openvpn-install.sh client renew bob --cert-days 365

قائمة بجميع العملاء:```text $ ./openvpn-install.sh client list ══ Client Certificates ══ [INFO] Found 3 client certificate(s)

Name Status Expiry Remaining


alice Valid 2035-01-15 3650 days bob Valid 2035-01-15 3650 days charlie Revoked 2035-01-15 unknown

root@kitploit:~
مخرجات JSON للبرمجة النصية:```text
$ ./openvpn-install.sh client list --format json | jq
{
  "clients": [
    {
      "name": "alice",
      "status": "valid",
      "expiry": "2035-01-15",
      "days_remaining": 3650
    },
    {
      "name": "bob",
      "status": "valid",
      "expiry": "2035-01-15",
      "days_remaining": 3650
    },
    {
      "name": "charlie",
      "status": "revoked",
      "expiry": "2035-01-15",
      "days_remaining": null
    }
  ]
}

إدارة الخادم```bash

Renew server certificate

./openvpn-install.sh server renew

Uninstall OpenVPN

./openvpn-install.sh uninstall

root@kitploit:~
عرض العملاء المتصلين (يتم تحديث البيانات كل 60 ثانية):```text
$ ./openvpn-install.sh server status
══ Connected Clients ══
[INFO] Found 2 connected client(s)

   Name    Real Address          VPN IP      Connected Since   Transfer
   ----    ------------          ------      ---------------   --------
   alice   203.0.113.45:52341    10.8.0.2    2025-01-15 14:32  ↓1.2M ↑500K
   bob     198.51.100.22:41892   10.8.0.3    2025-01-15 09:15  ↓800K ↑200K

[INFO] Note: Data refreshes every 60 seconds.

خيارات التثبيت

يدعم الأمر install العديد من الخيارات للتخصيص:```bash

Custom port and protocol

./openvpn-install.sh install --port 443 --protocol tcp

Custom DNS provider

./openvpn-install.sh install --dns quad9

Custom encryption settings

./openvpn-install.sh install --cipher AES-256-GCM --cert-type rsa --rsa-bits 4096

Custom VPN subnet

./openvpn-install.sh install --subnet-ipv4 10.9.0.0

Enable dual-stack (IPv4 + IPv6) for clients

./openvpn-install.sh install --client-ipv4 --client-ipv6

IPv6-only clients (no IPv4)

./openvpn-install.sh install --no-client-ipv4 --client-ipv6

IPv6 endpoint (server listens on IPv6, clients connect via IPv6)

./openvpn-install.sh install --endpoint-type 6 --endpoint 2001:db8::1

Custom IPv6 subnet for dual-stack setup

./openvpn-install.sh install --client-ipv6 --subnet-ipv6 fd00🔢5678::

Skip initial client creation

./openvpn-install.sh install --no-client

Full example with multiple options

./openvpn-install.sh install
--port 443
--protocol tcp
--dns cloudflare
--cipher AES-256-GCM
--client mydevice
--client-cert-days 365

root@kitploit:~
**Network Options:**

- `--endpoint <host>` - عنوان IP عام أو اسم مضيف للعملاء (الافتراضي: يُكتشف تلقائيًا)
- `--endpoint-type <4|6>` - إصدار IP لنقطة الاتصال (الافتراضي: `4`)
- `--ip <addr>` - IP استماع الخادم (الافتراضي: يُكتشف تلقائيًا)
- `--client-ipv4` - تمكين IPv4 لعملاء VPN (الافتراضي: مفعّل)
- `--no-client-ipv4` - تعطيل IPv4 لعملاء VPN
- `--client-ipv6` - تمكين IPv6 لعملاء VPN (الافتراضي: معطّل)
- `--no-client-ipv6` - تعطيل IPv6 لعملاء VPN
- `--subnet-ipv4 <x.x.x.0>` - شبكة فرعية IPv4 لـ VPN (الافتراضي: `10.8.0.0`)
- `--subnet-ipv6 <prefix>` - شبكة فرعية IPv6 لـ VPN (الافتراضي: `fd42:42:42:42::`)
- `--port <num>` - منفذ OpenVPN (الافتراضي: `1194`)
- `--port-random` - استخدام منفذ عشوائي (49152-65535)
- `--protocol <udp|tcp>` - البروتوكول (الافتراضي: `udp`)
- `--mtu <size>` - MTU للنفق (الافتراضي: `1500`)

**DNS Options:**

- `--dns <provider>` - مزود DNS (الافتراضي: `cloudflare`). الخيارات: `system`, `unbound`, `cloudflare`, `quad9`, `quad9-uncensored`, `fdn`, `dnswatch`, `opendns`, `google`, `yandex`, `adguard`, `nextdns`, `custom`
- `--dns-primary <ip>` - DNS أساسي مخصص (يتطلب `--dns custom`)
- `--dns-secondary <ip>` - DNS ثانوي مخصص (يتطلب `--dns custom`)

**Security Options:**

- `--cipher <cipher>` - تشفير البيانات (الافتراضي: `AES-128-GCM`). الخيارات: `AES-128-GCM`, `AES-192-GCM`, `AES-256-GCM`, `AES-128-CBC`, `AES-192-CBC`, `AES-256-CBC`, `CHACHA20-POLY1305`
- `--cert-type <ecdsa|rsa>` - نوع الشهادة (الافتراضي: `ecdsa`)
- `--cert-curve <curve>` - منحنى ECDSA (الافتراضي: `prime256v1`). الخيارات: `prime256v1`, `secp384r1`, `secp521r1`
- `--rsa-bits <2048|3072|4096>` - حجم مفتاح RSA (الافتراضي: `2048`)
- `--hmac <alg>` - خوارزمية HMAC (الافتراضي: `SHA256`). الخيارات: `SHA256`, `SHA384`, `SHA512`
- `--tls-sig <mode>` - وضع TLS (الافتراضي: `crypt-v2`). الخيارات: `crypt-v2`, `crypt`, `auth`
- `--auth-mode <mode>` - وضع المصادقة (الافتراضي: `pki`). الخيارات: `pki` (قائم على CA)، `fingerprint` (بصمة النظير، يتطلب OpenVPN 2.6+)
- `--tls-version-min <1.2|1.3>` - الحد الأدنى لإصدار TLS (الافتراضي: `1.2`)
- `--tls-ciphersuites <list>` - مجموعات التشفير TLS 1.3، مفصولة بنقطتين (الافتراضي: `TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256`)
- `--tls-groups <list>` - مجموعات تبادل المفاتيح، مفصولة بنقطتين (الافتراضي: `X25519:prime256v1:secp384r1:secp521r1`)
- `--server-cert-days <n>` - صلاحية شهادة الخادم بالأيام (الافتراضي: `3650`)

**Client Options:**

- `--client <name>` - اسم العميل الأولي (الافتراضي: `client`)
- `--client-password [pass]` - حماية مفتاح العميل بكلمة مرور (الافتراضي: بدون كلمة مرور)
- `--client-cert-days <n>` - صلاحية شهادة العميل بالأيام (الافتراضي: `3650`)
- `--no-client` - تخطي إنشاء العميل الأولي

**Other Options:**

- `--multi-client` - السماح بنفس الشهادة على أجهزة متعددة (الافتراضي: معطّل)

#### أمثلة الأتمتة

**إنشاء عميل دفعة واحدة:**```bash
#!/bin/bash
for user in alice bob charlie; do
  ./openvpn-install.sh client add "$user"
done

إنشاء عملاء من ملف:```bash #!/bin/bash while read -r user; do ./openvpn-install.sh client add "$user" done < users.txt

root@kitploit:~
**مخرجات JSON للبرمجة النصية:**```bash
# Get client list as JSON
./openvpn-install.sh client list --format json | jq '.clients[] | select(.status == "valid")'

# Get connected clients as JSON
./openvpn-install.sh server status --format json

تفرّع

هذا السكربت مبني على العمل الرائع لـ Nyr والمساهمين معه.

منذ عام 2016، تباعد السكربتان وأصبحا غير متشابهين بعد الآن، خاصة في ما يتعلق بالتفاصيل الداخلية. كان الهدف الرئيسي للسكربت هو تعزيز الأمان. ولكن منذ ذلك الحين، أُعيدت كتابة السكربت بالكامل وأُضيفت الكثير من الميزات. غير أن السكربت متوافق فقط مع التوزيعات الحديثة، لذا إذا كنت بحاجة إلى استخدام خادم أو عميل قديم جدًا، أنصحك باستخدام سكربت Nyr.

الأسئلة الشائعة

المزيد من الأسئلة والأجوبة في FAQ.md.

س: أي مزوّد تنصح به؟

ج: أنصح بهؤلاء:

  • Vultr: مواقع حول العالم، دعم IPv6، يبدأ من $2.5/شهريًا
  • Hetzner: مواقع حول العالم، IPv6، 20 TB من حركة المرور، يبدأ من €3.59/شهريًا
  • Digital Ocean: مواقع حول العالم، دعم IPv6، يبدأ من $4/شهريًا

س: أي عميل OpenVPN تنصح به؟

ج: إن أمكن، عميل OpenVPN 2.4 الرسمي.

  • Windows: عميل OpenVPN المجتمعي الرسمي.
  • Linux: حزمة openvpn من توزيعتك. هناك مستودع APT رسمي للتوزيعات المبنية على Debian/Ubuntu.
  • macOS: Tunnelblick، Viscosity، OpenVPN لنظام ماك.
  • Android: OpenVPN لأندرويد.
  • iOS: عميل OpenVPN Connect الرسمي.

س: هل أنا آمن من وكالة الأمن القومي (NSA) باستخدام سكربتك؟

ج: يرجى مراجعة نماذج التهديدات الخاصة بك. حتى لو كان هذا السكربت يراعي الأمان ويستخدم تشفيرًا حديثًا، لا ينبغي لك استخدام VPN إذا كنت تريد الاختباء من NSA.


س: هل هناك توثيق لـ OpenVPN؟

ج: نعم، يرجى التوجه إلى دليل OpenVPN، الذي يشرح جميع الخيارات.


المزيد من الأسئلة والأجوبة في FAQ.md.

المساهمة

مناقشة التغييرات

يرجى فتح issue قبل إرسال PR إذا كنت تريد مناقشة تغيير، خاصة إذا كان كبيرًا.

الأمان والتشفير

[!NOTE] تم إنشاء هذا السكربت في عام 2016 عندما كانت الإعدادات الافتراضية لـ OpenVPN ضعيفة جدًا. في ذلك الوقت، كان تخصيص إعدادات التشفير ضروريًا لإعداد آمن. ومنذ ذلك الحين، حسّنت OpenVPN إعداداتها الافتراضية بشكل كبير، لكن السكربت ما زال يقدم خيارات تخصيص.

أصدرت OpenVPN 2.3 والإصدارات الأقدم إعدادات افتراضية قديمة مثل Blowfish (BF-CBC) وTLS 1.0 وSHA1. وقد جلبت كل نسخة رئيسية منذ ذلك الحين تحسينات كبيرة:

  • OpenVPN 2.4 (2016): أضاف ECDSA وECDH وAES-GCM وNCP (تفاوض الخوارزميات) وtls-crypt
  • OpenVPN 2.5 (2020): تغيّرت الخوارزمية الافتراضية من BF-CBC إلى AES-256-GCM:AES-128-GCM، وأضاف دعم ChaCha20-Poly1305 وtls-crypt-v2 وTLS 1.3
  • OpenVPN 2.6 (2023): حد أدنى TLS 1.2 افتراضيًا، وحظر الضغط افتراضيًا، و--peer-fingerprint للإعدادات بدون PKI، وتسريع نواة DCO

إذا كنت تريد مزيدًا من المعلومات حول أي خيار مذكور أدناه، توجّه إلى دليل OpenVPN. فهو شامل جدًا.

تتم إدارة الشهادات وPKI بواسطة Easy-RSA. المعلمات الافتراضية موجودة في ملف vars.example.

الضغط

كان هذا السكربت يدعم خوارزميتي الضغط LZ4 وLZO، لكنه كان يثني عن استخدامهما بسبب ثغرة هجوم VORACLE.

يضبط OpenVPN 2.6+ الخيار --allow-compression على القيمة no افتراضيًا، مما يمنع حتى الضغط الذي يدفعه الخادم. وبما أن OpenVPN تزيل دعم الضغط تمامًا، لم يعد هذا السكربت يدعمه.

إصدار TLS

[!NOTE] يستخدم OpenVPN 2.6+ إصدار TLS 1.2 كحد أدنى افتراضيًا. أما الإصدارات السابقة فكانت تقبل TLS 1.0 افتراضيًا.

كانت OpenVPN 2.5 والإصدارات الأقدم تقبل TLS 1.0 افتراضيًا، وهو بروتوكول عمره تقريبًا 20 عامًا.

يعيّن هذا السكربت افتراضيًا tls-version-min 1.2 للتوافق مع جميع عملاء OpenVPN 2.4+. يمكنك اختياريًا ضبط tls-version-min 1.3 في البيئات التي تدعم فيها جميع الأجهزة العميلة TLS 1.3.

تمت إضافة دعم TLS 1.3 في OpenVPN 2.5 ويتطلب OpenSSL 1.1.1+. يوفّر TLS 1.3 أمانًا وأداءً محسّنين مع عملية مصافحة مبسّطة.

يهيئ السكربت مجموعات خوارزميات TLS 1.3 عبر --tls-ciphersuites (بشكل منفصل عن خيار --tls-cipher الخاص بـ TLS 1.2). مجموعات خوارزميات TLS 1.3 الافتراضية هي:

  • TLS_AES_256_GCM_SHA384
  • TLS_AES_128_GCM_SHA256
  • TLS_CHACHA20_POLY1305_SHA256

يُدعم TLS 1.2 منذ OpenVPN 2.3.3. ويُدعم TLS 1.3 منذ OpenVPN 2.5.

الشهادة

يستخدم OpenVPN شهادة RSA بمفتاح 2048 بت افتراضيًا.

أضافت OpenVPN 2.4 دعم ECDSA. تشفير المنحنيات الإهليلجية أسرع وأخف وأكثر أمانًا.

يوفر هذا السكربت:

  • ECDSA: منحنيات prime256v1/secp384r1/secp521r1
  • RSA: مفاتيح 2048/3072/4096 بت

الافتراضي هو ECDSA مع prime256v1.

يستخدم OpenVPN SHA-256 كدالة تجزئة للتوقيع افتراضيًا، وكذلك يفعل السكربت. لا يوفر السكربت أي خيار آخر حاليًا.

وضع المصادقة

يدعم السكربت وضعين للمصادقة:

وضع PKI (افتراضي)

مصادقة تقليدية قائمة على جهة إصدار الشهادات (CA). يملك الخادم وجميع الأجهزة العميلة شهادات موقّعة من نفس الـ CA. تتم إدارة إبطال شهادة العميل عبر قوائم إبطال الشهادات (CRL).

هذا هو الوضع الموصى به للنشرات الأكبر عندما تحتاج إلى:

  • الإدارة المركزية للشهادات
  • الإبطال القياسي القائم على CRL
  • التوافق مع جميع إصدارات OpenVPN

وضع بصمة النظير (OpenVPN 2.6+)

نموذج مصادقة مبسّط يشبه WireGuard يستخدم بصمات شهادات SHA256 بدلاً من سلسلة CA. يملك كل نظير (الخادم والأجهزة العميلة) شهادة موقّعة ذاتيًا، وتوثّق الأطراف بعضها البعض عن طريق التحقق من البصمات.```bash

Install with fingerprint mode

./openvpn-install.sh install --auth-mode fingerprint

root@kitploit:~
الفوائد:

- إعداد أبسط: لا حاجة لبنية تحتية لـ CA
- أسهل للفهم: مشابه لنموذج `known_hosts` في SSH
- مثالي للإعدادات الصغيرة: الشبكات المنزلية، المختبرات، الفرق الصغيرة

كيف يعمل:

1. يُنشئ الخادم شهادة موقعة ذاتيًا ويخزن بصمتها
2. يُنشئ كل عميل شهادة موقعة ذاتيًا
3. تُضاف بصمات العملاء إلى كتلة `<peer-fingerprint>` الخاصة بالخادم
4. يتحقق العملاء من الخادم باستخدام بصمة الخادم
5. يزيل الإبطال البصمة من إعداد الخادم (لا حاجة إلى CRL)

المقايضة: إبطال عميل يتطلب إعادة تحميل OpenVPN (البصمات موجودة في server.conf). في وضع PKI، يُعاد قراءة ملف CRL تلقائيًا عند الاتصالات الجديدة.

### قناة البيانات

> [!NOTE]
> تغيّر تشفير قناة البيانات الافتراضي في OpenVPN 2.5. الإصدارات السابقة كانت تستخدم `BF-CBC` افتراضيًا، بينما OpenVPN 2.5+ يستخدم افتراضيًا `AES-256-GCM:AES-128-GCM`. يتضمن OpenVPN 2.6+ أيضًا `CHACHA20-POLY1305` في قائمة التشفيرات الافتراضية عند توفره.

افتراضيًا، استخدم OpenVPN 2.4 والإصدارات الأقدم `BF-CBC` كتشفير لقناة البيانات. Blowfish خوارزمية قديمة (1993) وضعيفة. حتى التوثيق الرسمي لـ OpenVPN يعترف بذلك.

> الافتراضي هو BF-CBC، وهو اختصار لـ Blowfish في وضع Cipher Block Chaining.
>
> لم يعد يُنصح باستخدام BF-CBC بسبب حجم الكتلة البالغ 64 بت. هذا الحجم الصغير يسمح بهجمات تعتمد على التصادمات، كما أوضحت SWEET32. انظر <https://community.openvpn.net/openvpn/wiki/SWEET32> للتفاصيل.
> باحثو الأمن في INRIA نشروا هجومًا على تشفيرات الكتل ذات 64 بت، مثل 3DES وBlowfish. أظهروا أنهم قادرون على استعادة النص الصريح عندما يتم إرسال نفس البيانات بشكل متكرر كافٍ، وأظهروا كيف يمكنهم استخدام ثغرات البرمجة النصية عبر المواقع (XSS) لإرسال البيانات محل الاهتمام بشكل متكرر كافٍ. يعمل هذا عبر HTTPS، ويعمل أيضًا عبر HTTP-over-OpenVPN. انظر <https://sweet32.info/> للحصول على شرح أفضل وأكثر تفصيلًا.
>
> يتأثر تشفير OpenVPN الافتراضي BF-CBC بهذا الهجوم.

في الواقع، AES هو المعيار اليوم. إنه أسرع وأكثر التشفيرات أمانًا المتاحة اليوم. [SEED](https://en.wikipedia.org/wiki/SEED) و[Camellia](https://github.com/angristan/openvpn-install/blob/master/%3Chttps%3A/en.wikipedia.org/wiki/Camellia_%28cipher)>) غير معرضين للخطر حتى الآن لكنهما أبطأ من AES وأقل موثوقية نسبيًا.

> من بين التشفيرات المدعومة حاليًا، يوصي OpenVPN حاليًا باستخدام AES-256-CBC أو AES-128-CBC. OpenVPN 2.4 والأحدث سيدعم أيضًا GCM. بالنسبة للإصدار 2.4+، نوصي باستخدام AES-256-GCM أو AES-128-GCM.

AES-256 أبطأ بنسبة 40% من AES-128، ولا يوجد أي سبب حقيقي لاستخدام مفتاح 256 بت بدلاً من مفتاح 128 بت مع AES. (المصدر: [1](http://security.stackexchange.com/questions/14068/why-most-people-use-256-bit-encryption-instead-of-128-bit),[2](http://security.stackexchange.com/questions/6141/amount-of-simple-operations-that-is-safely-out-of-reach-for-all-humanity/6149#6149)). علاوة على ذلك، AES-256 أكثر عرضة [لهجمات التوقيت](https://en.wikipedia.org/wiki/Timing_attack).

AES-GCM هو [تشفير AEAD](https://en.wikipedia.org/wiki/Authenticated_encryption)، مما يعني أنه يوفر في الوقت نفسه ضمانات السرية والسلامة والمصادقة على البيانات.

ChaCha20-Poly1305 هو تشفير AEAD آخر يوفر أمانًا مشابهًا لـ AES-GCM. إنه مفيد بشكل خاص على الأجهزة التي لا تحتوي على تسريع AES عبر العتاد (AES-NI)، مثل المعالجات الأقدم والعديد من الأجهزة القائمة على ARM، حيث يمكن أن يكون أسرع بشكل ملحوظ من AES.

يدعم السكربت التشفيرات التالية:

- `AES-128-GCM`
- `AES-192-GCM`
- `AES-256-GCM`
- `AES-128-CBC`
- `AES-192-CBC`
- `AES-256-CBC`
- `CHACHA20-POLY1305` (يتطلب OpenVPN 2.5+)

ويستخدم افتراضيًا `AES-128-GCM`.

أضاف OpenVPN 2.4 ميزة تُسمى "NCP": _معاملات التشفير القابلة للتفاوض_. هذا يعني أنه يمكنك توفير مجموعة تشفيرات كما هو الحال مع HTTPS. يتم ضبطها افتراضيًا على `AES-256-GCM:AES-128-GCM` وتتجاوز معامل `--cipher` عند استخدامها مع عميل OpenVPN 2.4. من أجل البساطة، يضبط السكربت `--cipher` (احتياطي للعملاء غير الداعمين لـ NCP)، و`--data-ciphers` (التسمية الحديثة في OpenVPN 2.5+)، و`--ncp-ciphers` (اسم مستعار قديم للتوافق مع OpenVPN 2.4) على التشفير المختار أعلاه.

### قناة التحكم

سيتفاوض OpenVPN 2.4 افتراضيًا على أفضل تشفير متاح (مثل ECDHE+AES-256-GCM)

#### تشفيرات TLS 1.2 (`--tls-cipher`)

يقترح السكربت الخيارات التالية، اعتمادًا على الشهادة:

- ECDSA:
  - `TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256`
  - `TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384`
  - `TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256` (يتطلب OpenVPN 2.5+)
- RSA:
  - `TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256`
  - `TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384`
  - `TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256` (يتطلب OpenVPN 2.5+)

يستخدم افتراضيًا `TLS-ECDHE-*-WITH-AES-128-GCM-SHA256`.

#### تشفيرات TLS 1.3 (`--tls-ciphersuites`)

عند التفاوض على TLS 1.3، تُستخدم مجموعة منفصلة من حزم التشفير. يتم تكوينها عبر `--tls-ciphersuites` وتستخدم اصطلاحات تسمية OpenSSL:

- `TLS_AES_256_GCM_SHA384`
- `TLS_AES_128_GCM_SHA256`
- `TLS_CHACHA20_POLY1305_SHA256`

افتراضيًا، يتم تمكين جميع حزم التشفير الثلاث. حزم تشفير TLS 1.3 أبسط لأنها لا تتضمن خوارزمية تبادل المفاتيح (التي يتم التفاوض عليها بشكل منفصل عبر مشاركات المفاتيح).

### تبادل المفاتيح

كان OpenVPN يعتمد تاريخيًا على معاملات DH بحجم 2048 بت لتبادل المفاتيح. اعتاد هذا السكربت على تقديم كل من DH (بأحجام مفاتيح قابلة للتكوين) و ECDH كبدائل.

أضاف OpenVPN 2.4 دعم ECDH، وجعل OpenVPN 2.7 `dh none` (ECDH) هو الافتراضي، نظرًا لأن DH ذات المجال المحدود قيد الإهمال. وبما أن ECDH أصبح مدعومًا ومفضلًا عالميًا الآن، لم يعد هذا السكربت يقدم DH التقليدي.

يقوم السكربت بتكوين `tls-groups` باستخدام قائمة التفضيلات التالية:```
X25519:prime256v1:secp384r1:secp521r1
  • X25519: منحنى سريع وحديث (Curve25519)، مدعوم على نطاق واسع
  • prime256v1: NIST P-256، الأكثر توافقًا
  • secp384r1: NIST P-384، أمان أعلى
  • secp521r1: NIST P-521، أعلى أمان

يمكنك تخصيص هذا باستخدام --tls-groups.

خوارزمية ملخص HMAC

من ويكي OpenVPN، حول --auth:

قم بمصادقة حزم قناة البيانات و(إذا كان مفعّلًا) حزم قناة التحكم tls-auth باستخدام HMAC مع خوارزمية ملخص الرسائل alg. (الافتراضي هو SHA1). HMAC هي خوارزمية مصادقة رسائل شائعة الاستخدام (MAC) تستخدم سلسلة بيانات وخوارزمية تجزئة آمنة ومفتاحًا لإنتاج توقيع رقمي.

إذا تم اختيار وضع تشفير AEAD (مثل GCM)، يتم تجاهل خوارزمية --auth المحددة لقناة البيانات، ويُستخدم بدلاً من ذلك أسلوب المصادقة الخاص بتشفير AEAD. لاحظ أن alg لا تزال تحدد الملخص المستخدم لـ tls-auth.

يوفر السكربت الخيارات التالية:

  • SHA256
  • SHA384
  • SHA512

الافتراضي هو SHA256.

tls-auth وtls-crypt وtls-crypt-v2

من ويكي OpenVPN، حول tls-auth:

يضيف طبقة إضافية من مصادقة HMAC فوق قناة التحكم TLS للتخفيف من هجمات DoS والهجمات على حزمة TLS.

باختصار، يتيح --tls-auth نوعًا من "جدار حماية HMAC" على منفذ TCP/UDP الخاص بـ OpenVPN، حيث يمكن إسقاط حزم قناة التحكم TLS التي تحمل توقيع HMAC غير صحيح فورًا دون استجابة.

حول tls-crypt:

قم بتشفير ومصادقة جميع حزم قناة التحكم باستخدام المفتاح من keyfile. (انظر --tls-auth لمزيد من المعلومات الأساسية.)

تشفير (ومصادقة) حزم قناة التحكم:

  • يوفر مزيدًا من الخصوصية بإخفاء الشهادة المستخدمة لاتصال TLS،
  • يجعل من الصعب تحديد حركة مرور OpenVPN على هذا النحو،
  • يوفر أمانًا "لفقراء" ما بعد الكمومي، ضد المهاجمين الذين لن يعرفوا أبدًا المفتاح المشترك مسبقًا (أي لا يوجد سرية تامة للأمام).

إذن كلاهما يوفر طبقة إضافية من الأمان ويخفف هجمات DoS. لا يتم استخدامهما افتراضيًا بواسطة OpenVPN.

tls-crypt هي ميزة من OpenVPN 2.4 توفر التشفير بالإضافة إلى المصادقة (على عكس tls-auth). وهي أكثر خصوصية.

tls-crypt-v2 هي ميزة من OpenVPN 2.5 تبني على tls-crypt باستخدام مفاتيح لكل عميل بدلاً من مفتاح مشترك. يتلقى كل عميل مفتاحًا فريدًا مشتقًا من مفتاح الخادم. يوفر هذا:

  • أمان أفضل: إذا تم اختراق مفتاح عميل، فلن يتأثر العملاء الآخرون
  • إدارة مفاتيح أسهل: يمكن إبطال مفاتيح العملاء بشكل فردي دون إعادة توليد مفتاح الخادم
  • قابلية التوسع: أكثر ملاءمة للنشرات الكبيرة التي تضم العديد من العملاء

يدعم السكربت الخيارات الثلاثة جميعها:

  • tls-crypt-v2 (الافتراضي): مفاتيح لكل عميل لأمان أفضل
  • tls-crypt: مفتاح مشترك لجميع العملاء، متوافق مع OpenVPN 2.4+
  • tls-auth: مصادقة HMAC فقط (بدون تشفير)، متوافق مع العملاء الأقدم

التحقق من نوع الشهادة (remote-cert-tls)

يتم تكوين الخادم باستخدام remote-cert-tls client، الأمر الذي يتطلب من الأقران المتصلين أن يكون لديهم شهادة مع استخدام المفتاح الموسع "مصادقة عميل الويب TLS". يمنع هذا استخدام شهادة خادم للانتحال كعميل.

وبالمثل، يتم تكوين العملاء باستخدام remote-cert-tls server لضمان اتصالهم فقط بالخوادم التي تقدم شهادات خادم صالحة. يحمي هذا من مهاجم يمتلك شهادة عميل صالحة ويقيم خادمًا مارقًا.

تفريغ قناة البيانات (DCO)

تفريغ قناة البيانات (DCO) هي ميزة تسريع على مستوى النواة تعمل على تحسين أداء OpenVPN بشكل كبير من خلال إبقاء تشفير/فك تشفير قناة البيانات في مساحة النواة، مما يلغي عمليات تبديل السياق المكلفة بين مساحة المستخدم ومساحة النواة لكل حزمة.

تم دمج DCO في نواة Linux 6.16 (أبريل 2025).

المتطلبات:

  • OpenVPN 2.6.0 أو أحدث
  • نواة Linux 6.16+ (مدمجة) أو وحدة النواة ovpn-dco
  • بروتوكول UDP (TCP غير مدعوم)
  • تشفير AEAD (AES-128-GCM أو AES-256-GCM أو CHACHA20-POLY1305)

الإعدادات الافتراضية للسكربت (AES-128-GCM، UDP) متوافقة مع DCO. عندما يكون DCO متاحًا والتكوين متوافقًا، سيستخدمه OpenVPN تلقائيًا لتحسين الأداء.

ملاحظة: يجب أن يكون DCO مدعومًا على كل من الخادم والعميل للتسريع الكامل. دعم العميل متاح في OpenVPN 2.6+ (Linux وWindows وFreeBSD) وOpenVPN Connect 3.4+ (Windows). لا يدعم macOS حاليًا DCO، لكن يمكن للعملاء الاتصال بالخوادم المفعّلة بـ DCO مع فوائد أداء جزئية على جانب الخادم.

سيعرض السكربت حالة توفر DCO أثناء التثبيت.

قل شكرًا

يمكنك قول شكرًا إذا أردت!

الاعتمادات والترخيص

جزيل الشكر لـ المساهمين والعمل الأصلي لـ Nyr.

هذا المشروع مرخّص بموجب رخصة MIT

تاريخ النجوم

Star History Chart

تنزيل الأداة