SSH یک روش علمی قابل توسعه و پایدار برای اتصال به سرور ابری است، بنابراین تصمیم گرفتیم عنوان ای مقاله را محافظت از SSH به وسیله Fail2ban انتخاب کنیم.
با توسعه و گسترش استاندارد های رمزگذاری جدید، می توان از آن برای تولید کلیدهای جدید SSH استفاده کرد و اطمینان حاصل کرد که پروتکل اصلی ایمن باقی می ماند.
با این حال هیچ پروتکل یا پشته نرم افزاری امن، امنیت کامل ندارد! زیرا SSH در سراسر اینترنت مستقر است، یعنی سطح حمله یا بردار حمله برای SSH قابل پیش بینی است و می تواند به آن دسترسی پیدا کند.
هر سرویسی در شبکه می تواند یک هدف بالقوه باشد، بنابراین اگر گزارش های SSH خود را که روی هر سرور به طور گسترده هدف قرار می گیرد بررسی کنیم.
تلاش های مکرر و سیستماتیک برای ورود به سیستم را خواهیم دید که نشان دهنده حملات Brute Force توسط کاربران و ربات ها به طور یکسان است.
برای اینکه احتمال موفقیت حملات به صفر برسد، می توانیم برخی بهینه سازی ها را در سرویس SSH خود انجام دهیم، غیر فعال کردن تایید اعتبار رمز عبور به نفع کلیدهای SSH، نمونه ای از بهینه سازی ها می باشد.
کسانی که استقرارهای تولید در مقیاس گسترده برایشان غیر قابل قبول است، معمولا یک VPN مانند Wireguard را در مقابل سرویس SSH خود اجرا می کنند.
به طوری که اتصال مستقیم به پورت 22 SSH از اینترنت خارجی و جدا از نرم افزار اضافی و Gateway ها غیر ممکن است.
این Solution های VPN کاملاً قابل اعتماد هستند ولی می توانند برخی از اتوماسیون ها یا سایر Hook های کوچک نرم افزار را بشکنند.
علاوه بر تضمین راه اندازی کامل VPN، می توانیم ابزاری به نام Fail2ban را به کار بگیریم، همچنین Fail2ban می تواند با ایجاد قوانینی به طور خودکار پیکربندی فایروال ما را تغییر دهد.
و به دلیل آن که IP های خاصی را که تعداد تلاش ناموفق آن ها برای ورود به سیستم از حد مجاز عبور کرده مسدود کند.
همچنین Fail2ban به طور قابل توجهی حملات Brute Force را کاهش می دهد، در این مقاله به طور کامل به نحوه نصب و استفاده محافظت از SSH به وسیله Fail2ban در دبیان 11 خواهیم پرداخت.
پس می توانید برای محافظت از SSH به وسیله Fail2ban در سرویس خود تا پایان این مقاله از سری وبلاگ های آذرسیس همراه ما باشید.
فهرست مطالب
آموزش محافظت از SSH به وسیله fail2ban
قبل از شروع آموزش محافظت از SSH به وسیله Fail2ban موردی باید پیش نیازهای نصب Fail2ban که شامل موارد زیر هستند را داشته باشید:
- یک سرور دبیان 11 و یک کاربر non-root با امتیازات sudo.
- مورد دوم اختیاری است و در آن می توانیم از طریق یک سرور دیگر به سرور اول خود متصل شده و از آن برای آزمایش ممنوعیت عمدی استفاده کنیم.
در ادامه برای اعمال محافظت از SSH به وسیله Fail2ban مراحل زیر را طی کنید:
مرحله اول- نصب Fail2ban در دبیان 11
در اولین مرحله از محافظت از SSH به وسیله Fail2ban در Debian، باید Fail2ban در بخش نرم افزار های دبیان وجود دارد.
در ابتدای کار به عنوان یک کابر non-root، برای به روز رسانی فهرست بسته، نصب Fail2ban و محافظت از SSH به وسیله Fail2ban دستورات زیر را دنبال می کنیم.
sudo apt update sudo apt install fail2ban
Fail2ban پس از نصب به طور خودکار یک سرویس پس زمینه راه اندازی می کند که با استفاده از دستور systemctl می توانیم وضعیت آن را بررسی کنیم.
systemctl status fail2ban.service
می توانیم به وسیله تنظیمات پیش فرض Fail2ban به استفاده Fail2ban در محافظت از SSH به وسیله Fail2ban ادامه دهیم.
مرحله دوم- پیکربندی Fail2ban
مرحله بعد در محافظت از SSH به وسیله Fail2ban، باید توجه کنیم که سرویس Fail2ban فایل های پیکربندی خود را در پوشه etc/fail2ban/ نگهداری می کند، یک فایل با خط دستوری پیش فرض به نام Jail.conf وجود دارد.
اکنون به آن دایرکتوری می رویم و از 20 خط اول آن فایل با استفاده از دستور head-20 پرینت می گیریم:
cd /etc/fail2ban head -20 jail.conf
از آن جایی که fail2ban به طور خودکار به روز رسانی می شود، فایل Jail.conf هم به صورت دوره ای به روز رسانی می شود و بدون هیچ گونه تغییری به عنوان منبع تنظیمات پیش فرض به کار گرفته می شود.
با کپی کردن مراحل زیر می توانیم Jail.conf را ایجاد کنیم:
sudo cp jail.conf jail.local
اکنون می توانیم پیکر بندی خود را تغییر دهیم و فایل را در nano یا ویرایشگر مورد علاقه خود باز کنیم:
sudo nano jail.local
در حالی که فایل را پیمایش می کنیم، برخی از گزینه هایی که ممکن است بخواهیم به روز رسانی کنیم را نیز در مقاله محافظت از SSH به وسیله Fail2ban مورد بررسی قرار می دهیم.
تنظیمات واقع زیر بخش [DEFAULT] نزدیک به بالای فایل، در تمام سرویس های پشتیبانی شده توسط Fail2ban اعمال می شود.
در جای دیگری از این فایل، تیتر هایی برای [sshd] و سایر سرویس هایی که شامل تنظیمات خاص سرویس هستند، در بالای تنظیمات پیش فرض اعمال می شود.
/etc/fail2ban/jail.local
[DEFAULT] bantime = 10m
پارامتر Bantime مدت زمان محدودیت یک کلاینت را در زمان شناسایی نادرست تعیین می کند، به طور پیش فرض این زمان روی 10 دقیقه تنظیم شده، اما در عرض چند ثانیه اندازه گیری می شود.
/etc/fail2ban/jail.local
[DEFAULT] findtime = 10m maxretry = 5
دو پارامتر بعدی Findtime و Maxretry هستند، این دو باهم کار می کنند تا شرایط شناسایی کاربر غیر قانونی و ممنوعیت آن را فراهم کنند.
متغیر Maxretry جهت تنظیم تعداد تلاش هایی که باید کلاینت در بازه زمانی تعیین شده توسط Findtime، قبل از ممنوع شدن شناسایی کند، به کار برده می شود.
با تنظیمات پیش فرض، سرویس Fail2ban کلاینتی را ممنوع می کند که در بازه زمانی 10 دقیقه ای 5 بار تلاش ناموفق دارد.
/etc/fail2ban/jail.local
[DEFAULT] destemail = root@localhost sender = root@<fq-hostname> mta = sendmail
اگر هنگام انجام اقدامات Fail2ban نیاز به دریافت هشدار هایی از ایمیل داشته باشیم، باید تنظیمات Destemailt، نام فرستنده و Mta را ارزیابی کنیم.
پارامتر Destemail آدرس ایمیلی را تعیین می کند که باید پیام های ممنوعیت را دریافت کند، نام فرستنده مقدار فیلد “From” را در ایمیل تعیین می کند.
پارامتر Mta برای پیکربندی نوع سرویس ارسال ایمیل استفاده می شود که به طور پیش فرض روی Sendmail تنظیم شده است. ولی ممکن است بخواهیم از Postfix یا راه دیگری استفاده کنیم.
/etc/fail2ban/jail.local
[DEFAULT] action = $(action_)s
این پارامتر اقدامی را که Fail2ban در هنگام اعمال ممنوعیت انجام می دهد، پیکربندی می کند، مقدار _Action کمی قبل از این پارامتر در فایل تعریف شده است.
اگر پیکربندی فایروال خود را به روز رسانی کنید، ترافیک میزبان متخلف را تا زمان سپری شدن زمان به صورت پیش فرض ممنوعیت را رد می کند.
اسکریپت های _Action دیگری نیز به صورت پیش فرض ارائه شده است، اما می توانیم اسکریپت های (_Action)$ را جایگزین کنیم:
/etc/fail2ban/jail.local
ban & send an e-mail with whois report to the destemail. action_mw = %(action_)s %(mta)s-whois[sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"] ban & send an e-mail with whois report and relevant log lines to the destemail. action_mwl = %(action_)s %(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"] See the IMPORTANT note in action.d/xarf-login-attack for when to use this action ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines to the destemail. action_xarf = %(action_)s xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath="%(logpath)s", port="%(port)s"] ban IP on CloudFlare & send an e-mail with whois report and relevant log lines to the destemail. action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"] %(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
تنظیمات jail
در قدم بعدی بخشی از فایل پیکربندی که با سرویس های فردی سر و کار دارد، توسط هدر هایی مانند [sshd] کنترل می شود.
هر یک از این بخش ها باید به صورت جداگانه با افزودن یک خط دستوری enabled = true در زیر هدر به همراه تنظیمات دیگر آن فعال شود.
/etc/fail2ban/jail.local
[jail_to_enable] enabled = true
به طور پیش فرض سرویس SSH فعال و سایر سرویس ها غیر فعال است، تنظیمات دیگری که در اینجا آمده در واقع یک فیلتر تعیین کننده است.
یعنی این فیلتر تعیین می کند که آیا یک خط گزارش احراز هویت، ناموفق است یا خیر! مقدار فیلتر در واقع ارجاع به فایلی است که در دایرکتوری etc/fail2ban/filter.d/ قرار دارد و تنها پسوند conf. آن حذف شده است.
این فایل ها حاوی Regular Expressions یا به عبارتی تجزیه و تحلیل متن می باشد و تعیین می کند که آیا یک خط در log تلاشی برای احراز هویت موفق است یا خیر؟
برای ادامه مراحل در محافظت از SSH به وسیله Fail2ban، با بررسی دایرکتوری، ما می توانیم نوع فیلتر های موجود را ببینیم:
ls /etc/fail2ban/filter.d
اگر فایلی مشاهده کردیم که به نظر مربوط به سرویس مورد استفاده ماست باید آن را با یک ویرایشگر متن باز کنیم، اکثر فایل ها به خوبی کامنت گذاری شده اند.
ما باید حداقل بتوانیم بگوییم که اسکریپت برای محافظت در برابر چه نوع شرایطی طراحی شده است، اکثر این فیلتر ها دارای بخش های مناسب غیر فعال در Jail.confj هستند.
در صورت تمایل می توانیم آن را در فایل Jail.local فعال کنیم، برای مثال فرض می کنیم در حال سرویس دهی به یک وب سایت با استفاده از Nginx هستیم.
متوجه خواهید شد که بخشی از فایل که با رمز عبور محافظت می شود، در اثر تلاش برای ورود به سیستم به هم ریخته است.
در ادامه مراحل محافظت از SSH به وسیله Fail2ban، می توانیم به Fail2ban مراجعه کنیم تا از فایل nginx-http-auth.conf برای بررسی این شرایط در فایل var/log/nginx/error.log/ استفاده کند.
در حقیقت این تنظیمات قبلاً در بخشی به نام [nginx-http-auth] در فایل etc/fail2ban/jail.conf/ ذخیره شده است، تنها کاری که باید انجام دهیم اضافه کردن پارامتر فعال شده می باشد.
/etc/fail2ban/jail.local
[nginx-http-auth] enabled = true
پس از اتمام ویرایش پس از ذخیره کردن فایل، آن را می بندیم و در صورت تمایل به ایجاد تغییر در فایل می توانیم در Fail2ban سرویس Systemctll را مجدداً راه اندازی کنیم:
sudo systemctl restart fail2ban
در مرحله بعد Fail2ban را در عمل نشان خواهیم داد.
مرحله سوم- تست سیاست های ممنوعیت در Fail2ban
در ادامه محافظت از SSH به وسیله Fail2ban می توانیم از طریق یک سرور دیگر قوانین را با ممنوع کردن سرور دوم آزمایش کنیم.
پس از ورود به سرور دوم باید سعی کنیم SSH را به سرور Fail2ban وارد کنیم، می توانیم با استفاده از یک نام که وجود ندارد وصل شویم:
ssh blah@your_server
چندین مرتبه کاراکتر های تصادفی را در اعلان رمز عبور وارد می کنیم، خطاهایی که دریافت می کنیم باید Permission Denied به Connection Refused تغییر کند.
این تغییر نشان می دهد که سرور دوم ما از سرور Fail2ban مسدود شده است، در سرور Fail2ban خود، با بررسی خروجی iptables قادر به مشاهده قوانین جدید خواهیم بود.
iptables یک دستور برای تعامل با پورت های سطح پایین و قوانین فایروال روی سرور است:
sudo iptables -S
در آخرین مرحله از محافظت از SSH به وسیله Fail2ban، برای مشاهده قوانین اضافه شده توسط Fail2ban از دستور زیر استفاده کنید:
sudo iptables -S | grep f2b
آذرسیس تنها ارائه دهنده سرور اختصاصی و سرور مجازی از 60 لوکیشن مختلف در دنیا همراه با کانفیگ رایگان پا به پای مشاغل نوپا و پیشرفته است.
سخن آخر
همان طور که مشاهده کردید اگر بخواهیم یک راه مفید برای محافظت از هر نوع سرویسی که از احراز هویت استفاده می کند را معرفی کنیم، بی شک Fail2ban خواهد بود.
همچنین با توجه به تمام توضیحات درج شده در مقاله محافظت از SSH به وسیله Fail2ban، اکنون باید بتوانید برخی از سیاست های ممنوعیت را برای سرویس خود پیکربندی کنید.
علاوه بر آن راه کارها و ترفند هایی که برای اطمینان از عملکرد صحیح آن در مقاله محافظت از SSH به وسیله Fail2ban ارائه شده است، قطعاً خیال شما را از بابت امنیت سرویس تان را راحت می کند.
از اینکه ما را در عنوان محافظت از SSH به وسیله Fail2ban از سری وبلاگ های آموزشی آذرسیس همراهی کردید متشکریم، در صورت تمایل به ارتباط با کارشناسان آذرسیس از طریق ارسال تیکت اقدام کنید.
در محافظت از SSH به وسیله Fail2ban، Fail2ban چگونه کار می کند؟
در مسیر محافظت از SSH به وسیله Fail2ban، Fail2ban با بررسی گزارشات فعالیت های مخرب، تلاش برای ورود های ناموفق و مسدود سازی آن ها امنیت سیستم را به ارمغان می آورد.