چرا امنیت سرور لینوکس از روز اول مهم است؟
وقتی یک سرور لینوکس تازه را بالا میآورید، معمولاً فقط چند دقیقه فرصت دارید تا آن را در برابر حملات خودکار ایمن کنید. اسکنرهای اینترنتی به محض باز شدن پورت ۲۲، شروع به تلاش برای ورود با نامهای کاربری رایج مثل root و admin میکنند. اگر این مراحل را به تعویق بیندازید، احتمالاً در همان ساعات اولیه، صدها تلاش ناموفق در لاگهای auth.log خواهید دید.
در این مقاله، یک چکلیست عملی و مرحلهبهمرحله برای امنیت سرور لینوکس تازه ارائه میدهیم. فرض میکنیم با یک سرور اوبونتو ۲۲.۰۴ یا ۲۴.۰۴ کار میکنید، اما تقریباً همه دستورات روی دبیان و دیگر توزیعهای مبتنی بر آن نیز کار میکنند. هدف این است که در کمتر از ۳۰ دقیقه، سطح حمله سرور را به حداقل برسانید.
۱. ساخت کاربر غیر روت و ورود امن با SSH
اولین و مهمترین قدم، قطع کردن ورود مستقیم با کاربر root است. روت در لینوکس اختیار کامل دارد و اگر رمز عبور آن لو برود، مهاجم کل سیستم را در اختیار خواهد گرفت. به جای آن، یک کاربر معمولی با دسترسی sudo بسازید و از آن برای مدیریت روزانه استفاده کنید.
ایجاد کاربر جدید
با کاربر روت وارد سرور شوید و دستورات زیر را اجرا کنید:
adduser myuser
usermod -aG sudo myuser
دستور اول کاربر myuser را با یک دایرکتوری خانگی میسازد و از شما رمز عبور میخواهد. دستور دوم او را به گروه sudo اضافه میکند تا بتواند دستورات مدیریتی اجرا کند. حالا از سیستم خارج شوید و با کاربر جدید وارد شوید تا مطمئن شوید همهچیز درست کار میکند.
پیکربندی کلید SSH به جای رمز عبور
رمز عبور را میتوان با حملات brute-force حدس زد، اما کلید عمومی SSH از نظر ریاضی شکستن آن تقریباً غیرممکن است. روی سیستم محلی خود (نه سرور) یک جفت کلید بسازید:
ssh-keygen -t ed25519 -a 100
الگوریتم ed25519 سریعتر و امنتر از RSA است و کلید کوتاهتری تولید میکند. اگر سرور شما نسخه قدیمی OpenSSH دارد، میتوانید از ssh-keygen -t rsa -b 4096 استفاده کنید. سپس کلید عمومی را به سرور منتقل کنید:
ssh-copy-id myuser@your-server-ip
این دستور کلید عمومی شما را به فایل ~/.ssh/authorized_keys کاربر myuser اضافه میکند. حالا با ssh myuser@your-server-ip وارد شوید و مطمئن شوید که بدون رمز عبور وارد میشوید.
بستن ورود با رمز عبور و روت
فایل پیکربندی SSH را ویرایش کنید:
sudo nano /etc/ssh/sshd_config
این خطوط را تغییر دهید یا اضافه کنید:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers myuser
خط AllowUsers فقط به کاربر مشخصشده اجازه ورود میدهد و یک لایه امنیتی اضافی است. بعد از اعمال تغییرات، سرویس SSH را ریاستارت کنید:
sudo systemctl restart sshd
۲. پیکربندی فایروال با UFW
فایروال اولین خط دفاعی در برابر دسترسیهای غیرمجاز به پورتهای باز است. در اوبونتو، ابزار پیشفرض UFW (Uncomplicated Firewall) است که مدیریت iptables را ساده میکند.
فعالسازی و تنظیم قوانین پایه
قبل از فعال کردن فایروال، حتماً پورت SSH را باز کنید تا اتصال شما قطع نشود:
sudo ufw allow OpenSSH
sudo ufw enable
دستور اول بهصورت خودکار پورت ۲۲ را باز میکند. اگر SSH شما روی پورت دیگری است، از sudo ufw allow 2222/tcp استفاده کنید. حالا اگر وبسرور یا سرویس دیگری دارید، پورتهای مربوطه را باز کنید:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
وضعیت فایروال را با sudo ufw status verbose بررسی کنید. خروجی باید چیزی شبیه این باشد:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
اگر سرویس خاصی مثل MySQL دارید که فقط باید از داخل شبکه به آن دسترسی داشت، به جای باز کردن پورت برای همه، از sudo ufw allow from 192.168.1.0/24 to any port 3306 استفاده کنید.
محدود کردن دسترسی به پورت SSH
برای افزایش امنیت سرور لینوکس، میتوانید دسترسی به پورت ۲۲ را فقط به IP خودتان محدود کنید:
sudo ufw allow from YOUR_IP to any port 22 proto tcp
اگر IP شما ثابت نیست، این کار را نکنید؛ در عوض به سراغ fail2ban بروید که در بخش بعدی توضیح میدهیم.
۳. فعالسازی بهروزرسانی خودکار امنیتی
بسیاری از حملات موفق، از آسیبپذیریهایی استفاده میکنند که ماهها قبل وصله شدهاند. بهروزرسانی خودکار بستههای امنیتی، این شکاف را میبندد بدون اینکه شما مجبور باشید هر روز لاگها را چک کنید.
نصب و پیکربندی unattended-upgrades
در اوبونتو، این ابزار معمولاً از قبل نصب است. اگر نه، آن را نصب کنید:
sudo apt update
sudo apt install unattended-upgrades
سپس فایل پیکربندی را ویرایش کنید:
sudo dpkg-reconfigure --priority=low unattended-upgrades
در پنجره بازشده گزینه Yes را انتخاب کنید. برای تنظیمات دقیقتر، فایل /etc/apt/apt.conf.d/50unattended-upgrades را باز کنید و مطمئن شوید که خط زیر فعال است:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
این تنظیم فقط بهروزرسانیهای امنیتی را نصب میکند و از نصب خودکار بستههای جدید که ممکن است سیستم را خراب کنند، جلوگیری میکند. برای بررسی اینکه سرویس درست کار میکند، لاگ آن را ببینید:
sudo tail -f /var/log/unattended-upgrades/unattended-upgrades.log
۴. نصب و پیکربندی fail2ban برای محافظت در برابر حملات brute-force
حتی با غیرفعال کردن ورود با رمز عبور، سرویسهایی مثل SSH و وبسرور ممکن است همچنان در معرض حملات باشند. fail2ban یک ابزار متنباز است که لاگها را مانیتور میکند و IPهایی که رفتار مشکوک دارند را بهطور موقت مسدود میکند.
نصب و راهاندازی پایه
sudo apt install fail2ban
بهجای ویرایش فایل اصلی پیکربندی، یک فایل محلی بسازید که اولویت بالاتری دارد:
sudo nano /etc/fail2ban/jail.local
محتوای زیر را در آن قرار دهید:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
این تنظیمات یعنی اگر در مدت ۱۰ دقیقه (findtime) سه بار (maxretry) ورود ناموفق داشته باشید، IP شما به مدت یک ساعت (bantime) مسدود میشود. بعد از ذخیره فایل، سرویس را ریاستارت کنید:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
بررسی وضعیت و تنظیمات پیشرفته
برای دیدن لیست IPهای مسدودشده:
sudo fail2ban-client status sshd
خروجی شامل تعداد IPهای مسدودشده و لیست آنهاست. اگر وبسرور nginx دارید، میتوانید یک jail مشابه برای آن بسازید:
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 1800
فیلترهای آماده در پوشه /etc/fail2ban/filter.d/ قرار دارند و میتوانید برای سرویسهای مختلف مثل Postfix یا ProFTPD هم jail بسازید.
۵. بررسی نهایی و نکات تکمیلی
بعد از انجام این مراحل، چند بررسی نهایی انجام دهید تا مطمئن شوید همهچیز درست کار میکند.
تست امنیت سرور لینوکس از بیرون
از یک ابزار اسکن پورت مثل nmap روی سیستم محلی خود استفاده کنید:
nmap -sS -p- your-server-ip
این دستور تمام پورتهای باز را نشان میدهد. اگر پورتی باز است که نباید باشد، فایروال را بررسی کنید. همچنین میتوانید از سرویسهای آنلاین مثل ssh-audit.com برای بررسی امنیت پیکربندی SSH استفاده کنید.
فعالسازی خودکار بهروزرسانیها و مانیتورینگ
برای اینکه از وضعیت سرور خود باخبر باشید، یک اسکریپت ساده برای ارسال ایمیل در صورت ورود موفق تنظیم کنید. فایل /etc/ssh/sshrc را بسازید:
#!/bin/sh
echo "SSH login on $(hostname) at $(date)" | mail -s "SSH Login Alert" your@email.com
و آن را اجرایی کنید:
sudo chmod +x /etc/ssh/sshrc
این روش ساده به شما کمک میکند تا از هر ورود غیرمنتظره باخبر شوید.
جمعبندی
این چکلیست پایهای برای امنیت سرور لینوکس تازه است، اما امنیت یک فرآیند مداوم است. هر ماه لاگها را بررسی کنید، بهروزرسانیها را نصب کنید و از ابزارهایی مثل lynis برای ممیزی امنیتی استفاده کنید. اگر به دنبال یک بستر مطمئن برای اجرای این تنظیمات هستید، سرورهای ابری ServerNet با دسترسی کامل SSH و هسته لینوکس، امکان پیادهسازی همین مراحل را بهصورت دقیق فراهم میکنند. اما مهمترین نکته این است که این تنظیمات را هرگز به تعویق نیندازید — اولین ساعات بعد از نصب، بحرانیترین زمان برای امنیت سرور شماست.
دیدگاهها ۰
هنوز دیدگاهی ثبت نشده؛ اولین نفر باشید!