SSH یکی از اصلیترین روشهای مدیریت سرورهای لینوکسی از راه دور است. پورت پیشفرض SSH معمولاً 22 است و بسیاری از اسکنرها و رباتهای اینترنتی نیز بهصورت خودکار این پورت را بررسی میکنند.
تغییر پورت SSH بهتنهایی جایگزین روشهای امنیتی مانند استفاده از SSH Key، فایروال و Fail2Ban نیست، اما میتواند حجم اتصالهای تصادفی و اسکنهای خودکار روی پورت پیشفرض را کاهش دهد.
در این آموزش نحوه تغییر پورت SSH در Ubuntu، Debian، AlmaLinux، Rocky Linux و CentOS را مرحلهبهمرحله بررسی میکنیم.
پیشنیازها
برای انجام این آموزش به موارد زیر نیاز دارید:
- دسترسی
rootیا کاربر دارای sudo - دسترسی SSH به سرور
- یک پورت آزاد برای SSH
- دسترسی به تنظیمات Firewall سرور
پیشنهاد میشود هنگام انجام این تغییر، Session فعلی SSH را باز نگه دارید و تا زمانی که اتصال با پورت جدید را تست نکردهاید از آن خارج نشوید.
مرحله اول: بررسی پورت فعلی SSH
برای مشاهده پورت فعلی SSH میتوانید دستور زیر را اجرا کنید:
ss -tulpn | grep ssh
یا:
ss -lntp | grep ':22'
در حالت پیشفرض معمولاً SSH روی پورت 22 در حال Listen است.
مرحله دوم: تهیه بکاپ از تنظیمات SSH
قبل از ایجاد هرگونه تغییر، از فایل تنظیمات SSH نسخه پشتیبان تهیه کنید:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
در صورت بروز مشکل میتوانید تنظیمات قبلی را بازیابی کنید.
مرحله سوم: انتخاب پورت جدید
در این آموزش از پورت زیر بهعنوان مثال استفاده میکنیم:
2222
شما میتوانید پورت دیگری انتخاب کنید، اما ابتدا مطمئن شوید سرویس دیگری از آن استفاده نمیکند.
برای بررسی پورت 2222:
ss -lntp | grep ':2222'
اگر خروجی دریافت نکردید، معمولاً سرویسی روی این پورت در حال Listen نیست.
مرحله چهارم: تغییر پورت SSH
فایل تنظیمات OpenSSH Server معمولاً در مسیر زیر قرار دارد:
/etc/ssh/sshd_config
OpenSSH تنظیمات daemon را از این فایل و در برخی سیستمها از فایلهای داخل sshd_config.d دریافت میکند.
فایل را باز کنید:
nano /etc/ssh/sshd_config
خط زیر را پیدا کنید:
#Port 22
آن را به شکل زیر تغییر دهید:
Port 2222
اگر خط Port وجود نداشت، میتوانید آن را اضافه کنید.
سپس فایل را ذخیره کنید.
روش پیشنهادی در سیستمهای جدید
در برخی سیستمها میتوانید بهجای تغییر مستقیم فایل اصلی، یک فایل جداگانه ایجاد کنید:
nano /etc/ssh/sshd_config.d/port.conf
و داخل آن بنویسید:
Port 2222
این روش مدیریت تغییرات سفارشی را سادهتر میکند.
مرحله پنجم: بررسی صحت تنظیمات SSH
این مرحله بسیار مهم است.
قبل از Restart کردن SSH، دستور زیر را اجرا کنید:
sshd -t
اگر هیچ خروجی نمایش داده نشد، معمولاً Syntax تنظیمات صحیح است.
اگر خطایی وجود داشته باشد، ابتدا آن را برطرف کنید و سپس سرویس SSH را Restart کنید.
مستندات Ubuntu نیز توصیه میکنند قبل از Restart سرویس، تنظیمات با sshd -t بررسی شوند تا یک خطای پیکربندی باعث از دست رفتن دسترسی SSH نشود.
مرحله ششم: باز کردن پورت جدید در Firewall
قبل از Restart کردن SSH باید پورت جدید را در Firewall باز کنید.
Ubuntu و Debian با UFW
اگر از UFW استفاده میکنید:
ufw allow 2222/tcp
و وضعیت را بررسی کنید:
ufw status
باید پورت جدید در لیست Rules مشاهده شود.
AlmaLinux، Rocky Linux و CentOS با Firewalld
اگر از Firewalld استفاده میکنید:
firewall-cmd --permanent --add-port=2222/tcp
سپس:
firewall-cmd --reload
برای بررسی:
firewall-cmd --list-ports
نکته مهم برای SELinux
در AlmaLinux، Rocky Linux و CentOS ممکن است SELinux فعال باشد.
در این شرایط علاوه بر Firewall ممکن است لازم باشد پورت جدید را برای SSH در SELinux نیز تعریف کنید.
ابتدا وضعیت SELinux را بررسی کنید:
getenforce
اگر مقدار زیر را مشاهده کردید:
Enforcing
میتوانید در سیستمهایی که ابزار semanage نصب است، پورت جدید را به نوع ssh_port_t اضافه کنید:
semanage port -a -t ssh_port_t -p tcp 2222
اگر پورت قبلاً در SELinux تعریف شده باشد، ممکن است بهجای -a نیاز به -m داشته باشید.
برای مشاهده پورتهای مجاز SSH:
semanage port -l | grep ssh
مرحله هفتم: Restart کردن SSH
در Ubuntu و Debian معمولاً:
systemctl restart ssh
در AlmaLinux، Rocky Linux و CentOS معمولاً میتوانید از دستور زیر استفاده کنید:
systemctl restart sshd
سپس وضعیت سرویس را بررسی کنید:
systemctl status sshd
یا در Ubuntu:
systemctl status ssh
نکته مهم در Ubuntuهای جدید
در برخی نسخههای جدید Ubuntu، OpenSSH میتواند با systemd socket activation مدیریت شود. در این حالت تغییر Port ممکن است تنها با Restart کردن ssh.service اعمال نشود و لازم باشد تنظیمات systemd نیز Reload شود.
در چنین سیستمی میتوانید اجرا کنید:
systemctl daemon-reload
systemctl restart ssh.socket
سپس پورت Listen شده را بررسی کنید:
ss -lntp | grep ssh
مرحله هشتم: تست پورت جدید
مهمترین مرحله این است که قبل از بستن اتصال SSH فعلی، یک Terminal جدید باز کنید.
سپس با پورت جدید متصل شوید:
ssh -p 2222 root@SERVER_IP
بهجای SERVER_IP آدرس IP سرور را وارد کنید.
اگر اتصال با موفقیت انجام شد، تغییر پورت SSH بهدرستی اعمال شده است.
بررسی پورت SSH بعد از تغییر
برای بررسی اینکه SSH روی چه پورتی Listen میکند:
ss -lntp | grep ssh
یا:
ss -lntp | grep ':2222'
در صورت موفقیت باید پورت جدید را مشاهده کنید.
اتصال SSH با پورت جدید
از این پس هنگام اتصال باید پورت جدید را مشخص کنید:
ssh -p 2222 root@SERVER_IP
اگر از نرمافزارهایی مانند PuTTY، Termius یا MobaXterm استفاده میکنید نیز باید مقدار Port را از 22 به پورت جدید تغییر دهید.
بستن پورت 22
تا زمانی که اتصال روی پورت جدید را با موفقیت تست نکردهاید، پورت 22 را نبندید.
بعد از اطمینان از عملکرد پورت جدید، در UFW میتوانید Rule قبلی را حذف کنید:
ufw delete allow 22/tcp
در Firewalld:
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
قبل از حذف Rule مربوط به SSH مطمئن شوید پورت جدید واقعاً در Firewall باز است.
اگر بعد از تغییر دیگر SSH وصل نشد چه کنیم؟
اگر اتصال با پورت جدید برقرار نشد، موارد زیر را بررسی کنید:
sshd -t
سپس:
ss -lntp | grep ssh
Firewall را بررسی کنید:
ufw status
یا:
firewall-cmd --list-all
همچنین Log سرویس SSH میتواند اطلاعات مفیدی ارائه دهد:
journalctl -u sshd --no-pager -n 50
در Ubuntu میتوانید از دستور زیر نیز استفاده کنید:
journalctl -u ssh --no-pager -n 50
اگر دسترسی SSH کاملاً قطع شده است، باید از Console یا KVM ارائهشده توسط سرویسدهنده سرور استفاده کنید.
بازگرداندن پورت SSH به 22
برای بازگرداندن پورت پیشفرض، فایل تنظیمات را باز کنید:
nano /etc/ssh/sshd_config
مقدار زیر را تنظیم کنید:
Port 22
سپس تنظیمات را بررسی کنید:
sshd -t
و سرویس SSH را Restart کنید.
آیا تغییر پورت SSH امنیت سرور را تضمین میکند؟
خیر.
تغییر پورت SSH تنها یکی از اقدامات جانبی برای کاهش اسکنها و تلاشهای خودکار روی پورت پیشفرض است.
برای افزایش واقعی امنیت SSH بهتر است اقدامات زیر را نیز انجام دهید:
- استفاده از SSH Key بهجای Password
- غیرفعال کردن ورود مستقیم Root در صورت امکان
- استفاده از Fail2Ban
- محدود کردن دسترسی SSH با Firewall
- استفاده از Password قوی
- بروزرسانی منظم سیستمعامل و OpenSSH
جمعبندی
برای تغییر پورت SSH در لینوکس ابتدا فایل تنظیمات SSH را ویرایش کنید و پورت جدید را مشخص کنید:
Port 2222
سپس قبل از Restart سرویس حتماً تنظیمات را بررسی کنید:
sshd -t
پورت جدید را در Firewall باز کنید و پس از Restart کردن SSH، در یک Terminal جدید اتصال را آزمایش کنید:
ssh -p 2222 root@SERVER_IP
مهمترین نکته این است که تا قبل از اطمینان از اتصال موفق روی پورت جدید، Session فعلی SSH و پورت 22 را نبندید.
