Fail2ban چیست؟ و نقش آن در محافظت از سرویس‌های لینوکسی

Fail2ban چیست؟ و نقش آن در محافظت از سرویس‌های لینوکسی

آنچه در مقاله می‌خوانید

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

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

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

قبل از اینکه سراغ راه‌اندازی کامل شبکه خصوصی مجازی بروید یا در کنار آن، می‌توان از ابزاری به نام Fail2ban استفاده کرد. Fail2ban با بررسی لاگ‌های سیستم و تعریف قوانین مشخص، می‌تواند پس از تعداد معینی تلاش ناموفق برای ورود، به‌صورت خودکار IP مهاجم را در فایروال مسدود کند. این کار باعث می‌شود سرور بدون نیاز به دخالت دستی، در برابر حملات Brute Force مقاوم‌تر شود.

در ادامه این آموزش، به‌صورت عمیق‌تر بررسی می‌شود که Fail2ban دقیقا چگونه کار می‌کند و چگونه می‌توان از این دانش برای تغییر یا توسعه رفتار آن در جهت افزایش امنیت سرور استفاده کرد.

نحوه کارکرد Fail2ban

نحوه کارکرد Fail2ban 

هدف اصلی Fail2ban این است که لاگ‌های سرویس‌های مختلف را بررسی کند و الگوهای تکرارشونده در خطاهای ورود را شناسایی کند. این ابزار به‌جای اینکه صرفا به یک خطای منفرد واکنش نشان دهد، رفتار تکراری و مشکوک را در طول زمان تحلیل می‌کند تا بتواند حملات خودکار مانند حملات Brute Force را تشخیص دهد.

زمانی که Fail2ban برای یک سرویس فعال می‌شود، یک فیلتر اختصاصی برای همان سرویس در نظر می‌گیرد. این فیلتر وظیفه دارد خطوط مربوط به خطاهای ورود ناموفق را در لاگ‌ها پیدا کند. برای این کار از عبارات منظم استفاده می‌شود که یک زبان الگو‌سازی برای تشخیص الگوهای متنی هستند. این الگوها در Fail2ban داخل یک متغیر داخلی به نام failregex ذخیره می‌شوند.

به‌صورت پیش‌فرض، Fail2ban برای سرویس‌های رایج مانند SSH یا وب‌سرور، فایل‌های فیلتر آماده دارد. زمانی که یک خط از لاگ با الگوی تعریف‌شده در failregex مطابقت داشته باشد، یک اقدام (Action) از پیش تعریف‌شده اجرا می‌شود. این Action می‌تواند بسته به تنظیمات مدیر سیستم متفاوت باشد، اما به‌طور معمول برای مسدودسازی مهاجم طراحی شده است.

رایج‌ترین اقدام در Fail2ban، مسدود کردن IP مهاجم از طریق تغییر قوانین فایروال محلی است. علاوه بر این، می‌توان Actionها را توسعه داد؛ برای مثال ارسال ایمیل هشدار به مدیر سیستم یا ثبت گزارش امنیتی دقیق‌تر.

به‌صورت پیش‌فرض، زمانی که سه تلاش ناموفق ورود در بازه زمانی ۱۰ دقیقه ثبت شود، Fail2ban وارد عمل می‌شود و IP مربوطه را برای ۱۰ دقیقه مسدود می‌کند. البته این مقادیر کاملا قابل تنظیم هستند و بسته به سطح امنیت مورد نیاز می‌توان آن‌ها را تغییر داد.

در صورتی که از فایروال iptables استفاده شود، Fail2ban هنگام اجرا یک مجموعه جدید از قوانین فایروال به نام زنجیره (Chain) ایجاد می‌کند. سپس یک قانون به زنجیره اصلی اضافه می‌کند که تمام ترافیک ورودی به پورت ۲۲ را به این زنجیره جدید هدایت می‌کند. در داخل این زنجیره، قوانین بررسی و مسدودسازی اعمال می‌شود. زمانی که سرویس Fail2ban متوقف شود، این زنجیره و قوانین مرتبط به‌صورت خودکار حذف می‌شوند.

بررسی تنظیمات سرویس Fail2ban

Fail2ban از طریق مجموعه‌ای از فایل‌های پیکربندی که در مسیر /etc/fail2ban/ قرار دارند مدیریت می‌شود. این ساختار به‌صورت سلسله‌مراتبی طراحی شده تا هم امکان تنظیمات کلی وجود داشته باشد و هم بتوان برای هر سرویس مثل SSH یا وب‌سرور قوانین جداگانه تعریف کرد.

فایل اصلی تنظیمات عمومی، fail2ban.conf است که مسئول تنظیم رفتار کلی سرویس مانند نحوه لاگ‌گیری، و مسیر فایل‌های PID و socket است. با این حال، بخش اصلی تنظیمات در فایل‌هایی انجام می‌شود که به آن‌ها jail گفته می‌شود. Jailها در واقع قوانین اختصاصی برای هر سرویس هستند.

به‌صورت پیش‌فرض، Fail2ban همراه با فایل jail.conf نصب می‌شود. اما این فایل ممکن است در هنگام آپدیت سیستم بازنویسی شود، به همین دلیل بهترین روش این است که یک نسخه از آن با نام jail.local ساخته شود و تمام تغییرات در آن اعمال گردد. این کار باعث می‌شود تنظیمات شما پایدار بماند و با آپدیت‌ها از بین نرود.

برای ویرایش این فایل معمولا از دستور زیر استفاده می‌شود:

sudo nano /etc/fail2ban/jail.local

اگر فایل jail.local وجود نداشته باشد یا خالی باشد، ابتدا باید آن را از روی فایل پیش‌فرض کپی کرد:

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

بخش Default در Jail

در ابتدای فایل jail.local یک بخش مهم به نام [DEFAULT] وجود دارد که تنظیمات پایه و عمومی Fail2ban را مشخص می‌کند. این تنظیمات به‌عنوان مقدار پیش‌فرض برای تمام سرویس‌ها استفاده می‌شوند، مگر اینکه در همان سرویس مقدار متفاوتی تعریف شود.

یک نمونه از این بخش به شکل زیر است:

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 10m
findtime = 10m
maxretry = 3
backend = auto
usedns = warn
destemail = root@localhost
sendername = Fail2Ban
banaction = iptables-multiport
mta = sendmail
protocol = tcp
chain = INPUT
action = %(action_)s

در این بخش، هر پارامتر نقش مشخصی دارد. برای مثال ignoreip تعیین می‌کند کدام IPها از سیستم مسدودسازی مستثنا باشند (معمولا لوکال‌هاست). bantime مدت زمان مسدود شدن یک IP را مشخص می‌کند و findtime بازه زمانی بررسی خطاها را تعیین می‌کند. در کنار آن maxretry مشخص می‌کند چند تلاش ناموفق قبل از اعمال Ban قابل قبول است.

پارامتر backend مشخص می‌کند Fail2ban چگونه لاگ‌ها را مانیتور کند؛ معمولا به‌صورت خودکار بهترین روش موجود را انتخاب می‌کند. گزینه usedns تعیین می‌کند آیا از DNS معکوس برای شناسایی IP استفاده شود یا نه.

همچنین banaction مشخص می‌کند هنگام شناسایی حمله، چه عملی انجام شود، در حالت پیش‌فرض از iptables برای مسدودسازی استفاده می‌شود. پارامترهای protocol و chain نیز نوع ترافیک و زنجیره فایروال مورد استفاده را تعیین می‌کنند.

نکته مهم این است که Fail2ban از جایگزینی متغیرها استفاده می‌کند. یعنی عباراتی مانند %(var_name)s به مقدار واقعی آن متغیر تبدیل می‌شوند. این موضوع باعث می‌شود تنظیمات بسیار انعطاف‌پذیر و قابل توسعه باشند.

بخش‌های اختصاصی (Service Jails)

در پایین بخش [DEFAULT]، تنظیمات مربوط به سرویس‌های خاص قرار می‌گیرند. هر سرویس در یک بلاک جداگانه تعریف می‌شود و می‌تواند تنظیمات پیش‌فرض را تغییر دهد.

ساختار این بخش‌ها معمولا به این شکل است:

[SSH]
enabled     = tru
port        = ssh
filter      = sshd
logpath     = /var/log/auth.log
maxretry    = 6

با فعال کردن گزینه enabled = true، این سرویس تحت نظارت Fail2ban قرار می‌گیرد. در این مثال، سرویس SSH بررسی می‌شود، پورت آن مشخص شده و فایل لاگ مربوط به احراز هویت نیز تعریف شده است.

Fail2ban در این حالت فایل فیلتر sshd را از مسیر filters.d استفاده می‌کند تا خطوط مربوط به خطاهای ورود ناموفق را در لاگ‌ها تشخیص دهد. در صورتی که تعداد خطاها از مقدار maxretry بیشتر شود، IP مهاجم طبق قوانین بخش Default مسدود خواهد شد.

بررسی فایل فیلتر Filter File در Fail2ban

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

فایل Filter در واقع مسئول تحلیل لاگ‌ها و شناسایی الگوهای مخرب است. به زبان ساده، این فایل تعیین می‌کند Fail2ban دنبال چه نوع خطاهایی بگردد. در مقابل، Action وظیفه دارد واکنش امنیتی را اجرا کند، مثل ساختاردهی اولیه فایروال هنگام شروع سرویس، اضافه کردن قوانین مسدود سازی، و در نهایت حذف این قوانین هنگام توقف سرویس.

در مثال مربوط به SSH، فایل فیلتر در مسیر زیر قرار دارد:

sudo nano /etc/fail2ban/filter.d/sshd.conf

این فایل شامل مجموعه‌ای از قوانین برای تشخیص خطاهای ورود ناموفق SSH است. ساختار کلی آن به شکل زیر است:

[INCLUDES]
before = common.conf
[Definition]
_daemon = sshd
failregex = ...
ignoreregex =

در بخش [INCLUDES] مشخص می‌شود که این فایل باید قبل از اجرا، از تنظیمات فایل‌های دیگر نیز استفاده کند. در این مثال، فایل common.conf قبل از این فایل بارگذاری می‌شود تا تنظیمات عمومی و پایه‌ای در دسترس باشند. این کار باعث می‌شود برخی پارامترهای مشترک بین چند سرویس دوباره‌کاری نشوند.

در بخش [Definition] منطق اصلی فیلتر تعریف می‌شود. ابتدا نام سرویس تحت مانیتورینگ با استفاده از _daemon مشخص می‌شود که در اینجا sshd است. سپس بخش اصلی یعنی failregex قرار دارد که شامل مجموعه‌ای از عبارات با قاعده است.

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

در این الگوها از متغیرهایی مانند %(__prefix_line)s استفاده می‌شود. این متغیرها از فایل‌های دیگر (مثل common.conf) مقداردهی می‌شوند و برای هماهنگ کردن ساختار لاگ‌های مختلف سیستم‌عامل به کار می‌روند. به‌عنوان مثال، لاگ‌های SSH معمولا شامل اطلاعاتی مثل تاریخ، نام سرویس و پیام خطا هستند که باید در الگوها لحاظ شوند.

نمونه‌هایی از لاگ‌های واقعی SSH می‌توانند به شکل زیر باشند:

May  6 18:18:52 localhost sshd[3534]: pam_unix(sshd:auth): authentication failure ...
May  6 18:18:54 localhost sshd[3534]: Failed password for invalid user phil from 101.79.130.213
May  6 18:18:54 localhost sshd[3534]: Received disconnect from 101.79.130.213: 11: Bye Bye

در این نمونه‌ها چند نوع خطای متفاوت دیده می‌شود؛ مثل خطای PAM یا تلاش ورود با رمز اشتباه. تمام این حالت‌ها توسط failregex پوشش داده می‌شوند تا هیچ نوع تلاش مشکوکی از دید Fail2ban پنهان نماند.

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

در نهایت باید توجه داشت که ساختار Filter یکی از مهم‌ترین بخش‌های Fail2ban است، زیرا تمام تصمیم‌گیری امنیتی بر اساس همین الگوهای تشخیص انجام می‌شود.

بررسی فایل Action در Fail2ban

حالا نوبت بررسی فایل Action است، فایلی که نقش اجرایی Fail2ban را بر عهده دارد. اگر Filter وظیفه تشخیص رفتار مشکوک را داشته باشد، Action مسئول اجرای واکنش امنیتی است. به‌طور دقیق‌تر، این فایل تعیین می‌کند که در صورت شناسایی یک حمله، چه تغییراتی در فایروال اعمال شود، چگونه IP مهاجم مسدود گردد و در چه زمانی این محدودیت برداشته شود.

در سناریوی SSH، اکشنی که استفاده می‌شود معمولا iptables-multiport است. این فایل در مسیر زیر قرار دارد:

sudo nano /etc/fail2ban/action.d/iptables-multiport.conf

اگر این فایل را بدون توضیحات اضافی بررسی کنیم، ساختار کلی آن به شکل زیر است:

[INCLUDES]
before = iptables-blocktype.conf
[Definition]
actionstart = iptables -N fail2ban-<name>
               iptables -A fail2ban-<name> -j RETURN
               iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
actioncheck = iptables -n -L <chain> | grep -a 'fail2ban-<name>[ \t]'
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype>
actionunban = iptables -D fail2ban-<name> -s <ip> -j <blocktype>
[Init]
name = default
port = ssh
protocol = tcp
chain = INPUT

در ابتدای فایل، بخش [INCLUDES] مشخص می‌کند که قبل از اجرای این Action، فایل دیگری به نام iptables-blocktype.conf نیز بارگذاری شود. این فایل تعیین می‌کند که نوع برخورد با IP مسدود شده چیست، برای مثال آیا بسته‌ها reject شوند یا به‌طور کامل drop شوند.

در ادامه، بخش [Definition] منطق اصلی اجرای Action را مشخص می‌کند. اولین بخش مهم، actionstart است. این قسمت زمانی اجرا می‌شود که سرویس Fail2ban شروع به کار می‌کند. در این مرحله، یک زنجیره جدید در iptables ایجاد می‌شود، سپس یک قانون به آن اضافه می‌شود که در نهایت ترافیک ورودی را به این زنجیره هدایت می‌کند. این ساختار باعث می‌شود کنترل کامل روی ترافیک مشکوک وجود داشته باشد.

نکته مهم اینجاست که مقادیر استفاده‌شده در این دستورات از فایل jail.local گرفته می‌شوند. برای مثال، نام سرویس، پورت، پروتکل و زنجیره همگی به‌صورت داینامیک جایگزین می‌شوند. این جایگزینی با استفاده از ساختاری مانند <param_name> انجام می‌شود که در زمان اجرا با مقدار واقعی پر می‌شود.

بخش actionstop دقیقا برعکس actionstart عمل می‌کند. یعنی زمانی که سرویس Fail2ban متوقف شود، تمام قوانین اضافه‌شده به فایروال حذف می‌شوند تا سیستم به حالت اولیه بازگردد. این طراحی باعث می‌شود تغییرات فایروال دائمی و خارج از کنترل نباشند.

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

بخش اصلی و مهم‌تر، actionban است. این قسمت زمانی اجرا می‌شود که یک IP به‌عنوان مهاجم شناسایی شود (بر اساس مقدار maxretry در jail). در این مرحله، IP موردنظر به زنجیره اختصاصی Fail2ban اضافه می‌شود و عملاً دسترسی آن به سرویس موردنظر مسدود می‌گردد. نوع برخورد با این IP مثلا reject یا drop از طریق پارامتر blocktype تعیین می‌شود.

در مقابل، actionunban مسئول حذف این محدودیت است. پس از پایان زمان تعیین‌شده در bantime، Fail2ban به‌صورت خودکار این قانون را حذف می‌کند و دسترسی IP دوباره آزاد می‌شود.

در نهایت، بخش [Init] تنها نقش مقداردهی اولیه را دارد و در صورتی استفاده می‌شود که برخی پارامترها به‌صورت پیش‌فرض ارسال نشده باشند. این بخش تضمین می‌کند که Action حتی در حالت تنظیمات ناقص نیز قابل اجرا باشد.

نحوه پردازش فایل‌های پیکربندی در Fail2ban برای اعمال Ban

حالا که جزئیات اجزای مختلف Fail2ban را بررسی کردیم، لازم است بدانیم هنگام اجرای این سرویس دقیقا چه اتفاقی در پشت‌صحنه رخ می‌دهد و چگونه از روی فایل‌های تنظیمات، به تصمیم نهایی برای مسدود سازی IP می‌رسد.

بارگذاری اولیه فایل‌های پیکربندی

در اولین مرحله، فایل اصلی fail2ban.conf خوانده می‌شود. این فایل مشخص می‌کند خود سرویس Fail2ban چگونه باید اجرا شود، از جمله نحوه ایجاد فایل‌های لاگ، socket و pid. در واقع این مرحله، زیرساخت اجرایی سرویس را آماده می‌کند.

پس از آن، فایل jail.conf بارگذاری می‌شود که شامل تنظیمات اصلی و پیش‌فرض برای سرویس‌های مختلف است. سپس Fail2ban به‌صورت مرتب و بر اساس ترتیب حروف الفبا، تمام فایل‌های موجود در مسیر jail.d/ با پسوند .conf را نیز بررسی کرده و تنظیمات آن‌ها را به ساختار داخلی خود اضافه می‌کند. در این فرآیند، هر مقداری که در فایل‌های جدید تعریف شده باشد، مقدار قبلی در jail.conf را بازنویسی می‌کند.

در ادامه، فایل jail.local بررسی می‌شود و همین فرآیند تکرار می‌گردد. در نهایت نیز دوباره فایل‌های .local موجود در jail.d/ خوانده می‌شوند. نتیجه این فرآیند، یک تنظیم نهایی و یکپارچه در حافظه Fail2ban است که از ترکیب همه فایل‌ها ساخته شده است.

در این مرحله، Fail2ban تمام بخش‌ها را بررسی می‌کند و به دنبال سرویس‌هایی می‌گردد که مقدار enabled = true دارند. هر سرویسی که فعال باشد وارد چرخه مانیتورینگ می‌شود. اگر برخی پارامترها در آن سرویس تعریف نشده باشند، مقادیر پیش‌فرض از بخش [DEFAULT] استفاده می‌شوند.

تحلیل Actionها و تعیین رفتار هنگام حمله

در مرحله بعد، Fail2ban بررسی می‌کند که برای هر سرویس چه Actionی تعریف شده است. این Action مشخص می‌کند در صورت تشخیص حمله چه اسکریپتی اجرا شود.

اگر Action به‌صورت مستقیم تعریف نشده باشد، سیستم از مقدار پیش‌فرض استفاده می‌کند. Action در واقع شامل نام فایل‌های مربوطه و مجموعه‌ای از پارامترهاست که از تنظیمات سرویس گرفته می‌شوند. معمولا نام سرویس از متغیر ویژه __name__ گرفته می‌شود که همان نام بخش در فایل jail است.

سپس Fail2ban فایل مربوط به Action را در مسیر action.d/ پیدا می‌کند. ابتدا فایل .conf بارگذاری می‌شود و سپس اگر فایل .local وجود داشته باشد، تنظیمات آن روی فایل اصلی اعمال می‌شود. این ساختار باعث می‌شود امکان سفارشی‌سازی بدون تغییر فایل‌های اصلی وجود داشته باشد.

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

تحلیل Filterها و تشخیص رفتار مشکوک

در کنار Action، Fail2ban تنظیمات مربوط به Filter را نیز بررسی می‌کند. این تنظیمات شامل مسیر فایل لاگ‌ها، روش بررسی فایل‌ها backend و مهم‌تر از همه فایل Filter است که مشخص می‌کند چه الگوهایی نشانه حمله هستند.

Fail2ban فایل‌های موجود در filter.d/ را بررسی می‌کند و فایل مناسب با سرویس را پیدا می‌کند. سپس الگوهای تعریف‌شده در آن failregex را روی هر خط جدید لاگ اعمال می‌کند.

هر خط لاگ که با یکی از این الگوها مطابقت داشته باشد، به‌عنوان یک تلاش ناموفق ثبت می‌شود. اگر همان خط با ignoreregex هم مطابقت داشته باشد، نادیده گرفته می‌شود. در غیر این صورت، Fail2ban یک شمارنده برای آن IP افزایش می‌دهد و زمان وقوع را ثبت می‌کند.

با گذشت زمان، بازه مشخص‌شده در findtime بررسی می‌شود و اگر تلاش‌های ناموفق از این بازه خارج شوند، از شمارنده حذف می‌شوند. اما اگر تعداد تلاش‌ها در این بازه به مقدار maxretry برسد، Fail2ban وارد فاز اجرای Action می‌شود.

در این مرحله ابتدا بررسی می‌کند که زیرساخت لازم برای اعمال Ban آماده است یا نه actioncheck، سپس IP مهاجم را از طریق actionban مسدود می‌کند و زمان آن را ثبت می‌کند.

رفع مسدود سازی

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

ویژگی‌های سرویس Fail2ban

ویژگی‌های سرویس Fail2ban

مانیتورینگ لحظه‌ای لاگ‌ها

Fail2ban به‌صورت مداوم لاگ‌های سیستم را بررسی می‌کند تا رفتارهای مشکوک را شناسایی کند. این لاگ‌ها معمولا شامل فایل‌های مربوط به SSH، وب‌سرورها و سرویس‌های ایمیل هستند. هدف این است که هرگونه تلاش غیرعادی برای ورود در همان لحظه تشخیص داده شود.

تشخیص الگوهای حمله

این ابزار با استفاده از الگوهای مشخص و Regex رفتارهای تکراری و غیرعادی را تحلیل می‌کند. برای مثال، چندین تلاش ناموفق ورود در بازه زمانی کوتاه به‌عنوان یک نشانه مهم از حمله در نظر گرفته می‌شود.

مسدودسازی خودکار IP

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

ساختار Jail برای سرویس‌ها

Fail2ban برای هر سرویس یک Jail جداگانه تعریف می‌کند. این یعنی قوانین امنیتی SSH، وب‌سرور یا FTP به‌صورت مستقل تنظیم می‌شوند و هر سرویس رفتار امنیتی مخصوص به خود را دارد.

کنترل تعداد تلاش‌های ناموفق

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

مدیریت زمان بن شدن

مدت زمان مسدودسازی کاملاً قابل تنظیم است. این زمان می‌تواند کوتاه‌مدت، بلندمدت یا حتی دائمی باشد و بسته به سطح حساسیت سیستم تعیین می‌شود.

پشتیبانی از سرویس‌های مختلف

Fail2ban فقط محدود به SSH نیست و از سرویس‌های متنوعی مانند وب‌سرورها، FTP، ایمیل و کنترل‌پنل‌های هاستینگ نیز پشتیبانی می‌کند.

کاهش حملات Brute Force در لحظه

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

قابلیت توسعه و سفارشی‌سازی

Fail2ban کاملا قابل توسعه است و می‌توان برای آن فیلترهای اختصاصی، قوانین جدید و Jailهای سفارشی برای سرویس‌های خاص تعریف کرد.

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

آیا Brute Force غیرقانونی است؟

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

Brute Force چقدر طول می‌کشد؟

مدت زمان این حمله کاملاً به پیچیدگی رمز عبور، قدرت پردازشی مهاجم و وجود محدودیت‌های امنیتی مثل Rate Limit یا Fail2ban بستگی دارد. برای رمزهای قوی عملاً غیرعملی می‌شود.

آیا رمز ۸ کاراکتری امن است؟

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

آیا تغییر پورت SSH کافی است؟

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

Fail2ban چگونه کار می‌کند؟

Fail2ban لاگ سرویس‌ها را بررسی می‌کند و اگر تعداد مشخصی تلاش ناموفق در بازه زمانی کوتاه تشخیص دهد، IP مهاجم را از طریق فایروال (مثل iptables) مسدود می‌کند.

آیا VPN جلوی Brute Force را می‌گیرد؟

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

آیا MFA حمله را متوقف می‌کند؟

بله، در بسیاری از سناریوها MFA (احراز هویت چندمرحله‌ای) عملاً Brute Force را بی‌اثر می‌کند چون حتی با داشتن رمز عبور، ورود بدون عامل دوم ممکن نیست.

نتیحه گیری

در نهایت، Fail2ban را می‌توان به‌عنوان یک لایه دفاعی هوشمند روی سرویس‌های لینوکسی در نظر گرفت که با تکیه بر تحلیل لاگ‌ها، الگوهای تلاش‌های ناموفق ورود را شناسایی می‌کند و در صورت رسیدن به یک آستانه مشخص، به‌صورت خودکار اقدام به مسدودسازی IP مهاجم می‌کند. این ابزار برخلاف فایروال‌های سنتی که صرفا بر اساس پورت و IP تصمیم‌گیری می‌کنند، رفتار کاربر یا بات را در طول زمان بررسی می‌کند و همین موضوع باعث می‌شود در برابر حملات Brute Force و اسکن‌های خودکار اینترنتی بسیار مؤثرتر عمل کند.

در عمل، Fail2ban با ترکیب چند مفهوم کلیدی مثل فیلترهای مبتنی بر Regular Expression، پایش مداوم لاگ‌ها، و اعمال Rule روی فایروال‌هایی مانند iptables، یک چرخه کامل از «تشخیص تا پاسخ» را پیاده‌سازی می‌کند. این چرخه باعث می‌شود سرور بدون نیاز به دخالت دستی، به تهدیدها واکنش نشان دهد.

با این حال، باید در نظر داشت که Fail2ban یک راه‌حل کامل و مستقل برای امنیت نیست، بلکه بخشی از یک معماری دفاعی چندلایه است. استفاده از SSH Key، محدود سازی دسترسی‌ها، سخت‌سازی تنظیمات SSH و پیاده‌سازی Firewall Rules همچنان ضروری هستند. Fail2ban زمانی بیشترین کارایی را دارد که در کنار سایر مکانیزم‌های امنیتی استفاده شود، نه به‌عنوان تنها خط دفاعی.

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

امتیاز شما به این مطلب
دیدن نظرات
small

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دو + 11 =

عضویت در خبرنامه مبین هاست
مطالب کدام دسته‌بندی‌ها برای شما جذاب‌تر است؟

آنچه در مقاله می‌خوانید

مقالات مرتبط
خدمات مبین هاست