اکثر سرورهای لینوکس از پورت 22 برای ورود به کسنول سطر فرمان سرور که ssh نامیده می شود استفاده میکنند. این پورت یک پورت شناخته شده است، بنابراین، اغلب به این پورت حمله می شود. Fail2ban یک نرم افزار است که فایل های log را برای تلاش های ورود به سیستم در بصورت زنده اسکن می کند و آیپی مهاجمان را با فایروال امنیتی firewalld یا iptables ممنوع و مسدود می کند. Fail2ban دسترسی های ناخواسته یا تلاش های امنیتی را به سرور در زمان تنظیم فرمان تنظیم می کند و آدرس های آی پی را نشان می دهد که نشانه هایی از حملات فرهنگ لغت (brute force) را نشان می دهد. این برنامه در پس زمینه کار می کند و به طور مداوم فایل های log را برای الگوهای ورود غیرمعمول و تلاش های شکست امنیتی اسکن می کند. در واقع مفید ترین برنامه برای کنترل حملات brute force در لینوکس میباشد
در این آموزش نصب و پیکربندی Fail2Ban را با firewalld در CentOS 7 را برای شما عزیزان تقدیم میکنیم
نصب Fail2Ban
برای نصب Fail2Ban در CentOS 7، ابتدا بایستی EPEL (Packages for Enterprise Linux) را نصب کنیم. EPEL شامل بسته های اضافی برای تمام نسخه های CentOS است، یکی از این بسته های اضافی Fail2Ban است.
دستورات زیر باید پس از تعویض به کاربر ریشه یا همان root اجرا کنید:
yum install epel-release
yum install fail2ban fail2ban-systemd
اگر SELinux نصب شده باشد، باید سیاست های امنیتی SELinux را به روزرسانی کنید:
yum update -y selinux-policy*
پیکربندی تنظیمات برای Fail2Ban
پس از نصب باید ابتدا کانفیگ پیش فرض نرم افزار را لغو کنیم و کانفیگ اختصاصی روی این اسکریپت انجام دهیم برای این کار ابتدا فایل کانفیگ را جایگزین می نماییم
یک کپی از فایل jail.conf را ایجاد کنید و آن را با نام jail.local ذخیره کنید:
cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
فایل jail.local را برای ویرایش در Nano با دستور زیر باز کنید.
nano /etc/fail2ban/jail.local
این فایل ممکن است شامل بسیاری از خطوط و کدهای مختلفی باشد که برای جلوگیری از ممنوعیت یک یا چند آدرس آی پی، مدت زمان تعیین شده، و غیره اجرا می شود. یک فایل پیکربندی معمول jail حاوی خطوط زیر است.
[DEFAULT] # # MISCELLANEOUS OPTIONS # # "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not # ban a host which matches an address in this list. Several addresses can be # defined using space separator. ignoreip = 127.0.0.1/8 # External command that will take an tagged arguments to ignore, e.g. <ip>, # and return true if the IP is to be ignored. False otherwise. # # ignorecommand = /path/to/command <ip> ignorecommand = # "bantime" is the number of seconds that a host is banned. bantime = 600 # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 600 # "maxretry" is the number of failures before a host get banned. maxretry = 5
Ignoreip برای تنظیم لیستی از IP ها که ممنوع و مسدود خواهد شد استفاده می شود. لیست آدرس های IP باید با جدا کننده در فایل وارد شود. این پارامتر برای تنظیم آدرس آی پی شخصی شما (اگر به سرور از یک IP ثابت دسترسی پیدا کنید). میباشد
پارامتر Bantime برای تعیین مدت زمان ثانیه که میزبان یا آیپی خاطی باید ممنوع و مسدود شود استفاده می شود.
Findtime پارامتری است که برای بررسی اینکه آیا میزبان باید ممنوع شود یا خیر، استفاده می شود.
Maxretry پارامتر مورد استفاده برای تنظیم تعداد مجاز برای تلاش ورود نا موفق میباشد که در واقع تعیین میکنیم پس از چند تلاش آیپی خاطی مسدود شود
برای محافظت از SSH یک فایل Jail اضافه کنید
یک فایل جدید با ویرایشگر Nano ایجاد کنید
nano /etc/fail2ban/jail.d/sshd.local
به فایل فوق، خطوط زیر را اضافه کنید.
[sshd] enabled = true port = ssh #action = firewallcmd-ipset logpath = %(sshd_log)s maxretry = 5 bantime = 86400
پارامتر enabled به منظور ارائه حفاظت و امنیت بیشتر به حالت true تنظیم می شود ، برای غیر فعال کردن حفاظت، آن را به false میتوانید تغییر دهید.. پارامتر filter فایل پیکربندی sshd را که در مسیر /etc/fail2ban/filter.d/sshd.conf قرار دارد، بررسی می کند.
پارامتر Action برای استخراج آدرس IP استفاده می شود که باید با استفاده از فیلتر موجود از /etc/fail2ban/action.d/firewallcmd-ipset.conf ممنوع شود.
پارامتر port می تواند به یک مقدار جدید مانند پورت = 1212 تغییر کند، البته زمانی که پورت 22 است نیازی به تعییر این پارامتر ندارید
Logpath مسیری را که فایل log را ذخیره می کند فراهم می کند. این فایل لاگ توسط Fail2Ban اسکن شده است.
Maxretry برای تنظیم حداکثر حد ورودی های ناموفق ورودی استفاده می شود.
پارامتر Bantime برای تعیین مدت زمان ثانیه که میزبان باید ممنوع شود استفاده می شود.
اجرا کردن سرویس Fail2Ban
خوب در ابتدا اگر شما هنوز از سیستم فایروال امنیتی CentOS استفاده نمی کنید، آن را فعال کنید:
systemctl enable firewalld systemctl start firewalld
دستورات زیر را اجرا کنید تا اسکریپت Fail2ban پس از ریستارت سرور نیز در سرور اجرا شود
systemctl enable fail2ban systemctl start fail2ban
ردیابی و بررسی ورودهای نا موفق به سرور
دستور زیر برای بررسی تلاشهای ناموفق برای ورود به سیستم از طریق ssh استفاده می شود.
cat /var/log/secure | grep 'Failed password'
اجرای فرمان فوق یک لیست از تلاش های رمز عبور ریشه های شکست خورده را از آدرس های مختلف IP دریافت می کند. فرمت نتایج همانند موارد زیر خواهد بود:
Apr 4 17:05:12 htf sshd[4287]: Failed password for root from 108.61.157.25 port 23121 ssh2 Apr 4 17:05:15 htf sshd[3154]: Failed password for root from 108.61.157.25 port 14486 ssh2 Apr 4 17:05:16 htf sshd[3154]: Failed password for root from 108.61.157.25 port 24157 ssh2 Apr 4 17:05:18 htf sshd[3154]: Failed password for root from 108.61.157.25 port 24157 ssh2
بررسی Ip های ممنوع شده توسط Fail2Ban
فرمان زیر برای بدست آوردن لیستی از آدرس های ممنوعه IP که در سرور block شذه اند استفاده می شود:
iptables -L -n
وضعیت Fal2Ban را بررسی کنید
برای بررسی وضعیت Jail Fail2Ban از دستور زیر استفاده کنید:
fail2ban-client status
نتیجه باید شبیه به این باشد:
[root@htf ]# fail2ban-client status Status |- Number of jail: 1 `- Jail list: sshd
چگونه یک آیپی بلاک شده را آزاد کنیم؟
مثلا برای آزاد کردن یک آیپی بلاک شده که برای تلاش نا موفق روی سرویس sshd مسدود شده است از دستور زیر میتوانیم استفاده کنیم:
fail2ban-client set sshd unbanip IPADDRESS
بجای IPADDRESS آدرس آیپی مدکور را وارد نمایید
امیدوارم آموزش فوق مورد استفاده شما عزیزان قرار گرفته باشد
با تشکر
با تشکر عیسی محمدزاده
کارشناس مدیریت سرور و هاستینگ و امنیت شبکه
اشتراک گذاری مطلب
لینک کوتاه برای مطلب