تخفیف برای اولین خرید سرویس ابری با کد تخفیف: Welcome2XaaS

آشنائی با Fail2ban

آشنایی با رایانش ابری
آشنائی با Fail2ban

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

آشنائی با fail2ban  و دلایل استفاده از آن:


هکرها اکثراً روشهای مختلف و ترکیبی برای دستبر به سرور‌ها مورد استفاده قرار میدهند. یکی از این حملات و اتک‌های مرسوم که سرور‌ها  را مورد تاثیر قرار می‌دهد "حملات پسورد" هستند. برای مقابله با این نوع اتک ابزار fail2ban می‌تواند راهکاری موثر برای جلوگیری از چنین حملاتی باشد. در " حملات پسورد " از روش‌های مختلفی برای  حمله مورد نظر استفاده می‌کنند که برخی از آنها را تشریح می‌کنیم.


Brute Force


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

 
مروری بر عملکرد fail2ban


به عنوان مثال ما می‌توانیم fail2ban  خود را طوری کانفیگ کنیم که اگر شخصی 3 بار رمز ورود به سرور را برای لاگین از طریقssh  اشتباه زد، آی پی شخص خطا کار و مشکوک به صورت کامل بسته شود و حتی آن شخص قادر به پینگ کردن سرور نباشد. 
به عبارتی دیگر شخص خطا کار با  هر بار وارد کردن رمز اشتباه برای لاگین به سرور، لاگی از این (تلاش)Try  در محلی مشخص در سرور لینوکس ما ذخیره می‌کند و در صورتی که این لاگ به 3 بار برسد با توجه به بررسی fail2ban  (بررسی fail2ban در محل ذخیره شدن لاگ‌ها ) و معرفی آن به فایروال یا همان iptables  آی پی شخص خطا کار بسته خواهد شد.


می‌توان  عملکردfail2ban  را اینگونه تشریح کرد :


این ابزار  در ابتدا لاگ‌های ثبت شده در سرور لینوکس را بررسی می‌کند و اگر لاگ‌های مشکوک و دارای error  بیش از حد تعیین شده باشند،ip  source  مشکوک را به فایروال یا iptables  معرفی و نهایتا در  iptables  سیستم عامل،rule  جدیدی جهت اعمال محدودیت و بستن آی پی اعمال می‌کند.
نکته مهم : در ابزار fail2ban، این که چه لاگ‌هایی و مربوط به چه سرویسی مورد برسی قرار بگیرند و اینکه اگر لاگی مشکوک مشاهده شد، fail2ban چه نوع برخوردی با هکر داشته باشد و مدت زمانی که آی پی خطاکار از طریق  iptablesمورد محدودیت قرار می‌گیرد را خودمان باید در فایل‌های سرویس fail2ban مشخص کنیم که  مراحل آن به صورت کامل توضیح داده خواهد شد.


کانفیگ فایل مربوط به fail2ban


کانفیگ فایل‌های مربوطه در مسیر زیر وجود دارند . 
user command:  وارد پوشه مربوط به تنظیمات fail2ban شدیم و لیست محتویات پوشه را مشاهده کردیم.
cd /etc/fail2ban/
ls
نام کانفیگ فایل اصلی fail2ban فایل jail.conf است. 
از فایل مربوطه کپی با نام دلخواه خود ایجاد می‌کنیم تا تنظیمات مورد نیاز را در فایل ساخته شده ایجاد کنیم.
 user command: از فایل jail.conf کپی جدیدی ایجاد کردیم و نام آن را jail.local  گذاشتیم. 
cp /etc/fail2ban/jail.conf /etc/fail2ban


معرفی و کاربرد فایل‌ها و تعریفsectionهای مختلف در fail2ban


فایل jail.local  را باز می‌کنیم و مقادیر مربوط به کانفیگ fail2ban را در آن را شرح می‌دهیم. 
(نمونه زیر محتویات مربوط به کانفیگ فایل fail2ban  است که برخی از ساختار‌های مهم آن را تشریح می‌کنیم)
ignoreip = 127.0.0.1/8
bantime = 600
findtime = 600
maxretry = 3
backend = auto
usedns = warn
destemail = root@localhost
sendername = Fail2Ban
banaction = iptables-multiport
mta = sendmail
protocol = tcp


یادآوری:


نکته اولی که ما برای کانفیگ کردن fail2ban آموختیم این بود که تمام تعاریف و محدودیت‌ها برای آی پی هکر، ابتدا داخل فایل jail.local باید تعریف شود.
Ignoreip: وقتی بخواهیم به سرویس fail2ban  بگوییم زمانی که از آی‌پی خاصی به اشتباه چندین با رمز ورد به سرور با SSH  اشتباه وارد شد محدودیتی برای آن آی پی در نظر نگیرد از قسمت فوق استفاده می‌کنیم. درواقع آی پی که می‌خواهیم محدودیتی برایش اعمال نشود را جلوی آن وارد می‌کنیم .( آی پی که در این قسمت وارد خواهیم کرد از برسی‌های و اعمال محدودیت fail2ban باز خواهد ماند.)
( کاربرد آن زمانی است که شما سیستمی‌دارید که فقط خودتان از آن استفاده می‌کنید و اطمینان دارید که مورد attack قرار نخواهد گرفت، شما آی پی سیستم خود را در آن قسمت وارد می‌کنید تا اگر چندین بار رمزی را اشتباه زدید مورد محدودیت fail2ban قرار نگیرید.)
Bantime: در این قسمت مدت زمان اعمال محدودیت را به ثانیه باید وارد کنیم. یعنی به طور مثال اگر آی‌پی مشکوکی شناسائی شد روی آی پی محدودیت اعمال خواهد شد. در این قسمت مشخص خواهیم کرد که محدودیت اعمال شده روی آی پی خطا کار چند ثانیه باشد.
Findtime: در این قسمت اگر مقدار آن را برابر 600 قرار بدهیم معنی آن این خواهد بود که اگر شخصی در طول 600 ثانیه n بار خطا کرد مورد محدودیت قرار خواهد گرفت که اینn  بار خطا کردن با maxtry  مشخص می‌شود که توضیح خواهیم داد. 
Maxretry: در این قسمت مشخص می‌کنیم که هر شخصی چند بار می‌تواند برای ورود به سرور رمز را اشتباه وارد کند، مثلا اوقتی جلوی آن عدد 3 باشد یعنی این که اگر 3 بار رمزی در طول مدت FINDTIME اشتباه وارد شد، مورد محدودیت تعیین شده قرار خواهد گرفت.
Protocol: در این قسمت مشخص می‌کنیم که محدودیت روی آی پی هکر برای چه پروتکل‌هایی اعمال شود. در صورت حذف این قسمت به صورت پیش فرضiptables  هم روی tcp  و هم udp  اعمال محدودیت خواهد کرد.
Action:در این قسمت مشخص می‌کنیم که با آی پی‌های مشکوک چه برخوردی شود .
به عنوان مثال اگر مقدارش به صورت زیر باشد:
iptables-allports[name=nagios, protocol=all]
محدودیت روی همه پورت‌های و همه پروتکل‌های آی پی متخلف اعمال خواهد شد.
حال می‌خواهم نحوه کانفیگ کردن در fail2ban راشرح کنیم.
در ساختار مثال زیر،جهت جلوگیری از حمله‌های DDOS  از طریق SSH  تعاریف جدیدی در فایل jail.local قرار داده شده است. 
[sshd]
enabled   = true
maxretry  = 3
findtime  = 1d
bantime   = 4w
ignoreip  = 127.0.0.1/8 23.34.45.56

با قرار دادن تنظیمات مثال فوق مشخص شده است که اگر در طول یک روز (24 ساعت) شخصی به سرور SSH  زده و 3 بار رمز را اشتباه وارد کند ، آی پی شخص خطا کار به مدت 4 هفته بلاک خواهد شد.
در قسمت ignoreip نیز برخی آی پی‌ها را که ترجیح می‌دادیم کانفیگ‌های امنیتی وارد شده برای آنها اعمال نشود را وارد کردیم. (اگر با source آی پی‌های مشخص شده دفعات مختلفی رمز SSH سرور اشتباه زده شود، آی پی‌ها بلاک نخواهند شد چون در قسمت ignoreip آنها را وارد کردیم. 


مکانیزم تشخیص حمله در fail2ban


ابزار فوق با بررسی لاگ‌ها در سرور می‌تواند حمله را تشخیص دهد ، تشخیص حمله با بررسی لاگ‌ها به کمک regular expression‌ها مشخص می‌شود. در حقیقت تنظیمات fail2ban نمونه‌ای از لاگ‌های مشکوک وجود دارد که آن نمونه‌های متنی را باregular expression ‌ها تشخیص و شناسایی می‌کند. 
با توجه به الگوی مختلف مشکوک در لاگ فایل‌ها، fail2ban در داخل لاگ‌ها به دنبال جملات و کلمات خاصی می‌گردد. در صورت match شدن آن الگو با لاگ‌های موجود، تشخیص موارد مشکوک را می‌دهد. 
نکته : fail2ban فقط برای امنیت مربوط به SSH مورد استفاده قرار نمی‌گیرد. از این ابزار متن باز می‌توان برای برقراری امنیت کلیه سرویس‌های متن باز لینوکسی استفاده کرد. به عنوان مثال در الگوی زیر جهت برقراری امنیت و جلوگیری از حملات در سرور‌های voip  ازنوع asterisk  می‌توان بهره مند شد.

[asterisk-iptables]
enabled  = true
filter   = asterisk
action   = iptables-allports[name=ASTERISK, protocol=all]
logpath  = /var/log/asterisk/messages
maxretry = 3
bantime = 259200
در مثال بالا با وارد کردن 3 بار رمز اشتباه اتصال به سرورVoip ، آی پی متخلف بلاک خواهد شد. 
در این مثال محل لاگ‌های سرورvoip  که می‌بایست مورد بررسی قرار گرفته شود نیز به صورت دقیق مشخص شده و حتی در قسمت action مشخص شده است که روی آی پی هکر برای همه protocol ‌ها  محدودیت اعمال شود.
سرویس‌های مربوط به database را نیز می‌توان با تعریف section‌های مختلف نیز ازfail2ban برای امنیت بهره مند کرد. در مثال زیر نیز نمونه section تعریف شده برای دیتابیس‌های mariadb  می‌باشد.
[mysqld-auth]
enabled = true
filter   = mysqld-auth
port     = 3306
maxretry = 3
bantime = 600
logpath  = /var/log/mariadb/mariadb.log
نکته مهم :  بعد از اضافه کردن section  و تغییرات در کانفیگ فایل مربوطه حتما می‌بایست سرویسFail2ban را restart کرد.
user command:  سرویس fail2ban  را restart  می‌کند.
systemctl restart fail2ban
جمع بندی: از این ابزار امنیتی با توسعه و قرار دادن کانفیگ‌های مناسب در section‌ها می‌توان جهت افزایش امنیت هرگونه سرویس متن باز  بهره‌مند شد.

...
...