
به اشتراک بگذارید

به اشتراک بگذارید
Hardening لینوکس فرآیند کاهش آسیبپذیریها، تقویت پیکربندیها و اطمینان از رعایت استانداردهای امنیتی در سیستمهای لینوکسی است. با توجه به اینکه هزاران سازمان برای حجم کاری حیاتی به راهحلهای لینوکس سازمانی متکی هستند، استفاده از شیوههای مقاومسازی قوی برای محافظت در برابر تهدیدهای سایبری و حفظ انطباق با مقررات ضروری شده است.
فرض کنید سرور لینوکسی شما یک خانه است. وقتی برای اولینبار آن را میگیرید، درها باز هستند؛ پنجرهها قفل ندارند و کلید یدکی زیر پادری گذاشته شده! دقیقاً همین اتفاق برای یک سرور لینوکسی با تنظیمات پیشفرض میافتد. امنسازی سرور لینوکس یا همان Hardening لینوکس فرآیندی است که این درها را قفل میکند؛ پنجرهها را میبندد و سیستم هشدار نصب میکند.
حتماً زمانی که این مقاله را باز کردهاید، به دنبال یک راهنمای عملی و قدمبهقدم برای بالا بردن امنیت سرور هستید. در این مقاله از بلاگ وبداده، یک چکلیست 20 مرحلهای کامل آماده کردهایم که هر مرحله با دستور عملی همراه است؛ پس تا انتها همراه ما باشید.
آنچه در این مقاله میخوانید:
Hardening لینوکس به مجموعه اقداماتی گفته میشود که سطح حمله (Attack Surface) سرور را کاهش میدهد. به عبارتی می توان گفت Hardening Linux یک رویکرد سیستماتیک برای بهبود امنیت سیستم با کاهش سطوح حمله، خلاص شدن از اجزای غیرضروری و تنظیم پیکربندیهای متمرکز بر امنیت است. به زبان سادهتر؛ هر سرویس، پورت یا کاربری که لازم نیست روی سرور فعال باشد، یک نقطه ضعف بالقوه است. سختسازی یعنی حذف این نقاط ضعف. لینوکس ذاتاً سیستمعامل امنی است؛ اما نصب پیشفرض آن برای راحتی کاربر بهینه شده، نه برای امنیت حداکثری.
فرآیند Hardening یا سختسازی سرور سه بخش اصلی دارد: اول، حذف نرمافزارها و سرویسهای غیرضروری. دوم، پیکربندی تنظیمات سیستم بر اساس استانداردهای امنیتی. سوم، راهاندازی سیستمهای کنترل دسترسی و مانیتورینگ.
طبق گزارش مؤسسه CIS (Center for Internet Security)، رعایت بنچمارکهای امنیتی میتواند 80 تا 95 درصد آسیبپذیریهای شناختهشده را از بین ببرد. این آمار نشان میدهد که حتی اقدامات پایهای هم تأثیر فوقالعادهای بر Linux Security دارند.
در تجربه تیم فنی وبداده، بسیاری از حملات موفق به سرورهای مشتریان ناشی از همان تنظیمات پیشفرض بوده است: پورت SSH روی 22، ورود root فعال و فایروال غیرفعال. با اجرای همین چکلیست امنیتی VPS، بیش از 99 درصد حملات اسکریپتی خودکار دفع میشوند.

در این بخش همراه ما باشید تا بهصورت عملی، 20 قدم اساسی امنسازی سرور لینوکس را با دستورات قابل اجرا بررسی کنیم. توصیه می کنیم قبل از اعمال هر تغییری، حتماً از سرور تان بکاپ بگیرید.
نمای کلی فرآیند سختسازی:
🖥️ سرور لینوکس (تنظیمات پیشفرض)
⬇️
🔒 قدم 1-6: امنیت SSH و کاربران
⬇️
🛡️ قدم 7-10: فایروال و سرویسها
⬇️
🔐 قدم 11-16: سیاستها و MAC
⬇️
📊 قدم 17-20: مانیتورینگ و اسکن
⬇️
✅ سرور ایمن سازی شده
اولین و سادهترین قدم در Hardening Linux، بهروزرسانی تمام پکیجها است. هر پکیج قدیمی ممکن است یک آسیبپذیری شناختهشده داشته باشد که مهاجمان بهراحتی از آن سوءاستفاده میکنند. این کار را بهصورت هفتگی تکرار کنید. دستورهای زیر متناسب با توزیع لینوکس سرورتان انتخاب نمایید.
# Ubuntu / Debian
sudo apt update && sudo apt upgrade -y
# CentOS / RHEL / AlmaLinux
sudo dnf update -y هرگز مستقیماً با کاربر Root کار نکنید. یک کاربر معمولی بسازید و به آن دسترسی Sudo بدهید. این کار لایه امنیتی اضافهای ایجاد میکند؛ چون حتی اگر رمز عبور لو برود، مهاجم مستقیماً دسترسی root ندارد.
adduser admin_user
usermod -aG sudo admin_user # Ubuntu/Debian
usermod -aG wheel admin_user # CentOS/RHEL adduser admin_user : یک کاربر جدید به اسم admin_user میسازه (همراه با home directory و درخواست تنظیم رمز عبور).usermod -aG sudo admin_user : کاربر admin_user رو به گروه sudo اضافه میکنه؛ یعنی این کاربر اجازه اجرای دستورات با sudo (دسترسی مدیریتی) رو پیدا میکنه. این دستور مخصوص Ubuntu/Debian هست.usermod -aG wheel admin_user : دقیقاً همان کار قبل را انجام میدهد ولی برای CentOS/RHEL؛ چون در این توزیعها نام گروه دسترسی مدیریتی بهجای sudo، به نام wheel است.خلاصه فلگهای دستور usermod لینوکس:
a- = مخفف Append (اضافه کردن به گروه بدون حذف از گروههای قبلی)G- = مشخص کردن گروه ثانویه (Secondary Group)a- رو وارد نکنید، کاربر از تمام گروههای قبلی حذف شده و فقط عضو گروه جدید میشود. بعد از ساخت کاربر Sudo، اکنون باید ورود مستقیم Root را از SSH ببندید. بیشتر حملات Brute Force روی کاربر Root انجام میشود؛ با این کار، مهاجم حتی اگر رمز را حدس بزند، نمیتواند وارد سرور شود.
sudo nano /etc/ssh/sshd_config پس از اینکه وارد ویرایشگر Nano شدید خط PermitRootLogin yes را پیدا کرده و آن رابه NO تغییر دهید.
وقتی مقدار PermitRootLogin روی yes باشه، هر کسی میتواند مستقیماً با کاربر Root از طریق SSH به سرور متصل شود و چون نام کاربری Root روی همه سرورها یکسان است، کافی است مهاجم فقط رمز عبور را حدس بزند. با تغییر به no، ورود مستقیم Root از SSH کاملاً بسته شده و کاربر باید اول با یک کاربر عادی وارد و بعد با sudo دسترسی مدیریتی بگیرد، یعنی مهاجم باید هم نام کاربری و هم رمز عبور را حدس بزند.
سپس دستور زیر را وارد نمایید تا سرویس SSH را Restart کند:
sudo systemctl restart sshd وقتی فایل تنظیمات SSH را ویرایش میکنید، تغییرات بهصورت خودکار اعمال نمیشوند. سرویس SSH باید ریاستارت شود تا تنظیمات جدید را بخواند و اجرا کند. این دستور دقیقاً همین کار را انجام میدهد؛ سرویس sshd را متوقف و دوباره راهاندازی میکند. هر جای این مقاله که این دستور را مشاهده کردید، به همین منظور است.
پورت 22 اولین چیزی است که اسکنرهای خودکار بررسی میکنند. تغییر آن به یک پورت غیراستاندارد (مثلاً بالای 1024) حجم عظیمی از حملات خودکار را دفع میکند. این کار جایگزین امنیت واقعی نیست؛ ولی مثل تغییر آدرس خانه، ردیابی شما را سختتر میکند.
sudo nano /etc/ssh/sshd_config
# تغییر دهید:
Port 2222
sudo systemctl restart sshd قبلاً یک راهنمای جامع و گامبهگام برای تغییر پورت SSH نوشتهایم که تمام جزئیات، نکات امنیتی و خطاهای رایج را پوشش میدهد. برای اجرای این قدم، مقاله زیر را مطالعه کنید:
احراز هویت مبتنی بر کلید SSH بسیار امنتر از رمز عبور است. کلید خصوصی روی سیستم شما میماند و کلید عمومی روی سرور قرار میگیرد. حتی اگر کسی ترافیک شبکه را شنود کند، نمیتواند به سرور دسترسی پیدا کند.
# روی سیستم لوکال:
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id -p 2222 admin_user@server_ip
# سپس روی سرور، رمز عبور را غیرفعال کنید:
sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
sudo systemctl restart sshd اما هر یک از دستورهای بالا چه کاری انجام می دهند:
ssh-keygen -t ed25519 : یک جفت کلید SSH (عمومی + خصوصی) با الگوریتم امن ed25519 روی سیستم لوکال شما میسازد."C "your_email@example.com- : یک توضیح (Comment) به کلید اضافه میکند تا بعداً بدانید این کلید مال چه کسی است.ssh-copy-id -p 2222 admin_user@server_ip : کلید عمومی شما را روی سرور کپی میکند تا از این به بعد بدون رمز عبور وارد شوید.PasswordAuthentication no : ورود با رمز عبور را کاملاً غیرفعال میکند؛ از این به بعد فقط با کلید SSH میتوان به سرور وصل شد.sudo systemctl restart sshd : سرویس SSH را ریاستارت میکند تا تنظیمات جدید اعمال شوند.محدود کردن زمان اتصال و تعداد تلاشهای ناموفق به سرور لینوکس، سرعت حملات Brute Force را به شدت کاهش میدهد. با این تنظیمات، بعد از چند تلاش ناموفق، اتصال به صورت خودکار قطع میشود.
sudo nano /etc/ssh/sshd_config
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
LoginGraceTime 60
sudo systemctl restart sshd فایروال، نگهبان اصلی سرور شماست. فقط پورتهایی را باز بگذارید که واقعاً به آنها نیاز دارید. قاعده طلایی: «همه چیز را ببند؛ فقط آنچه لازم است را باز کن.» بسیاری از مدیران سرور مبتدی، فایروال را غیرفعال میکنند چون یک سرویس کار نمیکند؛ این بدترین کار ممکن است. بهجای غیرفعال کردن فایروال، پورت موردنیاز آن سرویس را باز کنید.
# Ubuntu/Debian با UFW:
# با اجرای خطبهخط دستورات زیر، ابتدا تمام پورتهای ورودی به سرور بسته میشود
# و سپس فقط پورتهایی که واقعاً نیاز دارید (SSH، HTTP و HTTPS) باز میشوند.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp # پورت SSH جدید
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
# CentOS/RHEL با firewalld:
# همان منطق: پورت SSH قدیمی (22) بسته و پورت جدید (2222) باز میشود.
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload از دیگر قدم هایی که برای Hardening لینوکس می توانید انجام دهید، تنظیم Fail2Ban است. Fail2Ban آیپیهایی که چندین بار تلاش ناموفق برای ورود دارند را بهصورت خودکار بلاک میکند. این ابزار مکمل عالی فایروال است و بهخصوص در برابر حملات Brute Force بسیار مؤثر عمل میکند.
sudo apt install fail2ban -y # یا dnf install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# تنظیمات پیشنهادی:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600
sudo systemctl enable --now fail2ban هر سرویس فعال روی سرور، به منزله یک درب ورودی بالقوه برای هکرها است. سرویسهایی مثل cups (چاپگر)، avahi-daemon (کشف شبکه) و bluetooth را در سرور نیاز ندارید، پس آنها را به کمک دستورهای زیر غیرفعال کنید.
# لیست سرویسهای فعال:
systemctl list-unit-files --state=enabled
# غیرفعال کردن سرویس غیرضروری:
sudo systemctl disable --now cups
sudo systemctl disable --now avahi-daemon
sudo systemctl disable --now bluetooth از دیگر قدم های امنسازی سرور لینوکس این است که علاوه بر سرویسها، پکیجهای نصبشده غیرضروری هم باید حذف شوند. هر پکیج اضافی، سطح حمله سرور را بزرگتر میکند. پس سعی کنید این مرحله را بهصورت دورهای تکرار کنید.
# Ubuntu/Debian:
sudo apt autoremove -y
dpkg --list | grep -i "game\|telnet\|rsh"
# CentOS/RHEL:
sudo dnf autoremove -y رمزهای عبور ضعیف هنوز هم یکی از رایجترین دلایل نفوذ به سرور هستند. با ماژول PAM، سیاستهای رمز عبور مثل حداقل طول، ترکیب حروف بزرگ/کوچک و اعداد را اجباری کنید.
sudo apt install libpam-pwquality -y # یا dnf install pam_pwquality
sudo nano /etc/security/pwquality.conf
minlen = 12
minclass = 3
maxrepeat = 2
dcredit = -1
ucredit = -1 دستور su اجازه تغییر کاربر به Root را میدهد. با محدود کردن آن به گروه wheel، فقط کاربران مجاز میتوانند از این دستور استفاده کنند.
sudo nano /etc/pam.d/su
# آنکامنت کنید:
auth required pam_wheel.so فایلهای حیاتی سیستم مثل /etc/passwd، /etc/shadow و /etc/ssh/sshd_config باید مجوزهای محدود داشته باشند. اگر کاربران عادی بتوانند این فایلها را بخوانند، اطلاعات حساس سرور در خطر است.
sudo chmod 600 /etc/shadow
sudo chmod 644 /etc/passwd
sudo chmod 600 /etc/ssh/sshd_config
sudo chown root:root /etc/shadow /etc/passwd /etc/ssh/sshd_config اگر سرور شما از IPv6 استفاده نمیکند، غیرفعال کردن آن یک سطح حمله اضافی را حذف میکند. البته اگر به IPv6 نیاز دارید، این مرحله را رد کنید.
sudo nano /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
sudo sysctl -p سیستم آدیت لینوکس (auditd) تمام رویدادهای مهم سیستم را ثبت میکند: از تغییر فایلها گرفته تا تلاشهای ورود. بدون لاگ، در صورت نفوذ، هیچ سرنخی برای بررسی ندارید.
sudo apt install auditd -y # یا dnf install audit
sudo systemctl enable --now auditd
# مثال: نظارت بر تغییرات فایل passwd:
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes SELinux و AppArmor سیستمهای کنترل دسترسی اجباری (MAC) هستند که حتی اگر یک سرویس هک شود، مهاجم نمیتواند به بقیه سیستم دسترسی پیدا کند. مثل اینکه هر اتاق خانه یک قفل جداگانه داشته باشد.
# بررسی وضعیت SELinux (CentOS/RHEL):
sestatus
sudo setenforce 1
# فعالسازی دائمی:
sudo nano /etc/selinux/config
SELINUX=enforcing
# بررسی وضعیت AppArmor (Ubuntu/Debian):
sudo aa-status
sudo systemctl enable apparmor | ویژگی | SELinux | AppArmor |
|---|---|---|
| توزیع پیشفرض | CentOS/RHEL/Fedora | Ubuntu/Debian |
| رویکرد | مبتنی بر برچسب (Label) | مبتنی بر مسیر فایل (Path) |
| پیچیدگی | بالاتر | سادهتر |
| انعطافپذیری | بسیار بالا | متوسط |
Cron Job ها میتوانند توسط مهاجمان برای اجرای دستورات مخرب بهصورت زمانبندیشده استفاده شوند. یکی از اقدامات برای Hardening لینوکس این است که دسترسی به Cron را فقط به کاربران مجاز محدود کنید.
sudo touch /etc/cron.allow
sudo echo "admin_user" >> /etc/cron.allow
sudo chmod 600 /etc/cron.allow
sudo rm -f /etc/cron.deny بهروزرسانیهای امنیتی نباید منتظر دستور دستی شما بمانند. با فعالسازی آپدیت خودکار، پچهای حیاتی بلافاصله نصب میشوند.
# Ubuntu/Debian:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades
# CentOS/RHEL:
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic-install.timer یک بنر هشدار قانونی هم جنبه بازدارندگی دارد و هم از نظر حقوقی مفید است. به مهاجمان اعلام میکند که فعالیتهایشان تحت نظارت است.
sudo nano /etc/issue.net
# متن پیشنهادی:
**WARNING** Unauthorized access is prohibited. All activities are monitored and logged.
sudo nano /etc/ssh/sshd_config
Banner /etc/issue.net
sudo systemctl restart sshd Lynis یک ابزار آدیت امنیتی اوپنسورس است که سرور شما را اسکن میکند و نمره امنیتی (Hardening Index) میدهد. بعد از اجرای تمام مراحل بالا، با Lynis بررسی کنید که چه نکاتی هنوز باقی مانده است.
sudo apt install lynis -y # یا dnf install lynis
sudo lynis audit system 📌 امتیاز ایدهآل Lynis بعد از اجرای این چکلیست: بالای 70 از 100. اگر امتیاز شما پایینتر است، خروجی Lynis را بررسی کنید و پیشنهادهایش را اعمال کنید.
مدیریت صحیح کاربران، پایه و اساس هر چکلیست امنیتی VPS است. اصل حداقل دسترسی (Least Privilege) یعنی هر کاربر فقط به آنچه نیاز دارد دسترسی داشته باشد؛ نه بیشتر. سعی کنید بهصورت دورهای کاربران غیرفعال را بررسی کنید و اکانتهایی که دیگر استفاده نمیشوند را قفل یا حذف کنید. همچنین بررسی کنید که هیچ کاربری بهجز Root با UID صفر وجود نداشته باشد؛ این یکی از تکنیکهای رایج مهاجمان برای ایجاد backdoor است.
یکی دیگر از نکات مهم، تنظیم Timeout برای Sessionهای غیرفعال است. اگر یک ادمین ترمینال را باز بگذارد و برود، هر کسی میتواند از آن سوءاستفاده کند. با اضافه کردن TMOUT=900 به فایل /etc/profile، نشستهای غیرفعال بعد از 15دقیقه بهصورت خودکار بسته میشوند.
# قفل کردن کاربر غیرفعال:
sudo usermod -L username
# بررسی کاربرانی که شل فعال دارند:
cat /etc/passwd | grep -v nologin | grep -v false تجربه نشان داده بسیاری از مشتریان بعد از استخدام و اخراج کارمندان، اکانتهای قدیمی را فراموش میکنند. همین اکانتهای فراموششده، راه نفوذ مهاجمان میشوند. یک روال ماهانه برای بررسی کاربران تعریف کنید.
بدون مانیتورینگ، مثل یک نگهبانی هستید که چشمش بسته است. ترکیب auditd برای لاگ سطح سیستم، Fail2Ban برای شناسایی حملات و ارسال لاگ به یک سرور مرکزی (SIEM) بهترین استراتژی مانیتورینگ برای امنسازی سرور لینوکس شماست.
ابزارهای مانیتورینگ دیگری هم وجود دارند که میتوانند کمک بزرگی باشند. OSSEC یک سیستم تشخیص نفوذ مبتنی بر هاست (HIDS) است که تغییرات فایلها، لاگها و رفتارهای مشکوک را بررسی میکند. Wazuh هم نسخه پیشرفتهتر OSSEC است که داشبورد گرافیکی و قابلیت مدیریت متمرکز دارد.
# بررسی لاگهای اخیر ورود:
sudo journalctl -u sshd --since "1 hour ago"
# بررسی تلاشهای ناموفق:
sudo grep "Failed password" /var/log/auth.log | tail -20
# ارسال لاگ به سرور خارجی (rsyslog):
sudo nano /etc/rsyslog.conf
*.* @log-server-ip:514 وبداده با سالها تجربه در مدیریت زیرساخت سرور، خدمات سرور مجازی و اختصاصی را با رعایت اصول Hardening ارائه میدهد:
در این مقاله از بلاگ وبداده، 20 قدم عملی برای Hardening لینوکس را با دستورات قابل اجرا بررسی کردیم. از بهروزرسانی سیستم و تنظیمات SSH گرفته تا پیکربندی SELinux و اسکن با Lynis. تهدیدات سایبری دائماً در حال تکامل هستند و شما هم باید استراتژی امنیتیتان را بهروز نگه دارید.
پیشنهاد ما این است که بعد از اجرای این 20 مرحله، یک بار Lynis را اجرا کنید و نمره خود را یادداشت کنید. سپس هر ماه دوباره اسکن بگیرید و ببینید آیا پیشرفت داشتهاید یا مشکل جدیدی ایجاد شده. همچنین اشتراک در لیستهای امنیتی مثل CVE Alerts کمک میکند تا از آسیبپذیریهای جدید باخبر شوید.
سرورهای وبداده با زیرساخت HPE ProLiant و دیتاسنترهای معتبر بینالمللی، بهترین بستر برای اجرای این استانداردهای امنیتی هستند. در صورتی که سوالی داشتید، میتوانید در بخش دیدگاه با ما در ارتباط باشید. امیدواریم این مقاله از بلاگ وبداده برای شما مفید بوده باشد.
خیر. حتی یک VPS کوچک هم هدف حملات خودکار قرار میگیرد. سختسازی برای هر سروری ضروری است.