پرش به محتوا

فایروال و SELinux در openSUSE Leap 16

zoneهای firewalld را بشناسید و فقط سرویس‌های لازم را باز کنید. با SELinux، که در Leap 16 جای AppArmor را گرفته، و روش رفع خطاهای دسترسی آشنا شوید.

openSUSE Leap 16سطح: مقدماتیبه‌روزرسانی: ۱۷ آبان ۱۴۰۵

۱. firewalld

bash
sudo systemctl enable --now firewalld
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all

باز کردن سرویس‌ها به‌صورت دائمی:

bash
sudo firewall-cmd --permanent --add-service={ssh,http,https}
sudo firewall-cmd --permanent --add-port=9100/tcp     # e.g. node_exporter
sudo firewall-cmd --reload

محدود کردن SSH به شبکه‌ی مدیریت با zone internal:

bash
sudo firewall-cmd --permanent --zone=internal --add-source=192.168.10.0/24
sudo firewall-cmd --permanent --zone=internal --add-service=ssh
sudo firewall-cmd --permanent --zone=public --remove-service=ssh
sudo firewall-cmd --reload
قبل از حذف SSH از zone public، در یک نشست دوم بررسی کنید که اتصال از شبکه‌ی مدیریت هنوز کار می‌کند.

۲. SELinux

Leap 16 به‌جای AppArmor به‌طور پیش‌فرض از SELinux در حالت Enforcing استفاده می‌کند. اگر از Leap 15 ارتقا داده‌اید، این تفاوت مهم است.

bash
getenforce
sestatus
sudo zypper install -y policycoreutils-python-utils setroubleshoot-server

۳. برچسب فایل‌ها

اگر محتوای وب یا داده‌ی سرویسی را در مسیر غیر پیش‌فرض گذاشته‌اید، برچسب آن را ثبت کنید:

bash
sudo semanage fcontext -a -t httpd_sys_content_t '/data/www(/.*)?'
sudo restorecon -Rv /data/www
ls -Z /data/www

۴. پیدا کردن علت خطا

bash
sudo ausearch -m avc -ts recent
sudo ausearch -m avc -ts recent | audit2why
sudo sealert -a /var/log/audit/audit.log | less

بیشتر وقت‌ها راه درست روشن کردن یک boolean است، نه خاموش کردن SELinux:

bash
getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on

برای عیب‌یابی، فقط همان سرویس را موقتاً در حالت permissive بگذارید، نه کل سیستم را. بعد از رفع مشکل حتماً برگردانید:

bash
sudo semanage permissive -a httpd_t
sudo semanage permissive -d httpd_t