امن‌سازی Oracle Linux 9 (مقاله دهم): غیرفعال‌سازی و حذف سرویس‌های غیرضروری

در قسمت قبل

پیکربندی و مدیریت GNOME Display Manager (GDM)

انجام شد.

۱. الزامات CIS Benchmark (بخش ۲.۱)

این بخش از استاندارد CIS به بررسی سرویس‌های سمت سرور (Server Services) می‌پردازد و تأکید دارد که سرویس‌های بلااستفاده باید متوقف و مسدود شوند:

2.1.1 Ensure autofs is not enabled (Automated)

2.1.2 Ensure avahi-daemon is not enabled (Automated)

2.1.3 Ensure DHCP Server is not enabled (Automated)

2.1.4 Ensure DNS Server is not enabled (Automated)

2.1.5 Ensure DNSMASQ is not enabled (Automated)

2.1.6 Ensure Samba is not enabled (Automated)

2.1.7 Ensure FTP Server is not enabled (Automated)

2.1.8 Ensure message access server is not enabled (Automated)

2.1.9 Ensure NFS is not enabled (Automated)

2.1.10 Ensure rpcbind is not enabled (Automated)

2.1.11 to 2.1.20 Ensure [NIS, Print, rsync, SNMP, Telnet, tftp, Squid, HTTP, Nginx, xinetd, X11] is not enabled (Automated)

2.1.21 Ensure mail transfer agent is configured for local-only mode (Automated)

۲. مفهوم و دلیل (Concept & Rationale)

  • مفهوم: هر نرم‌افزار یا سرویسی که روی سرور اجرا می‌شود و پورت باز در شبکه ایجاد می‌کند، یک مسیر نفوذ بالقوه (Attack Vector) محسوب می‌شود.
  • دلیل امنیتی: غیرفعال کردن یا حذف کامل نرم‌افزارها و سرویس‌هایی که برای عملکرد اصلی سرور به آن‌ها نیازی نیست، سطح حمله (Attack Surface) را به شدت کاهش می‌دهد و از مصرف بی‌مورد منابع سیستم (نظیر CPU و RAM) جلوگیری می‌کند.
  • رویکرد استاندارد: استاندارد CIS صراحتاً توصیه می‌کند تمام سرویس‌های کاربردی و شبکه‌ای که کاربرد مستقیمی روی سرور ندارند، باید متوقف (Stopped) و مسدود (Masked) شده یا به طور کامل حذف گردند. همچنین سرویس انتقال ایمیل (MTA) باید صرفاً روی رابط شبکه‌ی محلی (Loopback) پیکربندی شود تا از بیرون قابل دسترس نباشد.

۳. بررسی سازگاری با پایگاه داده Oracle (RAC, ASM, Grid)

این بخش نیازمند دقت بالا از سوی مدیران پایگاه داده (DBA) است تا مسدودسازی سرویس‌ها باعث اختلال در عملکرد دیتابیس نشود:

  • سرویس‌های عمومی: سرورهای میزبان پایگاه داده Oracle (حتی در محیط‌های RAC) هیچ نیازی به سرویس‌هایی مانند Web Server ،Samba ،FTP ،DHCP یا DNS ندارند و غیرفعال‌سازی آن‌ها کاملاً ایمن است.
  • پیکربندی NFS و Rpcbind: اگر برای نگهداری فایل‌های دیتابیس یا بکاپ‌های RMAN از استوریج‌های شبکه (NAS) از طریق NFS (یا Direct NFS) استفاده می‌کنید، سیستم شما صرفاً در نقش کلاینت عمل می‌کند. غیرفعال کردن سرویس سرور (nfs-server) تداخلی با مانت کردن NFS خارجی ندارد؛ اما باید مراقب باشید که کلاینت‌های NFS حذف نشوند.
  • سرویس ایمیل (MTA): دیتابیس اوراکل یا ابزارهایی مانند OEM برای ارسال هشدارهای ایمیلی به عنوان کلاینت عمل کرده و مستقیماً به SMTP Server سازمان متصل می‌شوند. تنظیم MTA محلی سرور (مانند Postfix) روی حالت Loopback-only هیچ تداخلی در ارسال ایمیل‌های دیتابیس ایجاد نمی‌کند.
  • سرویس X Window (X11): همان‌طور که در مقاله قبلی اشاره شد، با حذف و غیرفعال‌سازی سرور X11، نصب اوراکل یا اعمال پچ‌ها باید الزاماً به صورت Silent Mode انجام پذیرد.

4. نحوه بررسی وضعیت فعلی (Audit Script)

برای بررسی وضعیت سرویس‌های غیرضروری و پیکربندی MTA، از اسکریپت زیر استفاده می‌شود:

لینک این اسکریپت در github:

modules/audit_10_Disable_Unused_Services.sh

در صورتی که با bash script  آشنا نیستید، می توانید به آموزشی که برای دیتابیس ادمین ها در سایت گذاشته ام مراجعه کنید.

Bash for Oracle DBAs

#!/bin/bash
# Script: audit10.sh
# Purpose: Audit unnecessary Server Services and MTA configuration (CIS 2.1)

echo "=========================================================================="
echo " CIS Requirement: 2.1 Server Services"
echo " - Ensure unnecessary services are disabled or not installed."
echo " - Ensure MTA (Postfix) is configured for local-only mode."
echo " Oracle Context:"
echo " - Disabling 'nfs-server' does NOT affect RMAN backups using NFS Client."
echo " - Local-only MTA is fully compatible with Oracle Database email alerts."
echo "=========================================================================="

FAIL_COUNT=0
SERVICES=(
    autofs avahi-daemon dhcpd named dnsmasq smb vsftpd dovecot
    nfs-server rpcbind ypserv cups rsyncd snmpd telnet.socket
    tftp.socket squid httpd nginx xinetd
)

echo -e "\n[*] Auditing Unnecessary Services..."
for srv in "${SERVICES[@]}"; do
    if systemctl is-enabled "$srv" 2>/dev/null | grep -q 'enabled'; then
        echo -e "  \e[31m[FAIL]\e[0m Service $srv is ENABLED."
        FAIL_COUNT=$((FAIL_COUNT + 1))
    else
        echo -e "  \e[32m[PASS]\e[0m Service $srv is disabled/masked or not installed."
    fi
done

echo -e "\n[*] Auditing MTA (Postfix) listening interfaces..."
if ss -lntp | grep ':$25$' | grep -qvE '127.0.0.1|::1'; then
    echo -e "  \e[31m[FAIL]\e[0m MTA is listening on a non-loopback interface."
    FAIL_COUNT=$((FAIL_COUNT + 1))
else
    echo -e "  \e[32m[PASS]\e[0m MTA is configured securely (local-only or not listening)."
fi

if [ "$FAIL_COUNT" -eq 0 ]; then
    echo -e "\n\e[32m[+] AUDIT RESULT: PASS\e[0m"
else
    echo -e "\n\e[31m[-] AUDIT RESULT: FAIL ($FAIL_COUNT issues found)\e[0m"
fi

5. نحوه اعمال تنظیمات (Remediation Bash Script)

اسکریپت زیر سرویس‌های غیرضروری را متوقف و مسدود کرده و سرویس Postfix را به حالت محلی محدود می‌کند:

لینک این اسکریپت در github:

modules/remediate_10_Disable_Unused_Services.sh

#!/bin/bash
# Script: remediation10.sh
# Purpose: Disable unnecessary services and configure MTA (CIS 2.1)

if [ "$EUID" -ne 0 ]; then 
    echo "Please run as root"
    exit 1
fi

echo "=========================================================================="
echo " Applying Remediation for CIS 2.1 (Server Services & MTA)"
echo " Oracle Context: Safe for DB/RAC. NFS Client & DB Alerts remain functional."
echo "=========================================================================="

SERVICES=(
    autofs avahi-daemon dhcpd named dnsmasq smb vsftpd dovecot
    nfs-server rpcbind ypserv cups rsyncd snmpd telnet.socket
    tftp.socket squid httpd nginx xinetd
)

echo -e "\n[*] Stopping and Masking unnecessary services..."
for srv in "${SERVICES[@]}"; do
    if systemctl is-active --quiet "$srv" 2>/dev/null; then
        systemctl stop "$srv"
        echo -e "  \e[32m[OK]\e[0m Stopped $srv"
    fi
    if ! systemctl is-enabled --quiet "$srv" 2>/dev/null | grep -q 'masked'; then
        systemctl mask "$srv" 2>/dev/null
        echo -e "  \e[32m[OK]\e[0m Masked $srv"
    fi
done

echo -e "\n[*] Removing X Window Server packages (if any)..."
dnf remove -y xorg-x11-server-common > /dev/null 2>&1
echo -e "  \e[32m[OK]\e[0m X Window packages removed."

echo -e "\n[*] Configuring MTA (Postfix) for local-only mode..."
if rpm -q postfix > /dev/null 2>&1; then
    sed -i 's/^inet_interfaces =.*/inet_interfaces = loopback-only/' /etc/postfix/main.cf
    systemctl restart postfix
    echo -e "  \e[32m[OK]\e[0m Postfix set to loopback-only."
else
    echo -e "  \e[32m[OK]\e[0m Postfix is not installed."
fi

echo -e "\n\e[32m[+] REMEDIATION APPLIED SUCCESSFULLY\e[0m"

در قسمت بعد به سراغ

حذف کلاینت‌های غیرضروری سرویس‌ها

می رویم.