
به اشتراک بگذارید
حملات سایبری به سرورهای لینوکس در سالهای اخیر بهطور چشمگیری افزایش یافته است. آمارها نشان میدهند که هر روز میلیونها تلاش بروت فورس برای نفوذ به سرورهای SSH انجام میشود. احراز هویت دومرحلهای لینوکس یکی از مؤثرترین راهحلها برای مقابله با این تهدیدات است. با پیادهسازی 2FA برای SSH، حتی اگر رمز عبور شما به سرقت برود، هکرها نمیتوانند به سرور دسترسی پیدا کنند زیرا به کد یکبار مصرفی نیاز دارند که فقط در دستگاه شما تولید میشود.
💡 حمله بروت فورس چیست و چگونه کار میکند؟
قبل از اینکه بفهمیم احراز هویت دومرحلهای چطور از سرور ما محافظت میکند، بهتر است بدانیم حمله بروت فورس (Brute Force Attack) چیست.
تصور کنید یک دزد میخواهد در خانه شما را باز کند. او تمام کلیدهای ممکن را یکی یکی امتحان میکند تا قفل باز شود. حمله بروت فورس دقیقاً همین کار را با رمزهای عبور انجام میدهد.
به زبان ساده: هکرها برنامههایی دارند که خودکار هزاران یا حتی میلیونها ترکیب مختلف از نام کاربری و رمز عبور را روی سرور شما امتحان میکنند. این برنامهها شبانهروز و بدون خستگی کار میکنند تا بالاخره ترکیب درستی پیدا کنند.
قبل از اینکه بفهمیم احراز هویت دومرحلهای چطور از سرور ما محافظت میکند، بهتر است بدانیم حمله بروت فورس (Brute Force Attack) چیست.
تصور کنید یک دزد میخواهد در خانه شما را باز کند. او تمام کلیدهای ممکن را یکی یکی امتحان میکند تا قفل باز شود. حمله بروت فورس دقیقاً همین کار را با رمزهای عبور انجام میدهد.
به زبان ساده: هکرها برنامههایی دارند که خودکار هزاران یا حتی میلیونها ترکیب مختلف از نام کاربری و رمز عبور را روی سرور شما امتحان میکنند. این برنامهها شبانهروز و بدون خستگی کار میکنند تا بالاخره ترکیب درستی پیدا کنند.
💡 از چه تهدیدات امنیتی جلوگیری میکند؟
- 🔨 حملات بروت فورس (Brute Force Attacks)
- 🕵️ سرقت رمز عبور (Password Theft)
- 📚 حملات Dictionary Attack
- 👤دسترسی غیرمجاز بعد از ترک کار کارمند
- 🎭 حملات Man-in-the-Middle ساده
- 🔄 redential Stuffing (استفاده مجدد از اطلاعات نشت شده)
- 🤖 حملات خودکار و رباتها (Automated Attacks)
- ⚙️ استفاده از اعتبارنامه پیشفرض (Default Credentials)
- 🗣️ حملات Social Engineering (مهندسی اجتماعی)
- 🔗 Session Hijacking محدود
در این راهنمای جامع از بلاگ وبداده، شما یاد خواهید گرفت چگونه با استفاده از ماژولهای استاندارد PAM و ابزار Google Authenticator، یک سیستم امنیتی چندلایه برای پروتکل SSH ایجاد کنید. این آموزش برای تمام سطوح از مبتدی تا حرفهای طراحی شده و تمام جزئیات فنی، نکات امنیتی و راهحلهای بازیابی اضطراری را پوشش میدهد.
آنچه در این مقاله میخوانید:
درک مفهوم احراز هویت دومرحلهای و نقش آن در امنیت SSH
احراز هویت دومرحلهای مثل این است که برای ورود به خانهتان، علاوه بر کلید، به رمز گاوصندوق هم نیاز داشته باشید. در دنیای سرورها، این یعنی حتی اگر کسی رمز عبورتان را بداند، بدون دسترسی به گوشی موبایل شما نمیتواند وارد سرور شود. این روش بهخصوص برای SSH حیاتی است چون SSH دروازه اصلی مدیریت سرور است و اگر کسی از آن وارد شود، کنترل کامل سیستم را در دست میگیرد. در این بخش یاد میگیریم چرا تنها رمز عبور کافی نیست و چگونه 2FA به یک سپر محافظ قدرتمند تبدیل میشود.
احراز هویت دومرحلهای چیست؟
احراز هویت دومرحلهای یا Two-Factor Authentication (2FA) یک لایه امنیتی اضافی است که علاوه بر رمز عبور، یک عامل دوم را برای تأیید هویت کاربر درخواست میکند. این عامل دوم معمولاً یک کد شش رقمی است که هر 30 ثانیه تغییر میکند و توسط یک برنامه موبایل مانند Google Authenticator، Microsoft Authenticator یا Authy تولید میشود.
مزیت اصلی این روش این است که حتی اگر رمز عبور شما افشا شود، مهاجم بدون دسترسی به دستگاه فیزیکی شما نمیتواند وارد سیستم شود. این موضوع بهویژه برای سرورهای تولیدی و محیطهای حساس بسیار حیاتی است.

چرا SSH نیاز به حفاظت بیشتری دارد؟
پروتکل SSH (Secure Shell) دروازه اصلی دسترسی به سرورهای لینوکس است. هر سروری که به اینترنت متصل باشد، بهطور مداوم هدف حملات خودکار بروت فورس قرار میگیرد. این حملات معمولاً از لیستهای رایج نام کاربری و رمز عبور استفاده میکنند تا به سیستم نفوذ کنند.
📝 آمارهای امنیتی نشان میدهد که:
- بیش از 80 درصد حملات موفق به سرورها از طریق SSH با رمزهای عبور ضعیف یا سرقت شده انجام میشود
- میانگین زمان شناسایی یک نفوذ موفق، 197 روز است
- هزینه متوسط هر نقض امنیتی برای کسبوکارها بیش از 4 میلیون دلار است
پیادهسازی تامین امنیت سرور لینوکس با 2FA میتواند این ریسکها را بهطور چشمگیری کاهش دهد.
💡 بیشتر بدانید: آموزش اتصال به سرور لینوکس با 4 روش + ویدیو آموزشی
مقایسه روشهای مختلف امنیت SSH
قبل از پیادهسازی، بهتر است روشهای مختلف امنیت SSH را بشناسید:
- رمز عبور ساده: امنیت پایین، آسیبپذیر در برابر حملات بروت فورس
- کلید SSH (SSH Key): امنیت بالا، اما در صورت سرقت کلید خصوصی، سیستم کاملاً در معرض خطر قرار میگیرد.
- 2FA با رمز عبور: امنیت بسیار بالا، حتی با سرقت رمز عبور، نفوذ غیرممکن است
- 2FA با کلید SSH: بالاترین سطح امنیت، ترکیب چیزی که دارید (کلید) و چیزی که میدانید (کد 2FA)
نصب و آمادهسازی سیستم برای 2FA
قبل از اینکه بخواهیم قفل امنیتی روی در ورودی نصب کنیم، اول باید ابزارها و قطعات لازم را آماده کنیم. در این مرحله، سرور لینوکس شما را با نصب ماژولهای ضروری برای پشتیبانی از 2FA مجهز میکنیم. خوشبختانه این فرآیند بسیار ساده است و بسته به توزیع لینوکس شما (Ubuntu، CentOS یا دیگر توزیعها) فقط با چند دستور انجام میشود. مهمترین نکته این است که قبل از شروع، یک نسخه پشتیبان از تنظیمات فعلی تهیه کنید تا اگر مشکلی پیش آمد، بتوانید به حالت قبل برگردید.
درک ماژول PAM و نقش آن
PAM (Pluggable Authentication Modules) یک سیستم انعطافپذیر برای مدیریت احراز هویت در لینوکس است. این سیستم به شما اجازه میدهد بدون تغییر در برنامههای اصلی، روشهای احراز هویت را تغییر دهید یا لایههای جدید اضافه کنید.
PAM (Pluggable Authentication Modules) یک سیستم انعطافپذیر برای مدیریت احراز هویت در لینوکس است. این سیستم به شما اجازه میدهد بدون تغییر در برنامههای اصلی، روشهای احراز هویت را تغییر دهید یا لایههای جدید اضافه کنید.
نصب ماژول Google Authenticator در Ubuntu/Debian
برای توزیعهای مبتنی بر Debian مانند Ubuntu، دستورات زیر را اجرا کنید:
# بهروزرسانی لیست بستهها
sudo apt update
# نصب ماژول libpam-google-authenticator
sudo apt install libpam-google-authenticator -y
# بررسی نصب موفق
dpkg -l | grep libpam-google-authenticator این ماژول شامل دو بخش اصلی است:
- ماژول PAM که با سیستم احراز هویت ادغام میشود
- ابزار خط فرمان برای تولید کدهای QR و مدیریت تنظیمات کاربران
نصب در CentOS/RHEL/AlmaLinux
برای توزیعهای مبتنی بر Red Hat، فرآیند کمی متفاوت است:
# فعالسازی مخزن EPEL
sudo yum install epel-release -y
# نصب Google Authenticator
sudo yum install google-authenticator -y
# برای سیستمهای جدیدتر با DNF
sudo dnf install google-authenticator -y بررسی پیشنیازها و وضعیت سرویس SSH
قبل از ادامه، مطمئن شوید که:
# بررسی وضعیت سرویس SSH
sudo systemctl status sshd
# اگر سرویس غیرفعال است
sudo systemctl start sshd
sudo systemctl enable sshd
# بررسی پورت SSH
sudo ss -tlnp | grep ssh ⚠ نکته امنیتی مهم: قبل از هر تغییری در پیکربندی SSH، حتماً یک نشست SSH فعال باز نگه دارید. اگر اشتباهی در پیکربندی رخ دهد، هنوز میتوانید از این نشست برای برگرداندن تغییرات استفاده کنید.

پیکربندی ماژول PAM برای احراز هویت دومرحلهای (2FA SSH)
حال که ماژول Google Authenticator را نصب کردید، باید به سیستم احراز هویت لینوکس بگویید که از این ماژول استفاده کند. این کار از طریق ویرایش فایلهای پیکربندی PAM انجام میشود که مسئول مدیریت ورود کاربران به سیستم هستند. در این بخش با دقت یک خط کلیدی به فایل مربوطه اضافه میکنیم و پارامترهای مختلف آن را تنظیم میکنیم تا سرور بداند چه زمانی و چگونه کد 2FA را از کاربر درخواست کند. اشتباه در این مرحله میتواند باعث قفل شدن دسترسی شود، بنابراین هر مرحله را با دقت دنبال کنید.
ویرایش فایل پیکربندی PAM برای SSH
اکنون باید ماژول Google Authenticator را به زنجیره احراز هویت PAM اضافه کنید. فایل مربوطه معمولاً
/etc/pam.d/sshd است:# ایجاد نسخه پشتیبان از فایل اصلی
sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.backup
# ویرایش فایل
sudo nano /etc/pam.d/sshd در ابتدای فایل، خط زیر را اضافه کنید:
auth required pam_google_authenticator.so nullok این خط به PAM میگوید که:
auth: این ماژول برای احراز هویت استrequired: این مرحله الزامی است و نمیتواند رد شودpam_google_authenticator.so: نام ماژولnullok: اجازه میدهد کاربرانی که هنوز 2FA را راهاندازی نکردهاند بتوانند وارد شوند
درک پارامترهای مختلف ماژول PAM
ماژول Google Authenticator پارامترهای مختلفی دارد که میتوانید از آنها استفاده کنید:
- nullok: کاربران بدون 2FA میتوانند وارد شوند (برای مرحله راهاندازی)
auth required pam_google_authenticator.so nullok - forward_pass: رمز عبور را به ماژول بعدی منتقل میکند
auth required pam_google_authenticator.so forward_pass - secret: مسیر فایل تنظیمات را مشخص میکند
auth required pam_google_authenticator.so secret=/etc/ssh/totp/${USER} - echo_verification_code: کد تأیید را در لاگ ثبت میکند (فقط برای دیباگ)
💡 توصیه امنیتی: برای محیط تولید، بعد از راهاندازی کامل، پارامتر
nullok را حذف کنید تا همه کاربران ملزم به استفاده از 2FA شوند.غیرفعال کردن احراز هویت پیشفرض
اگر میخواهید فقط از 2FA استفاده شود و رمز عبور معمولی غیرفعال باشد، خط زیر را در فایل PAM کامنت کنید:
# @include common-auth با این کار، سیستم فقط از کد 2FA برای احراز هویت استفاده خواهد کرد.
پیکربندی سرویس SSH برای 2FA SSH
تا اینجا ماژول 2FA را نصب و به سیستم PAM معرفی کردیم، اما SSH Daemon هنوز از وجود این قابلیت خبر ندارد. در این مرحله باید فایل پیکربندی اصلی SSH را ویرایش کنیم تا به سرویس SSH بگوییم از PAM برای احراز هویت استفاده کند و همچنین تعیین کنیم که کاربران چه ترکیبی از روشهای احراز هویت (رمز عبور، کلید SSH، کد 2FA) را باید طی کنند. این تنظیمات تعیین میکند که آیا فقط 2FA کافی است یا باید همراه با رمز عبور یا کلید SSH استفاده شود. قبل از اعمال تغییرات، حتماً یک نشست SSH فعال باز نگه دارید تا در صورت بروز مشکل بتوانید تنظیمات را برگردانید.
ویرایش فایل sshd_config
فایل پیکربندی اصلی SSH Daemon در مسیر
/etc/ssh/sshd_config قرار دارد:# ایجاد نسخه پشتیبان
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
# ویرایش فایل
sudo nano /etc/ssh/sshd_config تنظیمات ضروری برای فعالسازی امنیت SSH
پارامترهای زیر را پیدا کرده و به شکل زیر تنظیم کنید:
# فعالسازی استفاده از PAM
UsePAM yes
# فعالسازی احراز هویت Challenge-Response
ChallengeResponseAuthentication yes
# یا در نسخههای جدیدتر OpenSSH
KbdInteractiveAuthentication yes
# تعیین روش احراز هویت (رمز عبور و کد 2FA)
AuthenticationMethods keyboard-interactive سناریوهای مختلف پیکربندی
سناریو 1: فقط رمز عبور + 2FA
PasswordAuthentication yes
PubkeyAuthentication no
AuthenticationMethods keyboard-interactive سناریو 2: کلید SSH یا رمز عبور + 2FA
PasswordAuthentication yes
PubkeyAuthentication yes
AuthenticationMethods publickey,keyboard-interactive password,keyboard-interactive سناریو 3: حتماً کلید SSH و 2FA (امنترین)
PasswordAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey,keyboard-interactive اعمال تغییرات و تست پیکربندی
قبل از ریاستارت سرویس، همیشه syntax را چک کنید:
# بررسی صحت پیکربندی
sudo sshd -t
# اگر خطایی نبود، ریاستارت سرویس
sudo systemctl restart sshd
# بررسی وضعیت سرویس
sudo systemctl status sshd 💡 هشدار مهم: قبل از بستن نشست SSH فعلی، حتماً یک نشست جدید باز کنید و عملکرد را تست کنید. اگر مشکلی وجود داشت، از نشست قبلی برای برگرداندن تغییرات استفاده کنید.

راهاندازی 2FA برای کاربران سیستم
پیکربندیهای سمت سرور تمام شد، اما هنوز هیچ کاربری نمیتواند از 2FA استفاده کند. هر کاربر باید یک بار دستور مخصوصی را اجرا کند تا کلید اختصاصی خود را تولید کرده و با گوشی موبایلش ارتباط برقرار کند. در این مرحله یک کد QR تولید میشود که باید با برنامه Authenticator اسکن شود، همچنین چند کد پشتیبان به شما داده میشود که برای مواقع اضطراری (مثل گم شدن گوشی) باید در جای امنی ذخیره شوند. این فرآیند برای هر کاربر سرور باید جداگانه انجام شود و فقط 2-3 دقیقه زمان میبرد.
اجرای دستور google-authenticator
هر کاربری که میخواهد از SSH two-factor authentication استفاده کند باید این مراحل را انجام دهد:
# ورود به حساب کاربری
su - username
# یا مستقیماً به عنوان خود کاربر
google-authenticator دستور بالا یک سری سوال میپرسد:
❓ سوال 1: Do you want authentication tokens to be time-based?
Do you want authentication tokens to be time-based (y/n) y پاسخ
y بدهید. این حالت استاندارد TOTP (Time-based One-Time Password) را فعال میکند.اسکن کد QR و ذخیره اطلاعات امنیتی
بعد از تأیید، یک کد QR در ترمینال نمایش داده میشود:
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=...
Your new secret key is: ABCD1234EFGH5678IJKL
Your verification code is 123456
Your emergency scratch codes are:
12345678
87654321
11223344
44332211
55667788 💡 مراحل ضروری:
- اسکن کد QR: برنامه Google Authenticator یا Microsoft Authenticator را روی گوشی باز کنید و کد را اسکن کنید
- ذخیره Secret Key: این کلید را در جای امنی (مثل یک مدیر رمز عبور) ذخیره کنید. اگر گوشی را گم کنید، با این کلید میتوانید 2FA را دوباره راهاندازی کنید
- ذخیره Scratch Codes: این کدهای یکبار مصرف برای مواقع اضطراری است. هر کد فقط یک بار قابل استفاده است
❓ سوال 2: Do you want me to update your “~/.google_authenticator” file?
Do you want me to update your "/home/username/.google_authenticator" file? (y/n) y پاسخ
y بدهید تا تنظیمات ذخیره شود.سوال 3: Do you want to disallow multiple uses of the same token?
Do you want to disallow multiple uses of the same authentication token? (y/n) y پاسخ
y بدهید. این امکان جلوگیری از حملات replay را فراهم میکند.❓ سوال 4: Increase the time window?
By default, tokens are good for 30 seconds. Do you want to increase the window to 4 minutes? (y/n) n پاسخ
n بدهید. پنجره زمانی طولانیتر امنیت را کاهش میدهد.❓ سوال 5: Enable rate limiting?
Do you want to enable rate-limiting? (y/n) y پاسخ
y بدهید. این ویژگی حملات بروت فورس به کدهای 2FA را محدود میکند (حداکثر 3 تلاش هر 30 ثانیه).مکان ذخیرهسازی فایل تنظیمات
تنظیمات 2FA هر کاربر در فایل
~/.google_authenticator ذخیره میشود:# مشاهده محتوای فایل
cat ~/.google_authenticator این فایل شامل:
- کلید مخفی (Secret Key)
- کدهای پشتیبان
- تنظیمات زمان و محدودیت استفاده
💡 نکته امنیتی: دسترسی به این فایل را محدود کنید:
chmod 400 ~/.google_authenticator تست و اعتبارسنجی عملکرد 2FA
بعد از انجام تمام پیکربندیها، حالا وقت آن رسیده که مطمئن شویم همه چیز درست کار میکند. در این مرحله باید از یک ترمینال جدید اقدام به ورود کنید و ببینید آیا سیستم ابتدا رمز عبور و سپس کد 2FA را درخواست میکند یا خیر. همچنین باید کدهای پشتیبان را امتحان کنید تا مطمئن شوید در شرایط اضطراری قابل استفاده هستند. اگر در این مرحله مشکلی پیش آمد، هنوز نشست SSH قبلی شما فعال است و میتوانید تنظیمات را اصلاح کنید. تست صحیح در این مرحله جلوی بسیاری از مشکلات آینده را میگیرد.
ورود آزمایشی از ترمینال دیگر
بدون بستن نشست فعلی، یک ترمینال جدید باز کنید:
ssh username@your-server-ip اکنون باید ابتدا رمز عبور را وارد کنید:
username@your-server-ip's password: [رمز عبور] سپس کد 2FA درخواست میشود:
Verification code: [کد 6 رقمی از برنامه] اگر هر دو صحیح باشند، وارد سرور میشوید.
تست با کدهای پشتیبان (Scratch Codes)
برای اطمینان از عملکرد صحیح، یکی از کدهای پشتیبان را امتحان کنید:
ssh username@your-server-ip
# بعد از وارد کردن رمز عبور
Verification code: 12345678 💡 توجه: هر کد پشتیبان فقط یک بار قابل استفاده است. بعد از مصرف، آن را از لیست خود حذف کنید.
بررسی لاگهای احراز هویت
برای رفع اشکال، لاگهای سیستم را بررسی کنید:
# در Ubuntu/Debian
sudo tail -f /var/log/auth.log
# در CentOS/RHEL
sudo tail -f /var/log/secure 📝 پیامهای موفق:
sshd[12345]: Accepted keyboard-interactive/pam for username from 192.168.1.1 📝 پیامهای خطا:
sshd[12345]: pam_google_authenticator(sshd:auth): Invalid verification code مدیریت سناریوهای اضطراری و بازیابی دسترسی
هیچ سیستم امنیتی کامل نیست مگر اینکه برای شرایط اضطراری برنامهریزی شده باشد. ممکن است گوشی شما خراب شود، برنامه Authenticator پاک شود یا به هر دلیلی نتوانید به کد 2FA دسترسی داشته باشید. در این بخش یاد میگیرید چگونه با استفاده از کدهای پشتیبان، دسترسی از کنسول، یا بازیابی با Secret Key دوباره به سرور وصل شوید. همچنین روشهایی برای جلوگیری از قفل شدن کامل سرور، مانند ایجاد یک حساب کاربری اضطراری و تهیه نسخه پشتیبان از تنظیمات 2FA را بررسی خواهیم کرد تا همیشه راه برگشتی داشته باشید.
گم شدن گوشی یا عدم دسترسی به برنامه Authenticator
اگر گوشی خود را گم کردید یا برنامه Authenticator را حذف کردید، سه راهحل وجود دارد:
- راهحل 1: استفاده از کدهای پشتیبان
کدهای یکبار مصرفی که هنگام راهاندازی دریافت کردید را استفاده کنید:
ssh username@server
Verification code: [کد پشتیبان] - راهحل 2: دسترسی از طریق کنسول
اگر به کنسول فیزیکی یا کنسول ارائهدهنده هاستینگ دسترسی دارید:
# ورود از کنسول
# حذف موقت فایل 2FA
mv ~/.google_authenticator ~/.google_authenticator.backup
# یا غیرفعال کردن موقت ماژول PAM
sudo nano /etc/pam.d/sshd
# کامنت کردن خط ماژول
# auth required pam_google_authenticator.so
# ریاستارت SSH
sudo systemctl restart sshd - راهحل 3: بازیابی با Secret Key
اگر Secret Key را ذخیره کردهاید:
- برنامه Authenticator را روی گوشی جدید نصب کنید
- گزینه “Enter a setup key” را انتخاب کنید
- Secret Key ذخیرهشده را وارد کنید
- حساب بازیابی میشود
راهاندازی مجدد 2FA برای کاربر
اگر نیاز به ریست کامل داشتید:
# ورود به سرور (از کنسول یا نشست موجود)
su - username
# حذف تنظیمات قبلی
rm ~/.google_authenticator
# راهاندازی مجدد
google-authenticator ایجاد یک حساب کاربری اضطراری
برای جلوگیری از قفل شدن کامل سرور، یک حساب بدون 2FA ایجاد کنید:
# ایجاد کاربر اضطراری
sudo useradd -m -s /bin/bash emergency_user
sudo passwd emergency_user
# اضافه کردن به گروه sudo
sudo usermod -aG sudo emergency_user 💡 نکته امنیتی: این کاربر را فقط از IP خاص یا از کنسول قابل دسترسی کنید:
# در /etc/ssh/sshd_config
Match User emergency_user
AuthenticationMethods password
AllowUsers emergency_user
# محدود کردن به IP خاص
# Match User emergency_user Address 192.168.1.100 پشتیبانگیری از تنظیمات 2FA
برای تمام کاربران، فایلهای تنظیمات را backup بگیرید:
# ایجاد پوشه backup
sudo mkdir -p /root/2fa-backups
# کپی تنظیمات همه کاربران
for user in $(ls /home); do
if [ -f /home/$user/.google_authenticator ]; then
sudo cp /home/$user/.google_authenticator /root/2fa-backups/$user-google-auth
fi
done
# فشردهسازی و رمزگذاری
tar -czf /root/2fa-backups.tar.gz /root/2fa-backups
openssl enc -aes-256-cbc -salt -in /root/2fa-backups.tar.gz -out /root/2fa-backups.tar.gz.enc بهینهسازی و نکات امنیتی پیشرفته
تا اینجا یک سیستم 2FA کاملاً کاربردی راهاندازی کردهاید، اما میتوان امنیت را چند برابر کرد. در این بخش تکنیکهای پیشرفتهای را یاد میگیرید که مدیران حرفهای سرور از آنها استفاده میکنند، مانند ترکیب کلید SSH با 2FA برای ایجاد احراز هویت سهلایه، محدود کردن تلاشهای ورود ناموفق با Fail2ban، دریافت هشدار ایمیلی برای هر ورود موفق، و تغییر پورت پیشفرض SSH. این تنظیمات اضافی نهتنها امنیت را افزایش میدهند بلکه به شما کنترل و نظارت بیشتری روی سرور میدهند و حتی میتوانند حملات خودکار را بهطور قابلتوجهی کاهش دهند.
ترکیب 2FA با کلید SSH برای حداکثر امنیت
امنترین روش، استفاده همزمان از کلید SSH و 2FA است:
# تولید کلید SSH در کامپیوتر کاربر
ssh-keygen -t ed25519 -C "[email protected]"
# کپی کلید به سرور
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server
# تنظیم sshd_config برای استفاده از هر دو
sudo nano /etc/ssh/sshd_config ⚙ تنظیمات:
PubkeyAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive با این روش، کاربر باید:
- کلید SSH صحیح داشته باشد (چیزی که دارید)
- کد 2FA صحیح وارد کند (چیزی که میدانید)
محدود کردن تعداد تلاشهای ورود ناموفق
برای جلوگیری از حملات بروت فورس به کدهای 2FA:
# نصب fail2ban
sudo apt install fail2ban -y
# ایجاد فایل پیکربندی
sudo nano /etc/fail2ban/jail.local 📝 محتوای فایل:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600 ⚙ این تنظیمات:
- بعد از 3 تلاش ناموفق در 10 دقیقه
- IP را برای 1 ساعت مسدود میکند
تنظیم هشدارهای ایمیل برای ورودهای موفق
برای آگاهی از ورودهای موفق:
# ایجاد اسکریپت هشدار
sudo nano /etc/ssh/login-notify.sh محتوای اسکریپت:
#!/bin/bash
if [ "$PAM_TYPE" = "open_session" ]; then
echo "SSH Login: $PAM_USER from $PAM_RHOST on $(date)" | mail -s "SSH Login Alert" [email protected]
fi افزودن به PAM:
sudo nano /etc/pam.d/sshd
# اضافه کردن در انتها
session optional pam_exec.so /etc/ssh/login-notify.sh استفاده از پورت غیراستاندارد برای SSH
تغییر پورت پیشفرض SSH (22) میتواند حملات خودکار را کاهش دهد:
sudo nano /etc/ssh/sshd_config
# تغییر پورت
Port 2222
# ریاستارت سرویس
sudo systemctl restart sshd
# اجازه پورت جدید در فایروال
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp ⚠ توجه: قبل از حذف قانون پورت 22، مطمئن شوید که میتوانید از پورت جدید وصل شوید.

عیبیابی مشکلات رایج در پیادهسازی 2FA
در فرآیند پیادهسازی 2FA، برخی مشکلات تکراری وجود دارند که بیشتر مدیران سرور با آنها مواجه میشوند. ممکن است کد 2FA قبول نشود، پیام “Permission denied” دریافت کنید، یا حتی کاملاً از سرور قفل شوید. در این بخش رایجترین خطاها، علت دقیق آنها و راهحل گامبهگام برای رفع هر مشکل را بررسی میکنیم. همچنین نحوه خواندن و تحلیل لاگهای سیستم برای تشخیص سریع مشکل را یاد خواهید گرفت، چون در اکثر موارد لاگها دقیقاً به شما میگویند کجای کار اشتباه است.
خطای “Permission denied” بعد از پیکربندی
علت: معمولاً به دلیل اشتباه در تنظیمات PAM یا SSH است.
راهحل:
# بررسی لاگها
sudo tail -30 /var/log/auth.log | grep pam
# چک کردن syntax فایل PAM
sudo pam-auth-update --force
# بررسی دسترسیهای فایل
ls -la ~/.google_authenticator
# باید 400 یا 600 باشد
# اگر نیست، تنظیم کنید
chmod 400 ~/.google_authenticator کد 2FA قبول نمیشود (Invalid verification code)
علتهای احتمالی:
- زمان سرور با گوشی هماهنگ نیست
# بررسی زمان سرور
date
# نصب و فعالسازی NTP
sudo apt install ntp -y
sudo systemctl start ntp
sudo systemctl enable ntp
# یا در سیستمهای جدید
sudo timedatectl set-ntp true - کد منقضی شده است
کدهای 2FA هر 30 ثانیه تغییر میکنند. مطمئن شوید از کد جدید استفاده میکنید.
- Rate limiting فعال است
اگر چند بار کد اشتباه وارد کردهاید، 30 ثانیه صبر کنید:
# بررسی لاگ
sudo grep "pam_google_authenticator" /var/log/auth.log برنامه Authenticator کد نمایش نمیدهد
راهحل:
# ورود از کنسول و اجرای مجدد
google-authenticator
# اسکن QR جدید یا وارد کردن Secret Key به صورت دستی سرور بعد از پیکربندی قفل شده است
راهحل اضطراری:
- ورود از کنسول ارائهدهنده (مثلاً پنل مدیریت سرور مجازی شما)
- غیرفعال کردن موقت 2FA:
# کامنت کردن ماژول PAM
sudo nano /etc/pam.d/sshd
# auth required pam_google_authenticator.so # موقتاً غیرفعال
sudo systemctl restart sshd - بررسی و رفع مشکل
- فعالسازی مجدد بعد از حل مشکل
پیام “google_authenticator: command not found”
علت: ماژول بهدرستی نصب نشده است.
راهحل:
# Ubuntu/Debian
sudo apt install libpam-google-authenticator --reinstall
# CentOS/RHEL
sudo yum reinstall google-authenticator
# بررسی PATH
which google-authenticator خطای SELinux در CentOS/RHEL
اگر SELinux فعال است، ممکن است مانع از عملکرد 2FA شود:
# بررسی وضعیت SELinux
getenforce
# اگر Enforcing است، لاگها را چک کنید
sudo ausearch -m avc -ts recent
# اضافه کردن قوانین SELinux
sudo semanage permissive -a sshd_t
# یا غیرفعال کردن موقت (توصیه نمیشود)
sudo setenforce 0 مقایسه ابزارهای مختلف 2FA برای لینوکس
Google Authenticator تنها گزینه موجود برای پیادهسازی 2FA در لینوکس نیست، هرچند محبوبترین و سادهترین آن است. در این بخش ابزارهای جایگزین مانند Duo Security، FreeOTP و دیگر راهحلها را بررسی میکنیم و مزایا و معایب هر کدام را با یکدیگر مقایسه میکنیم. همچنین تفاوت بین دو استاندارد TOTP و HOTP را توضیح میدهیم تا بتوانید تصمیم بگیرید کدام روش برای نیاز شما مناسبتر است. این اطلاعات بهخصوص برای سازمانها و کسبوکارهایی که میخواهند بهترین راهحل را با توجه به بودجه و نیازهای خاص خود انتخاب کنند، مفید است.
Google Authenticator و Duo و FreeOTP
| ویژگی | Google Authenticator | Duo Security | FreeOTP |
|---|---|---|---|
| رایگان بودن | ✅ کاملاً رایگان | ❌ نسخه رایگان محدود | ✅ رایگان و متنباز |
| سهولت نصب | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| پشتیبانی | خوب | عالی (پشتیبانی تجاری) | متوسط |
| امکانات اضافی | پایهای | پیشرفته (Push, Policy) | پایهای |
💡 توصیه: برای محیطهای شخصی و کسبوکارهای کوچک، Google Authenticator کافی است. برای سازمانهای بزرگ، Duo Security گزینه بهتری است.
مقایسه TOTP و HOTP
TOTP (Time-based):
- کدها هر 30 ثانیه تغییر میکنند
- نیاز به همگامسازی زمان
- امنتر در برابر حملات replay
HOTP (Counter-based):
- بر اساس شمارنده کار میکند
- نیازی به همگامسازی زمان نیست
- در صورت عدم استفاده، کدها منقضی نمیشوند
💡 توصیه: TOTP (پیشفرض Google Authenticator) برای SSH مناسبتر است.
سرور اختصاصی ایران با سختافزار نسل جدید، پورت ۱۰ گیگ و مدیریت حرفهای
برای مشاهده پلنهای
سرور اختصاصی ایران
روی دکمه زیر کلیک کنید
سرور اختصاصی ایران
روی دکمه زیر کلیک کنید
نتیجهگیری: احراز هویت دومرحلهای لینوکس
پیادهسازی احراز هویت دومرحلهای برای SSH یکی از مؤثرترین اقداماتی است که میتوانید برای امنسازی سرور لینوکس خود انجام دهید. همانطور که در این راهنما دیدید، فرآیند نصب و پیکربندی با استفاده از Google Authenticator نسبتاً ساده است و تنها 30 تا 60 دقیقه زمان میبرد.
با این حال، نکات مهمی وجود دارد که باید به خاطر داشته باشید: همیشه قبل از هر تغییری یک نشست SSH فعال باز نگه دارید، کدهای پشتیبان خود را در جای امن ذخیره کنید، و از ترکیب کلید SSH با 2FA برای حداکثر امنیت استفاده کنید. تامین امنیت سرور لینوکس یک فرآیند مستمر است و باید بهطور منظم تنظیمات خود را بررسی و بهروزرسانی کنید.
اگر به دنبال سرورهای اختصاصی با امکانات پیشرفته امنیتی هستید، میتوانید سرویسهای سرور اختصاصی وبداده را بررسی کنید که با پشتیبانی تخصصی 24/7 و زیرساختهای امن، به شما کمک میکند تا سرورهایتان را در بالاترین سطح امنیتی نگه دارید.
به یاد داشته باشید که امنیت یک مسیر است نه مقصد. با پیادهسازی 2FA، شما گام مهمی در این مسیر برداشتهاید، اما باید همچنان به بهروزرسانی سیستم، نظارت بر لاگها، و بهبود مستمر تنظیمات امنیتی ادامه دهید.
سوالات متداول از احراز هویت دومرحلهای (2FA) برای SSH در سرور لینوکس
1- آیا 2FA باعث کند شدن فرآیند ورود به سرور میشود؟
خیر، تنها چند ثانیه به زمان ورود اضافه میشود. وارد کردن یک کد 6 رقمی معمولاً کمتر از 5 ثانیه طول میکشد. در مقابل، امنیت سرور شما بهطور چشمگیری افزایش مییابد. برای کاهش زحمت، میتوانید از کلید SSH همراه با 2FA استفاده کنید تا فرآیند سریعتر شود.




