اگر سرویس SSH روی سرور شما از اینترنت در دسترس باشد، تقریباً همیشه هدف تلاش‌های مکرر برای حدس‌زدن رمز عبور، اسکن پورت و حملات Brute Force قرار می‌گیرد. حتی اگر ورود با رمز عبور را غیرفعال کرده باشید و فقط با کلید SSH وارد شوید، باز هم این تلاش‌ها می‌توانند لاگ‌های سیستم را شلوغ کنند و بخشی از سطح حمله را باز نگه دارند.

در چنین شرایطی، Fail2Ban یکی از ساده‌ترین و مؤثرترین ابزارها برای افزایش امنیت سرور لینوکسی است. این ابزار لاگ سرویس‌ها را بررسی می‌کند و اگر یک آدرس IP چند بار به شکل مشکوک و ناموفق تلاش به ورود داشته باشد، آن IP را به‌صورت خودکار برای مدت مشخصی مسدود می‌کند.

در این آموزش، روش نصب و پیکربندی Fail2Ban را برای Ubuntu 24.04 به‌صورت کامل، بازنویسی‌شده و مناسب انتشار در وردپرس یاد می‌گیرید. علاوه بر مراحل اصلی، نکات مهمی مثل تنظیم jail.local، فعال‌سازی Jail مربوط به SSH، تست Ban شدن IP، مشاهده لاگ‌ها، رفع خطاهای رایج و چند توصیه امنیتی تکمیلی را هم پوشش داده‌ایم.

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

فهرست مطالب

Fail2Ban چیست و چگونه کار می‌کند؟

Fail2Ban یک ابزار امنیتی متن‌باز و سبک برای لینوکس است که فایل‌های لاگ یا رویدادهای ثبت‌شده در systemd journal را بررسی می‌کند. هر زمان الگویی از رفتار مشکوک شناسایی شود، مثلاً چند تلاش ناموفق برای ورود به SSH در بازه زمانی کوتاه، Fail2Ban به‌صورت خودکار یک قانون فایروال ایجاد می‌کند و آدرس IP مهاجم را برای مدت مشخصی مسدود می‌سازد.

این ابزار فقط مخصوص SSH نیست و می‌تواند از سرویس‌های دیگری مثل Nginx، Apache، Postfix، Dovecot و حتی برخی پنل‌های مدیریتی هم محافظت کند. با این حال، رایج‌ترین سناریوی استفاده از آن در سرورهای لینوکسی، دفاع از SSH در برابر حملات بروت‌فورس است.

مزایای اصلی Fail2Ban:

  • محافظت خودکار در برابر تلاش‌های مکرر ناموفق برای ورود
  • نصب ساده و مصرف بسیار کم منابع
  • امکان شخصی‌سازی مدت زمان Ban، تعداد تلاش مجاز و بازه بررسی
  • سازگاری با UFW، iptables، nftables و چند backend دیگر
  • قابل استفاده برای چندین سرویس مختلف، نه فقط SSH

نکته مهم: Fail2Ban جایگزین تنظیمات امنیتی پایه نیست؛ بلکه یک لایه تکمیلی است. بهترین نتیجه زمانی حاصل می‌شود که آن را همراه با ورود مبتنی بر کلید SSH، غیرفعال‌کردن ورود root، محدودسازی IP و فایروال صحیح استفاده کنید.

پیش‌نیازهای نصب Fail2Ban در اوبونتو 24.04

قبل از شروع، این موارد را آماده داشته باشید:

  • یک سرور با سیستم‌عامل Ubuntu 24.04 LTS
  • یک کاربر با دسترسی sudo
  • فعال بودن سرویس SSH روی سرور
  • ترجیحاً یک IP یا سیستم دوم برای تست Ban شدن
  • دسترسی کنسول از پنل سرور، برای مواقع اضطراری

اگر هنوز سرور خود را انتخاب نکرده‌اید، می‌توانید از سرور مجازی ایران یا سرور مجازی آلمان استفاده کنید. وجود دسترسی کنسول یا KVM همیشه توصیه می‌شود، چون اگر به‌اشتباه IP خودتان را Ban کنید، از طریق کنسول می‌توانید مشکل را برطرف کنید.

مرحله 1: نصب Fail2Ban در Ubuntu 24.04

Fail2Ban در مخازن رسمی اوبونتو وجود دارد. برای نصب آن، ابتدا پکیج‌ها را به‌روز و سپس Fail2Ban را نصب کنید:

sudo apt update
sudo apt install fail2ban -y

پس از نصب، بهتر است نسخه برنامه و وضعیت سرویس را هم بررسی کنید:

fail2ban-client --version
sudo systemctl status fail2ban

ممکن است در برخی سیستم‌ها سرویس هنوز فعال نباشد یا تا قبل از تکمیل تنظیمات، در وضعیت دلخواه شما قرار نداشته باشد. این مورد طبیعی است و در مرحله فعال‌سازی آن را نهایی می‌کنیم.

مرحله 2: پیکربندی Fail2Ban

تنظیمات Fail2Ban در مسیر /etc/fail2ban قرار دارند. فایل اصلی پیش‌فرض jail.conf است، اما نباید مستقیماً آن را ویرایش کنید؛ چون در به‌روزرسانی‌های بعدی بازنویسی می‌شود و تغییرات شما از بین می‌رود.

راه درست این است که فایل jail.local را بسازید یا از پوشه jail.d/ استفاده کنید. برای سناریوی محافظت از SSH، فایل jail.local گزینه ساده و مناسبی است:

cd /etc/fail2ban
sudo cp jail.conf jail.local
sudo nano /etc/fail2ban/jail.local

در این فایل می‌توانید تنظیمات عمومی و همچنین Jail مربوط به SSH را تعریف یا بازنویسی کنید.

تنظیمات مهم بخش DEFAULT

بخش [DEFAULT] تنظیمات عمومی Fail2Ban را مشخص می‌کند. این تنظیمات روی همه Jailها اعمال می‌شوند، مگر اینکه در یک Jail خاص مقدار دیگری برای همان پارامتر تعریف کرده باشید.

1) مدت زمان Ban با bantime

پارامتر bantime تعیین می‌کند IP مهاجم چه مدت مسدود بماند. مثال:

[DEFAULT]
bantime = 1h

یعنی هر IP که شرایط Ban را داشته باشد، یک ساعت مسدود می‌شود. بسته به شرایط می‌توانید از مقادیر زیر هم استفاده کنید:

  • 10m برای ده دقیقه
  • 1h برای یک ساعت
  • 24h برای یک شبانه‌روز
  • -1 برای Ban دائمی تا زمان Unban دستی

2) بازه بررسی با findtime

پارامتر findtime مشخص می‌کند تلاش‌های ناموفق در چه بازه زمانی بررسی شوند:

findtime = 10m

3) تعداد تلاش مجاز با maxretry

پارامتر maxretry تعداد دفعاتی است که یک IP در آن بازه زمانی می‌تواند ناموفق تلاش کند:

maxretry = 5

در نتیجه، اگر یک IP در مدت 10 دقیقه، 5 بار تلاش ناموفق برای ورود داشته باشد، به‌مدت 1 ساعت Ban خواهد شد.

4) جلوگیری از Ban شدن IP خودتان با ignoreip

یکی از مهم‌ترین تنظیمات، افزودن IP مدیریتی خودتان به لیست سفید است:

ignoreip = 127.0.0.1/8 ::1 203.0.113.10

اگر چند IP یا یک رنج امن دارید، می‌توانید آن‌ها را هم اضافه کنید:

ignoreip = 127.0.0.1/8 ::1 203.0.113.10 198.51.100.0/24

5) تنظیم ایمیل اعلان‌ها

اگر بخواهید هنگام Ban شدن IPها ایمیل دریافت کنید، می‌توانید این پارامترها را بررسی کنید:

destemail = [email protected]
sender = [email protected]
mta = sendmail

در بسیاری از سرورها این بخش ضروری نیست، اما برای محیط‌های حساس یا سرورهای چندکاربره می‌تواند مفید باشد.

6) نوع اقدام با action

پارامتر action مشخص می‌کند Fail2Ban هنگام شناسایی مهاجم چه کاری انجام دهد. حالت پیش‌فرض معمولاً فقط Ban کردن از طریق فایروال است:

action = %(action_)s

اما در صورت نیاز می‌توانید از اکشن‌های دیگری مثل ارسال ایمیل همراه با لاگ هم استفاده کنید:

action = %(action_mwl)s

فعال‌سازی Jail مربوط به SSH

حالا به بخش [sshd] در همان فایل بروید و Jail مربوط به SSH را فعال کنید. برای Ubuntu 24.04 این تنظیمات معمولاً مناسب هستند:

[sshd]
enabled  = true
port     = ssh
backend  = systemd
logpath  = %(sshd_log)s
maxretry = 5
findtime = 10m
bantime  = 1h

توضیح این پارامترها:

  • enabled = true یعنی Jail مربوط به SSH فعال است.
  • port = ssh یعنی از نام سرویس SSH استفاده می‌شود. اگر پورت SSH را تغییر داده‌اید، می‌توانید مثلاً 2222 بنویسید.
  • backend = systemd در اوبونتو 24.04 معمولاً بهترین انتخاب است، چون لاگ‌های SSH از طریق journal هم مدیریت می‌شوند.
  • logpath = %(sshd_log)s مسیر لاگ SSH را از تنظیمات داخلی Fail2Ban می‌گیرد.

اگر از UFW به‌عنوان فایروال اصلی استفاده می‌کنید، می‌توانید برای هماهنگی بهتر این تنظیم را هم در بخش [DEFAULT] اضافه کنید:

banaction = ufw

در غیر این صورت، Fail2Ban بسته به تنظیمات سیستم می‌تواند از iptables یا nftables هم استفاده کند.

مرحله 3: فعال‌سازی و راه‌اندازی سرویس Fail2Ban

بعد از ذخیره فایل، سرویس Fail2Ban را فعال و اجرا کنید:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo systemctl status fail2ban

اگر همه چیز درست باشد، باید وضعیت سرویس به شکل active (running) نمایش داده شود.

همچنین برای اطمینان از لود شدن Jail مربوط به SSH، این دستور را اجرا کنید:

sudo fail2ban-client status

در خروجی، باید نام sshd را در بخش Jail List ببینید.

مرحله 4: تست عملکرد Fail2Ban

برای تست واقعی Fail2Ban، بهتر است از یک IP دیگر استفاده کنید. از سیستم دوم چند بار تلاش کنید با نام کاربری یا رمز اشتباه به SSH وصل شوید:

ssh invaliduser@YOUR_SERVER_IP

بعد از چند تلاش ناموفق، باید IP شما Ban شود. برای بررسی وضعیت Jail مربوط به SSH، این دستور را اجرا کنید:

sudo fail2ban-client status sshd

در خروجی، اطلاعاتی مثل تعداد تلاش‌ها، لیست IPهای Ban شده و وضعیت فعلی Jail نمایش داده می‌شود.

اگر backend شما مبتنی بر iptables باشد، می‌توانید رول‌های ایجادشده را هم ببینید:

sudo iptables -S | grep f2b

در برخی سیستم‌ها که از nftables استفاده می‌کنند، بررسی دقیق رول‌ها ممکن است متفاوت باشد، اما خروجی خود fail2ban-client برای اطمینان از عملکرد کافی است.

دستورات کاربردی Fail2Ban

در استفاده روزمره از Fail2Ban، این دستورات بسیار کاربردی هستند:

مشاهده وضعیت کلی Fail2Ban

sudo fail2ban-client status

مشاهده وضعیت Jail مربوط به SSH

sudo fail2ban-client status sshd

Unban کردن یک IP

sudo fail2ban-client set sshd unbanip 203.0.113.20

Ban کردن دستی یک IP

sudo fail2ban-client set sshd banip 203.0.113.20

بارگذاری مجدد تنظیمات بدون ریستارت کامل سیستم

sudo fail2ban-client reload

ریستارت سرویس Fail2Ban

sudo systemctl restart fail2ban

مشاهده لاگ Fail2Ban

sudo tail -f /var/log/fail2ban.log

مشاهده لاگ‌های SSH در journal

sudo journalctl -u ssh -f

عیب‌یابی Fail2Ban در Ubuntu 24.04

1) سرویس Fail2Ban بالا نمی‌آید

اگر بعد از systemctl start fail2ban سرویس اجرا نشد، ابتدا وضعیت را ببینید:

sudo systemctl status fail2ban
sudo journalctl -xeu fail2ban

رایج‌ترین علت، اشتباه تایپی در فایل jail.local یا تعریف نادرست یک Jail است.

2) Jail مربوط به SSH فعال نمی‌شود

اگر در خروجی fail2ban-client status نام sshd را نمی‌بینید، فایل تنظیمات را دوباره بررسی کنید و مطمئن شوید این بخش دقیقاً وجود دارد:

[sshd]
enabled = true

3) IPها Ban نمی‌شوند

در این حالت معمولاً یکی از این مشکلات وجود دارد:

  • backend اشتباه انتخاب شده است
  • مسیر یا منبع لاگ SSH اشتباه است
  • تعداد تلاش‌ها هنوز به maxretry نرسیده است
  • IP مورد نظر در ignoreip قرار دارد

4) خودتان Ban شده‌اید

اگر IP خودتان Ban شد و هنوز دسترسی کنسول دارید، این دستور مشکل را برطرف می‌کند:

sudo fail2ban-client set sshd unbanip YOUR_IP

بعد از آن، IP خود را به بخش ignoreip اضافه کنید تا دوباره همین اتفاق نیفتد.

5) بعد از تغییر پورت SSH، Jail کار نمی‌کند

اگر پورت SSH را تغییر داده‌اید، مقدار port در Jail مربوط به SSH را هم با همان پورت هماهنگ کنید:

[sshd]
port = 2222

نکات امنیتی تکمیلی برای SSH

Fail2Ban بسیار مفید است، اما برای یک سرور واقعاً امن بهتر است این موارد را هم انجام دهید:

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

سوالات متداول

آیا Fail2Ban فقط برای SSH استفاده می‌شود؟

خیر. Fail2Ban می‌تواند از سرویس‌های مختلفی که لاگ‌های قابل تحلیل دارند محافظت کند؛ از جمله Nginx، Apache، Postfix، Dovecot و برخی پنل‌ها و اپلیکیشن‌ها.

آیا Fail2Ban روی Ubuntu 24.04 با systemd سازگار است؟

بله. در اوبونتو 24.04 معمولاً استفاده از backend = systemd انتخاب خوبی است و Fail2Ban به‌خوبی با journald کار می‌کند.

اگر IP خودم به اشتباه Ban شود چه کار کنم؟

از طریق کنسول سرور وارد شوید و با دستور unbanip IP خودتان را آزاد کنید. سپس آن را در ignoreip قرار دهید.

آیا Fail2Ban به تنهایی برای امنیت SSH کافی است؟

نه کاملاً. Fail2Ban یک لایه دفاعی مؤثر است، اما بهترین نتیجه زمانی به دست می‌آید که آن را با SSH Key، غیرفعال‌کردن root login، فایروال و محدودسازی IP ترکیب کنید.

بهتر است bantime را چقدر بگذاریم؟

برای بیشتر سرورهای عمومی، 1h یا 24h مناسب است. اگر سرور شما دائماً تحت حمله است، می‌توانید زمان بیشتری انتخاب کنید. فقط مراقب باشید مدیران واقعی سرور به اشتباه دچار Ban طولانی نشوند.

تفاوت jail.conf و jail.local چیست؟

jail.conf فایل پیش‌فرض پکیج است و نباید مستقیم ویرایش شود. jail.local مخصوص تنظیمات سفارشی شماست و در به‌روزرسانی‌ها حفظ می‌شود.

جمع‌بندی

در این آموزش دیدید که چگونه Fail2Ban را روی Ubuntu 24.04 نصب، پیکربندی و تست کنید تا از سرویس SSH در برابر حملات brute-force محافظت شود. این ابزار سبک، ساده و بسیار کاربردی است و تقریباً روی هر سرور لینوکسی که SSH آن در دسترس اینترنت باشد، ارزش نصب دارد.

اگر مدیریت چند سرور یا سرویس عمومی را بر عهده دارید، Fail2Ban باید یکی از اولین اجزای امنیتی پایه شما باشد. در کنار آن، پیشنهاد می‌شود سیاست‌های امنیتی دیگر مثل ورود با کلید SSH، فایروال، محدودسازی دسترسی و به‌روزرسانی مستمر سیستم را هم جدی بگیرید.

برای تهیه زیرساخت مناسب، می‌توانید صفحه پویاسازان و سرویس‌های سرور مجازی، هاست لینوکس و گواهی SSL را نیز بررسی کنید.

آخرین به روز رسانی: 20 فروردین 1405