امنسازی اتصال SSH برای جلوگیری از حملات brute force
پورت پیشفرض SSH (22) اغلب هدف حملات خودکار brute force است. این راهنما به شما یاد میدهد پورت SSH را تغییر دهید و گزینههای امنیتی بیشتری برای محافظت از سرور خود پیکربندی کنید.
📋 پیشنیازها
- یک سرور VPS با دسترسی root یا sudo
- یک اتصال SSH فعال
- UFW نصب و پیکربندیشده (آموزش نصب UFW را ببینید)
⚠️ مهم: یک نشست SSH را باز نگه دارید
مهم: پیش از شروع، یک نشست SSH فعال نگه دارید. اگر چیزی درست کار نکرد، همچنان میتوانید وصل شوید و مشکل را برطرف کنید.
دو ترمینال SSH را بهطور موازی باز کنید:
- ترمینال 1: نشست کاری (برای انجام تغییرات)
- ترمینال 2: نشست پشتیبان (برای مواقع اضطراری)
🔧 تغییر پورت SSH
مرحله 1: انتخاب پورت جدید
پورتی بین 1024 و 65535 انتخاب کنید. پورتهای رایجی که باید از آنها پرهیز کرد:
- 22 (پورت پیشفرض SSH، بسیار هدف حمله)
- 80 و 443 (HTTP/HTTPS)
- 3306 و 5432 (پایگاههای داده)
نمونه پورتهای امن: 2222، 2200، 1022، 5000
مرحله 2: ویرایش پیکربندی SSH
Bash# Éditer le fichier de configuration SSH sudo nano /etc/ssh/sshd_config
مرحله 3: تغییر پورت
خط #Port 22 را پیدا کنید و آن را تغییر دهید:
# Avant
#Port 22
# Après (remplacez 2222 par votre port choisi)
Port 2222
نکته: در nano برای جستجوی "Port 22" از Ctrl + W استفاده کنید
مرحله 4: ذخیره و خروج
در nano:
Ctrl + Xبرای خروجYبرای تأییدEntréeبرای ذخیره
مرحله 5: بررسی نحو (syntax)
Bash# Vérifier que la configuration est valide sudo sshd -t
اگر این دستور هیچ خطایی برنگرداند، پیکربندی شما درست است.
مرحله 6: مجاز کردن پورت جدید در UFW
Bash# Autoriser le nouveau port SSH (remplacez 2222 par votre port) sudo ufw allow 2222/tcp # Optionnel : Supprimer l'ancien port 22 si vous ne l'utilisez plus sudo ufw delete allow 22/tcp # Recharger UFW sudo ufw reload # Vérifier que la règle est active sudo ufw status | grep 2222
مرحله 7: ریاستارت سرویس SSH
Bash# Redémarrer SSH avec la nouvelle configuration sudo systemctl restart sshd # Vérifier que SSH fonctionne toujours sudo systemctl status sshd
مرحله 8: آزمایش اتصال جدید
در یک ترمینال جدید، اتصال را با پورت جدید آزمایش کنید:
Bash# Remplacez 2222 par votre port et utilisateur@votre-ip par vos identifiants ssh -p 2222 utilisateur@votre-ip
اگر اتصال برقرار شد، میتوانید نشست قدیمی روی پورت 22 را ببندید.
🔒 گزینههای امنیتی بیشتر
غیرفعال کردن ورود root
مهم: غیرفعال کردن ورود root از طریق SSH یک روش امنیتی عالی است. پیش از انجام این تغییر مطمئن شوید یک کاربر با sudo پیکربندی کردهاید.
Bash# Éditer la configuration SSH sudo nano /etc/ssh/sshd_config # Chercher et modifier cette ligne PermitRootLogin no # Sauvegarder et redémarrer sudo sshd -t sudo systemctl restart sshd
محدود کردن تلاشهای اتصال
Bashsudo nano /etc/ssh/sshd_config # Ajouter ou modifier ces lignes MaxAuthTries 3 # Maximum 3 tentatives de connexion LoginGraceTime 30 # Délai de 30 secondes pour se connecter
غیرفعال کردن احراز هویت با رمز عبور (فقط استفاده از کلیدهای SSH)
Bashsudo nano /etc/ssh/sshd_config # Modifier cette ligne PasswordAuthentication no PubkeyAuthentication yes
توجه: این گزینه را فقط در صورتی فعال کنید که یک کلید SSH پیکربندی کرده و از کارکرد آن مطمئن شده باشید!
استفاده فقط از نسخه 2 پروتکل SSH
Bashsudo nano /etc/ssh/sshd_config # Ajouter cette ligne (si elle n'existe pas) Protocol 2
غیرفعال کردن تونلهای X11 (اگر به آنها نیاز ندارید)
Bashsudo nano /etc/ssh/sshd_config # Modifier cette ligne X11Forwarding no
پیکربندی کامل پیشنهادی
در اینجا یک پیکربندی کامل و امن SSH آمده که باید به /etc/ssh/sshd_config اضافه شود:
# Port SSH personnalisé
Port 2222
# Désactiver root login
PermitRootLogin no
# Limites de connexion
MaxAuthTries 3
LoginGraceTime 30
# Désactiver l'authentification par mot de passe (si vous utilisez des clés SSH)
# PasswordAuthentication no
# PubkeyAuthentication yes
# Protocole SSH version 2 uniquement
Protocol 2
# Désactiver X11 forwarding
X11Forwarding no
# Désactiver les tunnels TCP
AllowTcpForwarding no
# Temps d'inactivité avant déconnexion
ClientAliveInterval 300
ClientAliveCountMax 2
پس از هر تغییر، فراموش نکنید که:
Bash# Vérifier la syntaxe sudo sshd -t # Redémarrer SSH sudo systemctl restart sshd
🔄 ایجاد کاربر با sudo (در صورت نیاز)
اگر ورود root را غیرفعال کردهاید، مطمئن شوید یک کاربر با دسترسیهای sudo دارید:
Bash# Créer un nouvel utilisateur sudo adduser monutilisateur # Ajouter l'utilisateur au groupe sudo sudo usermod -aG sudo monutilisateur # Tester que l'utilisateur peut utiliser sudo su - monutilisateur sudo whoami # Devrait afficher "root"
✅ بررسی نهایی
بررسی کارکرد SSH
Bash# Vérifier le statut du service sudo systemctl status sshd # Vérifier que SSH écoute sur le bon port sudo netstat -tlnp | grep ssh # ou sudo ss -tlnp | grep ssh # Vérifier la configuration sudo sshd -T | grep port
بررسی لاگهای SSH
Bash# Voir les tentatives de connexion sudo tail -f /var/log/auth.log # Voir les connexions réussies sudo grep "Accepted" /var/log/auth.log # Voir les tentatives échouées sudo grep "Failed" /var/log/auth.log
🛡️ محافظت بیشتر با fail2ban
fail2ban ابزاری است که IPهایی را که حملات brute force انجام میدهند بهطور خودکار مسدود میکند.
نصب fail2ban
Bashsudo apt update sudo apt install fail2ban -y
پیکربندی پایه
Bash# Copier le fichier de configuration sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Éditer la configuration sudo nano /etc/fail2ban/jail.local
پیکربندی پیشنهادی برای SSH:
INI1[sshd] 2enabled = true 3port = 2222 # Votre nouveau port SSH 4maxretry = 3 # Nombre de tentatives avant bannissement 5bantime = 3600 # Temps de bannissement en secondes (1 heure) 6findtime = 600 # Fenêtre de temps pour compter les tentatives (10 minutes)
فعالسازی fail2ban
Bash# Démarrer fail2ban sudo systemctl start fail2ban # Activer au démarrage sudo systemctl enable fail2ban # Vérifier le statut sudo systemctl status fail2ban # Voir les IPs bannies sudo fail2ban-client status sshd
🆘 عیبیابی
دیگر نمیتوانم با SSH وصل شوم
اگر از سرور بیرون ماندهاید:
-
از نشست پشتیبان خود استفاده کنید (ترمینال 2 که باز نگه داشتهاید)
-
اگر نشست پشتیبان ندارید:
- با پشتیبانی Infrawire و اطلاعات ورود خود تماس بگیرید
- از کنسول VNC/KVM در پنل کنترل خود استفاده کنید
- مستقیم وصل شوید و پیکربندی قبلی را بازگردانید:
Bash
sudo nano /etc/ssh/sshd_config # Remettez Port 22 sudo systemctl restart sshd
پورت SSH پاسخ نمیدهد
Bash# Vérifier que SSH écoute sur le port sudo netstat -tlnp | grep ssh # Vérifier que le port est ouvert dans UFW sudo ufw status | grep 2222 # Vérifier les logs SSH sudo journalctl -u sshd -n 50
باید موقتاً با پورت قدیمی وصل شوم
اگر پیش از حذف پورت قدیمی (22) باید با آن وصل شوید:
Bash# Autoriser temporairement le port 22 sudo ufw allow 22/tcp # Vous connecter ssh -p 22 utilisateur@votre-ip # Une fois connecté, supprimer la règle sudo ufw delete allow 22/tcp
📚 منابع بیشتر
❓ پرسشهای متداول
پرسش: برای SSH چه پورتی انتخاب کنم؟
پاسخ: پورتی بین 1024 و 65535 انتخاب کنید. از پورتهای رایج (80، 443، 3306 و غیره) پرهیز کنید. پورتهایی مانند 2222، 2200 یا 1022 انتخابهای خوبی هستند.
پرسش: آیا میتوانم یک پورت را برای چند سرویس استفاده کنم؟
پاسخ: خیر، هر سرویس باید پورت منحصربهفرد خودش را داشته باشد.
پرسش: آیا واقعاً باید پورت SSH را تغییر دهم؟
پاسخ: بهشدت توصیه میشود. این کار حملات خودکار brute force را بهطور چشمگیری کاهش میدهد.
پرسش: اگر پورت را تغییر دادهام، آیا fail2ban لازم است؟
پاسخ: خیر، اما یک لایه امنیتی اضافی توصیهشده است.
پرسش: چگونه از یک کلاینت SSH با پورت جدید وصل شوم؟
پاسخ: از گزینه -p استفاده کنید: ssh -p 2222 utilisateur@votre-ip
امنسازی موفق! 🚀