در کمتر از ۵ دقیقه پس از روشن شدن یک سرور لینوکس با IP عمومی، اسکنرهای خودکار سراغ پورت ۲۲ میآیند و شروع به امتحان کردن نامهای کاربری و رمزهای رایج میکنند. یک سرور پیکربندینشده، ریسک بزرگی برای کل کسبوکار است. با این چکلیست قدمبهقدم، راه نفوذ مهاجمان را ببندید.
قدم اول: ساخت کلید SSH و ورود بدون رمز
کلیدهای مدرن Ed25519 سریعتر، سبکتر و امنتر از کلیدهای قدیمی RSA هستند. روی سیستم خودتان (لپتاپ) کلید را بسازید:
# روی سیستم خودتان اجرا کنید
ssh-keygen -t ed25519 -C "admin@jolfacloud"
# کپی کردن کلید عمومی روی سرور
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@203.0.113.10حالا یک بار بدون رمز با کلید وصل شوید تا مطمئن شوید کار میکند:
ssh -i ~/.ssh/id_ed25519 user@203.0.113.10قدم دوم: غیرفعالسازی رمز عبور و بستن دسترسی مستقیم root
فایل تنظیمات SSH را با یک ادیتور باز کنید (/etc/ssh/sshd_config یا یک فایل تمیز در /etc/ssh/sshd_config.d/01-hardening.conf):
# تغییر پورت پیشفرض (اختیاری؛ حجم اسکنهای رباتی و لاگ را خیلی کم میکند، ولی جای امنیت واقعی را نمیگیرد)
Port 2222
# root فقط با کلید وارد شود (اگر کاربر sudo جدا دارید، no بگذارید)
PermitRootLogin prohibit-password
# ورود با رمز عبور کاملاً خاموش شود (فقط کلید مجاز است)
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
# سقف دفعات تلاش مجدد
MaxAuthTries 3
# قطع اتصالات معلق و بیکار
ClientAliveInterval 300
ClientAliveCountMax 2sudo sshd -t # اگر خروجی نداشت یعنی فایل سالم است
sudo systemctl restart ssh # یا sshd
# اوبونتو ۲۴.۰۴ به بعد: SSH با ssh.socket روشن میشود و پورت را از همین کانفیگ میخواند
sudo systemctl daemon-reload
sudo systemctl restart ssh.socketقدم سوم: فایروال با UFW
پیشفرضِ امن، بستن همه چیز و فقط باز کردن پورتهای ضروری است:
# تنظیم سیاست پیشفرض: رد ورود، قبول خروج
sudo ufw default deny incoming
sudo ufw default allow outgoing
# باز کردن پورت جدید SSH (اگر ۲۲۲۲ گذاشتید)
sudo ufw allow 2222/tcp comment "SSH custom port"
# باز کردن پورتهای وب
sudo ufw allow 80/tcp comment "HTTP"
sudo ufw allow 443/tcp comment "HTTPS"
# فعالسازی فایروال
sudo ufw enable
sudo ufw status verboseقدم چهارم: نصب و راهاندازی Fail2ban
ابزار Fail2ban لاگهای سرور را مانیتور میکند و اگر یک IP چند بار تلاش ناموفق برای ورود به SSH یا سرویسهای دیگر داشت، آن را در فایروال بلاک میکند:
sudo apt update && sudo apt install -y fail2banفایل jail.conf را دست نزنید (با آپدیت بازنویسی میشود). یک فایل تازهٔ /etc/fail2ban/jail.local بسازید که فقط همین تنظیمات خودتان را داشته باشد:
[DEFAULT]
# مدت زمان مسدودسازی (۱ روز)
bantime = 1d
# پنجره بررسی تلاشها (۱۰ دقیقه)
findtime = 10m
# حداکثر تلاش مجاز
maxretry = 3
# نادیده گرفتن IP دفتر یا سیستم خودتان
ignoreip = 127.0.0.1/8 ::1 198.51.100.25
[sshd]
enabled = true
port = 2222
backend = systemdsudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd # مشاهده وضعیت و تعداد IPهای بلاکشدهقدم پنجم: دریافت خودکار وصلههای امنیتی
بستههای لینوکس هر روز آپدیت امنیتی دریافت میکنند. با unattended-upgrades بگذارید سرور وصلههای بحرانی را خودش بدون معطلی نصب کند:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgradesقدم ششم: بررسی پورتهای باز سرور
هر از گاهی بررسی کنید کدام سرویسها روی شبکه باز هستند تا اگر دیتابیسی (مثل Redis یا MySQL) اشتباهاً روی پورت عمومی گوش میدهد، فوراً متوجه شوید:
sudo ss -tulpnپورت دیتابیسها (3306 برای MariaDB و 6379 برای Redis) هرگز نباید روی 0.0.0.0 باز باشند و باید به 127.0.0.1 یا شبکه داخلی محدود شوند.
منابع
- مستندات رسمی OpenSSH Security Best Practices www.openssh.com/manual.html
- راهنمای CIS Benchmarks برای امنسازی توزیعهای اوبونتو و دبیان www.cisecurity.org/benchmark/ubuntu_linux
- مخزن رسمی Fail2ban github.com/fail2ban/fail2ban