امنیت و فایروال / سخت سازی

سخت سازی SSH

سخت سازی SSH در سرور لینوکس؛ ورود فقط با کلید ed25519، بستن ورود root و رمز عبور، محدود کردن کاربران و IPها، sshd_config.d و اعمال تغییرات بدون قفل شدن.

نوشته‌ی تیم پیکوگاید آخرین بازبینی فنی: ۴ دقیقه مطالعه
در این صفحه
  1. مرحله‌ی ۱: ساخت کلید روی کامپیوتر خودتان
  2. مرحله‌ی ۲: کاربر مدیر غیر root
  3. مرحله‌ی ۳: فایل تنظیمات
  4. مرحله‌ی ۴: تست و اعمال
  5. مرحله‌ی ۵: محدود کردن با فایروال
  6. چند نکته‌ی تکمیلی
  7. اگر قفل شدید

سه تغییر بیشترین اثر را دارند: ورود فقط با کلید، بستن ورود مستقیم root و محدود کردن SSH به IPهای مشخص در فایروال. بقیه‌ی این راهنما همین سه را قدم به قدم اعمال می‌کند، به ترتیبی که در میانه‌ی کار دسترسی‌تان به سرور قطع نشود. این راهنما فقط SSH را پوشش می‌دهد؛ چک لیست کامل‌تر در امن سازی سرور لینوکس آمده است.

مرحله‌ی ۱: ساخت کلید روی کامپیوتر خودتان

ssh-keygen -t ed25519 -C "admin@laptop"

کلید ed25519 کوتاه، سریع و امن است. برای کلید خصوصی حتماً passphrase بگذارید؛ اگر لپ تاپ دزدیده شود، کلید بدون passphrase یعنی دسترسی به همه‌ی سرورها.

کلید عمومی را روی سرور کپی کنید:

ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@192.0.2.10

از یک ترمینال جدید تست کنید که ورود با کلید کار می‌کند و رمز نمی‌خواهد:

ssh -i ~/.ssh/id_ed25519 admin@192.0.2.10

مرحله‌ی ۲: کاربر مدیر غیر root

اگر فقط با root وارد می‌شوید، یک کاربر عادی با دسترسی sudo بسازید و کلید را برای آن کپی کنید:

adduser admin
usermod -aG sudo admin    # در Debian و Ubuntu
usermod -aG wheel admin   # در Rocky، Alma و RHEL

مرحله‌ی ۳: فایل تنظیمات

به جای ویرایش مستقیم /etc/ssh/sshd_config، یک فایل جدا بسازید. در Ubuntu 22.04 به بعد و RHEL 9 به بعد، فایل اصلی همه‌ی فایل‌های /etc/ssh/sshd_config.d/*.conf را می‌خواند:

sudo nano /etc/ssh/sshd_config.d/00-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey
AllowGroups sshusers
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2

و گروه مجاز را بسازید:

sudo groupadd sshusers
sudo usermod -aG sshusers admin

روی نودهای Proxmox VE، migration و replication از تونل SSH کاربر root استفاده می‌کنند؛ مقدار مناسب PermitRootLogin برای این نودها در نصب Proxmox VE آمده است.

مرحله‌ی ۴: تست و اعمال

تنظیمات را پیش از اعمال بررسی کنید:

sudo sshd -t

اگر خروجی خالی بود، سرویس را reload کنید (نام سرویس در Ubuntu و Debian ssh و در RHEL و مشتقاتش sshd است):

sudo systemctl reload ssh

از ترمینال دوم تست کنید:

ssh admin@192.0.2.10                                   # باید با کلید وارد شود
ssh -o PubkeyAuthentication=no admin@192.0.2.10        # باید رد شود
ssh root@192.0.2.10                                    # باید رد شود

برای این که ببینید sshd واقعاً چه مقداری را اعمال کرده:

sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|allowgroups'

مرحله‌ی ۵: محدود کردن با فایروال

مؤثرترین لایه این است که پورت SSH اصلاً از همه‌ی اینترنت در دسترس نباشد. با UFW در Ubuntu:

sudo ufw allow from 198.51.100.0/24 to any port 22 proto tcp
sudo ufw enable

با firewalld در Rocky و Alma:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="198.51.100.0/24" service name="ssh" accept'
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

اگر مدیرها از IPهای ثابت وصل نمی‌شوند، SSH را فقط از طریق VPN سازمان در دسترس بگذارید.

چند نکته‌ی تکمیلی

  • عوض کردن پورت ۲۲ حجم اسکن‌ها و لاگ را کم می‌کند، ولی جایگزین امنیت نیست. اسکنرها همه‌ی پورت‌ها را می‌گردند.
  • fail2ban بعد از چند تلاش ناموفق، IP را موقتاً می‌بندد. وقتی ورود با رمز بسته است، بیشتر برای کم کردن لاگ مفید است.
  • به روزرسانی OpenSSH: نسخه‌های جدید الگوریتم‌های تبادل کلید مقاوم در برابر کامپیوترهای کوانتومی را پشتیبانی می‌کنند. بسته‌های سیستم عامل را به روز نگه دارید.
  • ssh-audit الگوریتم‌های فعال سرور را بررسی می‌کند و موارد ضعیف را نشان می‌دهد. در بیشتر توزیع‌های به روز، تنظیمات پیش فرض رمزنگاری مناسب است و لازم نیست دستی تغییرش دهید.

اگر قفل شدید

  • اگر نشست اول هنوز باز است، فایل 00-hardening.conf را حذف یا اصلاح و سرویس را reload کنید.
  • اگر همه‌ی نشست‌ها بسته شده‌اند، از کنسول مجازی ساز، iLO یا iDRAC، یا کنسول پنل ارائه دهنده‌ی سرور وارد شوید. این مسیر به SSH وابسته نیست.

منابع

  1. OpenBSD manual — sshd_config man.openbsd.org
  2. Mozilla — OpenSSH security guidelines infosec.mozilla.org
  3. ssh-audit github.com