تكوين IPTables السهل وأمثلة على Ubuntu 16.04

المقدمة

iptablesهي أداة قوية تُستخدم لتكوين جدار الحماية المدمج لـ Linux-kernel. يأتي مثبتًا مسبقًا على معظم توزيعات Ubuntu ، ولكن إذا كنت تستخدم إصدار Ubuntu مخصصًا أو تعمل داخل حاوية ، فمن المرجح أن تحتاج إلى تثبيته يدويًا.

sudo apt-get install iptables iptables-persistent

بعد التثبيت ، إذا تم سؤالك عما إذا كنت تريد حفظ قواعدك الحالية ، فلا يهم في الوقت الحالي لأنك ستقوم بإزالة أو إنشاء قواعد جديدة لاحقًا.

نصائح

يمكنك استخدام netcatالأمر (على كمبيوتر مختلف عن الخادم الخاص بك) لاختبار أي من المنافذ مفتوحة أو مغلقة.

nc -z -w5 -v SERVER_IP PORT
  • nc هو الأمر netcat.
  • -z فقط أرسل حزمة بدون حمولة.
  • -w5 انتظر حتى 5 ثوان للرد.
  • -v وضع مفصل.
  • استبدل SERVER_IPبعنوان الخادم الخاص بك.
  • استبدل PORTالمنفذ الذي تريد اختباره إذا كان مفتوحًا (على سبيل المثال 22).

على خادمك ، يمكنك استخدام netstatالأمر لمعرفة المنافذ التي تستمع حاليًا للاتصالات.

sudo netstat -tulpn

ملاحظة: على الرغم من netstatأنه من السهل العثور على المنافذ التي ترغب في العمل معها ، يجب أن تكون على دراية بالتطبيقات التي قمت بتثبيتها حاليًا على الخادم الخاص بك والمنافذ التي تستمع إليها ، ليس عليك السماح لكل منفذ تجده في netstatالإخراج .

بناء الجملة

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTإضافة قاعدة إلى INPUTالسلسلة ، السلسلة هي مجموعة من القواعد ، والقواعد التي نستخدمها أكثر في هذا الدليل ستكون INPUT، OUTPUTو PREROUTING.
  • -p tcpتعيين tcpكبروتوكول ستنطبق عليه هذه القاعدة ، يمكنك أيضًا استخدام بروتوكولات أخرى مثل udp، icmpأو all.
  • -m tcpاستخدم tcpالوحدة. iptablesيدعم ميزات إضافية عبر الوحدات النمطية ، بعضها يأتي بالفعل مثبتًا مسبقًا مع iptablesالبعض الآخر ، مثل geoipالوحدة النمطية.
  • --dport 22--تشير الأوامر التي تبدأ بـ إلى خيارات إضافية للوحدة النمطية المستخدمة سابقًا ، في هذه الحالة سنخبر tcpالوحدة بأن تنطبق فقط على المنفذ 22.
  • -m geoipاستخدم geoipالوحدة. سيحد من الحزم على أساس كل بلد (مزيد من المعلومات في الخطوة 5).
  • --src-cc PEأخبر geoipالوحدة النمطية بقصر الحزم الواردة على الحزم الواردة من بيرو. لمزيد من رموز البلدان ابحث عنها ISO 3166 country codesعلى الإنترنت.
  • -j ACCEPTو -jحجة تقول iptablesما يجب القيام به إذا كانت العبوة تطابق القيود المحددة في الحجج السابقة. في هذه الحالة ستكون ACCEPTهذه الحزم ، والخيارات الأخرى REJECT، DROPوالمزيد. يمكنك العثور على المزيد من الخيارات من خلال البحث iptables jump targetsعلى الإنترنت.

1. الأساسيات

أدرج جميع القواعد.

sudo iptables -L

قم بإدراج جميع الأوامر التي تم استخدامها لإنشاء القواعد المستخدمة حاليًا ، وهي مفيدة لتحرير القواعد أو حذفها.

sudo iptables -S

لحذف قاعدة معينة ، اختر قاعدة sudo iptables -Sواستبدل -Aبها -D.

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

أدرج جميع القواعد المرقمة في INPUTالسلسلة.

sudo iptables -L INPUT --line-numbers

حذف قاعدة مرقمة.

sudo iptables -D INPUT 2

لمسح جميع القواعد.

sudo iptables -F

تحذير: قد تفقد الاتصال إذا تم الاتصال بواسطة SSH .

امسح القواعد فقط في OUTPUTالسلسلة.

sudo iptables -F OUTPUT

2. إنشاء قواعد أولية

سماح SSHعلى eth0واجهة

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 تطبيق القاعدة على واجهة معينة ، للسماح لأي واجهة بإزالة هذا الأمر.

لتحديد الحزم الواردة إلى IP معين (أي 10.0.3.1/32).

sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
  • -s 10.0.3.1/32 يحدد IP / شبكة فرعية للسماح بالاتصالات من.

تعيين قواعد السلسلة الافتراضية.

تحذير: قبل المتابعة ، تأكد من أنك قمت بتطبيق قواعد SSH الصحيحة إذا كنت تعمل على خادم بعيد .

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP يرفض جميع الحزم الواردة (أي لن يتمكن أحد من الاتصال بخوادمك قيد التشغيل مثل Apache و SQL وما إلى ذلك).
  • -P FORWARD DROP يرفض جميع الحزم المعاد توجيهها (أي عندما تستخدم نظامك كموجه).
  • -P OUTPUT ACCEPTيسمح لجميع الحزم الصادرة (أي عند تنفيذ HTTPطلب).

السماح لجميع حركة المرور على واجهة الاسترجاع ( مستحسن ).

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

3. جعل القواعد ثابتة

احفظ iptablesالقواعد الحالية .

sudo netfilter-persistent save
sudo netfilter-persistent reload

إذا كنت تعمل داخل حاوية ، netfilter-persistentفمن المرجح ألا يعمل الأمر ، لذلك تحتاج إلى إعادة تكوين iptables-persistentالحزمة.

sudo dpkg-reconfigure iptables-persistent

4. السماح بالاتصالات الصادرة

السماح باستعلامات DNS.

sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

استخدام stateوحدة للسماح RELATEDو ESTABLISHEDالحزم الصادرة.

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

السماح للمنافذ المطلوبة ؛ في هذه الحالة ، HTTPالموانئ.

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

المزيد من المنافذ التي قد ترغب في استخدامها.

  • FTP: برنامج التعاون الفني في المنفذ 21
  • HTTPS: TCP في المنفذ 443
  • DHCP: UDP في المنفذ 67
  • NTP: UDP في المنفذ 123

ملاحظة: إذا كنت تريد السماح apt-getفقد يكون من الضروري السماح FTPوHTTPS .

اسمح لحركة المرور المرتجعة فقط بالاتصالات RELATEDبالفعل ESTABLISHED( يُنصح بذلك لأنه يلزم أحيانًا الاتصال ثنائي الاتجاه).

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
قواعد مفيدة أخرى

السماح بطلبات ping من الخارج.

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

إعادة توجيه حركة المرور على eth0المنفذ 2200إلى 10.0.3.21:22(مفيد إذا كنت تريد فضح خادم SSH قيد التشغيل داخل الحاوية).

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

إذا نجحت في تسجيل الدخول إلى الخادم الخاص بك باستخدام SSH ، فسيتم إنشاء اتصال مستمر (أي عدم وجود اتصالات جديدة حتى إذا كنت متصلاً لأكثر من ساعة واحدة). إذا فشلت وحاولت تسجيل الدخول مرة أخرى ، فسيتم إنشاء اتصال جديد. سيؤدي هذا إلى منع محاولات تسجيل الدخول إلى SSH المستمرة عن طريق الحد من الاتصالات الجديدة لكل ساعة.

sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP

أعد توجيه جميع الطلبات على المنفذ 443إلى المنفذ 4430(مفيد إذا كنت ترغب في الربط بالمنفذ 443بدون root).

sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
  • ens3 واجهة الشبكة.
  • -m geoip وحدة كتلة البلد (انظر الخطوة 5).

تحذير: لا تستخدم lo، سيتجاهل نظام التشغيل جميع الحزم المعاد توجيهها إلى واجهة الاسترجاع .

5. السماح أو منع البلدان بأكملها

تثبيت 5.1 xtables-addons

يمكنك تثبيت xtables-addonsالوحدة النمطية باستخدام طرق مختلفة ، لا تتردد في استخدام طريقة التثبيت التي تناسبك.

  • التثبيت باستخدام apt-get.

    sudo apt-get install xtables-addons-common
    
  • التثبيت باستخدام module-assistant.

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • التثبيت من المصدر.

    sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
    git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
    cd xtables-addons
    ./autogen.sh
    ./configure
    make
    sudo make install
    

بناء قاعدة بيانات "البلدان".

sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv

إعادة تشغيل النظام الخاص بك.

sudo reboot

بعد xtables-addonsالتثبيت بنجاح ، وبعد إعادة التشغيل الأولى ، depmodلن يعمل تشغيل حظر البلد وإلا فلن يعمل بشكل صحيح (هذا مطلوب للمرة الأولى فقط).

sudo depmod 

أنشئ برنامجًا نصيًا /etc/cron.monthly/geoip-updaterلتحديث geoipقاعدة البيانات شهريًا.

#!/usr/bin/env bash
# this script is intended to run with sudo privileges

echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip

echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl

echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater

جعل /etc/cron.monthly/geoip-updaterالملف القابل للتنفيذ.

sudo chmod +x /etc/cron.monthly/geoip-updater

5.2 أمثلة على القواعد

ملاحظة: إذا كنت تتلقى iptables: No chain/target/match by that nameخطأ عند محاولة تطبيق geoipقاعدة ، فمن المحتمل أنه xtables-addonsلم يتم تثبيت بشكل صحيح. جرب طريقة تثبيت أخرى.

حظر جميع الحزم الواردة من الصين وهونغ كونغ وروسيا وكوريا.

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

السماح بالحزم الواردة على المنفذ 80من كل مكان باستثناء البلدان المذكورة أعلاه.

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

السماح بالحزم الواردة على ens3الواجهة على المنفذ 22فقط من بيرو (لا تتردد في اختيار رمز البلد الذي تريد قبول الحزم منه ، على سبيل المثال ، USللولايات المتحدة).

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

السماح بالحزم الواردة على المنفذ 443فقط من بيرو.

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT


Leave a Comment

كيفية تثبيت منصة عربة التسوق LiteCart على أوبونتو 16.04

كيفية تثبيت منصة عربة التسوق LiteCart على أوبونتو 16.04

LiteCart عبارة عن منصة سلة تسوق مجانية ومفتوحة المصدر مكتوبة بلغة PHP و jQuery و HTML 5. وهي عبارة عن برنامج بسيط وخفيف الوزن وسهل الاستخدام للتجارة الإلكترونية

قم بإعداد NFS Share على دبيان

قم بإعداد NFS Share على دبيان

NFS هو نظام ملفات قائم على الشبكة يسمح لأجهزة الكمبيوتر بالوصول إلى الملفات عبر شبكة الكمبيوتر. يوضح هذا الدليل كيف يمكنك فضح المجلدات عبر NF

كيفية تثبيت Matomo Analytics على Fedora 28

كيفية تثبيت Matomo Analytics على Fedora 28

استخدام نظام مختلف؟ Matomo (Piwik سابقًا) هو نظام أساسي مفتوح المصدر للتحليلات ، وهو بديل مفتوح لبرنامج Google Analytics. مصدر Matomo مستضاف

قم بإعداد خادم TeamTalk على Linux

قم بإعداد خادم TeamTalk على Linux

TeamTalk هو نظام مؤتمرات يتيح للمستخدمين إجراء محادثات صوتية / مرئية عالية الجودة ، والدردشة النصية ، ونقل الملفات ، ومشاركة الشاشات. أنا

كيفية تثبيت وتكوين CyberPanel على خادم CentOS 7 الخاص بك

كيفية تثبيت وتكوين CyberPanel على خادم CentOS 7 الخاص بك

استخدام نظام مختلف؟ مقدمة تعد CyberPanel واحدة من أولى لوحات التحكم في السوق مفتوحة المصدر وتستخدم OpenLiteSpeed. ما هذا

كيفية تثبيت وتكوين روبي مع Rbenv و Rails و MariaDB و Nginx و SSL و Passenger على Ubuntu 17.04

كيفية تثبيت وتكوين روبي مع Rbenv و Rails و MariaDB و Nginx و SSL و Passenger على Ubuntu 17.04

Ruby on Rails هو إطار عمل شهير لـ Ruby تم تطويره لزيادة إنتاجية المبرمجين. ومع ذلك ، الحصول على الجواهر والتبعيات المختلفة ر

كيفية الوصول إلى Vultr VPS الخاص بك

كيفية الوصول إلى Vultr VPS الخاص بك

يوفر Vultr عدة طرق مختلفة للوصول إلى VPS لتكوين وتثبيت واستخدام. بيانات اعتماد الوصول بيانات اعتماد الوصول الافتراضية لـ VPS الخاص بك

كيفية بناء Brotli من المصدر على Ubuntu 18.04 LTS

كيفية بناء Brotli من المصدر على Ubuntu 18.04 LTS

استخدام نظام مختلف؟ Brotli هو طريقة ضغط جديدة مع نسبة ضغط أفضل من GZIP. تتم استضافة رمز المصدر الخاص به علنًا على Githu هذا

كيفية تثبيت OpenNMS على Ubuntu 16.04 LTS

كيفية تثبيت OpenNMS على Ubuntu 16.04 LTS

استخدام نظام مختلف؟ OpenNMS عبارة عن منصة إدارة شبكة مفتوحة المصدر على مستوى المؤسسات يمكن استخدامها لمراقبة وإدارة العديد من الأجهزة

نشر WebDAV على دبيان 10 باستخدام WsgiDAV

نشر WebDAV على دبيان 10 باستخدام WsgiDAV

مقدمة: التأليف والإصدار الموزع على الويب (WebDAV) هو امتداد HTTP يوفر إطار عمل لإنشاء الملفات وتعديلها عن بُعد على

استخدام طرق عرض MySQL على دبيان 7

استخدام طرق عرض MySQL على دبيان 7

مقدمة يتميز MySQL بميزة رائعة تعرف باسم طرق العرض. المشاهدات هي استعلامات مخزنة. اعتبرها اسمًا مستعارًا لاستعلام طويل. في هذا الدليل ،

كيفية تثبيت Omeka Classic 2.4 CMS على Fedora 26 LAMP VPS

كيفية تثبيت Omeka Classic 2.4 CMS على Fedora 26 LAMP VPS

استخدام نظام مختلف؟ Omeka Classic 2.4 CMS هو نظام نشر رقمي مجاني ومفتوح المصدر ونظام إدارة المحتوى (CMS) لمشاركة الصور الرقمية

كيفية تثبيت DokuWiki على Ubuntu 16.04 LTS

كيفية تثبيت DokuWiki على Ubuntu 16.04 LTS

استخدام نظام مختلف؟ DokuWiki هو برنامج ويكي مفتوح المصدر مكتوب بلغة PHP ولا يتطلب قاعدة بيانات. يقوم بتخزين البيانات في ملفات نصية. DokuWik

إنشاء Chroot على دبيان

إنشاء Chroot على دبيان

ستعلمك هذه المقالة كيفية إعداد سجن سريع على دبيان. أفترض أنك تستخدم Debian 7.x. إذا كنت تقوم بتشغيل دبيان 6 أو 8 ، فقد يعمل هذا ، ولكن

كيفية تثبيت PiVPN على دبيان

كيفية تثبيت PiVPN على دبيان

مقدمة طريقة سهلة لإعداد خادم VPN على دبيان هي PiVPN. PiVPN هو أداة تثبيت وغلاف لـ OpenVPN. يخلق أوامر بسيطة لك

كيفية تثبيت CyberPanel وتكوينه على Ubuntu 18.04 LTS

كيفية تثبيت CyberPanel وتكوينه على Ubuntu 18.04 LTS

استخدام نظام مختلف؟ مقدمة تعد CyberPanel واحدة من أولى لوحات التحكم في السوق مفتوحة المصدر وتستخدم OpenLiteSpeed. ما هذا

كيفية نشر Ghost v0.11 LTS على Fedora 25

كيفية نشر Ghost v0.11 LTS على Fedora 25

استخدام نظام مختلف؟ Ghost هي منصة تدوين مفتوحة المصدر اكتسبت شعبية بين المطورين والمستخدمين العاديين منذ عام 201

قم بتثبيت RockMongo على CentOS 7

قم بتثبيت RockMongo على CentOS 7

RockMongo هي أداة إدارة MongoDB على الويب تشبه أداة إدارة MySQL: phpMyAdmin. سيغطي هذا البرنامج التعليمي عملية التثبيت

كيفية نشر Lets Chat Server على CentOS 7

كيفية نشر Lets Chat Server على CentOS 7

Lets Chat هو تطبيق دردشة مفتوح المصدر مصمم لتوفير خدمة الرسائل ذاتية الاستضافة للفرق الصغيرة. يعتمد Lets Chat على NodeJS و MongoDB

كيفية تثبيت أداة إدارة مشروع Taiga على CentOS 7

كيفية تثبيت أداة إدارة مشروع Taiga على CentOS 7

استخدام نظام مختلف؟ Taiga هو تطبيق مجاني ومفتوح المصدر لإدارة المشاريع. على عكس أدوات إدارة المشاريع الأخرى ، يستخدم Taiga زيادة

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

6 أشياء شديدة الجنون حول نينتندو سويتش

6 أشياء شديدة الجنون حول نينتندو سويتش

يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.

وظائف طبقات معمارية مرجعية للبيانات الضخمة

وظائف طبقات معمارية مرجعية للبيانات الضخمة

اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

اقرأ هذا لمعرفة مدى انتشار الذكاء الاصطناعي بين الشركات الصغيرة وكيف أنه يزيد من احتمالات نموها ومنح منافسيها القدرة على التفوق.

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

مع تطور العلم بمعدل سريع ، واستلام الكثير من جهودنا ، تزداد أيضًا مخاطر تعريض أنفسنا إلى تفرد غير قابل للتفسير. اقرأ ، ماذا يمكن أن يعني التفرد بالنسبة لنا.

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

أصدرت Apple مؤخرًا macOS Catalina 10.15.4 تحديثًا تكميليًا لإصلاح المشكلات ولكن يبدو أن التحديث يتسبب في المزيد من المشكلات التي تؤدي إلى إنشاء أجهزة macOS. قراءة هذه المادة لمعرفة المزيد