آموزش پیشرفته SSH در لینوکس و افزایش امنیت

امنیت ssh

فهرست مطالب

فهرست مطالب

  1. مقدمه
  2. نصب و راه‌اندازی OpenSSH
  3. مفاهیم پایه SSH
  4. احراز هویت با کلید عمومی و خصوصی
  5. سخت‌سازی فایل کانفیگ sshd_config
  6. تغییر پورت پیش‌فرض و محافظت در برابر حملات Brute Force
  7. پیاده‌سازی فایروال و تنظیم UFW/IPTables
  8. راه‌اندازی Fail2Ban برای جلوگیری از حملات
  9. بهره‌گیری از SELinux و AppArmor
  10. چرخش کلید و مدیریت کاربران
  11. احراز هویت چند‌مرحله‌ای (MFA)
  12. تونل‌زنی و Port Forwarding
  13. لاگ‌گیری و مانیتورینگ پیشرفته
  14. نکات کاربردی و مثال‌های عملی
  15. معرفی خدمات درفک IT
  16. جمع‌بندی
  17. سؤالات متداول

1. مقدمه

SSH (Secure Shell) پروتکلی رمزنگاری‌شده برای دسترسی امن به سیستم‌های از راه دور است. مدیران سیستم و توسعه‌دهندگان معمولاً برای انجام امور روزمرهٔ سرور از SSH استفاده می‌کنند. با رشد حملات سایبری، نیاز به یادگیری تکنیک‌های پیشرفته برای افزایش امنیت SSH بیش از پیش احساس می‌شود.

در این مقاله به صورت تخصصی و در لحنی نسبتاً عامیانه، شما را با روش‌های بهینه شده برای تأمین امنیت SSH در توزیع‌های مختلف لینوکس آشنا خواهیم کرد.

2. نصب و راه‌اندازی OpenSSH

ابتدا باید بسته‌ی OpenSSH را روی سرور نصب کنیم. در اکثر توزیع‌های معاصر، دستور زیر کافی است:

# در اوبونتو و دبیان
sudo apt update
sudo apt install openssh-server

# در CentOS و RHEL
sudo yum install openssh-server

# در Fedora
sudo dnf install openssh-server

پس از نصب، سرویس SSH را فعال و اجرا کنید:

sudo systemctl enable ssh
sudo systemctl start ssh

برای بررسی وضعیت سرویس:

sudo systemctl status ssh

3. مفاهیم پایه SSH

  • شنود (Listening): SSH به‌طور پیش‌فرض روی پورت 22 شنود می‌کند.
  • کلیدهای کریپتوگرافی: کلید عمومی (public key) و کلید خصوصی (private key) برای احراز هویت استفاده می‌شوند.
  • تونل‌زنی (Tunneling): امکان ایجاد مسیرهای رمزنگاری‌شده برای سایر پروتکل‌ها.
  • Forwarding: Local و remote port forwarding برای عبور از فایروال یا NAT.

4. احراز هویت با کلید عمومی و خصوصی

4.1 تولید کلید SSH

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

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  • -t rsa نوع کلید را مشخص می‌کند.
  • -b 4096 طول کلید را تعیین می‌کند.
  • -C کامنت دلخواه.

4.2 نصب کلید عمومی روی سرور

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip

اگر این ابزار در دسترس نبود:

cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

4.3 غیرفعال‌سازی احراز هویت با پسورد

در فایل /etc/ssh/sshd_config مقدار زیر را پیدا و تنظیم کنید:

PasswordAuthentication no

و سپس سرویس را ری‌استارت کنید:

sudo systemctl restart ssh

5. سخت‌سازی فایل کانفیگ sshd_config

در ادامه‌ی کاربردی‌ترین تنظیمات امنیتی:

  • PermitRootLogin:
PermitRootLogin no

برای جلوگیری از لاگین مستقیم کاربر روت.

MaxAuthTries:

MaxAuthTries 3

کاهش تعداد تلاش‌های ناموفق لاگین.

AllowUsers / AllowGroups:

AllowUsers alice bob

یا

AllowGroups sshusers

محدود کردن دسترسی به کاربران یا گروه‌های مشخص.

ClientAliveInterval / ClientAliveCountMax:

ClientAliveInterval 300
ClientAliveCountMax 2

برای قطع خودکار نشست‌های غیرفعال.

X11Forwarding:

X11Forwarding no

  • اگر نیازی به فوروارد گرافیک ندارید.

6. تغییر پورت پیش‌فرض و محافظت در برابر حملات Brute Force

6.1 تغییر پورت SSH

در sshd_config:

Port 2222

سپس:

sudo systemctl restart ssh

6.2 جلوگیری از حملات Brute Force

  • استفاده از Fail2Ban
  • تنظیم فایروال

7. پیاده‌سازی فایروال و تنظیم UFW/IPTables

7.1 UFW در اوبونتو

sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status

7.2 IPTables

sudo iptables -A INPUT -p tcp --dport 2222 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
sudo iptables-save | sudo tee /etc/iptables/rules.v4

8. راه‌اندازی Fail2Ban برای جلوگیری از حملات

sudo apt install fail2ban

در /etc/fail2ban/jail.local:

[sshd]
enabled  = true
port     = 2222
maxretry = 5
bantime  = 3600

سرویس را ری‌استارت کنید:

sudo systemctl restart fail2ban

9. بهره‌گیری از SELinux و AppArmor

  • در توزیع‌هایی که SELinux فعال است، پروفایل SSH را سخت‌گیرانه‌تر کنید:
semanage port -a -t ssh_port_t -p tcp 2222

  • در اوبونتو با AppArmor، پروفایل /etc/apparmor.d/usr.sbin.ss hd را ویرایش نمایید.

10. چرخش کلید و مدیریت کاربران

  • تاریخچه دسترسی: برای هر کاربر فولدر .ssh/authorized_keys را مرتباً بازبینی کنید.
  • چرخش کلید: هر ۶ ماه یک‌بار کلیدها را بازسازی کنید.
  • مدیریت کاربران: هنگام حذف کاربر، کلیدهای مربوطه را پاک کنید:
sudo userdel -r username

11. احراز هویت چندمرحله‌ای (MFA)

با Google Authenticator یا Duo:

sudo apt install libpam-google-authenticator
google-authenticator

در /etc/pam.d/sshd اضافه کنید:

auth required pam_google_authenticator.so

در sshd_config:

ChallengeResponseAuthentication yes

12. تونل‌زنی و Port Forwarding

12.1 Local Forwarding

ssh -L 8080:internal.server:80 user@bastion.host

12.2 Remote Forwarding

ssh -R 9090:localhost:3000 user@remote.host

12.3 Dynamic Forwarding (SOCKS Proxy)

ssh -D 1080 user@server.host

13. لاگ‌گیری و مانیتورینگ پیشرفته

  • استفاده از syslog/nginx‌ و ELK Stack برای تجمیع لاگ‌ها.
  • فعال‌سازی LogLevel VERBOSE در sshd_config:
LogLevel VERBOSE

  • آنالیز لاگ‌ها با ابزارهایی نظیر goaccess یا Graylog.

14. نکات کاربردی و مثال‌های عملی

  • مثال پیکربندی چندین سرویس SSH روی پورت‌های مختلف.
  • نمونه اسکریپت Bash برای بکاپ‌گیری از فایل‌های کانفیگ.
  • اتصال خودکار با SSH Agent و بهره‌گیری از ssh-agent و ssh-add.

15. معرفی خدمات درفک IT

برای مشاوره و بهره‌مندی از خدمات تخصصی در زمینه امنیت سرور و شبکه، می‌توانید به وب‌سایت Dorfakit.ir مراجعه کرده و از کارشناسان درفک IT بهره‌مند شوید.

16. جمع‌بندی

در این مقاله با جنبه‌های پیشرفته SSH در لینوکس آشنا شدیم. از راه‌اندازی و احراز هویت تا تکنیک‌های سخت‌سازی و مانیتورینگ کامل را پوشش دادیم. با اجرای نکات فوق می‌توانید سطح امنیت ارتباطات خود را به طور قابل توجهی افزایش دهید.

17. سؤالات متداول

  1. چگونه پورت SSH را بدون قطعی سرویس تغییر دهم؟ ابتدا پورت جدید را در sshd_config اضافه کرده و سرویس را ری‌استارت کنید، سپس قوانین فایروال را به‌روزرسانی و پورت قدیم را ببندید.
  2. آیا استفاده از RSA 4096 بیت کافی است؟ بله؛ RSA با طول 4096 بیت تا مدت‌ها امن خواهد ماند، اما می‌توانید از ED25519 نیز بهره ببرید.
  3. چگونه لاگ‌های SSH را به ELK ارسال کنم؟ لاگ‌های syslog را به سمت لاگ‌استیشن Logstash هدایت کنید و در Kibana داشبورد تعریف کنید.
  4. آیا احراز هویت با کلید عمومی امن‌تر از پسورد است؟ قطعاً؛ کلید عمومی/خصوصی از حملات Brute Force و دیکشنری جلوگیری می‌کند.
  5. Fail2Ban را چگونه با پورت غیر‌پیش‌فرض پیکربندی کنم؟ در فایل jail.local بخش [sshd]، مقدار port را روی پورت جدید قرار دهید و سرویس را ری‌استارت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *