
إطار عمل للتلاعب بالأجهزة الافتراضية
Mofos هي أداة مصممة لإنشاء الأجهزة الافتراضية وتشغيلها وإدارتها. تعتمد على Libvirt/QEMU/KVM وPython، مما يجعلها متوافقة مع أي توزيعة لينكس. مستوحاة بشدة من Qubes OS (https://www.qubes-os.org/)، تهدف Mofos إلى تكرار العديد من ميزاتها.
تم اختبار الأداة على نطاق واسع على Debian مع أجهزة افتراضية مبنية على Debian. في حين أنه من المتوقع أن تعمل توزيعات لينكس الأخرى، قد يكون بعض التكوين الإضافي ضروريًا. سيتم إضافة المزيد من التفاصيل لاحقًا.
توفر Mofos مجموعة من الميزات التي تركز على إدارة الأجهزة الافتراضية بشكل آمن، بما في ذلك:
تتكون آلة mofos من قرصين مدمجين باستخدام overlayfs. القرص الأول، المعروف بالطبقة السفلية، هو قرص قالب للقراءة فقط، بينما يخزن القرص الثاني جميع التغييرات التي يجريها الجهاز الافتراضي. تتم مشاركة قرص القالب هذا عبر أجهزة افتراضية متعددة. ونتيجة لذلك، فإن إنشاء جهاز افتراضي جديد يتطلب فقط استنساخ قرص فارغ مقسّم مسبقًا لاحتواء البيانات المعدّلة. يضمن هذا النهج إمكانية إنشاء أجهزة افتراضية جديدة بسرعة، مع السماح بتحديث القالب بشكل مستقل. ستسري أي تحديثات على القالب على الأجهزة الافتراضية التابعة عند إعادة تشغيلها التالية.
اعتمادًا على توزيعة لينكس، يمكن استخدام Makefile إما لإنشاء حزمة deb أو لتثبيت الملفات مباشرة.```
make deb
apt install ./mofos-VERSION.deb
أثناء تثبيت `apt`، سيتم طلب إعدادات متنوعة. يمكن قبول الخيارات الافتراضية بشكل عام. الإعداد الوحيد الذي يتطلب الانتباه هو عنوان الشبكة الفرعية المستخدم بواسطة شبكة mofos libvirt (الافتراضي: `192.168.90.0/24`).
أو
قم بتثبيت التبعيات التالية:
- guestfs-tools
- libnotify-bin
- libvirt
- libvirt-clients
- libvirt-daemon
- make
- python3-click
- python3-click-completion
- python3-colorama
- python3-cryptography
- python3-dbus
- python3-jinja2
- python3-lxml
- python3-prettytable
- python3-pyroute2
- python3-tqdm
- qemu-system-common
- qemu-system-modules-spice
- socat
- spice-client-gtk
- sudo
- virtinst
- virt-install
- virtiofsd
- virt-manager
- virt-viewer```
make install_files
اعتمادًا على التوزيعة، قد لا يكتشف مفسّر بايثون ملفات بايثون المنسوخة إلى /usr/lib/python3/dist-packages، لذا يجب وضعها في مكان آخر. على سبيل المثال، في فيدورا، يجب نسخ ملفات بايثون إلى /usr/lib/python3.11/site-packages.
[!WARNING] انتبه: منذ Debian trixie، لم يعد
xpraمُحزَّمًا بعد الآن، وعليك تثبيته يدويًا من مستودعاته المخصصة. راجع https://github.com/Xpra-org/xpra/wiki/Download#-for-debian-based-distributions للحصول على تعليمات مفصّلة.
يستخدم Mofos جلسة نظام QEMU/KVM، وللسماح لأمر virsh بالوصول إلى الأجهزة الافتراضية والموارد ذات الصلة، عيّن متغير البيئة LIBVIRT_DEFAULT_URI إلى qemu:///system:```console
export LIBVIRT_DEFAULT_URI=qemu:///system
### اعتبارات الأمن
استخدام جلسات النظام QEMU/KVM يحسّن العزل بين المضيف والأجهزة الافتراضية الضيفة من خلال تشغيل مثيلات qemu تحت مستخدم مخصص (`libvirt-qemu`) وتطبيق ملفات تعريف أمنية محددة على كل مثيل.
ومع ذلك، لا يمكن للمستخدمين العاديين افتراضيًا التفاعل مع مقبس النظام `libvirtd` لإدارة الأجهزة والشبكات والموارد الأخرى. للوصول، يجب أن يكون المستخدمون إما أعضاء في مجموعة Unix الخاصة بـ libvirt أو استخدام sudo. تاريخيًا، استغلت ثغرات تصعيد الامتيازات المحلية العضوية في مجموعة libvirt للحصول على صلاحيات الجذر.
للتخفيف من هذه المخاطر، يوفر هذا المستودع ملف تعريف AppArmor معززًا لعملية `libvirtd` على الأنظمة التي تستخدم AppArmor. يقيد هذا الملف بشكل كبير الأماكن التي يمكن لـ `libvirtd` كتابة الملفات فيها والبرامج التي يمكنه تنفيذها.
بالإضافة إلى ذلك، تم تضمين قواعد `polkit` للتحكم بشكل أكبر في الإجراءات المسموح بها لأعضاء مجموعة `libvirt`.
لاحظ أن ملفات تعريف AppArmor معبأة في حزمة `deb` ولكن لا يتم تثبيتها بواسطة هدف `install_files` في Makefile، وبالتالي يجب تثبيتها بشكل منفصل.
## إعدادات Mofos
يتطلب Mofos ملف إعدادات موجود في `$HOME/.config/mofos/config.toml` بإعدادات دنيا ليعمل بشكل صحيح. يمكن العثور على مثال لإعدادات دنيا في `/usr/share/mofos/config.minimal.toml`، بينما يتم توثيق إعدادات أكثر شمولاً في `/usr/share/mofos/config.sample.toml`.
يشير الخطأ التالي إلى أنه لم يتم العثور على ملف الإعدادات:```
[-] Copy the sample configuration file from /usr/share/mofos/config.minimal.toml to ~/.config/mofos/config.toml
يشير الخطأ التالي إلى أن المستخدم الحالي ليس عضوًا في مجموعة libvirt:``` [-] libvirtError("authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'")
إعدادات التكوين الرئيسية التي يجب تخصيصها في ملفات التكوين هي كما يلي:
- key (مسار): ملف مفتاح SSH الخاص المستخدم للوصول إلى الأجهزة الافتراضية. يُنصح بإنشاء مفتاح مخصص لهذا الغرض.
- user (نص): اسم المستخدم للوصول عبر SSH إلى الأجهزة الافتراضية.
- root_password (قيمة مشفرة): كلمة مرور الجذر المشفرة التي سيتم تعيينها أثناء تثبيت قالب جديد.
- root_ssh_pubkey (نص): مفتاح SSH العام الذي سيتم تثبيته في دليل مستخدم الجذر أثناء تثبيت القالب.
بالإضافة إلى ذلك، يجب تكوين المعاملات التالية لتثبيت القالب:
- ntp
- dns (اختياري إذا تم توفير وكيل)
- proxy
## تثبيت قالب
### تكوين جدار الحماية
نظرًا لأن عملية التثبيت تعتمد على الإقلاع عبر الشبكة PXE، يلزم وجود اتصال إنترنت نشط. يجب تكوين قواعد جدار الحماية التالية:```
sysctl net.ipv4.ip_forward=1
iptables -t nat -I POSTROUTING -s 192.168.90.0/24 -j MASQUERADE
iptables -t nat -I POSTROUTING -s 192.168.91.0/24 -j MASQUERADE
أو مع nftables:``` sysctl net.ipv4.ip_forward=1 nft insert inet nat postrouting iifname "install-*" masquerade nft insert inet nat postrouting iifname "mof0" masquerade
When the `ip_forward` parameter is set to 1, the FORWARD chain should be configured to prevent other devices on the network from using the host as a router.
Overall, the following rules are recommended:```
iptables -I INPUT -i mof0 -p udp --sport 68 --dport 67 -j ACCEPT -m comment --comment "mofos dhcp"
iptables -I INPUT -i mof0 -p udp --dport 69 -j ACCEPT -m comment --comment "mofos tftp"
iptables -I OUTPUT -o mof0 -j ACCEPT -m comment --comment "host -> mofos"
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i mof0 -j ACCEPT -m comment --comment "mofos ->"
iptables -t nat -I POSTROUTING -s 192.168.90.0/24 -j MASQUERADE
iptables -t nat -I POSTROUTING -s 192.168.91.0/24 -j MASQUERADE
أو مع nftables:```
table inet filter {