اگر سرویس SSH روی سرور شما از اینترنت در دسترس باشد، تقریباً همیشه هدف تلاشهای مکرر برای حدسزدن رمز عبور، اسکن پورت و حملات Brute Force قرار میگیرد. حتی اگر ورود با رمز عبور را غیرفعال کرده باشید و فقط با کلید SSH وارد شوید، باز هم این تلاشها میتوانند لاگهای سیستم را شلوغ کنند و بخشی از سطح حمله را باز نگه دارند.
در چنین شرایطی، Fail2Ban یکی از سادهترین و مؤثرترین ابزارها برای افزایش امنیت سرور لینوکسی است. این ابزار لاگ سرویسها را بررسی میکند و اگر یک آدرس IP چند بار به شکل مشکوک و ناموفق تلاش به ورود داشته باشد، آن IP را بهصورت خودکار برای مدت مشخصی مسدود میکند.
در این آموزش، روش نصب و پیکربندی Fail2Ban را برای Ubuntu 24.04 بهصورت کامل، بازنویسیشده و مناسب انتشار در وردپرس یاد میگیرید. علاوه بر مراحل اصلی، نکات مهمی مثل تنظیم jail.local، فعالسازی Jail مربوط به SSH، تست Ban شدن IP، مشاهده لاگها، رفع خطاهای رایج و چند توصیه امنیتی تکمیلی را هم پوشش دادهایم.
اگر هنوز زیرساخت خود را آماده نکردهاید، میتوانید سرویسهای سرور مجازی و سرور اختصاصی پویاسازان را بررسی کنید. همچنین برای تکمیل امنیت سرور، مطالعه مقاله نحوه باز کردن پورت در فایروال اوبونتو و هاست لینوکس چیست؟ هم پیشنهاد میشود.
فهرست مطالب
- Fail2Ban چیست و چگونه کار میکند؟
- پیشنیازهای نصب Fail2Ban در اوبونتو 24.04
- مرحله 1: نصب Fail2Ban
- مرحله 2: پیکربندی Fail2Ban
- تنظیمات مهم بخش DEFAULT
- فعالسازی Jail مربوط به SSH
- مرحله 3: فعالسازی و راهاندازی سرویس
- مرحله 4: تست عملکرد Fail2Ban
- دستورات کاربردی Fail2Ban
- عیبیابی Fail2Ban در Ubuntu 24.04
- نکات امنیتی تکمیلی برای SSH
- سوالات متداول
- جمعبندی
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 = 10m3) تعداد تلاش مجاز با 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/245) تنظیم ایمیل اعلانها
اگر بخواهید هنگام 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 sshdUnban کردن یک IP
sudo fail2ban-client set sshd unbanip 203.0.113.20Ban کردن دستی یک 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 = true3) 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 را نیز بررسی کنید.
