۲۰ نکته طلایی برای بهبود امنیت SSH در لینوکس

بهبود امنیت SSH
SSH   یکی از مهمترین ابزارها برای مدیران و توسعه‌دهندگان سیستم‌های لینوکس است، زیرا به شما امکان می‌دهد تا به طور ایمن به دستگاه‌های راه دور وارد شده، برنامه‌های خط فرمان را اجرا ، فایل‌ها را مدیریت، داده‌ها را منتقل، پورت‌های فوروارد و حتی برنامه‌های GUI را از راه دور اجرا کنید.
استفاده از SSH با تنظیمات پیشفرض همیشه ایمن نیست، زیرا هکرها مدام اینترنت را برای یافتن پورت‌های باز SSH و رمزهای ضعیف اسکن می‌کنند. به همین دلیل یادگیری نحوه پیکربندی و ایمن‌سازی صحیح SSH ضروری است.
در این مطلب، پیکربندی‌ها و نکات امنیتی ضروری SSH را که هر مبتدی لینوکس باید بداند تا سرورهای خود را ایمن، کارآمد و روان نگه دارد، پوشش خواهیم داد.
آنچه در این مطلب خواهید خواند

۱. نحوه تغییر پورت پیشفرض SSH

به طور پیشفرض، SSH  روی پورت ۲۲ لیسن می‌شود، که آن را به هدفی رایج برای حملات ربات‌های خودکار تبدیل می‌کند. یک راه ساده برای کاهش چنین حملاتی، تغییر SSH به یک پورت غیر استاندارد است.
برای انجام این کار، فایل پیکربندی SSH را با یک ویرایشگر متن باز کنید:
sudo nano /etc/ssh/sshd_config
به دنبال خطی باشید که می‌گوید:
#Port 22
آن را از حالت کامنت خارج کنید (# را حذف کنید) و آن را به یک شماره پورت دلخواه تغییر دهید، به عنوان مثال:
Port 4400
پس از ذخیره فایل، سرویس SSH را برای اعمال تغییرات ریستارت کنید:
sudo systemctl restart ssh # Debian/Ubuntu
sudo systemctl restart sshd # RHEL/CentOS
مهم: در Debian/Ubuntu سرویس SSH با نام ssh و در RHEL/CentOS با نام sshd شناخته می‌شود. هنگام ریستارت یا بررسی سرویس، همیشه از نام صحیح استفاده کنید.
در مرحله بعد، قوانین فایروال خود را به‌روزرسانی کنید تا ترافیک روی پورت جدید مجاز باشد.
------------------ On FirewallD ------------------ 
sudo firewall-cmd --permanent --zone=public --add-port=4400/tcp
sudo firewall-cmd --reload

------------------ On UFW ------------------
sudo ufw allow 4400/tcp
در نسخه‌های جدیدتر OpenSSH، تغییر پورت در sshd_config ممکن است کار نکند زیرا SSH از طریق سوکت‌های systemd مدیریت می‌شود.
یک جایگزین سوکت systemd ایجاد کنید ( ListStream  را با پورت مورد نظر خود جایگزین کنید)
sudo mkdir -p /etc/systemd/system/ssh.socket.d
sudo bash -c 'cat > /etc/systemd/system/ssh.socket.d/listen.conf <<EOF
[Socket]
ListenStream=
ListenStream=4400
EOF'
systemd را ریلود و سرویس SSH را ریستارت کنید:
sudo systemctl daemon-reload
sudo systemctl restart ssh # Debian/Ubuntu
sudo systemctl restart sshd # RHEL/CentOS
قوانین فایروال خود را به‌روزرسانی کنید (مانند بالا).

۲. نحوه غیرفعال کردن ورود root به SSH

اجازه ورود مستقیم root از طریق SSH خطرناک است زیرا به مهاجمان یک هدف واحد برای حملات brute-force  می‌دهد. یک رویکرد امن‌تر، ورود به سیستم به عنوان یک کاربر عادی و سپس استفاده از sudo برای وظایف مدیریتی است.
برای غیرفعال کردن ورود به سیستم root، خط زیر را در فایل پیکربندی SSH خود پیدا کنید.
PermitRootLogin yes
و آن را به این تغییر دهید:
PermitRootLogin no
امنیت SSH
فایل را ذخیره کنید و سرویس SSH را برای اعمال تغییر ریستارت کنید:
sudo systemctl restart sshd

۳. نحوه ورود به سرور لینوکس بدون رمز عبور SSH

ورود به سیستم SSH مبتنی بر رمز عبور می‌تواند راحت باشد، اما امنیت کمتری دارد و برای دسترسی مکرر می‌تواند دست و پا گیر باشد.
یک رویکرد امن‌تر و کارآمدتر، احراز هویت مبتنی بر کلید SSH است که به شما امکان می‌دهد بدون وارد کردن رمز عبور وارد سیستم شوید.
ابتدا، یک جفت کلید SSH را در دستگاه لوکال خود ایجاد کنید:
ssh-keygen -t rsa -b 4096
در مرحله بعد، کلید عمومی (public key) خود را در سرور راه دور کپی کنید:
ssh-copy-id user@remote-server
پس از نصب کلید، می‌توانید بدون رمز عبور به سرور وارد شوید:
ssh user@remote-server

۴. نحوه اجازه دادن به کاربران خاص برای SSH در لینوکس

برای بهبود امنیت SSH، می‌توانید دسترسی را محدود کنید تا فقط کاربران یا گروه‌های خاصی بتوانند وارد سیستم شوند، که برای جلوگیری از تلاش حساب‌های غیرمجاز برای اتصال SSH مفید است.
برای اجازه دادن به کاربران خاص، خط زیر را به فایل پیکربندی SSH خود اضافه کنید.
AllowUsers hasan ali
یا برای اجازه دادن به کل گروه‌ها، از دستور زیر استفاده کنید:
AllowGroups admins devops
پس از ایجاد این تغییرات، سرویس SSH را ریستارت کنید:
sudo systemctl restart sshd
از این پس، فقط کاربران مشخص شده (حسن و علی) یا گروه‌های مشخص شده (admins  و devops) می‌توانند از طریق SSH وارد سیستم شوند و به افزایش امنیت سرور کمک کنند.

۵. نحوه نمایش پیام خوشامدگویی یا هشدار در ورود به SSH

نمایش پیام هنگام ورود کاربران از طریق SSH می‌تواند برای خوشامدگویی به کاربران یا نمایش هشدارهای قانونی و امنیتی مفید باشد.
یک گزینه ساده ویرایش فایل پیام روز (MOTD) است:
sudo nano /etc/motd
برای یک هشدار رسمی‌تر یا قانونی‌تر، می‌توانید یک بنر در /etc/issue.net ایجاد کنید:
sudo nano /etc/issue.net
سپس، با اضافه کردن یا ویرایش خط زیر در فایل پیکربندی SSH، به SSH بگویید که این بنر را نمایش دهد:
Banner /etc/issue.net
در نهایت، سرویس SSH را ریستارت کنید تا تغییرات اعمال شود:
sudo systemctl restart sshd
از حالا، هر زمان که کسی از طریق SSH وارد سیستم شود، پیام خوشامدگویی یا هشدار سفارشی شما را مشاهده خواهد کرد.

۶. نحوه ردیابی تلاش‌های ناموفق ورود به SSH

نظارت بر تلاش‌های ناموفق ورود به SSH برای تشخیص تلاش‌های دسترسی غیرمجاز و بهبود امنیت سرور ضروری است.
در توزیع‌های مبتنی بر دبیان، می‌توانید گزارش‌ها را با موارد زیر بررسی کنید:
sudo grep "Failed password" /var/log/auth.log
در توزیع‌های مبتنی بر RHEL، از موارد زیر استفاده کنید:
sudo grep "Failed password" /var/log/secure
برای نظارت لحظه‌ای بر فعالیت ورود به سیستم SSH، می‌توانید از دستور journalctl استفاده کنید:
sudo journalctl -u sshd -f

۷. نحوه محدود کردن دسترسی SSH بر اساس آدرس IP در لینوکس

محدود کردن دسترسی SSH به آدرس‌های IP خاص، با اجازه دادن به اتصال فقط به دستگاه‌های قابل اعتماد، یک لایه امنیتی اضافی اضافه می‌کند.
می‌توانید این کار را مستقیم در فایل پیکربندی SSH با مشخص کردن یک کاربر و آدرس IP مجاز او پیکربندی کنید:
AllowUsers user@192.168.1.100
به عنوان جایگزین، می‌توانید محدودیت‌های IP را در سطح فایروال اعمال کنید. به عنوان مثال، با UFW، فقط از یک آدرس IP خاص به پورت ۲۲ اجازه دسترسی دهید:
------------------ On FirewallD ------------------ 
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
sudo firewall-cmd --reload

------------------ On UFW ------------------ 
sudo ufw allow from 192.168.1.100 to any port 22

۸. نحوه تنظیم زمان انتظار غیرفعال برای جلسات SSH

جلسات SSH غیرفعال می‌توانند در صورت فراموش کردن خروج کاربر، خطر امنیتی ایجاد کنند و اتصال را برای سوءاستفاده‌های احتمالی باز بگذارند.
شما می‌توانید با تنظیم یک زمان انتظار غیرفعال در فایل پیکربندی SSH، جلسات غیرفعال را به طور خودکار قطع کنید.
ClientAliveInterval 300
ClientAliveCountMax 0
  • ClientAliveInterval 300 – هر ۳۰۰ ثانیه (۵ دقیقه) یک پیام “keep-alive” ارسال می‌کند.
  • ClientAliveCountMax 0 –   در صورت عدم دریافت پاسخ، جلسه را قطع می‌کند
.با این تنظیمات، هر جلسه SSH غیرفعال پس از ۵ دقیقه به طور خودکار خاتمه می‌یابد و خطر جلسات باز بدون نظارت را کاهش می‌دهد.

۹. نحوه فعال کردن احراز هویت دو عاملی (۲FA) برای ورود به SSH

افزودن احراز هویت دو عاملی (۲FA) به SSH با نیاز به یک مرحله تایید دوم علاوه بر رمز عبور، امنیت را به میزان قابل توجهی افزایش می‌دهد.
در سیستم‌های Debian/Ubuntu، می‌توانید از Google Authenticator استفاده کنید.
sudo apt install libpam-google-authenticator
سپس، با اجرای دستور زیر، احراز هویت دو عاملی را برای حساب کاربری خود تنظیم کنید:
google-authenticator
در مرحله بعد، ماژول PAM را برای SSH با ویرایش فعال کنید:
sudo nano /etc/pam.d/sshd
خط زیر را اضافه کنید:
auth required pam_google_authenticator.so
در نهایت، احراز هویت challenge-response را در فایل پیکربندی SSH مجاز کنید:
ChallengeResponseAuthentication yes
برای اعمال تغییرات، سرویس SSH را ریستارت کنید:
sudo systemctl restart sshd
اکنون، هر ورود به SSH به رمز عبور شما و یک کد تایید مبتنی بر زمان نیاز دارد که امنیت سرور شما را تا حد زیادی بهبود می‌بخشد.

۱۰. نحوه محدود کردن اتصالات SSH با Fail2ban

Fail2ban ابزاری قدرتمند است که با مسدود کردن موقت آدرس‌های IP که چندین بار تلاش برای ورود ناموفق داشته‌اند، به محافظت از سرور شما در برابر حملات brute-force کمک می‌کند.
برای راه‌اندازی آن، ابتدا Fail2ban را در سیستم‌های Debian/Ubuntu نصب کنید:
sudo apt install fail2ban
در مرحله بعد، با ایجاد یا ویرایش فایل پیکربندی محلی، SSH jail را فعال کنید:
sudo nano /etc/fail2ban/jail.local
خطوط زیر را برای پیکربندی محافظت برای SSH اضافه کنید:
[sshd]
enabled = true
port = ssh
maxretry = 3
در نهایت، Fail2ban را ریستارت کنید تا تغییرات اعمال شوند:
sudo systemctl restart fail2ban
با فعال کردن Fail2ban، تلاش‌های مکرر برای ورود ناموفق به طور خودکار باعث مسدود شدن موقت می‌شوند و خطر حملات brute-force را تا حد زیادی کاهش می‌دهند.
خرید VPS لینوکس با دسترسی کامل SSH و منابع اختصاصی، مناسب برای برنامه‌نویسان، توسعه‌دهندگان و مدیران سایت در پارسدو فراهم است.

۱۱. نحوه پیکربندی احراز هویت SSH مبتنی بر کلید در لینوکس

احراز هویت مبتنی بر کلید روشی امن برای ورود به SSH بدون استفاده از رمزهای عبور است. این روش به یک جفت کلید رمزنگاری متکی است و حملات brute-force را تقریبا غیرممکن می‌کند.
ابتدا، با استفاده از الگوریتم مدرن و امن Ed25519، یک جفت کلید در دستگاه محلی خود ایجاد کنید:
ssh-keygen -t ed25519
در مرحله بعد، کلید عمومی خود را در سرور راه دور کپی کنید:
ssh-copy-id user@server
پس از اینکه احراز هویت مبتنی بر کلید کار کرد، می‌توانید با غیرفعال کردن ورود با رمز عبور در فایل پیکربندی SSH، امنیت را بیشتر بهبود بخشید.
PasswordAuthentication no
برای اعمال تغییر، سرویس SSH را ریستارت کنید:
sudo systemctl restart sshd
پس از این، فقط کاربرانی که کلید خصوصی صحیح دارند می‌توانند وارد سیستم شوند و یک لایه محافظتی قوی در برابر دسترسی غیرمجاز فراهم می‌کنند.

۱۲. نحوه مجاز یا غیرمجاز کردن دسترسی به SSH با استفاده از hosts.allow و hosts.deny

لینوکس روشی ساده برای کنترل دسترسی به سرویس‌ها با استفاده از بسته‌های TCP ارائه می‌دهد که به فایل‌های /etc/hosts.allow و /etc/hosts.deny متکی هستند.
ابتدا، IP های مورد اعتماد را در /etc/hosts.allow مجاز کنید:
sshd: 192.168.1.95
سپس، با ویرایش /etc/hosts.deny، تمام IP های دیگر را رد کنید:
sshd: ALL
با این تنظیم، فقط آدرس ۱۹۲.۱۶۸.۱.۹۵ می‌تواند از طریق SSH متصل شود، در حالی که تمام تلاش‌های دیگر مسدود می‌شوند.

۱۳. نحوه بررسی و نظارت بر جلسات فعال SSH در لینوکس

نظارت بر جلسات فعال SSH به شما کمک می‌کند تا افرادی را که وارد سیستم شده‌اند، پیگیری کنید و هرگونه دسترسی غیرمجاز را تشخیص دهید. برای مشاهده لیستی از کاربرانی که در حال حاضر وارد سیستم شده‌اند، می‌توانید از دستورات ساده‌ای مانند موارد زیر استفاده کنید:
who
OR
w
اگر نیاز به خاتمه جلسه یک کاربر خاص دارید، می‌توانید از pkill به همراه نام کاربری آنها استفاده کنید:
sudo pkill -u username
بررسی منظم جلسات فعال تضمین می‌کند که شما بر افرادی که به سرور شما متصل هستند کنترل دارید و به حفظ امنیت کمک می‌کند.

۱۴. نحوه راه‌اندازی تونل‌سازی SSH (پورت فورواردینگ) در لینوکس

تونل‌سازی SSH یا پورت فورواردینگ، به شما امکان می‌دهد تا ترافیک شبکه را به طور ایمن از دستگاه محلی خود به یک سرور راه دور هدایت کنید، که برای دسترسی به سرویس‌های پشت فایروال یا رمزگذاری اتصالات ناامن مفید است.
برای پورت فورواردینگ محلی، می‌توانید یک پورت را در دستگاه محلی خود به پورتی در سرور راه دور ارسال کنید.
ssh -L 8080:localhost:80 user@remote-server
  • ۸۰۸۰ → پورت محلی روی دستگاه شما.
  • localhost:80 → مقصد روی سرور راه دور.
  • user@remote-server → اعتبارنامه‌های ورود به سیستم SSH شما.
پس از اجرای این دستور، هرگونه ترافیکی که به localhost:8080 روی دستگاه محلی شما ارسال شود، به طور ایمن به پورت ۸۰ روی سرور راه دور ارسال می‌شود.

۱۵. نحوه فعال کردن ثبت وقایع مفصل برای عیب‌یابی SSH

هنگام عیب‌یابی مشکلات اتصال SSH، گزارش‌های دقیق می‌توانند به شناسایی علت اصلی، مانند مشکلات احراز هویت یا تاخیرهای شبکه، کمک کنند. SSH یک حالت verbose داخلی ارائه می‌دهد که اطلاعات گام به گام در مورد فرآیند اتصال را نشان می‌دهد.
برای فعال کردن ثبت وقایع به صورت verbose، کافیست دستور زیر را اجرا کنید:
ssh -vvv user@server
  • پرچم -vvv سطح verbosity را افزایش می‌دهد و جزئیات جامعی در مورد هر مرحله از اتصال SSH ارائه می‌دهد.
  • همچنین می‌توانید از less vs (-v یا -vv) برای خروجی با جزئیات کمتر استفاده کنید.
حالت verbose برای تشخیص مشکلات SSH بسیار ارزشمند است و به شما کمک می‌کند تا به سرعت خطاهای پیکربندی، مشکلات شبکه یا خرابی‌های احراز هویت را مشخص کنید.

۱۶. نحوه ایمن‌سازی SSH با رمزها و پروتکل‌های قوی

ایمن‌سازی اتصالات SSH شامل اطمینان از استفاده از الگوریتم‌ها و پروتکل‌های رمزگذاری قوی است. به طور پیشفرض، SSH از چندین پروتکل و رمز پشتیبانی می‌کند که برخی از آنها قدیمی و آسیب‌پذیر هستند.
شما می‌توانید سرور SSH خود را با مشخص کردن صریح گزینه‌های ایمن در فایل پیکربندی، ایمن کنید:
Protocol 2
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512,hmac-sha2-256
KexAlgorithms curve25519-sha256@parsdev.com
  • Protocol 2 – تضمین می‌کند که فقط از پروتکل امن SSHv2 استفاده می‌شود.
  •  Ciphers  – الگوریتم‌های رمزگذاری قوی را برای انتقال داده‌ها مشخص می‌کند.
  •  MACs – کدهای احراز هویت پیام امن را برای تأیید صحت داده‌ها تنظیم می‌کند.
  •  KexAlgorithms – الگوریتم‌های تبادل کلید امن را انتخاب می‌کند.
پس از ایجاد این تغییرات، SSH را ریستارت کنید تا اعمال شوند:
sudo systemctl restart sshd

۱۷. نحوه محدود کردن دسترسی SSH به یک محدوده پورت خاص

محدود کردن دسترسی SSH به یک محدوده پورت خاص، با کنترل پورت‌های مجاز برای اتصالات، لایه امنیتی دیگری اضافه می‌کند که می‌تواند به کاهش قرار گرفتن در معرض حملات خودکار به پورت‌های بلااستفاده کمک کند.
در سیستم‌هایی که از UFW (فایروال بدون عارضه) استفاده می‌کنند، می‌توانید با دستور زیر به طیف وسیعی از پورت‌ها اجازه دسترسی دهید:
sudo ufw allow 1024:1040/tcp
برای کاربران FirewallD، معادل آن به صورت زیر خواهد بود:
این پیکربندی، اتصالات SSH را فقط در پورت‌های ۱۰۲۴ تا ۱۰۴۰ مجاز می‌کند و دسترسی در تمام پورت‌های دیگر را مسدود می‌کند.
sudo firewall-cmd --permanent --add-port=1024-1040/tcp
sudo firewall-cmd --reload

۱۸. نحوه تغییر زمان پایان اتصال SSH در لینوکس

محدود کردن زمانی که SSH منتظر ورود کاربر است، به جلوگیری از حملات جستجوی فراگیر کمک می‌کند و پنجره تلاش‌های دسترسی غیرمجاز را کاهش می‌دهد، که می‌توان آن را با استفاده از تنظیم LoginGraceTime در فایل پیکربندی سرور SSH پیکربندی کرد.
خط زیر را اضافه یا اصلاح کنید که حداکثر زمان (به ثانیه) را برای انتظار SSH برای ورود موفق قبل از قطع اتصال تعیین می‌کند.
LoginGraceTime 30
پس از ذخیره فایل، سرویس SSH را ریستارت کنید تا تغییر اعمال شود:
sudo systemctl restart sshd

۱۹. نحوه فعال کردن فشرده‌سازی SSH برای اتصالات سریع‌تر

فعال کردن فشرده‌سازی در SSH می‌تواند سرعت اتصال را بهبود بخشد، به خصوص هنگام انتقال حجم زیادی از داده‌ها از طریق شبکه‌های کندتر. SSH می‌تواند داده‌ها را قبل از ارسال فشرده کند و میزان ترافیک ارسالی از طریق شبکه را کاهش دهد.
برای استفاده از فشرده‌سازی بر اساس هر اتصال، کافیست هنگام اتصال، پرچم -C را اضافه کنید:
ssh -C user@server
برای یک راه حل دائمی، می‌توانید فشرده‌سازی را در فایل پیکربندی کلاینت SSH فعال کنید.
Compression yes
پس از فعال‌سازی، SSH به طور خودکار داده‌ها را برای همه اتصالات فشرده می‌کند و انتقال‌ها را سریع‌تر می‌کند و در عین حال رمزگذاری و امنیت را حفظ می‌کند.

۲۰. نحوه پیکربندی نام‌های مستعار SSH برای دسترسی آسان‌تر

اگر مجبور باشید آدرس‌های IP، پورت‌ها و نام‌های کاربری را برای هر سرور به خاطر بسپارید، مدیریت چندین اتصال SSH می‌تواند دشوار باشد. استفاده از نام‌های مستعار SSH با ایجاد میانبر برای سرورهایی که اغلب به آنها دسترسی دارید، این فرآیند را ساده می‌کند.
برای تنظیم یک نام مستعار، فایل پیکربندی کلاینت SSH خود را ویرایش کرده و ورودی‌ای مانند این اضافه کنید:
Host myserver
HostName 192.168.1.50
User alice
Port 2200
پس از ذخیره فایل، می‌توانید به سادگی با اجرای موارد زیر متصل شوید:
ssh myserver

۲۱. نحوه ارسال برنامه‌های رابط کاربری گرافیکی از طریق SSH (ارسال X11)

SSH می‌تواند کاری بیش از دسترسی خط فرمان انجام دهد. همچنین می‌تواند برنامه‌های گرافیکی را از یک سرور راه دور به دستگاه محلی شما با استفاده از ارسال X11 ارسال کند، که به شما امکان می‌دهد برنامه‌های رابط کاربری گرافیکی را روی سرور اجرا کنید، گویی که به صورت محلی اجرا می‌شوند.
برای فعال کردن ارسال X11، با گزینه -X متصل شوید:
ssh -X user@server
پس از اتصال، می‌توانید برنامه‌های رابط کاربری گرافیکی مانند موارد زیر را اجرا کنید:
gedit
پنجره برنامه روی دستگاه محلی شما ظاهر می‌شود، در حالی که تمام پردازش‌ها روی سرور راه دور انجام می‌شود.
نکته: مطمئن شوید که ارسال X11 در فایل پیکربندی سرور SSH مجاز است.
X11Forwarding yes
جمع‌بندی
SSH ابزاری ضروری برای هر کسی است که سرورهای لینوکس را مدیریت می‌کند و استفاده صحیح از آن می‌تواند کار شما را آسان‌تر و ایمن‌تر کند.
با پیروی از نکات این مطلب، می‌توانید از سرورهای خود در برابر دسترسی غیرمجاز محافظت کنید، ورود به سیستم خود را با احراز هویت مبتنی بر کلید و نام‌های مستعار ساده کنید و فعالیت‌ها را با ابزارهایی مانند fail2ban و session timeout رصد کنید.
با اصول اولیه مانند تغییر پورت پیشفرض، غیرفعال کردن ورود به سیستم root و تنظیم ورود به سیستم مبتنی بر کلید شروع کنید و سپس به تدریج ویژگی‌های پیشرفته مانند احراز هویت دو مرحله‌ای، تونل‌سازی SSH و ثبت وقایع دقیق را بررسی کنید.
تسلط بر این شیوه‌ها به شما کمک می‌کند تا سرورها را به طور کارآمد مدیریت نمائید، از حملات در امان بمانید و مانند یک مدیر لینوکس با اعتماد به نفس کار کنید.
نوشتن نظر

نوشتن دیدگاه

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