پیکربندیهای ضروری SSH و نکات امنیتی برای لینوکس
مقدمه: اهمیت امنیت SSH
SSH (Secure Shell) یکی از مهمترین ابزارها برای مدیران سیستم و توسعهدهندگان لینوکس محسوب میشود، زیرا به شما امکان میدهد به صورت امن به ماشینهای راهدور وارد شوید، برنامههای خط فرمان را اجرا کنید، فایلها را مدیریت کنید، دادهها را انتقال دهید، پورتها را فوروارد کنید و حتی برنامههای GUI را به صورت راهدور اجرا نمایید.
اما نکته مهم این است → استفاده از SSH با تنظیمات پیشفرض همیشه ایمن نیست، زیرا هکرها به طور مداوم اینترنت را برای پورتهای SSH باز و لاگینهای ضعیف اسکن میکنند. به همین دلیل یادگیری نحوه پیکربندی و ایمنسازی صحیح SSH یک ضرورت است.
در این راهنما، پیکربندیهای ضروری SSH و نکات امنیتی را پوشش میدهیم که هر مبتدی لینوکس باید بداند تا سرورهای خود را ایمن، کارآمد و روان نگه دارد.
1. نحوه تغییر شماره پورت پیشفرض SSH
به طور پیشفرض، SSH روی پورت 22 گوش میدهد که آن را به هدفی رایج برای حملات رباتی خودکار تبدیل میکند. یک راه ساده برای کاهش چنین حملاتی، تغییر SSH به یک پورت غیراستاندارد است.
برای این کار، فایل پیکربندی SSH را با یک ویرایشگر متن باز کنید:
به دنبال خط زیر بگردید:
آن را آنکامنت کنید (علامت # را حذف کنید) و به یک شماره پورت سفارشی تغییر دهید، برای مثال:
پس از ذخیره فایل، سرویس SSH را برای اعمال تغییرات restart کنید:
sudo systemctl restart sshd # RHEL/CentOS
مهم: در دبیان/اوبونتو سرویس SSH با نام ssh شناخته میشود و در RHEL/CentOS با نام sshd. همیشه از نام صحیح هنگام restart کردن یا بررسی سرویس استفاده کنید.
سپس، قوانین فایروال خود را برای اجازه ترافیک روی پورت جدید بهروز کنید.
sudo firewall-cmd –permanent –zone=public –add-port=2200/tcp
sudo firewall-cmd –reload
—————— روی UFW ——————
sudo ufw allow 2200/tcp
مدیریت پورت در systemd (برای نسخههای جدید OpenSSH)
در نسخههای جدید OpenSSH، تغییر پورت در sshd_config ممکن است کار نکند زیرا SSH از طریق سوکتهای systemd مدیریت میشود.
sudo bash -c ‘cat > /etc/systemd/system/ssh.socket.d/listen.conf <
سپس systemd را reload کرده و سرویس SSH را restart کنید:
sudo systemctl restart ssh # دبیان/اوبونتو
sudo systemctl restart sshd # RHEL/CentOS
2. نحوه غیرفعال کردن لاگین روت SSH
اجازه دادن به لاگین مستقیم روت از طریق SSH خطرناک است زیرا به مهاجمان یک هدف واحد برای حملات brute-force میدهد. یک رویکرد ایمنتر این است که به عنوان یک کاربر عادی وارد شوید و سپس از sudo برای کارهای مدیریتی استفاده کنید.
برای غیرفعال کردن لاگین روت، خط زیر را در فایل پیکربندی SSH پیدا کنید:
و آن را به این صورت تغییر دهید:
فایل را ذخیره کرده و سرویس SSH را restart کنید:
3. نحوه ورود به سرور لینوکس بدون رمز عبور SSH
لاگینهای SSH مبتنی بر رمز عبور میتوانند راحت باشند اما کمتر ایمن هستند و میتوانند برای دسترسی مکرر دست و پا گیر باشند.
یک رویکرد ایمنتر و کارآمدتر، احراز هویت مبتنی بر کلید SSH است که به شما امکان میدهد بدون وارد کردن رمز عبور وارد سیستم شوید.
ابتدا یک جفت کلید SSH روی ماشین محلی خود generate کنید:
سپس، کلید عمومی خود را به سرور راهدور کپی کنید:
پس از نصب کلید، میتوانید بدون رمز عبور به سرور وارد شوید:
4. نحوه اجازه دادن فقط به کاربران خاص برای SSH در لینوکس
برای بهبود امنیت SSH، میتوانید دسترسی را محدود کنید تا فقط کاربران یا گروههای خاصی بتوانند وارد سیستم شوند که برای جلوگیری از تلاش اتصال SSH توسط حسابهای غیرمجاز مفید است.
برای اجازه دادن به کاربران خاص، خط زیر را به فایل پیکربندی SSH اضافه کنید:
یا برای اجازه دادن به کل گروهها، استفاده کنید:
پس از ایجاد این تغییرات، سرویس SSH را restart کنید:
از این پس، فقط کاربران مشخص شده (alice و bob) یا گروهها (admins و devops) قادر خواهند بود از طریق SSH وارد سیستم شوند که به افزایش امنیت سرور کمک میکند.
5. نحوه نمایش پیام خوشآمدگویی یا هشدار در لاگین SSH
نمایش یک پیام هنگامی که کاربران از طریق SSH وارد سیستم میشوند میتواند برای خوشآمدگویی به کاربران یا نمایش هشدارهای قانونی/امنیتی مفید باشد.
یک گزینه ساده، ویرایش فایل Message of the Day (MOTD) است:
برای یک هشدار رسمی یا قانونی، میتوانید یک بنر در /etc/issue.net ایجاد کنید:
سپس، با اضافه یا ویرایش خط زیر در فایل پیکربندی SSH، به SSH بگویید این بنر را نمایش دهد:
در نهایت، سرویس SSH را برای اعمال تغییرات restart کنید:
اکنون، هرگاه کسی از طریق SSH وارد سیستم شود، پیام خوشآمدگویی یا هشدار سفارشی شما را خواهد دید.
6. نحوه ردیابی تلاشهای ناموفق لاگین SSH
مانیتورینگ تلاشهای ناموفق لاگین SSH برای تشخیص تلاشهای دسترسی غیرمجاز و بهبود امنیت سرور ضروری است.
در توزیعهای مبتنی بر دبیان، میتوانید لاگها را با این دستور بررسی کنید:
در توزیعهای مبتنی بر RHEL، استفاده کنید:
برای مانیتورینگ real-time فعالیت لاگین SSH، میتوانید از دستور journalctl استفاده کنید:
7. نحوه محدود کردن دسترسی SSH بر اساس آدرس IP در لینوکس
محدود کردن دسترسی SSH به آدرسهای IP خاص یک لایه امنیتی اضافه اضافه میکند که فقط به ماشینهای مورد اعتماد اجازه اتصال میدهد.
میتوانید این را مستقیماً در فایل پیکربندی SSH با مشخص کردن یک کاربر و آدرس IP مجاز آن پیکربندی کنید:
متناوباً، میتوانید محدودیتهای IP را در سطح فایروال اعمال کنید. برای مثال، با UFW، دسترسی فقط از یک آدرس IP خاص به پورت 22 را اجازه دهید:
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
—————— روی UFW ——————
sudo ufw allow from 192.168.1.100 to any port 22
8. نحوه تنظیم Timeout برای sessions SSH بیکار
sessions SSH بیکار میتوانند یک ریسک امنیتی ایجاد کنند اگر کاربر فراموش کند خارج شود، connection را باز گذاشته و برای استفاده سوء بالقوه باقی میگذارد.
میتوانید به طور خودکار sessions غیرفعال را با تنظیم یک timeout بیکار در فایل پیکربندی SSH قطع کنید.
ClientAliveCountMax 0
ClientAliveInterval 300 → یک پیام “keep-alive” هر 300 ثانیه (5 دقیقه) ارسال میکند.
ClientAliveCountMax 0 → session را قطع میکند اگر هیچ پاسخی دریافت نشود.
با این تنظیمات، هر session SSH بیکار پس از 5 دقیقه به طور خودکار خاتمه مییابد که ریسک sessions باز بدون نظارت را کاهش میدهد.
9. نحوه فعالسازی احراز هویت دو مرحلهای (2FA) برای لاگین SSH
اضافه کردن احراز هویت دو مرحلهای (2FA) به SSH به طور قابل توجهی امنیت را با نیاز به یک مرحله تأیید دوم علاوه بر رمز عبور شما افزایش میدهد.
در سیستمهای دبیان/اوبونتو، میتوانید از Google Authenticator استفاده کنید.
سپس، 2FA را برای حساب کاربری خود با اجرای این دستور تنظیم کنید:
سپس، ماژول PAM را برای SSH با ویرایش فایل زیر فعال کنید:
خط زیر را اضافه کنید:
در نهایت، اجازه احراز هویت challenge-response را در فایل پیکربندی SSH بدهید:
سرویس SSH را برای اعمال تغییرات restart کنید:
اکنون، هر لاگین SSH هم به رمز عبور شما و هم یک کد تأیید مبتنی بر زمان نیاز خواهد داشت که امنیت سرور شما را به شدت بهبود میبخشد.
10. نحوه محدود کردن connectionهای SSH با Fail2ban
Fail2ban یک ابزار قدرتمند است که با موقتاً banning کردن آدرسهای IP که چندین بار تلاش لاگین ناموفق دارند، به محافظت از سرور شما در برابر حملات brute-force کمک میکند.
برای تنظیم آن، ابتدا Fail2ban را روی سیستمهای دبیان/اوبونتو نصب کنید:
سپس، jail SSH را با ایجاد یا ویرایش فایل پیکربندی محلی فعال کنید:
خطوط زیر را برای پیکربندی محافظت برای SSH اضافه کنید:
enabled = true
port = ssh
maxretry = 3
در نهایت، Fail2ban را برای اعمال تغییرات restart کنید:
با فعال بودن Fail2ban، تلاشهای مکرر لاگین ناموفق به طور خودکار باعث banning موقت خواهد شد که ریسک حملات brute-force را به شدت کاهش میدهد.
11. نحوه پیکربندی احراز هویت مبتنی بر کلید SSH در لینوکس
احراز هویت مبتنی بر کلید یک روش ایمن برای وارد شدن به SSH بدون استفاده از رمزهای عبور است. این روش بر یک جفت کلید رمزنگاری تکیه میکند که حملات brute-force را تقریباً غیرممکن میسازد.
ابتدا یک جفت کلید روی ماشین محلی خود generate کنید. استفاده از الگوریتم مدرن و ایمن Ed25519 توصیه میشود:
سپس، کلید عمومی خود را به سرور راهدور کپی کنید:
پس از کار کردن احراز هویت مبتنی بر کلید، میتوانید امنیت را بیشتر با غیرفعال کردن لاگینهای رمز عبوری در فایل پیکربندی SSH بهبود دهید.
سرویس SSH را برای اعمال تغییر restart کنید:
پس از این، فقط کاربران با کلید خصوصی صحیح میتوانند وارد سیستم شوند که یک لایه قوی محافظت در برابر دسترسی غیرمجاز ارائه میدهد.
12. نحوه اجازه یا رد دسترسی SSH با استفاده از hosts.allow و hosts.deny
لینوکس یک راه ساده برای کنترل دسترسی به سرویسها با استفاده از TCP wrappers ارائه میدهد که بر فایلهای /etc/hosts.allow و /etc/hosts.deny تکیه دارد.
ابتدا، IPهای مورد اعتماد را در /etc/hosts.allow اجازه دهید:
سپس، همه IPهای دیگر را با ویرایش /etc/hosts.deny رد کنید:
با این setup، فقط آدرس IP 192.168.1.100 میتواند از طریق SSH وصل شود، در حالی که همه تلاشهای دیگر block میشوند.
13. نحوه بررسی و مانیتورینگ sessions SSH فعال در لینوکس
مانیتورینگ sessions SSH فعال به شما کمک میکند track کنید چه کسی وارد سیستم شده و هر دسترسی غیرمجازی را تشخیص دهید. برای دیدن لیست کاربران در حال حاضر وارد شده، میتوانید از دستورات ساده استفاده کنید:
یا
اگر نیاز به خاتمه session یک کاربر خاص دارید، میتوانید از pkill با نام کاربری آنها استفاده کنید:
بررسی منظم sessions فعال اطمینان میدهد که شما کنترل روی افرادی که به سرور شما وصل شدهاند دارید و به حفظ امنیت کمک میکند.
14. نحوه تنظیم SSH Tunneling (Port Forwarding) در لینوکس
SSH tunneling یا port forwarding به شما امکان میدهد ترافیک شبکه را از ماشین محلی خود به یک سرور راهدور به صورت امن مسیریابی کنید که برای دسترسی به سرویسهای پشت فایروال یا رمزگذاری connectionهای ناامن مفید است.
برای local port forwarding، میتوانید یک پورت روی ماشین محلی خود را به یک پورت روی سرور راهدور فوروارد کنید.
8080 → پورت محلی روی ماشین شما.
localhost:80 → مقصد روی سرور راهدور.
user@remote-server → اطلاعات لاگین SSH شما.
پس از اجرای این دستور، هر ترافیکی که به localhost:8080 روی ماشین محلی شما فرستاده شود به صورت امن به پورت 80 روی سرور راهدور فوروارد خواهد شد.
15. نحوه فعالسازی لاگگیری verbose برای عیبیابی SSH
هنگام عیبیابی مشکلات connection SSH، لاگهای دقیق میتوانند به شناسایی علت ریشهای کمک کنند، مانند مشکلات احراز هویت یا تأخیرهای شبکه. SSH یک حالت verbose داخلی ارائه میدهد که اطلاعات مرحله به مرحله درباره فرآیند connection نشان میدهد.
برای فعالسازی لاگگیری verbose، به سادگی اجرا کنید:
flag -vvv سطح verbosity را افزایش میدهد، جزئیات جامعی درباره هر مرحله از connection SSH ارائه میدهد.
میتوانید از vsهای کمتر (-v یا -vv) برای خروجی کمتر دقیق استفاده کنید.
حالت verbose برای تشخیص مشکلات SSH ارزشمند است، به شما کمک میکند به سرعت خطاهای پیکربندی، مشکلات شبکه یا شکستهای احراز هویت را pinpoint کنید.
16. نحوه ایمنسازی SSH با Cipherها و پروتکلهای قوی
ایمنسازی connectionهای SSH شامل اطمینان از این است که فقط الگوریتمها و پروتکلهای رمزگذاری قوی استفاده میشوند. به طور پیشفرض، SSH از چندین پروتکل و cipher پشتیبانی میکند، که برخی از آنها قدیمی و آسیبپذیر هستند.
میتوانید سرور SSH خود را با مشخص کردن explicit گزینههای ایمن در فایل پیکربندی سختتر کنید:
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512,hmac-sha2-256
KexAlgorithms curve25519-sha256@libssh.org
Protocol 2 → اطمینان میدهد فقط پروتکل ایمن SSHv2 استفاده شود.
Ciphers → الگوریتمهای رمزگذاری قوی برای انتقال داده مشخص میکند.
MACs → کدهای احراز هویت پیام ایمن برای تأیید یکپارچگی داده تنظیم میکند.
KexAlgorithms → الگوریتمهای تبادل کلید ایمن انتخاب میکند.
پس از ایجاد این تغییرات، SSH را برای اعمال آنها restart کنید:
17. نحوه محدود کردن دسترسی SSH به یک محدوده پورت خاص
محدود کردن دسترسی SSH به یک محدوده پورت خاص یک لایه امنیتی دیگر اضافه میکند با کنترل اینکه کدام پورتها برای connectionها مجاز هستند، که میتواند به کاهش exposure به حملات خودکار روی پورتهای استفاده نشده کمک کند.
در سیستمهایی که از UFW (Uncomplicated Firewall) استفاده میکنند، میتوانید یک محدوده پورت را با دستور زیر اجازه دهید:
برای کاربران FirewallD، معادل آن خواهد بود:
sudo firewall-cmd –reload
این پیکربندی فقط connectionهای SSH روی پورتهای 1024 تا 1040 را اجازه میدهد، دسترسی روی همه پورتهای دیگر را block میکند.
18. نحوه تغییر Timeout Connection SSH در لینوکس
محدود کردن زمانی که SSH برای ورود کاربر به سیستم منتظر میماند به جلوگیری از حملات brute-force کمک میکند و پنجره برای تلاشهای دسترسی غیرمجاز را کاهش میدهد، که میتواند با استفاده از تنظیم LoginGraceTime در فایل پیکربندی سرور SSH پیکربندی شود.
خط زیر را اضافه یا تغییر دهید، که حداکثر زمان (در ثانیه) را که SSH برای یک لاگین موفق قبل از قطع connection منتظر میماند تنظیم میکند.
پس از ذخیره فایل، سرویس SSH را برای اعمال تغییر restart کنید:
19. نحوه فعالسازی فشردهسازی SSH برای connectionهای سریعتر
فعالسازی فشردهسازی در SSH میتواند سرعت connection را بهبود بخشد، به ویژه هنگام انتقال مقادیر زیادی داده روی شبکههای کندتر. SSH میتواند داده را قبل از ارسال فشرده کند، مقدار ترافیک ارسالی روی شبکه را کاهش دهد.
برای استفاده از فشردهسازی روی پایه per-connection، به سادگی flag -C را هنگام connecting اضافه کنید:
برای یک راهحل دائمی، میتوانید فشردهسازی را در فایل پیکربندی کلاینت SSH فعال کنید.
پس از فعال شدن، SSH به طور خودکار داده را برای همه connectionها فشرده میکند، انتقالها را سریعتر میکند در حالی که هنوز رمزگذاری و امنیت را حفظ میکند.
20. نحوه پیکربندی SSH Aliases برای دسترسی آسانتر
مدیریت چندین connection SSH میتواند دست و پا گیر باشد اگر مجبور باشید آدرسهای IP، پورتها و نامهای کاربری را برای هر سرور به خاطر بسپارید. استفاده از SSH aliases این فرآیند را با اجازه دادن به شما برای ایجاد میانبر برای سرورهای frequently accessed ساده میکند.
برای تنظیم یک alias، فایل پیکربندی کلاینت SSH خود را ویرایش کنید و یک entry مانند این اضافه کنید:
HostName 192.168.1.50
User alice
Port 2200
پس از ذخیره فایل، میتوانید به سادگی با اجرای این دستور وصل شوید:
21. نحوه فوروارد کردن برنامههای GUI روی SSH (X11 Forwarding)
SSH میتواند بیشتر از فقط دسترسی خط فرمان انجام دهد؛ همچنین میتواند برنامههای گرافیکی را از یک سرور راهدور به ماشین محلی شما با استفاده از X11 forwarding فوروارد کند، که به شما امکان میدهد برنامههای GUI را روی سرور اجرا کنید گویی که به صورت محلی اجرا میشوند.
برای فعالسازی X11 forwarding، با option -X وصل شوید:
پس از connecting، میتوانید برنامههای GUI مانند زیر را launch کنید:
پنجره برنامه روی ماشین محلی شما ظاهر خواهد شد، در حالی که همه پردازش روی سرور راهدور اتفاق میافتد.
نکته: اطمینان حاصل کنید X11 forwarding در فایل پیکربندی سرور SSH اجازه داده شده است.
نتیجهگیری نهایی
SSH یک ابزار ضروری برای هر کسی است که سرورهای لینوکس را مدیریت میکند، و استفاده صحیح از آن میتواند کار شما را هم آسانتر و هم ایمنتر کند.
با دنبال کردن نکات این راهنما، میتوانید سرورهای خود را از دسترسی غیرمجاز محافظت کنید، لاگینهای خود را با احراز هویت مبتنی بر کلید و aliases ساده کنید، و فعالیت را با ابزارهایی مانند fail2ban و timeoutهای session مانیتور کنید.
با اصول اولیه شروع کنید، مانند تغییر پورت پیشفرض، غیرفعال کردن لاگین روت، و تنظیم لاگین مبتنی بر کلید، و سپس به تدریج ویژگیهای پیشرفته مانند احراز هویت دو مرحلهای، SSH tunneling و لاگگیری verbose را کاوش کنید.
مسلط شدن بر این روشها به شما کمک میکند سرورها را به طور کارآمد مدیریت کنید، از حملات در امان بمانید و مانند یک مدیر لینوکس با اعتماد به نفس کار کنید.