هکرها اکثراً روشهای مختلف و ترکیبی برای دستبر به سرورها مورد استفاده قرار میدهند. یکی از این حملات و اتکهای مرسوم که سرورها را مورد تاثیر قرار میدهد "حملات پسورد" هستند. برای مقابله با این نوع اتک ابزار fail2ban میتواند راهکاری موثر برای جلوگیری از چنین حملاتی باشد. در " حملات پسورد " از روشهای مختلفی برای حمله مورد نظر استفاده میکنند که برخی از آنها را تشریح میکنیم.
دراین حمله هکر با استفاده از ابزارهای رایج و موجود، تمام ترکیبات مختلف رمز را بررسی میکند.این نوع حمله از ساده ترین حملات به شماره میرود که به سبب سادگی تقریبا تمام هکرهای تازه واردحتما از آن بهرهمند میشوند.
در این حملات همانطور که از نام حمله مشخص است، هکر دارای دیکشنری از رمزهای رایج و مختلف است. در دیکشنری با توجه به روانشناسی صورت گرفته هکرها، هزاران رمز با ترکیبهای مختلف وجود دارد که هکر به کمک ابزاهایی به صورت اتومات تمام رمزهای موجود در فایل مربوطه را به سمت سرورها لاگین میکند.
به عنوان مثال ما میتوانیم fail2ban خود را طوری کانفیگ کنیم که اگر شخصی 3 بار رمز ورود به سرور را برای لاگین از طریقssh اشتباه زد، آی پی شخص خطا کار و مشکوک به صورت کامل بسته شود و حتی آن شخص قادر به پینگ کردن سرور نباشد.
به عبارتی دیگر شخص خطا کار با هر بار وارد کردن رمز اشتباه برای لاگین به سرور، لاگی از این (تلاش)Try در محلی مشخص در سرور لینوکس ما ذخیره میکند و در صورتی که این لاگ به 3 بار برسد با توجه به بررسی fail2ban (بررسی fail2ban در محل ذخیره شدن لاگها ) و معرفی آن به فایروال یا همان iptables آی پی شخص خطا کار بسته خواهد شد.
این ابزار در ابتدا لاگهای ثبت شده در سرور لینوکس را بررسی میکند و اگر لاگهای مشکوک و دارای error بیش از حد تعیین شده باشند،ip source مشکوک را به فایروال یا iptables معرفی و نهایتا در iptables سیستم عامل،rule جدیدی جهت اعمال محدودیت و بستن آی پی اعمال میکند.
نکته مهم : در ابزار fail2ban، این که چه لاگهایی و مربوط به چه سرویسی مورد برسی قرار بگیرند و اینکه اگر لاگی مشکوک مشاهده شد، fail2ban چه نوع برخوردی با هکر داشته باشد و مدت زمانی که آی پی خطاکار از طریق iptablesمورد محدودیت قرار میگیرد را خودمان باید در فایلهای سرویس fail2ban مشخص کنیم که مراحل آن به صورت کامل توضیح داده خواهد شد.
کانفیگ فایلهای مربوطه در مسیر زیر وجود دارند .
user command: وارد پوشه مربوط به تنظیمات fail2ban شدیم و لیست محتویات پوشه را مشاهده کردیم.
cd /etc/fail2ban/
ls
نام کانفیگ فایل اصلی fail2ban فایل jail.conf است.
از فایل مربوطه کپی با نام دلخواه خود ایجاد میکنیم تا تنظیمات مورد نیاز را در فایل ساخته شده ایجاد کنیم.
user command: از فایل jail.conf کپی جدیدی ایجاد کردیم و نام آن را jail.local گذاشتیم.
cp /etc/fail2ban/jail.conf /etc/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 آنها را وارد کردیم.
ابزار فوق با بررسی لاگها در سرور میتواند حمله را تشخیص دهد ، تشخیص حمله با بررسی لاگها به کمک 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ها میتوان جهت افزایش امنیت هرگونه سرویس متن باز بهرهمند شد.