سخت سازی SSH
سخت سازی SSH در سرور لینوکس؛ ورود فقط با کلید ed25519، بستن ورود root و رمز عبور، محدود کردن کاربران و IPها، sshd_config.d و اعمال تغییرات بدون قفل شدن.
در این صفحه
سه تغییر بیشترین اثر را دارند: ورود فقط با کلید، بستن ورود مستقیم 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.confPermitRootLogin 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 الگوریتمهای فعال سرور را بررسی میکند و موارد ضعیف را نشان میدهد. در بیشتر توزیعهای به روز، تنظیمات پیش فرض رمزنگاری مناسب است و لازم نیست دستی تغییرش دهید.
اگر قفل شدید
منابع
- OpenBSD manual — sshd_config man.openbsd.org
- Mozilla — OpenSSH security guidelines infosec.mozilla.org
- ssh-audit github.com