آموزش Fail2ban: راهنمای کامل نصب و پیکربندی برای امنسازی سرور
در مدیریت سرور، امنیت یک فرآیند بیپایان است. یکی از رایجترین و در عین حال آزاردهندهترین تهدیدها، حملات Brute-force است؛ جایی که رباتهای خودکار به صورت شبانهروزی تلاش میکنند با حدس زدن هزاران ترکیب نام کاربری و رمز عبور، به سرویسهای حیاتی شما مانند SSH، FTP یا پنل مدیریت وبسایت نفوذ کنند. Fail2Ban یک ابزار متن-باز و فوقالعاده کارآمد در حوزه پیشگیری از نفوذ (IPS) است. این ابزار با نظارت بر فایلهای لاگ (Log) سرور، آیپیهای مشکوک را شناسایی و به طور خودکار مسدود میکند. این مقاله یک راهنمای کامل و عمیق برای تسلط بر Fail2Ban است، از نصب اولیه گرفته تا ساخت فیلترها و Jailهای سفارشی برای امنسازی سرور مجازی آمریکا یا هر سرور لینوکسی دیگر.
مفاهیم اصلی Fail2Ban: Fail2Ban چگونه کار میکند؟
برای استفاده حرفهای از Fail2Ban، ابتدا باید با اجزای اصلی آن آشنا شویم:
- فیلتر (Filter): یک فایل حاوی الگوهای متنی (Regular Expressions یا Regex) است. وظیفه فیلتر این است که به Fail2Ban بگوید دنبال چه نوع خطوطی در فایلهای لاگ بگردد. برای مثال، یک فیلتر SSH به دنبال خطوطی میگردد که حاوی عبارت “Failed password for” باشند. فیلترها در مسیر
/etc/fail2ban/filter.d/
قرار دارند. - اقدام (Action): دستوری است که پس از شناسایی یک IP متخلف اجرا میشود. معروفترین اقدام، مسدود کردن IP با استفاده از فایروال (مانند iptables) است. اقدامات دیگر میتوانند شامل ارسال ایمیل هشدار به مدیر سرور باشند. فایلهای Action در مسیر
/etc/fail2ban/action.d/
قرار دارند. - زندان (Jail): قلب تپنده Fail2Ban است. یک Jail، فیلتر و اقدام را به هم متصل میکند. در تنظیمات Jail مشخص میکنید که کدام فیلتر باید روی کدام فایل لاگ اعمال شود و در صورت رسیدن به حد نصاب خطا، کدام اقدام اجرا شود.
بخش اول: نصب و راهاندازی اولیه
نصب Fail2Ban روی اکثر توزیعهای لینوکس استاندارد است.
نصب در Debian/Ubuntu
sudo apt-get update
sudo apt-get install fail2ban -y
نصب در CentOS/RHEL/Fedora
sudo yum install epel-release -y
sudo yum install fail2ban -y
پس از نصب، سرویس را فعال و اجرا کنید:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
برای بررسی وضعیت آن، از دستور sudo systemctl status fail2ban
استفاده کنید.
بخش دوم: پیکربندی اصلی
پیکربندی Fail2Ban از طریق فایلهای متنی انجام میشود. فایل اصلی تنظیمات /etc/fail2ban/jail.conf
است. هشدار: هرگز این فایل را مستقیما ویرایش نکنید! این فایل با هر آپدیت نرمافزار بازنویسی میشود. به جای آن، ما یک فایل محلی به نام jail.local
ایجاد میکنیم و تمام تنظیمات سفارشی خود را در آن قرار میدهیم. تنظیمات شما در jail.local
بر تنظیمات پیشفرض اولویت خواهد داشت.
برای شروع، یک کپی از فایل اصلی ایجاد کنید:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
حالا فایل jail.local
را با یک ویرایشگر باز کنید:
sudo nano /etc/fail2ban/jail.local
تنظیمات سراسری در بخش [DEFAULT]
این تنظیمات به صورت پیشفرض روی تمام Jailها اعمال میشوند:
ignoreip
: مهمترین بخش! لیستی از IPهایی که هرگز نباید مسدود شوند. IP استاتیک خودتان، IP دفتر کار و آدرس localhost را حتماً اینجا وارد کنید. IPها با فاصله یا کاما از هم جدا میشوند.
ignoreip = 127.0.0.1/8 ::1 192.168.1.100 YOUR_STATIC_IP
bantime
: مدت زمان مسدود بودن یک IP. میتوانید از پسوندهایm
(دقیقه)،h
(ساعت) وd
(روز) استفاده کنید. مقدار-1
به معنای مسدودیت دائمی است (با احتیاط استفاده شود). مثال:bantime = 24h
findtime
: بازه زمانی که خطاها در آن شمرده میشوند. مثال:findtime = 10m
maxretry
: تعداد خطاهای مجاز در بازهfindtime
قبل از مسدود شدن. مثال:maxretry = 3
destemail
: آدرس ایمیلی که گزارشها به آن ارسال میشود.action
: اقدام پیشفرض. سه نوع اصلی وجود دارد:%(action_)s
: فقط IP را مسدود میکند (ساده).%(action_mw)s
: IP را مسدود کرده و یک ایمیل گزارش (Whois) برای شما ارسال میکند.%(action_mwl)s
: IP را مسدود کرده، ایمیل گزارش میفرستد و خطوط مربوطه از فایل لاگ را نیز در ایمیل ضمیمه میکند (بسیار مفید).
برای شروع، پیشنهاد میشود از
action = %(action_mwl)s
استفاده کنید.
بخش سوم: فعالسازی Jailهای آماده
Fail2Ban با مجموعهای از Jailهای از پیش تعریفشده برای سرویسهای محبوب ارائه میشود. برای فعال کردن هر کدام، کافیست به بخش مربوط به آن در jail.local
رفته و خط enabled = true
را زیر نام آن اضافه کنید.
مثال 1: امنسازی SSH (ضروری)
[sshd]
enabled = true
# اگر پورت SSH را تغییر دادهاید، اینجا مشخص کنید
# port = 2222
# میتوانید تنظیمات پیشفرض را بازنویسی کنید
# maxretry = 3
# bantime = 48h
مثال 2: امنسازی وبسرور Nginx
[nginx-http-auth]
enabled = true
[nginx-botsearch]
enabled = true
مثال 3: امنسازی سرور ایمیل Postfix
[postfix]
enabled = true
بخش چهارم: آموزش ساخت Jail سفارشی (قدرت واقعی Fail2Ban)
شما میتوانید برای هر اپلیکیشنی که لاگ تولید میکند، یک Jail سفارشی بسازید. در ادامه دو مثال بسیار کاربردی را بررسی میکنیم.
مثال کاربردی اول: محافظت از صفحه لاگین وردپرس
در این مثال، یک Jail برای محافظت از صفحه لاگین وردپرس (wp-login.php
) در برابر حملات Brute-force میسازیم.
مرحله 1: ایجاد فایل فیلتر (Filter)
یک فایل جدید در مسیر /etc/fail2ban/filter.d/
ایجاد کنید:
sudo nano /etc/fail2ban/filter.d/wordpress-auth.conf
محتوای زیر را در آن قرار دهید:
[Definition]
failregex = ^<HOST> .* "POST /wp-login.php HTTP/.*" 200
ignoreregex =
توضیح failregex
: این الگو به دنبال خطوطی در لاگ میگردد که از IP مهاجم (<HOST>
) یک درخواست POST
به /wp-login.php
ارسال شده و پاسخ وبسرور 200 OK
بوده است. پاسخ 200 یعنی صفحه لاگین نمایش داده شده، اما لاگین موفق نبوده است.
مرحله 2: تعریف Jail در jail.local
Jail را در انتهای فایل /etc/fail2ban/jail.local
تعریف میکنیم:
[wordpress-auth]
enabled = true
port = http,https
filter = wordpress-auth
logpath = /var/log/nginx/access.log # مسیر لاگ دسترسی وبسرور شما
maxretry = 5
bantime = 24h
مثال کاربردی دوم: مسدود کردن اسکنرهای مخرب (Bad Bot Blocker)
این یک Jail بسیار مفید برای هر وبسروری است. رباتها دائما در حال اسکن کردن آدرسهای اینترنتی برای یافتن فایلهای حساس (مانند .env
) یا نرمافزارهای آسیبپذیر (مانند phpMyAdmin
) هستند. این درخواستها معمولاً خطای 404 (پیدا نشد) ایجاد میکنند.
مرحله 1: ایجاد فایل فیلتر
یک فیلتر جدید برای شناسایی این درخواستهای مخرب ایجاد میکنیم:
sudo nano /etc/fail2ban/filter.d/apache-badbots.conf
محتوای زیر را در آن کپی کنید. این فیلتر به دنبال درخواستهای رایج اسکنرها میگردد:
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD) .*(/phpmyadmin/|/pma/|/admin/|/wp-admin/|/xmlrpc.php|/\.git/|/\.env|/\.well-known/|/autodiscover/).* HTTP/.*" (404|403|400) .*$
ignoreregex =
توضیح failregex
: این الگو به دنبال درخواستهایی از نوع GET, POST یا HEAD میگردد که شامل مسیرهای حساس هستند و با خطای 404، 403 (Forbidden) یا 400 (Bad Request) مواجه شدهاند.
مرحله 2: تست فیلتر (بسیار مهم)
قبل از فعالسازی، همیشه فیلتر خود را تست کنید. فایل لاگ وبسرور و فیلتر جدید را به دستور زیر بدهید:
sudo fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/apache-badbots.conf
خروجی باید تعدادی خط منطبق (Matched) را به شما نشان دهد. اگر نتیجه صفر بود، یا رباتی شما را اسکن نکرده یا الگوی شما با فرمت لاگ شما همخوانی ندارد.
مرحله 3: تعریف Jail در jail.local
حالا Jail مربوط به این فیلتر را به فایل jail.local
اضافه کنید:
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/access.log # برای Nginx مسیر /var/log/nginx/access.log است
maxretry = 2
findtime = 1m
bantime = 1w
توضیح تنظیمات: ما در اینجا بسیار سختگیر هستیم. اگر یک IP در عرض ۱ دقیقه فقط ۲ بار یکی از این آدرسهای مشکوک را درخواست کند، به مدت یک هفته (1w) مسدود میشود. یک کاربر عادی هرگز چنین رفتاری ندارد.
مرحله 4: اعمال تغییرات
پس از تعریف Jail جدید، تنظیمات Fail2Ban را دوباره بارگذاری کنید:
sudo fail2ban-client reload
بخش پنجم: مدیریت و مانیتورینگ با fail2ban-client
برای مدیریت روزمره Fail2Ban از این دستورات استفاده کنید:
- بررسی وضعیت کلی و لیست Jailهای فعال:
sudo fail2ban-client status
- مشاهده وضعیت یک Jail خاص و لیست IPهای مسدود شده:
sudo fail2ban-client status apache-badbots
- آزاد کردن یک IP (Unban): اگر به اشتباه یک IP (مثلاً IP خودتان) مسدود شد.
sudo fail2ban-client set sshd unbanip 1.2.3.4
- مسدود کردن دستی یک IP (Ban):
sudo fail2ban-client set sshd banip 1.2.3.4
- بررسی لاگ خود Fail2Ban برای خطاها:
sudo tail -f /var/log/fail2ban.log
Fail2ban GUI: آیا رابط گرافیکی وجود دارد؟
Fail2Ban به صورت ذاتی یک ابزار خط فرمان است. قدرت و انعطافپذیری آن در همین سادگی نهفته است. اگرچه پروژههای غیررسمی برای ایجاد رابط وب برای آن وجود دارد و برخی پنلهای مدیریت سرور (مانند Plesk) آن را به صورت گرافیکی ارائه میدهند، اما برای مدیریت حرفهای و درک کامل عملکرد، یادگیری دستورات خط فرمان ضروری و کارآمدتر است.
استفاده صحیح از Fail2Ban دیگر یک انتخاب نیست، بلکه یک ضرورت امنیتی برای هر سرور متصل به اینترنت است. این ابزار به تنهایی میتواند جلوی بخش عظیمی از حملات خودکار و کمهوش را بگیرد و منابع سرور شما را از هدر رفتن برای پاسخ به این درخواستهای مخرب، حفظ کند. با دنبال کردن این راهنمای جامع، شما نه تنها میتوانید سرور خود را امن کنید، بلکه میتوانید با ساخت فیلترها و Jailهای سفارشی، این سپر دفاعی را برای هر اپلیکیشن دلخواهی، از یک vps ارزان شخصی تا زیرساختهای بزرگ، پیادهسازی کنید.
فهرست تیترها