تمامی تلاشهای ناموفق برای لاگین به ssh توسط rsyslog در لینوکس در فایل لاگ ذخیره میشوند که این کار را برای شناسایی و یافتن حرکات مشکوک برای مدیر سرور آسان میکند.
یکی از سادهترین راهها برای یافتن لاگین های ناموفق به ssh استفاده از دستورات لینوکس میباشد، توسط دو دستور cat و grep میتوان به صورت ترکیبی عملیات بررسی و جستجو را به صورت فیلتر شده درون لاگ فایلها انجام داد.
اگر با ssh آشنا نیستید حتماً مقاله ssh چیست را قبل از مطالعه ادامه آموزش بخوانید و با درک عملکرد این سرویس کار را دنبال کنید.
تمامی دستورات اجرا شده در این آموزش با دسترسی روت انجام میشود، بدیهی است داشتن دسترسی سطح پایینتر به سرور عملیات شناسایی تلاشهای ناموفق برای لاگین به ssh را غیرممکن خواهد کرد.
مراحل شناسایی تلاشهای ناموفق برای لاگین به ssh در سرور
اولین دستور که در آن از grep استفاده شده برای ما خطوطی که شامل کلمه Failed password باشند در خروجی چاپ میکند.
grep "Failed password" /var/log/auth.log
البته همین عملکرد را با دستور cat به شکل زیر میتوان در خروجی مشاهده کرد.
"cat /var/log/auth.log | grep "Failed password
فقط باید توجه داشته باشید که آدرس فایل لاگ بر روی سرور شما مشابه آدرس وارد شده در دستورات بالا باشد در غیر این صورت باید آدرس جدید را جایگزین کنید.
اگر به دنبال اطلاعات بیشتری برای نمایش در خروجی هستید میتوانید دستور زیر را در ssh وارد کنید.
egrep "Failed|Failure" /var/log/auth.log
همانطور که در بالا هم اشاره کردیم مسیر فایل لاگ در توزیعهای مختلف لینوکس متفاوت است برای مثال در توزیع ردهت بیس مثل centos مسیر فایل لاگ متفاوت بوده و باید دستور زیر را وارد کنید.
egrep "Failed|Failure" /var/log/secure
اگر هدف شما از شناسایی تلاشهای ناموفق برای لاگین به ssh در لینوکس پیدا کردن Ip هکر و بستن دسترسی آن توسط فایروال است دستور زیر را در ssh وارد کرده تا لیست ip افرادی که تلاشهای ناموفقی برای ورود به ssh داشتهاند را به شما نمایش دهد.
grep "Failed password" /var/log/auth.log | awk '{print $11}' | uniq -c | sort -nr
در توزیعهای جدید مبتنی بر system میتوانید توسط journalctl اقدام به شناسایی تلاشهای ناموفق برای لاگین به ssh کنید.
"journalctl _SYSTEMD_UNIT=ssh.service | egrep "Failed|Failure journalctl _SYSTEMD_UNIT=sshd.service | egrep "Failed|Failure" #In RHEL, CentOS
در توزیعهای ردهت بیس مثل centos برای استفاده از journalctl باید دستور را به شکل زیر وارد نمایید تا خروجی صحیحی داشته باشید.
"journalctl _SYSTEMD_UNIT=sshd.service | grep "failure "journalctl _SYSTEMD_UNIT=sshd.service | grep "Failed
بعد از شناسایی ip هکر میتوانید آن را توسط فایروال مسدود کنید به صورت پیشفرض لینوکس از iptables برای دیواره آتش استفاده میکند ولی اگر میخواهید یک فایروال حرفهای داشته باشید میتوانید از csf استفاده کنید که پیشتر آموزش نصب csf را در سایت منتشر کردیم.
سلام
بابت انتشار این مطلب مفید به سهم خودم از شما متشکرم
یک مشکل داشتم
سرور مجازی بنده centos هستش بخش اول فرمان ها که مشاهده لاگ هست رو از طریق کد: egrep “Failed|Failure” /var/log/secure با موفقیت انجام دادم
اما بخش دوم فرمان یعنی نمایش ip ها کار نکرد. ممکن است یک بررسی بفرمائید.
بنده از این بخش کدها استفاده کردم
grep “Failed password” /var/log/auth.log | awk ‘{print $11}’ | uniq -c | sort -nr
journalctl _SYSTEMD_UNIT=ssh.service | egrep “Failed|Failure”
journalctl _SYSTEMD_UNIT=sshd.service | egrep “Failed|Failure” #In RHEL, CentOS
journalctl _SYSTEMD_UNIT=sshd.service | grep “failure”
journalctl _SYSTEMD_UNIT=sshd.service | grep “Failed”
ممنون میشوم توضیحی در اینخصوص عنایت نمائید.
ارادتمند شما
سلام
مشکل شما به احتمال بسیار زیاد از ستونی هستش که خروجی قرار گرفته بشه باید بررسی کنید کنید که ‘{print $11}’ باید برای شما چی باشه تا جواب بده