بناء خادم البريد الخاص بك مع FreeBSD 11

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

مع هذا ، لنبدأ في تشغيل خادم البريد الخاص بنا.

نظرة عامة

هناك ثلاث قطع مطلوبة من البرامج لتثبيتها غير مضمنة في نظام FreeBSD الأساسي:

  • OpenSMTPd
  • دوفيكوت
  • البريد المزعج

OpenSMTPd هو وكيل نقل البريد (MTA) ووكيل تسليم البريد (MDA). وهذا يعني أنه يمكنه الاتصال بخوادم البريد الأخرى عبر SMTPالبروتوكول ، كما أنه يعالج تسليم البريد إلى صناديق بريد المستخدمين الفرديين. سنقوم بإعداد OpenSMTPd بحيث يمكنه الاتصال بالخوادم الخارجية (التي تمت تصفيتها من خلال البريد العشوائي) وتسليم البريد إلى المستخدمين المحليين ، بالإضافة إلى تسليم البريد المحلي من مستخدم إلى آخر.

Dovecot هو MDA الذي يقرأ صناديق البريد المحلية ويقدمها عبر IMAP أو POP3 للمستخدمين. سيستخدم صناديق بريد المستخدمين المحليين لخدمة هذا المحتوى.

Spamd هي خدمة لتصفية البريد. يمكننا إعادة توجيه البريد من خلال البريد العشوائي ، وسيقوم بتصفية البريد بناءً على مجموعة متنوعة من القوائم السوداء والقوائم البيضاء والقائمة الرمادية.

تتطلب الفكرة العامة لخادم البريد هذا بعض المسارات المختلفة:

Outside world -> Firewall -> spamd -> OpenSMTPD -> User mail boxes
Outside world -> Firewall (spamd-whitelist) -> OpenSMTPD -> User mailboxes
Outside world -> Firewall (IMAP/POP3) -> Dovecot
Outside world -> Firewall (SMTPD submission)

في هذا البرنامج التعليمي ، سنستخدم إصدار FreeBSD من OpenFD's PF لجدار الحماية الخاص بنا. يمكنك أيضًا الاستخدام ipfw، حيث يكون التكوين متشابهًا جدًا.

ملاحظة: يحظر Vultr بشكل افتراضي المنفذ 25 ، الذي تستخدمه خوادم SMTP في كل مكان. إذا كنت ترغب في تشغيل خادم بريد إلكتروني يعمل بكامل طاقته ، فسيتعين عليك فتح هذا المنفذ.

الإعداد الأولي

أولاً ، نحتاج إلى تثبيت البرامج المطلوبة.

على افتراض أنك تعمل كمستخدم تم إعداد وصول sudo ، يمكننا تشغيل الأوامر التالية. ستختلف باختلاف ما إذا كنت تستخدم منافذ أو حزم.

الحزم (موصى به)

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

sudo pkg install opensmtpd dovecot spamd

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

sudo portsnap fetch update   # or run portsnap fetch extract if using ports for the first time
cd /usr/ports/mail/opensmtpd  
make install  # Installs openSMTPd
make clean
cd /usr/ports/mail/dovecot
make install  # Installs dovecot
make clean
cd /usr/ports/mail/spamd
make install  # Installs spamd
make clean

سنحتاج إلى إضافة الأسطر التالية إلى /etc/rc.conf:

pf_enable="YES"
pf_rules="/usr/local/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"

obspamd_enable="YES"
obspamd_flags="-v"
obspamlogd_enable="YES"

dovecot_enable="YES"

إعداد جدار الحماية

لتكوين PF ، يمكننا إنشاء /usr/local/etc/pf.conf:

## Set public interface ##
ext_if="vtnet0"

## set and drop IP ranges on the public interface ##
martians = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \
          10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \
          0.0.0.0/8, 240.0.0.0/4 }"

table <spamd> persist
table <spamd-white> persist

# Whitelisted webmail services
table <webmail> persist file "/usr/local/etc/pf.webmail.ip.conf"

## Skip loop back interface - Skip all PF processing on interface ##
set skip on lo

## Sets the interface for which PF should gather statistics such as bytes in/out and packets passed/blocked ##
set loginterface $ext_if

# Deal with attacks based on incorrect handling of packet fragments 
scrub in all


# Pass spamd whitelist
pass quick log on $ext_if inet proto tcp from <spamd-white> to $ext_if port smtp \
    -> 127.0.0.1 port 25
# Pass webmail servers
rdr pass quick log on $ext_if inet proto tcp from <gmail> to $ext_if port smtp \
    -> 127.0.0.1 port 25
# pass submission messages.
pass quick log on $ext_if inet proto tcp from any to $ext_if port submission modulate state
# Pass unknown mail to spamd
rdr pass log on $ext_if inet proto tcp from {!<spamd-white> <spamd>} to $ext_if port smtp \
    -> 127.0.0.1 port 8025 

## Blocking spoofed packets
antispoof quick for $ext_if

## Set default policy ##
block return in log all
block out all

# Drop all Non-Routable Addresses 
block drop in quick on $ext_if from $martians to any
block drop out quick on $ext_if from any to $martians

pass in inet proto tcp to $ext_if port ssh

# Allow Ping-Pong stuff. Be a good sysadmin 
pass inet proto icmp icmp-type echoreq

# Open up imap/pop3 support
pass quick on $ext_if proto tcp from any to any port {imap, imaps, pop3, pop3s} modulate state


# Allow outgoing traffic
pass out on $ext_if proto tcp from any to any modulate state
pass out on $ext_if proto udp from any to any keep state

هذا تكوين PF عامل. إنه بسيط نسبيًا ، ولكن هناك بعض المراوغات التي يمكن شرحها أيضًا.

أولاً ، نحدد $ext_ifالمتغير الخاص vtnet0بجهازنا لاستخدامه لاحقًا. نحدد أيضًا عناوين IP غير الصالحة التي يجب إسقاطها على الواجهة الخارجية.

نحدد أيضًا جدولين ، spamdو spamd-white- يتم إنشاء هذين الجدولين بواسطة spamd في تكوينه الافتراضي. أيضًا ، نحدد جدولًا باسمه webmailوالذي سنستخدمه للسماح لبعض موفري بريد الويب الرئيسيين بالمرور.

لعرض جدول ، يمكنك استخدام الأمر pfctl -t tablename -T showلسرد العناصر في الجدول.

قمنا بتعيين بعض قواعد PF: تخطي المعالجة على الواجهة المحلية ، وتمكين الإحصائيات على الواجهة الخارجية وفرك الحزم الواردة.

التالي هو أحد الأجزاء الأكثر أهمية ، حيث ندير إرسال حركة المرور عبر البريد العشوائي أو OpenSMTPd.

أولاً ، قاعدة إعادة التوجيه (لاحظ بناء الجملة هنا ، يستخدم FreeBSD 11 صيغة PF للأسلوب الأقدم (ما قبل OpenBSD 4.6) لذا قد يبدو بناء الجملة غريبًا. إذا تلقينا أي شيء على smtp من مضيف مدرج في spamdالجدول أو غير مدرج في على spamd-whiteالطاولة، ونحن إعادة توجيه الاتصال من خلال البرنامج الخفي spamd، التي تتعامل مع هذه الاتصالات. القواعد الثلاث المقبلة هي قواعد عبور حتى نتمكن من الحصول على الواقع البريد. نحن نمر من خلال الرسائل من البرامج المتكاملة المدرجة في spamd-whiteو webmailالجداول مباشرة من خلال ل OpenSMTPd أيضًا ، نقبل الرسائل على منفذ الإرسال ( 587).

ثم هناك بعض قواعد التدبير المنزلي لتعيين سياستنا الافتراضية وقبول رسائل SSH و ICMP.

ثم نقوم بتمرير IMAP و POP3 على الواجهة الخارجية من أجل الوصول إلى Dovecot.

أخيرًا ، نسمح بكل حركة المرور الصادرة. إذا كنت ترغب في إضافة المزيد من الأمان ، يمكنك تحديد المنافذ التي تمر بها ، ولكن بالنسبة لخادم يستخدم مرة واحدة ، فلن تكون هناك مشكلة في تمرير كل شيء.

بدء PF:

sudo service pf start

الآن بعد أن أصبح لدينا إعداد جدار الحماية ، يمكننا الانتقال إلى تكوين خادم البريد.

OpenSMTPd

يحتوي OpenSMTPd على بنية تكوين بسيطة للغاية وسهلة القراءة. يمكن أن يتناسب تكوين العمل بالكامل مع 14 سطرًا ، كما ترى أدناه:

#This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.

ext_if=vtnet0

# If you edit the file, you have to run "smtpctl update table aliases"
table aliases   file:/etc/mail/aliases
table domains   file:/etc/mail/domains

# Keys
pki mail.example.com key "/usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem"
pki mail.example.com certificate "/usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem"
# If you want to listen on multiple subdomains (e.g. mail.davidlenfesty) you have to add more lines
# of keys, and more lines of listeners

# Listen for local SMTP connections
listen on localhost hostname mail.example.com

# listen for filtered spamd connections
listen on lo0 port 10026

# Listen for submissions
listen on $ext_if port 587 tls-require auth pki mail.example.com tag SUBMITTED

# Accept mail from external sources.
accept from any for domain <domains> alias <aliases> deliver to maildir "~/mail"

accept for local alias <aliases> deliver to maildir "~/mail"
accept from local for any relay tls
accept tagged SUBMITTED for any relay tls

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

في القسم التالي ، نحدد الواجهات والمنافذ التي نريد الاستماع إليها. أولاً ، نستمع على مضيف محلي لنطاقنا mail.example.com، لأي اتصالات محلية. ثم نستمع إلى رسائلنا التي تمت تصفيتها بواسطة الرسائل غير المرغوب فيها والرسائل المرسلة على الواجهة الخارجية. أخيرًا ، نستمع إلى عمليات الإرسال ، والتي تتم على المنفذ 587ونطلب منهم المصادقة ، لأسباب أمنية.

وأخيرا هي acceptإعداداتنا. نحن نقبل أي رسالة لأي من نطاقاتنا المحددة في جدولنا domainsللأسماء المستعارة في جدولنا aliases، لتسليمها إلى الدليل الرئيسي الخاص بهم maildirبالتنسيق. ثم نقبل جميع الاتصالات المحلية لصناديق البريد المحلية وترحيل رسائلنا ، حتى نتمكن من إرسال البريد الإلكتروني. أخيرًا ، نقبل رسائلنا المرسلة للتتابع. إذا لم نطلب مصادقة منفذ الإرسال الخاص بنا ، فسيكون هذا خطرًا أمنيًا كبيرًا. سيتيح هذا لأي شخص استخدام خادمنا كترحيل للرسائل غير المرغوب فيها.

اسماء مستعارة

يأتي FreeBSD مع ملف اسم مستعار افتراضي /etc/mail/aliasesبالتنسيق التالي:

vuser1:  user1
vuser2:  user1
vuser3:  user1
vuser4:  user2

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

المجالات

لا يوفر FreeBSD ملف المجالات الافتراضي ، ولكن هذا بسيط للغاية:

# Domains
example.com
mail.example.com
smtp.example.com

هذا مجرد ملف نصي عادي مع كل مجال تريد الاستماع إليه في سطر جديد. يمكنك كتابة تعليق باستخدام #الرمز. هذا الملف موجود ببساطة بحيث يمكنك استخدام عدد أقل من خطوط التكوين.

شهادات SSL

هناك طريقتان لتأمين اتصالاتك مع خادم البريد الخاص بك ، شهادات موقعة ذاتيًا وموقعة. من الممكن بالتأكيد التوقيع على شهاداتك ذاتيًا ، ولكن خدمات مثل Let's Encrypt توفر توقيع مجاني وسهل الاستخدام بشكل لا يصدق.

أولاً يجب علينا تثبيت برنامج certbot.

sudo pkg install py-certbot

بدلاً من ذلك ، يمكن تثبيته بالمنافذ:

cd /usr/ports/security/py-certbot
make install
make clean

بعد ذلك ، للحصول على شهادتك ، تحتاج إلى التأكد من فتح المنفذ 80على الواجهة الخارجية. أضف الأسطر التالية في مكان ما في قواعد التصفية في /usr/local/etc/pf.conf:

pass quick on $ext_if from any to any port http

ثم قم بتشغيل pfctl -f /usr/local/etc/pf.confلإعادة تحميل مجموعة القواعد.

ثم يمكنك تشغيل الأمر لأي مجالات تريد الحصول على شهادة لها:

certbot certonly --standalone -d mail.example.com

يوصى بإعداد إدخال crontab للتشغيل certbot renewمرة واحدة كل 6 أشهر لضمان عدم انتهاء صلاحية شهاداتك.

ثم لكل مجال ذي صلة ، يمكنك تعديل الخطوط للإشارة إلى ملف المفتاح الصحيح:

pki mail.example.com key "/usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem"
pki mail.example.com certificate "/usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem"

تحرير الأوراق المالية:

sudo chmod 700 /usr/local/etc/letsencrypt/archive/mail.example.com/*

ملاحظة: سيكون عليك القيام بذلك لكل ملف مفتاح أصلي وإلا لن يفتح OpenSMTPd.

الآن يمكننا بدء الخدمة:

sudo service smtpd start

تكوين البريد العشوائي

هنا نستخدم برنامج Spamd spamd الخاص بـ OpenBSD لتقليل كمية البريد العشوائي التي نحصل عليها من الإنترنت. بشكل أساسي ، يعمل هذا على تصفية الرسائل الواردة من عناوين IP المعروفة بأنها سيئة من مصادر البريد العشوائي المختلفة ، وكذلك (الوارد افتراضيًا) الاتصالات الواردة "القائمة الرمادية". يحاول Spamd أيضًا إضاعة وقت صاحب الأسلوب غير المرغوب فيه عن طريق "التلعثم" في القائمة السوداء والروابط المتدرجة ، مما يعني أنه ينشر رده على مدى عدة ثوان مما يجبر العميل على البقاء مفتوحًا لفترة أطول من المعتاد.

يتم وضع اتصال رمادي في القائمة عند اتصال أي عنوان IP جديد غير موجود في أي قائمة سوداء أو قائمة بيضاء. بمجرد اتصال العنوان الجديد ، يسقط البريد العشوائي الرسالة برسالة خطأ غير مؤذية ، ثم يضيفها إلى قائمة مؤقتة. نظرًا لأن أصحاب الرسائل غير المرغوب فيها يتلقون أموالًا مقابل الرسائل التي تم تسليمها ، فلن يعيدوا المحاولة بسبب خطأ ، في حين أن الخدمة الشرعية ستعيد المحاولة قريبًا نسبيًا.

سيكون عليك تشغيل ما يلي للتثبيت fdescfs:

mount -t fdescfs null /dev/fd

ثم عليك إضافة هذا السطر إلى /etc/fstab:

fdescfs     /dev/fd     fdescfs rw      0       0

/usr/local/etc/spamd/spamd.conf.sampleسيعمل ملف التكوين الافتراضي (الموجود في ) بشكل جيد. يمكنك تعديله لإضافة مصادر جديدة أو تغيير المصادر التي تستخدمها:

sudo cp /usr/local/etc/spamd/spamd.conf.sample /usr/local/etc/spamd/spamd.conf

يمكننا بدء الخدمة بما يلي:

sudo service obspamd start

عند هذه النقطة يتم إعداد البريد العشوائي.

تمكين خدمات بريد الويب

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

لإضافة نطاق بريد إلكتروني إلى جدول بريد الويب ، يمكنك تشغيل الأمر التالي:

pfctl -t webmail -T add 192.0.2.0/24

دوفيكوت

إذا كنت تريد أن يصل المستخدمون إلى بريدهم دون تسجيل الدخول عبر SSH ، فستحتاج إلى MDA يدعم IMAP و / أو POP3. البرنامج المشهور للغاية هو Dovecot ، مع تكوين بسيط إلى حد ما وميزات قوية.

يمكننا نسخ التكوين الافتراضي:

cd /usr/local/etc/dovecot
cp -R example-config/* ./

يتكون التكوين من عدد قليل من الملفات المختلفة. لمعرفة الاختلافات بين التكوين الخاص بك وافتراضات dovecot ، قم بتشغيل الأمر أدناه:

sudo doveconf -n

فيما يلي تكوين بسيط يعمل:

# 2.3.2.1 (0719df592): /usr/local/etc/dovecot/dovecot.conf
# OS: FreeBSD 11.2-RELEASE amd64  
# Hostname: mail.example.com
hostname = mail.example.com
mail_location = maildir:~/mail
namespace inbox {
  inbox = yes
  location = 
  mailbox Archive {
    auto = create
    special_use = \Archive
  }
  mailbox Archives {
    auto = create
    special_use = \Archive
  }
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = create
    autoexpunge = 60 days
    special_use = \Junk
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox "Sent Mail" {
    auto = no
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    auto = no
    special_use = \Sent
  }
  mailbox Spam {
    auto = no
    special_use = \Junk
  }
  mailbox Trash {
    auto = no
    autoexpunge = 90 days
    special_use = \Trash
  }
  prefix = 
  separator = /
}
passdb {
  args = imap
  driver = pam
}
ssl = required
ssl_cert = </usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_dh = </usr/local/etc/dovecot/dh.pem
ssl_key = </usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem
userdb {
  driver = passwd
}

ستكون معظم ملفات التكوين في conf.d

تلك هي المهمة 10-auth.conf، 10-mail.confو 10-ssl.conf.

يمكنك تكوين صناديق البريد المختلفة التي تستخدمها 15-mailboxes.conf. ما تراه أعلاه هو تكوين جيد للعديد من الأنظمة ، ولكن قد تختلف المسافة المقطوعة. من المستحسن أن تتلاعب بهذا مع أكبر عدد ممكن من العملاء المختلفين.

المصادقة

معظم الإعدادات الافتراضية ستكون صحيحة. إذا كنت تريد استخدام مستخدمي النظام للمصادقة ، فسيتعين عليك التعديل 10-auth.conf.

uncomment السطر التالي:

! include auth-system.conf.ext

التشفير

علينا إنشاء معلمات Diffie-Hellman:

sudo nohup openssl dhparam -out /usr/local/etc/dovecot/dh.pem

ملاحظة: سيستغرق تشغيل هذا وقتًا طويلاً. أطول بكثير مما قد تتوقعه.

يمكننا الآن بدء Dovecot:

sudo service dovecot start

استنتاج

في هذه المرحلة ، لدينا خادم بريد فعال وآمن وخالي من الرسائل غير المرغوب فيها نسبيًا.

بعض الأشياء الأخرى التي يجب النظر إليها من هنا هي استخدام SpamAssassin للتخلص من الرسائل غير المرغوب فيها بشكل تجريبي ، وكذلك العثور على الم��يد من القوائم السوداء غير المرغوب فيها التي وضعتها مصادر تثق بها.


Tags: #BSD #Email

Leave a Comment

نظرة ثاقبة على 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. قراءة هذه المادة لمعرفة المزيد