تنظیمات پیش فرض سروری که تازه نصب شده، برای راه افتادن سریع انتخاب شده اند و امنیت در اولویت آن ها نبوده است. سرویس هایی روشن اند که هیچ وقت استفاده نمی شوند، ورود با رمز عبور از اینترنت باز است و پیکربندی اولیه همان است که هر مهاجمی از قبل می شناسد. هاردنینگ کاری است که این فاصله را پر می کند. در این مطلب توضیح می دهیم hardening چیست، CIS Benchmark چه نقشی دارد و برای سرور لینوکس و ویندوز چه قدم هایی را به ترتیب انجام دهید.
Hardening چیست؟
Hardening یا هاردنینگ (در منابع فارسی گاهی «مقاوم سازی» یا «امن سازی») یعنی کاهش سطح حمله یک سیستم. سطح حمله مجموع همه راه هایی است که از طریق آن ها می شود به سیستم دسترسی گرفت یا به آن آسیب زد: پورت های باز، سرویس های اضافه، حساب های کاربری، دسترسی های بیش از نیاز، نرم افزارهای به روزنشده و تنظیمات ضعیف.
منطق هاردنینگ ساده است: هر چیزی که برای وظیفه سرور لازم نیست حذف یا غیرفعال شود، و هر چیزی که لازم است با کمترین دسترسی و امن ترین تنظیم اجرا شود. هاردنینگ یک لایه از دفاع است و کنار فایروال، آنتی ویروس و بکاپ کار می کند. احتمال موفقیت حمله را کم می کند و اگر نفوذی رخ داد، حرکت مهاجم را سخت تر می کند.
cis hardening چیست؟
CIS (Center for Internet Security) یک سازمان غیرانتفاعی است که برای سیستم عامل ها، دیتابیس ها، مرورگرها و سرویس های ابری راهنماهای پیکربندی امن به نام CIS Benchmark منتشر می کند. هر Benchmark فهرست بلندی از تنظیمات است که برای هر مورد توضیح، دلیل، روش بررسی و روش اصلاح دارد. وقتی کسی از «CIS hardening» صحبت می کند، منظورش اعمال این تنظیمات روی سرور است.
بیشتر Benchmark ها دو سطح دارند:
- Level 1: تنظیماتی که روی اغلب سرورها بدون اختلال جدی قابل اجراست و نقطه شروع مناسبی است.
- Level 2: تنظیمات سخت تر برای محیط های حساس که ممکن است روی عملکرد یا سازگاری برخی نرم افزارها اثر بگذارد.
کنار CIS، راهنماهای DISA STIG و Security Baseline های مایکروسافت هم رایج اند. نکته مهم این است که هیچ کدام را نباید کورکورانه اعمال کرد. هر قاعده باید با نقش سرور مقایسه شود. سروری که میزبان cPanel است یا دیتابیس سنگین اجرا می کند، استثناهای خودش را دارد و این استثناها باید مستند شوند.
قبل از شروع هاردنینگ سرور
- از سرور بکاپ یا snapshot بگیرید تا اگر تنظیمی سرویس را از کار انداخت، سریع برگردید.
- مطمئن شوید دسترسی کنسول دارید (KVM، iDRAC، iLO یا کنسول هایپروایزر). اشتباه در تنظیم SSH یا فایروال می تواند دسترسی شبکه ای را قطع کند.
- فهرست کنید سرور چه کاری انجام می دهد: کدام پورت ها باید از کجا در دسترس باشند و چه کسانی به آن وارد می شوند.
- اگر چند سرور مشابه دارید، تغییرات را اول روی یکی تست کنید و بعد با ابزاری مثل Ansible یا Group Policy روی بقیه اعمال کنید.
هاردنینگ سرور لینوکس
دستورهای زیر برای AlmaLinux 9 و Ubuntu 22.04 و 24.04 نوشته شده اند.
1. به روزرسانی امنیتی خودکار
# Ubuntu
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
# AlmaLinux 9
sudo dnf install dnf-automatic
# در /etc/dnf/automatic.conf:
# upgrade_type = security
# apply_updates = yes
sudo systemctl enable --now dnf-automatic.timer
به روزرسانی کرنل تا ریبوت اعمال نمی شود. برای ریبوت یک پنجره زمانی مشخص تعیین کنید.
2. امن سازی SSH
به جای ویرایش مستقیم فایل اصلی، تنظیمات را در یک فایل جدا در /etc/ssh/sshd_config.d/ بنویسید. در sshd اولین مقداری که خوانده شود اعمال می شود، پس نام فایل را طوری انتخاب کنید که قبل از فایل های دیگر (مثل 50-cloud-init.conf) خوانده شود:
# /etc/ssh/sshd_config.d/00-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
AllowGroups sshusers
قبل از غیرفعال کردن ورود با رمز، کلید SSH کاربر خودتان را اضافه و تست کنید، گروه را با sudo groupadd sshusers بسازید و کاربر را با sudo usermod -aG sshusers username عضو آن کنید. بعد تنظیمات را بررسی و اعمال کنید، و تا ورود موفق از یک ترمینال جدید، جلسه فعلی را نبندید:
sudo sshd -t # بررسی خطای نگارشی
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication'
sudo systemctl reload sshd # در Ubuntu نام سرویس ssh است
3. فایروال و پورت های باز
اول ببینید چه سرویس هایی گوش می دهند و کدام ها واقعا لازم اند:
sudo ss -tulpn
systemctl list-unit-files --type=service --state=enabled
سرویس های اضافه را با systemctl disable --now خاموش کنید. سپس فقط پورت های لازم را باز کنید و SSH را به شبکه مدیریت محدود کنید:
# Ubuntu با ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 10.0.0.0/24 to any port 22 proto tcp
sudo ufw allow 443/tcp
sudo ufw enable
# AlmaLinux با firewalld
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --remove-service=cockpit
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" service name="ssh" accept'
sudo firewall-cmd --reload
4. محدود کردن تلاش های ورود با Fail2ban
اگر SSH یا پنل مدیریتی ناچار از اینترنت در دسترس است، Fail2ban آدرس هایی را که پشت سر هم ورود ناموفق دارند موقتا مسدود می کند. در AlmaLinux بسته از مخزن EPEL نصب می شود.
# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
5. SELinux و AppArmor را خاموش نکنید
یکی از رایج ترین توصیه های اشتباه در آموزش ها، غیرفعال کردن SELinux برای «رفع مشکل» است. در AlmaLinux با getenforce مطمئن شوید حالت روی Enforcing است و اگر سرویسی خطا داد، با ausearch -m avc -ts recent علت را پیدا کنید و boolean یا context درست را تنظیم کنید. در Ubuntu وضعیت AppArmor را با aa-status ببینید.
6. تنظیمات کرنل، لاگ و ممیزی
# /etc/sysctl.d/60-hardening.conf
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
kernel.dmesg_restrict = 1
با sudo sysctl --system اعمال کنید. سرویس auditd را فعال نگه دارید و لاگ ها را به یک سرور لاگ مرکزی بفرستید تا اگر سرور آلوده شد، مهاجم نتواند ردپای خودش را کامل پاک کند.
7. ممیزی با Lynis و OpenSCAP
بعد از تغییرات، وضعیت را با یک ابزار ممیزی بسنجید. Lynis روی بیشتر توزیع ها اجرا می شود و فهرست پیشنهادها را می دهد. OpenSCAP سرور را با پروفایل CIS مقایسه و گزارش HTML تولید می کند:
sudo lynis audit system
# AlmaLinux 9
sudo dnf install openscap-scanner scap-security-guide
oscap info /usr/share/xml/scap/ssg/content/ssg-almalinux9-ds.xml
sudo oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_cis_server_l1 \
--report cis-report.html \
/usr/share/xml/scap/ssg/content/ssg-almalinux9-ds.xml
در Ubuntu، ابزار Ubuntu Security Guide (USG) که با اشتراک Ubuntu Pro ارائه می شود، همین کار را برای پروفایل های CIS انجام می دهد.
هاردنینگ ویندوز سرور
در ویندوز، بیشتر هاردنینگ از طریق Group Policy انجام می شود. مایکروسافت در Security Compliance Toolkit، baseline های آماده برای نسخه های ویندوز سرور همراه ابزار Policy Analyzer برای مقایسه با تنظیمات فعلی منتشر می کند. در Windows Server 2025 امکان OSConfig هم برای اعمال baseline امنیتی اضافه شده است.
بررسی های سریع با PowerShell
# SMBv1 نصب است؟ (باید Available یا Removed باشد)
Get-WindowsFeature FS-SMB1
Uninstall-WindowsFeature -Name FS-SMB1 -Restart
# فایروال ویندوز در همه پروفایل ها روشن است؟
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction
# RDP فقط با Network Level Authentication (مقدار 1)
(Get-CimInstance -Namespace root\cimv2\TerminalServices -ClassName Win32_TSGeneralSetting -Filter "TerminalName='RDP-tcp'").UserAuthenticationRequired
# چه کسانی ادمین محلی هستند؟
Get-LocalGroupMember -Group Administrators
# سیاست ممیزی فعلی
auditpol /get /category:*
# وضعیت Microsoft Defender
Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled, AntivirusSignatureLastUpdated
حساب ها و دسترسی ها
- برای کارهای مدیریتی حساب جدا از حساب روزمره (ایمیل و مرورگر) داشته باشید.
- تعداد اعضای Domain Admins را به حداقل برسانید و از این حساب ها فقط روی Domain Controller استفاده کنید.
- Windows LAPS را فعال کنید تا رمز ادمین محلی روی هر سرور متفاوت باشد و خودکار عوض شود.
- روی Domain Controller ها سرویس Print Spooler را غیرفعال کنید، مگر اینکه واقعا لازم باشد.
- پروتکل های قدیمی مثل LLMNR و NTLMv1 را با Group Policy خاموش کنید.
- RDP را روی اینترنت باز نگذارید و دسترسی را از طریق VPN یا RD Gateway با احراز هویت دومرحله ای بدهید.
چک لیست هاردنینگ سرور
| مورد | لینوکس | ویندوز |
|---|---|---|
| به روزرسانی امنیتی | unattended-upgrades یا dnf-automatic | WSUS یا Windows Update با زمان بندی |
| حذف سرویس های اضافه | ss -tulpn و systemctl disable |
حذف Role و Feature های بلااستفاده |
| فایروال میزبان | ufw یا firewalld با قاعده deny پیش فرض | Windows Defender Firewall در هر سه پروفایل |
| دسترسی مدیریتی | SSH با کلید، بدون root، محدود به شبکه مدیریت | RDP با NLA، فقط از VPN یا Gateway |
| حساب ها | sudo به جای root، حذف کاربران بلااستفاده | حساب ادمین جدا، Windows LAPS |
| کنترل دسترسی اجباری | SELinux در حالت Enforcing یا AppArmor | Credential Guard و ASR در صورت پشتیبانی |
| لاگ و ممیزی | auditd و ارسال لاگ به سرور مرکزی | Advanced Audit Policy و جمع آوری Event Log |
| محافظت در برابر بدافزار | بررسی یکپارچگی فایل، اسکن دوره ای | Microsoft Defender یا EDR با کنسول مرکزی |
| سنجش | Lynis، OpenSCAP با پروفایل CIS | Policy Analyzer، مقایسه با Security Baseline |
| مستندسازی | فهرست تغییرات و استثناها با دلیل | فهرست GPO ها و استثناها با دلیل |
اشتباهات رایج در هاردنینگ
- اعمال اسکریپت آماده بدون بررسی: اسکریپت هایی که همه قواعد CIS را یکجا اعمال می کنند، ممکن است سرویس اصلی سرور را از کار بیندازند.
- قفل کردن خود پشت فایروال: تنظیم فایروال یا SSH بدون دسترسی کنسول و بدون جلسه باز پشتیبان.
- تغییر پورت SSH به عنوان تنها اقدام: تعداد لاگ ها را کم می کند ولی جلوی مهاجم هدفمند را نمی گیرد.
- هاردنینگ یک باره: نصب نرم افزار جدید، باز کردن موقت پورت ها و اضافه شدن کاربران، تنظیمات را با گذشت زمان تغییر می دهد. ممیزی باید دوره ای تکرار شود.
از کجا شروع کنیم؟
اگر وقت کمی دارید، به این ترتیب پیش بروید: به روزرسانی، بستن دسترسی مدیریتی از اینترنت، حذف سرویس های اضافه و فایروال میزبان. همین چهار قدم بخش بزرگی از حمله های خودکار را بی اثر می کند. بعد سراغ ممیزی با CIS و بقیه موارد بروید.
اگر بخواهید این کار روی سرورهای شما با در نظر گرفتن نقش هر سرور انجام شود، در سرویس هاردنینگ سرور لینوکس و ویندوز وضعیت فعلی را ممیزی می کنیم، تغییرات را اول روی محیط آزمایشی تست و بعد اعمال می کنیم و گزارش تغییرات و استثناها را تحویل می دهیم. اگر هنوز نمی دانید سرورتان از بیرون چه نقاط ضعفی دارد، می توانید با اسکن امنیتی رایگان شروع کنید و بعد درباره امن سازی سرور تصمیم بگیرید.



