زمانی که بحث از مدیریت یک سرور لینوکسی به میان میآید، افزایش امنیت سرورتان باید یکی از اولویت های مهم شما باشد. با مرور log های سرورتان شما ممکن است اغلب حملات brute force متفاوت، همچنین web floods و exploit seeking و موارد دیگری را پیدا کنید.
با نرم افزارهای جلوگیری از نفوذ همچون fail2ban شما میتوانید لاگ های سرورتان را بررسی کنید و قوانین اضافه iptables را به منظور block کردن ip آدرس های مشکل ساز اضافه کنید.
در این مقاله ما به شما نحوه نصب fail2ban و راه اندازی تنظیمات پایه برای محافظت کردن از سیستم لینوکس تان به منظور جلوگیری از حملات brute force را آموزش خواهیم داد.
تجهیزات مورد نیاز :
Fail2ban به زبان پایتون نوشته شده و تنها پکیج مورد نیاز، نصب بودن Pythone روی سیستم تان میباشد.
نحوه نصب Fail2ban روی سیستم های لینوکسی
نصب fail2ban نسبتا آسان است.
نصب Fail2ban در CentOS/RHEL 7
ابتدا پکیج های خود را آپدیت کنید، ریپازیتوری Epel را فعال کنید و همانند زیر fail2ban را نصب کنید.
نصب Fail2ban در Debian/Ubuntu
ابتدا پکیج های خود را آپدیت کنید و همانند زیر fail2ban را نصب کنید.
به صورت اختیاری اگر شما بخواهید پشتیبانی ایمیل را (برای notification ایمیل) فعال کنید شما میتوانید sendmail را نصب کنید.
برای فعال کردن fail2ban و sendmail از دستورات زیر استفاده کنید.
نحوه کانفیگ کردن Fail2ban در سیستم های لینوکسی
به صورت پیش فرض، fail2ban از فایل های .conf موجود در مسیر /etc/fail2ban/ استفاده میکند که در ابتدا فراخوانی میشوند. به هر حال این فایل ها میتوانند به واسطه فایل های .local که در همان مسیر قرار گرفته اند، نادیده گرفته شوند.
بنابراین فایل .local نیاز ندارد که همه تنظیمات را از فایل .conf استفاده کند، و در حقیقت فایل هایی هستند که شما میتوانید آنها را نادیده بگیرید. تغییرات باید در فایل های .local اعمال شوند و نه در فایل های .conf که این امر موجب میشود که این تغییرات هنگام آپگردید کردن پکت fail2ban، جایگزین (overwrite) نشوند.
با توجه به هدف این پست ما محتوای فایل fail2ban.conf موجود را به فایل fail2ban.local کپی خواهیم کرد.
اکنون شما میتوانید در فایل .local با استفاده از ادیتور متنی دلخواه خود، تغییرات را اعمال کنید. مقادیری که شما میتوانید ویرایش کنید به قرار زیر هستند.
loglevel : این سطحی از جزئیات است که باید log شود و آپشن های موجود عبارتند از :
logtarget : اکشن های مربوط به log در فایل خاص میباشد. مقدار پیش فرض /var/log/fail2ban.log میباشد. شما به هر حال میتوانید آنرا به موارد زیر تغییر دهید.
socket : دایرکتوری که فایل socket درون آن قرار خواهد گرفت.
pidfile : موقعیت pidfile
کانفیگ فایل jail.local در Fail2ban
یکی از مهمترین فایل ها در fail2ban فایل jail.conf میباشد که jail های شما را تعریف میکند. این فایل در حقیقت مکانیست که شما سرویس هایی که باید fail2ban باید برای آنها فعال باشد را اضافه میکنید.
همانطور که قبلا اشاره کردیم فایل های .conf میتوانند در طول آپگرید ها تغییر کنند. بنابراین شما باید یک فایل jail.local ایجاد کنید و تغییرات خود را در آن اعمال کنید.
راه دیگر برای انجام این کار کپی کردن فایل .conf میباشد.
در مواردی که شما از CentOS یا Fedora استفاده میکنید، شما نیاز خواهید داشت که backend را در فایل jail.local از auto به systemd تغییر دهید.
اگر شما از Ubuntu/Debian استفاده میکنید، نیاز نیست که این تغییر را انجام دهید. علاوه بر آن از systemd نیز استفاده میکند.
فایل jail به صورت پیش فرض برای دبیان/اوبونتو SSH را فعال خواهد کرد، اما در CentOS فعال نخواهد شد. اگر شما بخواهید آنرا در CentOS فعال کنید به آسانی خط زیر را در فایل /etc/fail2ban/jail.local تغییر دهید.
دفعات Ban و Retry
شما میتوانید روالی را کانفیگ کنید که بعد از آن ip آدرس ها block شود. برای این هدف fail2ban از bantime, findtime و maxretry استفاده میکند.
دسترسی دادن به IP آدرس های معتبر
البته شما قطعا نیاز خواهید داشت ip آدرس های خاصی را whitelist کنید. برای کانفیگ این چنین ip آدرس هایی فایل /etc/fail2ban/jail.local را با ادیتور متنی خود باز کنید و خط زیر را از کامنت خارج کنید.
سپس شما میتوانید ip آدرس هایی که میخواهید ignore کنید، را قرار دهید. ip آدرس ها باید با استفاده از فاصله یا کاما از هم جدا شوند.
هشدار های Email
اگر شما بخواهید که بر اساس هر event ی هشدارهای ایمیلی دریافت کنید شما باید تنظیمات زیر را در فایل /etc/fail2ban/jail.local اعمال کنید.
mta پیش فرض (mail transfer agent) برابر با sendmail میباشد.
به منظور دریافت هشدارهای ایمیل شما همچنین نیاز خواهید داشت که تنظیمات action را از :
به شکل زیر تغییر دهید :
%(action_mw)s : هاست را ban خواهد کرد و یک ایمیل با گزارش کامل ارسال میشود.
%(action_mwl)s : هاست را ban خواهد کرد، اطلاعات whois و همه اطلاعات مرتبط را از log فایل فراهم میآورد.
تنظیمات اضافه Fail2ban Jail
با توجه به آنچه که در آپشن های تنظیماتی پایه مشاهده کردیم اگر بخواهیم یک jail را کانفیگ کنیم نیاز خواهیم داشت که آنرا در فایل jail.conf فعال کنیم. syntax این کار نسبتا آسان است.
در مثال بالا شما باید jail واقعی خود را با jail_to_enable جایگزین کنید (به طور مثال سرویس sshd). در فایل jail.local مقادیر زیر برای سرویس ssh از قبل تعریف شده هستند.
شما میتوانید فیلتری که به شما کمک خواهد کرد تشخیص دهید، آیا یک خط درون لاگ، یک مورد fail میباشد یا خیر را فعال کنید. مقدار در حقیقت مرجعی به یک فایل است که نام آن شامل نام سرویس بعلاوه پسوند .conf میباشد. به طور مثال /etc/fail2ban/filter.d/sshd.conf
syntax به شرح زیر میباشد.
برای مثال :
شما میتوانید فیلتر های موجود را در دایرکتوری زیر مرور کنید.
استفاده از Fail2ban-client
به همراه fail2ban کلاینتی هم موجود است که میتوان برای بررسی و تغییر تنظیمات جاری استفاده کرد. از آنجایی که این مورد آپشن های زیادی را فراهم میآورد شما میتوانید صفحه manual انرا با استفاده از دستور زیر مشاهده کنید.
دراینجا شما یکسری دستورهای پایه را مشاهده میکنید برای بررسی وضعیت موجود fail2ban یا همچنین برای jail خاصی شما میتوانید از دستور زیر استفاده کنید.
نتیجه چیزی شبیه به زیر خواهد بود.
برای اینکه تنها jail را بررسی کنید دستور زیر را اجرا کنید.
در تصویر زیر شما مشاهده خواهید کرد که چندین لاگین fail شده دارید در نتیجه fail2ban توانسته ip آدرس هایی که من از طریق آنها تلاش به اتصال به سرور داشتم را block کند.
همچنین توصیه میشود مطالعه کنید :
5 نمونه از بهترین روش ها برای امنیت و نگهداری سرورهای لینوکس
فعال کردن احراز هویت دو مرحله ای هنگام لاگین SSH (توسط Google Authenticator)
20 ترفند برای امنیت سرورهای CentOS - بخش 1
چگونه امنیت سیستم عامل لینوکس خود را برقرار کنیم
نحوه مقابله با باج افزار ها
نحوه نصب FreeIPA (سرویس احراز هویت متمرکز لینوکسی) در CentOS 7
نتیجه
fail2ban یک سیستم جلوگیری از نفوذ عالی و به خوبی داکیومنت شده میباشد که امنیت بالایی را به سیستم لینوکسی شما فراهم میآورد. نصب و راه اندازی آن مقداری زمان میبرد اما بعد از اینکه شما با آن کاملا آشنا شدید به راحتی میتوانید آنرا تغییر و rule ها را گسترش دهید.
با نرم افزارهای جلوگیری از نفوذ همچون fail2ban شما میتوانید لاگ های سرورتان را بررسی کنید و قوانین اضافه iptables را به منظور block کردن ip آدرس های مشکل ساز اضافه کنید.
در این مقاله ما به شما نحوه نصب fail2ban و راه اندازی تنظیمات پایه برای محافظت کردن از سیستم لینوکس تان به منظور جلوگیری از حملات brute force را آموزش خواهیم داد.
تجهیزات مورد نیاز :
Fail2ban به زبان پایتون نوشته شده و تنها پکیج مورد نیاز، نصب بودن Pythone روی سیستم تان میباشد.
- Fail2ban branch 0.9.x نیاز به Python 2.6 یا 3.6 به بالا دارد.
- Fail2ban branch 0.8.x نیاز به Python 2.4 به بالا دارد.
- نیاز به دسترسی root به سیستم تان.
- iptables یا showewall و sendmail به صورت اختیاری
نحوه نصب Fail2ban روی سیستم های لینوکسی
نصب fail2ban نسبتا آسان است.
نصب Fail2ban در CentOS/RHEL 7
ابتدا پکیج های خود را آپدیت کنید، ریپازیتوری Epel را فعال کنید و همانند زیر fail2ban را نصب کنید.
کد PHP:
# yum update
# yum install epel-release
# yum install fail2ban
نصب Fail2ban در Debian/Ubuntu
ابتدا پکیج های خود را آپدیت کنید و همانند زیر fail2ban را نصب کنید.
کد PHP:
# apt-get update && apt-get upgrade -y
# apt-get install fail2ban
کد PHP:
# yum install sendmail [On CentOS/RHEL]
# apt-get install sendmail-bin sendmail [On Debian/Ubuntu]
کد PHP:
# systemctl start fail2ban
# systemctl enable fail2ban
# systemctl start sendmail
# systemctl enable sendmail
نحوه کانفیگ کردن Fail2ban در سیستم های لینوکسی
به صورت پیش فرض، fail2ban از فایل های .conf موجود در مسیر /etc/fail2ban/ استفاده میکند که در ابتدا فراخوانی میشوند. به هر حال این فایل ها میتوانند به واسطه فایل های .local که در همان مسیر قرار گرفته اند، نادیده گرفته شوند.
بنابراین فایل .local نیاز ندارد که همه تنظیمات را از فایل .conf استفاده کند، و در حقیقت فایل هایی هستند که شما میتوانید آنها را نادیده بگیرید. تغییرات باید در فایل های .local اعمال شوند و نه در فایل های .conf که این امر موجب میشود که این تغییرات هنگام آپگردید کردن پکت fail2ban، جایگزین (overwrite) نشوند.
با توجه به هدف این پست ما محتوای فایل fail2ban.conf موجود را به فایل fail2ban.local کپی خواهیم کرد.
کد PHP:
# cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
loglevel : این سطحی از جزئیات است که باید log شود و آپشن های موجود عبارتند از :
- CRITICAL
- ERROR
- WARNING
- NOTICE
- INFO
- DEBUG
logtarget : اکشن های مربوط به log در فایل خاص میباشد. مقدار پیش فرض /var/log/fail2ban.log میباشد. شما به هر حال میتوانید آنرا به موارد زیر تغییر دهید.
- STDOUT : خروجی هر گونه دیتا
- STDERR : خروجی هر گونه خطا
- SYSLOG : پیغام های log
- File : خروجی در یک فایل
socket : دایرکتوری که فایل socket درون آن قرار خواهد گرفت.
pidfile : موقعیت pidfile
کانفیگ فایل jail.local در Fail2ban
یکی از مهمترین فایل ها در fail2ban فایل jail.conf میباشد که jail های شما را تعریف میکند. این فایل در حقیقت مکانیست که شما سرویس هایی که باید fail2ban باید برای آنها فعال باشد را اضافه میکنید.
همانطور که قبلا اشاره کردیم فایل های .conf میتوانند در طول آپگرید ها تغییر کنند. بنابراین شما باید یک فایل jail.local ایجاد کنید و تغییرات خود را در آن اعمال کنید.
راه دیگر برای انجام این کار کپی کردن فایل .conf میباشد.
کد PHP:
# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
اگر شما از Ubuntu/Debian استفاده میکنید، نیاز نیست که این تغییر را انجام دهید. علاوه بر آن از systemd نیز استفاده میکند.
فایل jail به صورت پیش فرض برای دبیان/اوبونتو SSH را فعال خواهد کرد، اما در CentOS فعال نخواهد شد. اگر شما بخواهید آنرا در CentOS فعال کنید به آسانی خط زیر را در فایل /etc/fail2ban/jail.local تغییر دهید.
کد PHP:
[sshd]
enabled = true
دفعات Ban و Retry
شما میتوانید روالی را کانفیگ کنید که بعد از آن ip آدرس ها block شود. برای این هدف fail2ban از bantime, findtime و maxretry استفاده میکند.
- bantime : تعداد ثانیه هایی که یک ip آدرس ban خواهد ماند. (به صورت پیش فرض 10 دقیقه میباشد)
- findtime : میزان زمان بین login کردن قبل از اینکه هاست ban شود. (به صورت پیش فرض 10 دقیقه میباشد). به عبارت دیگر اگر fail2ban تعریف شده باشد که یک ip آدرس را بعد از 3 تلاش برای لاگین block کند باید در مدت findtime انجام شود. (10 دقیقه)
- maxretry : تعداد تلاش ها که قبل از اینکه یک ban اعمال شود صورت میگیرد.
دسترسی دادن به IP آدرس های معتبر
البته شما قطعا نیاز خواهید داشت ip آدرس های خاصی را whitelist کنید. برای کانفیگ این چنین ip آدرس هایی فایل /etc/fail2ban/jail.local را با ادیتور متنی خود باز کنید و خط زیر را از کامنت خارج کنید.
کد PHP:
ignoreip = 127.0.0.1/8 ::1
هشدار های Email
اگر شما بخواهید که بر اساس هر event ی هشدارهای ایمیلی دریافت کنید شما باید تنظیمات زیر را در فایل /etc/fail2ban/jail.local اعمال کنید.
- destemail : آدرس ایمیلی که شما میخواهید notification ها را دریافت کنید.
- sendername : ارسال کننده ای که شما به هنگام دریافت ایمیل مشاهده خواهید کرد.
- sender : آدرس ایمیلی که fail2ban از آن ایمیل ارسال خواهد کرد.
mta پیش فرض (mail transfer agent) برابر با sendmail میباشد.
به منظور دریافت هشدارهای ایمیل شما همچنین نیاز خواهید داشت که تنظیمات action را از :
کد PHP:
Action = %(action_)s
کد PHP:
action = %(action_mw)s
action = %(action_mwl)s
%(action_mwl)s : هاست را ban خواهد کرد، اطلاعات whois و همه اطلاعات مرتبط را از log فایل فراهم میآورد.
تنظیمات اضافه Fail2ban Jail
با توجه به آنچه که در آپشن های تنظیماتی پایه مشاهده کردیم اگر بخواهیم یک jail را کانفیگ کنیم نیاز خواهیم داشت که آنرا در فایل jail.conf فعال کنیم. syntax این کار نسبتا آسان است.
کد PHP:
[jail_to_enable]
. . .
enabled = true
کد PHP:
[sshd]
port = ssh
logpath = %(sshd_log)s
syntax به شرح زیر میباشد.
کد PHP:
filter = service
کد PHP:
filter = sshd
شما میتوانید فیلتر های موجود را در دایرکتوری زیر مرور کنید.
کد PHP:
/etc/fail2ban/filter.d/
استفاده از Fail2ban-client
به همراه fail2ban کلاینتی هم موجود است که میتوان برای بررسی و تغییر تنظیمات جاری استفاده کرد. از آنجایی که این مورد آپشن های زیادی را فراهم میآورد شما میتوانید صفحه manual انرا با استفاده از دستور زیر مشاهده کنید.
کد PHP:
# man fail2ban-client
کد PHP:
# fail2ban-client status
برای اینکه تنها jail را بررسی کنید دستور زیر را اجرا کنید.
کد PHP:
# fail2ban-client status sshd
همچنین توصیه میشود مطالعه کنید :
5 نمونه از بهترین روش ها برای امنیت و نگهداری سرورهای لینوکس
فعال کردن احراز هویت دو مرحله ای هنگام لاگین SSH (توسط Google Authenticator)
20 ترفند برای امنیت سرورهای CentOS - بخش 1
چگونه امنیت سیستم عامل لینوکس خود را برقرار کنیم
نحوه مقابله با باج افزار ها
نحوه نصب FreeIPA (سرویس احراز هویت متمرکز لینوکسی) در CentOS 7
نتیجه
fail2ban یک سیستم جلوگیری از نفوذ عالی و به خوبی داکیومنت شده میباشد که امنیت بالایی را به سیستم لینوکسی شما فراهم میآورد. نصب و راه اندازی آن مقداری زمان میبرد اما بعد از اینکه شما با آن کاملا آشنا شدید به راحتی میتوانید آنرا تغییر و rule ها را گسترش دهید.