اگر یک سرور لینوکسی دارید، یکی از مهمترین کارهایی که باید انجام بدید، بالا بردن امنیت سروره.
فرقی نمیکنه سرورتون برای میزبانی سایت استفاده بشه، یک VPS باشه یا برای اجرای برنامه و سرویسهای مختلف؛
اگر تنظیمات امنیتی رو جدی نگیرید، ممکنه سرورتون هدف حملات مختلف قرار بگیره.
خبر خوب اینه که برای افزایش امنیت سرور لینوکسی لازم نیست همیشه کارهای پیچیدهای انجام بدید.
با چند تنظیم ساده مثل فعال کردن فایروال، امن کردن SSH و استفاده از Fail2Ban میتونید بخش زیادی از ریسکهای امنیتی رو کاهش بدید.
در این مقاله از بلاگ رهام کلود قراره قدمبهقدم بررسی کنیم که چطور امنیت یک سرور لینوکسی رو بهتر کنیم. پس با ما همراه باشید.
فهرست موضوعات:
- چرا امنیت سرور لینوکسی مهمه؟
- آپدیت بودن سیستمعامل لینوکس
- فعال بودن فایروال
- استفاده از Firewalld در AlmaLinux و CentOS
- بستن پورتهای غیرضروری
- امنیت SSH
- استفاده از کلید SSH
- محدود سازی ورود کاربر Root
- تغییر یا عدم تغییر پورت SSH
- Fail2Ban چیه و چه کاری میکنه؟
- تنظیمات مناسب برای امنیت
- بررسی لاگ سرور
- غیرفعال کردن سرویسهای غیرضروری
- Backup
- اشتباهات رایج در امنیت سرور لینوکسی
- نتیجهگیری
- سوالات متداول
چرا امنیت سرور لینوکسی مهمه؟
خیلی از سرورها بهصورت مستقیم به اینترنت وصل هستن.
یعنی اگر پورتها و سرویسهای مختلفی روی سرور فعال باشه، احتمال اینکه افراد یا رباتهای مخرب اونها رو شناسایی کنن وجود داره.
برای مثال، یکی از روشهای رایج حمله اینه که رباتها بهصورت خودکار آدرسهای IP مختلف رو بررسی میکنن و دنبال پورتهای باز مثل SSH میگردن.
بعد هم با امتحان کردن تعداد زیادی نام کاربری و رمز عبور، سعی میکنن وارد سرور بشن.
حالا تصور کنید روی سرور شما یک رمز عبور ساده وجود داشته باشه یا SSH بدون هیچ محدودیتی در دسترس باشه. در چنین شرایطی احتمال حمله بیشتر میشه.
پس بهتره از همون اول چند لایه امنیتی داشته باشید.
برای افزایش امنیت سرور لینوکسی بهتره روی چند مورد تمرکز کنید که در ادامه مهمترینشون رو باهم بررسی میکنیم.
آپدیت بودن سیستمعامل لینوکس
یکی از سادهترین کارها برای بالا بردن امنیت سرور، بهروزرسانی سیستمعامله.
گاهی اوقات در نسخههای مختلف نرمافزارها و سرویسها، آسیبپذیریهای امنیتی پیدا میشه. توسعهدهندهها هم معمولاً برای رفع این مشکلات، آپدیت امنیتی منتشر میکنن.
اگر سیستمعامل و پکیجهای سرور شما مدت زیادی آپدیت نشده باشن، ممکنه از یک آسیبپذیری قدیمی برای نفوذ استفاده بشه.
در Ubuntu و Debian میتونید از دستورهای زیر استفاده کنید:
sudo apt update
sudo apt upgrade
در سیستمعاملهای مبتنی بر RHEL مثل AlmaLinux و Rocky Linux هم میتونید از دستور زیر استفاده کنید:
sudo dnf update
قبل از انجام آپدیت روی سرورهای مهم، بهتره بررسی کنید که آپدیت موردنظر باعث ناسازگاری با سرویسهای شما نشه.
در سرورهای production معمولا بهتره قبل از آپدیتهای بزرگ، Backup یا Snapshot داشته باشید.
فعال بودن فایروال
یکی از مهمترین بخشها در افزایش امنیت سرور لینوکسی استفاده از فایرواله.
فایروال مثل یک نگهبان برای سرور عمل میکنه. یعنی مشخص میکنه چه ترافیکی اجازه ورود یا خروج داشته باشه و چه ترافیکی مسدود بشه.
برای مثال، اگر روی سرور شما فقط یک سایت و SSH فعال باشه، منطقی نیست که دهها پورت بدون استفاده باز باشن.
هرچه سرویسهای غیرضروری کمتری در دسترس اینترنت باشن، سطح حمله هم کمتر میشه.
فایروال UFW در Ubuntu
در Ubuntu یکی از ابزارهای ساده برای مدیریت فایروال، UFW هست.
برای فعال کردن UFW:
sudo ufw enable
برای مشاهده وضعیت:
sudo ufw status
اگر SSH روی پورت پیشفرض 22 فعال باشه، قبل از فعال کردن فایروال حتماً اجازه دسترسی به SSH رو باز کنید:
sudo ufw allow 22/tcp
برای باز کردن پورت HTTP:
sudo ufw allow 80/tcp
و برای HTTPS:
sudo ufw allow 443/tcp
حالا اگر بخوایم فقط همین پورتها در دسترس باشن، میتونیم قوانین لازم رو تنظیم کنیم.
مثال: فرض کنید یک سرور Ubuntu دارید که روی اون یک سایت اجرا میشه و از طریق SSH هم مدیریت میشه.
در این حالت معمولاً حداقل پورتهای زیر نیاز هستن:
پورت 22 برای SSH
پورت 80 برای HTTP
پورت 443 برای HTTPS
در نتیجه میتونید این پورتها رو مجاز کنید:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
البته اگر SSH شما روی پورت دیگهای تنظیم شده، باید همون پورت رو در فایروال باز کنید.
استفاده از Firewalld در AlmaLinux و CentOS
در سیستمعاملهایی مثل AlmaLinux، Rocky Linux و CentOS معمولاً Firewalld یکی از ابزارهای رایج برای مدیریت فایرواله.
برای بررسی وضعیت:
sudo firewall-cmd –state
برای باز کردن سرویس SSH:
sudo firewall-cmd –permanent –add-service=ssh
برای باز کردن HTTP:
sudo firewall-cmd –permanent –add-service=http
برای HTTPS:
sudo firewall-cmd –permanent –add-service=https
بعد از تغییر قوانین، تنظیمات رو Reload کنید:
sudo firewall-cmd –reload
برای مشاهده قوانین فعال هم میتونید از این دستور استفاده کنید:
sudo firewall-cmd –list-all
بستن پورتهای غیرضروری
یکی از اشتباهات رایج اینه که تعداد زیادی پورت روی سرور باز بمونه، در حالی که هیچ سرویسی از اونها استفاده نمیکنه.
مثلاً اگر روی سرور شما سرویس FTP، Mail Server یا دیتابیس اجرا نمیشه، نیازی نیست پورتهای مربوط به اونها رو به اینترنت باز کنید.
قبل از بستن پورتها بهتره بررسی کنید چه سرویسهایی روی سرور در حال اجرا هستن.
برای مشاهده پورتهای Listening میتونید از دستور زیر استفاده کنید:
sudo ss -tulpn
این دستور به شما کمک میکنه متوجه بشید چه سرویسهایی روی چه پورتهایی در حال گوش دادن هستن.
### نکته مهم
قبل از بستن هر پورتی، مطمئن بشید که سرویس مهمی به اون وابسته نیست. مخصوصاً اگر از طریق SSH به سرور متصل هستید، حواستون باشه که دسترسی SSH رو به اشتباه مسدود نکنید.
امنیت SSH
SSH یکی از مهمترین راههای مدیریت سرور لینوکسیه. اما اگر تنظیماتش بهدرستی انجام نشده باشه، میتونه یکی از اهداف حملات Brute Force باشه.
در حمله Brute Force، مهاجم سعی میکنه با امتحان کردن تعداد زیادی رمز عبور، وارد حساب کاربری بشه.
برای همین بهتره SSH رو امنتر کنیم.
فایل تنظیمات SSH معمولاً اینجاست:
/etc/ssh/sshd_config
برای ویرایش فایل:
sudo nano /etc/ssh/sshd_config
البته قبل از تغییر تنظیمات، بهتره از فایل اصلی Backup بگیرید.
استفاده از کلید SSH
یکی از بهترین کارها برای افزایش امنیت سرور لینوکسی اینه که بهجای ورود با Password از SSH Key استفاده کنید.
در این روش یک جفت کلید ساخته میشه:
کلید خصوصی (Private Key)
کلید عمومی (Public Key)
کلید عمومی روی سرور قرار میگیره و کلید خصوصی روی سیستم شما باقی میمونه.
در صورتی که کلید خصوصی شما بهدرستی محافظت بشه، امنیت این روش معمولاً خیلی بهتر از استفاده از رمزهای عبوره.
برای ساخت کلید SSH روی سیستم خودتون میتونید از دستور زیر استفاده کنید:
ssh-keygen
بعد از ساخت کلید، باید کلید عمومی رو روی سرور قرار بدید.
در بسیاری از سیستمها میتونید از این دستور استفاده کنید:
ssh-copy-id username@server-ip
بعد از اینکه مطمئن شدید ورود با SSH Key بهدرستی کار میکنه، میتونید ورود با Password رو غیرفعال کنید.
در فایل تنظیمات SSH:
PasswordAuthentication no
بعد سرویس SSH رو Restart یا Reload کنید:
sudo systemctl restart ssh
در بعضی توزیعها نام سرویس sshd هست:
sudo systemctl restart sshd
هشدار: قبل غیرفعال کردن ورود با رمز عبور، حتما یک Session فعال و یک روش مطمئن برای ورود با SSH Key داشته باشید.
اگر بدون تست این گزینه رو غیرفعال کنید و کلید SSH درست کار نکنه، ممکنه دسترسی شما به سرور قطع بشه.
محدود سازی ورود کاربر Root
کاربر Root بالاترین سطح دسترسی در لینوکس رو داره. اگر یک مهاجم بتونه مستقیماً با حساب Root وارد سرور بشه، کنترل بسیار زیادی روی سیستم خواهد داشت.
به همین دلیل بهتره ورود مستقیم Root از طریق SSH رو محدود یا غیرفعال کنید.
در فایل:
etc/ssh/sshd_config/
میتونید تنظیم زیر رو بررسی کنید:
PermitRootLogin no
بعد تنظیمات SSH رو اعمال کنید:
sudo systemctl restart ssh
روش بهتر اینه که با یک کاربر معمولی وارد سرور بشید و فقط در مواقع لازم با sudo دستورات مدیریتی رو اجرا کنید. مثلا:
sudo apt update یا sudo systemctl restart nginx
این روش باعث میشه استفاده از دسترسی Root محدودتر و کنترلشدهتر باشه.
تغییر یا عدم تغییر پورت SSH
یکی از پیشنهادهایی که زیاد درباره امنیت SSH گفته میشه، تغییر پورت پیشفرض 22 هست.
مثلا میتونید SSH رو روی پورت دیگری مثل 2222 قرار بدید.
این کار ممکنه تعداد زیادی از اسکنهای خودکار ساده رو کاهش بده، اما نباید اون رو یک راهکار امنیتی اصلی در نظر بگیرید؛ چرا؟
چون مهاجم میتونه پورتهای مختلف رو Scan کنه و پورت SSH جدید رو پیدا کنه. پس تغییر پورت بهتنهایی امنیت واقعی ایجاد نمیکنه.
اگر تصمیم گرفتید پورت SSH رو تغییر بدید، باید همزمان تنظیمات فایروال رو هم تغییر بدید. مثلا:
sudo ufw allow 2222/tcp
و در تنظیمات SSH:
Port 2222
بعد از تغییر تنظیمات، حتما اتصال جدید رو تست کنید. مثلا:
ssh -p 2222 username@server-ip
Fail2Ban چیه و چه کاری میکنه؟
یکی دیگه از ابزارهای کاربردی برای افزایش امنیت سرور لینوکسی، Fail2Ban هست.
Fail2Ban لاگهای سرویسهای مختلف رو بررسی میکنه. اگر متوجه بشه یک IP در مدت کوتاهی تعداد زیادی تلاش ناموفق برای ورود داشته، میتونه اون IP رو بهصورت موقت Block کنه.
مثلا فرض کنید یک ربات مخرب در چند دقیقه 100 بار تلاش میکنه با رمزهای مختلف وارد SSH بشه.
Fail2Ban میتونه این رفتار رو تشخیص بده و IP مربوطه رو برای مدت مشخصی مسدود کنه.
این ابزار برای مقابله با حملات Brute Force خیلی کاربردیه.
نصب Fail2Ban در Ubuntu
برای نصب Fail2Ban در Ubuntu میتونید از دستور زیر استفاده کنید:
sudo apt update
sudo apt install fail2ban
بعد سرویس رو فعال کنید:
sudo systemctl enable fail2ban
و اجرا کنید:
sudo systemctl start fail2ban
و برای بررسی وضعیت:
sudo systemctl status fail2ban
تنظیم Fail2Ban
فایل تنظیمات اصلی Fail2Ban معمولاً در مسیر زیر قرار داره:
/etc/fail2ban/
برای تنظیمات شخصی بهتره بهجای تغییر مستقیم فایل اصلی، از فایل `jail.local` استفاده کنید. مثلا:
sudo nano /etc/fail2ban/jail.local
یک تنظیم ساده برای SSH میتونه چیزی شبیه این باشه:
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
enabled = true یعنی محافظت از SSH فعال باشه.
maxretry = 5 یعنی بعد از 5 تلاش ناموفق، IP مشکوک شناسایی بشه.
findtime = 10m یعنی این تلاشها در بازه 10 دقیقه بررسی بشن.
bantime = 1h یعنی IP برای یک ساعت مسدود بشه.
بعد از تغییر تنظیمات:
sudo systemctl restart fail2ban
برای مشاهده وضعیت Jail مربوط به SSH:
sudo fail2ban-client status sshd
تنظیمات مناسب برای امنیت
فرض کنید شما یک VPS با Ubuntu دارید و روی اون یک سایت وردپرسی اجرا میشه.
سرور شما از طریق اینترنت در دسترسه و برای مدیریت اون از SSH استفاده میکنید.
یک تنظیم امنیتی مناسب میتونه شامل این موارد باشه:
مرحله اول: آپدیت سیستم
sudo apt update
sudo apt upgrade
مرحله دوم: تنظیم فایروال
فقط پورتهای موردنیاز رو باز کنید:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
بعد:
sudo ufw enable
مرحله سوم: امن کردن SSH
* استفاده از SSH Key
* غیرفعال کردن Password Login
* محدود کردن ورود مستقیم Root
مرحله چهارم: نصب Fail2Ban
sudo apt install fail2ban
بعد Jail مربوط به SSH رو فعال کنید.
حالا سرور شما چند لایه امنیتی داره:
فایروال → پورتهای غیرضروری رو مسدود میکنه.
SSH Key → ورود با رمز عبور رو حذف میکنه.
Fail2Ban → تلاشهای مشکوک و تکراری رو شناسایی و IP مهاجم رو Block میکنه.
کاربر معمولی + sudo → استفاده مستقیم از Root رو محدود میکنه.
این یعنی برای نفوذ به سرور، مهاجم باید از چند لایه امنیتی عبور کنه.
بررسی لاگ سرور
امنیت فقط به نصب چند ابزار محدود نمیشه. بهتره هر چند وقت یکبار لاگهای سرور رو هم بررسی کنید.
لاگها میتونن اطلاعات مهمی درباره تلاشهای ورود ناموفق، خطاهای سرویسها و فعالیتهای مشکوک در اختیار شما قرار بدن.
برای مثال، در Ubuntu و Debian میتونید لاگهای مربوط به احراز هویت رو بررسی کنید:
sudo tail -f /var/log/auth.log
در بعضی توزیعهای لینوکس مثل AlmaLinux ممکنه لاگهای احراز هویت در مسیر زیر باشن:
/var/log/secure
اگر تعداد زیادی تلاش ناموفق برای ورود مشاهده کردید، بهتره بررسی کنید که آیا این تلاشها طبیعی هستن یا نشونه یک حمله Brute Force.
غیرفعال کردن سرویسهای غیرضروری
هر سرویس اضافی که روی سرور اجرا میشه، میتونه یک نقطه احتمالی برای حمله باشه.
اگر سرویسی استفاده نمیکنید، بهتره اون رو غیرفعال یا حذف کنید.
برای مشاهده سرویسهای فعال:
systemctl list-units –type=service –state=running
قبل از غیرفعال کردن هر سرویس، حتما مطمئن بشید که سرویس موردنظر برای عملکرد سایت یا برنامه شما ضروری نیست.
Backup
حتی اگر بهترین تنظیمات امنیتی رو هم داشته باشید، باز هم هیچ سروری صددرصد غیرقابل نفوذ نیست.
به همین دلیل Backup یکی از مهمترین بخشهای امنیت سروره.
اگر سرور هک بشه، اطلاعات حذف بشن یا مشکلی برای دیتابیس ایجاد بشه، داشتن Backup میتونه شما رو نجات بده.
بهتره Backupها بهصورت منظم گرفته شده و روی سرور اصلی ذخیره نشن، در یک محل جداگانه نگهداری بشن و هر چند وقت یکبار Restore اونها تست بشه.
داشتن Backup بدون تست Restore، مثل داشتن کلیدی هست که هیچوقت مطمئن نشدید قفل رو باز میکنه یا نه!
اشتباهات رایج در امنیت سرور لینوکسی
برای افزایش امنیت سرور لینوکسی فقط نصب فایروال و Fail2Ban کافی نیست. چند اشتباه رایج هم وجود داره که بهتره از اونها دوری کنید.
استفاده از رمز عبور ساده
رمزهایی مثل 123456 یا رمزهای کوتاه بهراحتی قابل حدس هستن.
باز گذاشتن همه پورتها
اینکه همه پورتها رو باز بذارید و امیدوار باشید اتفاقی نیفته، روش مناسبی برای مدیریت امنیت سرور نیست.
غیرفعال کردن SSH Password بدون تست
اگر SSH Key درست تنظیم نشده باشه، ممکنه دسترسی خودتون رو از دست بدید.
اعتماد کامل به تغییر پورت SSH
تغییر پورت میتونه تعداد اسکنهای ساده رو کمتر کنه، اما جایگزین فایروال، SSH Key و Fail2Ban نیست.
نصب ابزارهای امنیتی بدون بررسی تنظیمات
نصب یک ابزار بهتنهایی امنیت ایجاد نمیکنه. تنظیم درست و بررسی عملکرد اون ابزار هم مهمه.
نداشتن Backup
امنیت یعنی فقط جلوگیری از حمله نیست؛ باید برای زمانی که مشکلی هم پیش میاد آماده باشید.
نتیجهگیری
برای افزایش امنیت سرور لینوکسی لازم نیست حتما یک متخصص امنیت حرفهای باشید. با رعایت چند نکته ساده میتونید امنیت سرورتون رو تا حد زیادی بهتر کنید.
فعال کردن فایروال و بستن پورتهای غیرضروری باعث میشه دسترسیهای اضافی محدود بشن.
امن کردن SSH و استفاده از SSH Key، احتمال حملات مربوط به رمز عبور رو کاهش میده و Fail2Ban هم میتونه جلوی بسیاری از تلاشهای تکراری و Brute Force رو بگیره.
در کنار این موارد، آپدیت منظم سیستمعامل، بررسی لاگها و داشتن Backup هم اهمیت زیادی دارن.
در واقع بهتره امنیت سرور رو به شکل چندلایه ببینید.
هیچ ابزار واحدی نمیتونه امنیت کامل ایجاد کنه؛
اما وقتی چند لایه امنیتی مثل Firewall ،SSH Key ،Fail2Ban، محدود کردن دسترسی Root و Backup رو کنار هم داشته باشید، سرور شما وضعیت بسیار امنتری خواهد داشت.
سوالات متداول
آیا نصب Fail2Ban برای امنیت سرور کافی است؟
خیر. Fail2Ban فقط یکی از لایههای امنیتیه. بهتره در کنار اون از فایروال، SSH Key، آپدیت منظم سیستم و تنظیمات مناسب SSH هم استفاده کنید.
آیا تغییر پورت SSH باعث امن شدن سرور میشود؟
تغییر پورت SSH میتونه بعضی اسکنهای خودکار ساده رو کاهش بده، اما یک راهکار امنیتی کامل نیست. بهتره روی SSH Key، فایروال و Fail2Ban هم تمرکز کنید.
آیا باید پورت 22 را ببندیم؟
اگر SSH شما روی پورت 22 اجرا میشه و برای مدیریت سرور به اون نیاز دارید، نباید این پورت رو بدون جایگزین ببندید. در صورت تغییر پورت SSH، باید پورت جدید رو در فایروال باز کنید.
آیا استفاده از SSH Key بهتر از Password است؟
در بیشتر سناریوها بله. استفاده از کلید SSH میتونه امنیت ورود به سرور رو بیشتر کنه، مخصوصاً اگر ورود با Password هم غیرفعال شده باشه.
آیا میتوانیم ورود Root را کاملاً غیرفعال کنیم؟
در بسیاری از سرورها بله، و معمولاً بهتره ورود مستقیم Root از طریق SSH محدود بشه. اما قبل از انجام این کار، باید مطمئن بشید یک حساب کاربری دیگر با دسترسی مدیریتی و `sudo` دارید.
Fail2Ban دقیقا چه کاری انجام میدهد؟
Fail2Ban لاگها رو بررسی میکنه و وقتی الگوهای مشکوک مثل تلاشهای متعدد برای ورود ناموفق رو تشخیص بده، میتونه IP مربوطه رو برای مدت مشخصی مسدود کنه.
آیا فایروال بهتنهایی امنیت سرور را تضمین میکند؟
خیر. فایروال فقط یکی از لایههای امنیتیه. برای امنیت بهتر باید از ترکیب فایروال، SSH امن، Fail2Ban، آپدیت منظم، Backup و مدیریت صحیح کاربران استفاده کنید.
مهمترین کار برای افزایش امنیت سرور لینوکسی چیست؟
یک کار بهتنهایی نمیتونه امنیت سرور رو تضمین کنه.
اما اگر بخوایم از مهمترین اقدامات شروع کنیم، بهتره ابتدا فایروال رو تنظیم کنید، دسترسیهای غیرضروری رو ببندید، SSH رو با کلید امن کنید، ورود مستقیم Root رو محدود کنید و Fail2Ban رو برای مقابله با تلاشهای ورود مشکوک فعال کنید.
