שאלה מאות כניסות כושלות נכשלות


כל לילה אני מקבל מאות, לפעמים אלפים, של כניסות SSH נכשל על שרת RedHat 4 שלי. מסיבות של חומת אש מאתרים מרוחקים, אני צריך לפעול בנמל הסטנדרטי. האם יש משהו שאני צריך לעשות כדי לחסום את זה. אני שם לב שרבים מגיעים מאותה כתובת IP. זה לא צריך לעצור את אלה אחרי כמה זמן?


76
2018-06-02 16:18






תשובות:


ניתן להשתמש ב- iptables כדי להגביל חיבורים נכנסים חדשים ליציאת ה- SSH. אני צריך לראות את כל תצורת iptables כדי לתת לך פתרון Turnkey, אבל אתה בעצם מדבר על הוספת כללים כמו:

iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP 
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT 

כללים אלה מניחים שאתה מקבל חיבורים ESTABLISHED מוקדם יותר בטבלה (כך שרק חיבורים חדשים יפגעו בכללים אלה). חיבורי SSH חדשים יפגעו בכללים אלה ויסומנו. תוך 60 שניות, 5 ניסיונות מכתובת IP אחת יגרמו לחיבורים נכנסים חדשים מאותה כתובת IP.

זה עבד טוב בשבילי.

עריכה: אני מעדיף שיטה זו "fail2ban" כי אין תוכנה נוספת להיות מותקן, קורה לגמרי במצב ליבה. זה לא מטפל קבצי לוג ניתוח כמו "fail2ban" יהיה, אבל אם הבעיה שלך היא רק עם SSH לא הייתי משתמש במשהו משתמש במצב הדורש התקנת תוכנה מורכבת יותר.


63
2018-06-02 16:25



אני אוהב את הפתרון הזה ואני מתכנן לקבל אותו במקום הלילה, ברגע שאני מקבל את השריפות של היום. - MattMcKnight
זה מאט את ההתקפות ואני באמת ממליץ על זה, אבל בגלל שיש בוטני סריקה dititted שם בחוץ, זה לא תרופת פלא. עדיין יהיו כניסות לא חוקיות מ botnets המפעילים סריקות מבוזרות נגדך. אין באמת יותר מדי שאתה יכול לעשות על זה, קצר של איזה סוג של "דפיקות נמל" ערכת מרחוק להביא את יציאת SSH כאשר אתה רוצה להיכנס. - Evan Anderson
+1 עבור ההצעה של "איבן דופק" @ של איבן. קצת מידע: linux.die.net/man/1/knockd . אבל לא לעשות את זה בדרך האיש הדף (כלומר, הוספה / מחיקה של כללים iptables), אבל במקום להשתמש -m condition iptables להתאים במקום. - pepoluan
אתה לא צריך - dport 22 כללים אלה, כך שהם מיושמים רק עבור התנועה SSH? - clime
@clime - כן. קשה להאמין שזה כבר כאן 2 1/2 שנים ואף אחד לא שם לב! תפיסה טובה. - Evan Anderson


בית Favorite יכול לעזור עם זה על ידי חסימת כתובות IP עם יותר מדי יומן נכשל ניסיונות.


38
2018-06-02 16:20



אני לא אוהב כלים / סקריפטים קריאת יומני פקודות בעיה מטעם המשתמש sysadmin - asdmin
@asdmin, כן, במיוחד כאשר הם יש כאלה רקורד נחמד ... - maxschlepzig


אני ממליץ להשתמש ביציאה לא סטנדרטית עבור SSH אם אתה יכול (כלומר, יציאת 10222) אבל מאז שהזכרת אתה לא יכול לעשות את זה אני ממליץ להשתמש במשהו כגון DenyHosts.

http://denyhosts.sourceforge.net/

חבילה נהדרת, קלה להתקנה וקביעת תצורה.


25
2018-06-02 17:16



אני לא יודע למה אנשים לקלוט את זה; SSH נמצא ביציאה רגילה 22. משמעות הדבר היא שכאשר אתה נמצא ברשת זרה, אינך מסתמך על פתיחת יציאה לא סטנדרטית דרך חומת האש היוצאת. הפתרון האמיתי לבעיה זו מתועד למעלה, או להגביל את מספר החיבורים החוזרים באמצעות חומת האש הנכנסת שלך, או, לכבות את סיסמאות הכניסה. - Andrew Taylor
OpenSSH 6.7 טיפות תמיכה tcpwrappers, וזה מה denhhosts משתמש. - Zoredache


אמנם זה יכול להיות נחמד להיות מסוגל ssh לתוך המערכת שלך ממיקומים שרירותיים באינטרנט, יש אוטומטית התקפות סיסמת מערכות אשר ינעל על יציאת ssh פתוח ולהחיל שונים joe חשבון התקפות מילון נגד המערכת שלך. זה יכול להיות aggrevating לקרוא את הסיכום יומן בלילה שלך הוא בזבוז של רוחב הפס שלך.

אם יש לך שרת אינטרנט על אותה מערכת, אתה יכול להשתמש ב- PHP ו wpppers tcp להגביל את התנועה נכנסת ssh למערכות ידועות, וכן לתת לך מפתח הדלת האחורית כדי לאפשר את עצמך גישה ממערכות שרירותי באינטרנט.

הנה איך אתה עושה את זה:

דחה את כל חיבורי ssh ב- /etc/hosts.deny:

# /etc/hosts.deny fragment
sshd:  all

התר למערכות ידועות באמצעות IP ב- /etc/hosts.allow, ובנוסף הוסף קובץ לגישה זמנית:

# /etc/hosts.allow fragment
sshd:  10.0.10.2     # some system
sshd:  172.99.99.99  # some other system
sshd:  /etc/hosts.allow.temporary-sshd-access

יצירת קובץ PHP בשרת האינטרנט שלך ולתת לו שם לא ברור כמו שלי sshd-access.php:

<?php
function get_ip()
{
    return getenv("REMOTE_ADDR"); 
}

?>

<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';

print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);

$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);

print "Wrote: ";
readfile($out);
?>

סלח לי על קוד ה- PHP - החלפתי אותו ממקום אחר, כך שהוא יכול כנראה לסלק את כל החבורה. כל מה שהיא עושה הוא להוסיף את כתובת ה- IP של המערכת גישה אליו לקובץ /etc/hosts.allow.temporary-sshd-access, אשר נקרא על ידי sshd (עקב הכללתו על ידי /etc/hosts.allow) בזמן החיבור .

כעת, כאשר אתה נמצא במערכת שרירותית כלשהי באינטרנט ורוצה ssh למערכת זו, השתמש תחילה בדפדפן אינטרנט ופגע בקובץ זה (או השתמש ב- wget או equivalent):

$ wget http://your.system.name/my-sshd-access.php

עכשיו אתה אמור להיות מסוגל ssh למערכת שלך. אם זה איפשהו אתה צפוי להיות ssh'ing מ בתדירות גבוהה, זה יהיה טריוויאלי לקרוא את התוכן של /etc/hosts.allow.temporary-sshd-access הקובץ לצמיתות להוסיף את כתובת ה- IP / etc / hosts. להתיר.


15
2018-06-02 17:07



כדי להפוך את זה בטוח יותר, הפעל את הדף הזה ב- https. - Robert Munteanu
אם תשנה את התסריט כך שהוא לא פלט את התוכן של "כתובת ה- IP הזמנית" כתובת הקובץ, לא יהיה שום דבר עבור המרחרח יהיה לרחרח. לאחר מכן תוכל להפעיל אותו ב- http במקום ב- https. - Barry Brown
"כתובת ה- IP הזמנית המותרת" היא תמיד זו של המבקש (כלומר שלך). אני לא חושב שזה משנה בדרך זו או אחרת. Https אומר כי כתובת האתר המבוקש מוצפן כלומר זה לא טריוויאלי כדי לרחרח אותו מהחוט. - David Mackintosh
פעולה זו לא תעבוד אם אתה נמצא ברשת שמייצרת חיבורי HTTP, אך המסלול הישיר שלך לאינטרנט הוא דרך יציאה אחרת. - Andrew Taylor
OpenSSH 6.7 טיפות תמיכה tcpwrappers, וזה מה משמש את התשובה שלך. - Zoredache


אולי כדאי לך להסתכל denyhosts גם כן.

לידיעתך: OpenSSH 6.7 טיפות תמיכה tcpwrappers, כלומר denyhosts כנראה לא הפתרון עבור מתקנים חדשים.


9
2018-06-02 16:23





עשה לעצמך טובה ולהשבית את הכניסה סיסמה. השתמש במקשי אימות בלעדיים (google ssh-keygen לדוגמה - דוגמה: http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4.html ) השרת שלך יהיה בטוח יותר, תוכלו להתחבר אליו בנוחות יותר (לבדוק ssh- סוכן, ssh-add, מחזיק מפתחות) ואתה לא תהיה עוד קורבן של התקפות כוח SSH ברוט.


8
2017-08-17 22:08





פתרון נוסף הוא פשוט לעבור ssh לנמל אחר. התולעים האלה די טיפשות.


2
2018-06-02 16:28



הפוסטר המקורי אמר שהוא צריך לרוץ בנמל רגיל. - kbyrd
מצטער, אני חייב לקרוא את השאלות בזהירות רבה :) - disserman
אני חייב להסכים ... יש לי SSH שלי פועל על "אלטרנטיבי" יציאות וזה עושה את העולם של ההבדל ביומני. התולעים הן בערך חכם כמו לבנים, כך שזה עובד היטב נגד סקריפטים אוטומטיים מטומטמים; לא כל כך טוב נגד תוקפים אנושיים. ובכל זאת, יומני יש את הצליל המבורך של שתיקה בהם... - Avery Payne


אפשרות נוספת עשויה להיות לדרוש את כל חיבורי ssh להיות מאומת על ידי אישור ולבטל את הסיסמאות לגמרי.

אני משתמש כדי להשתמש Denyhosts, אבל מצאתי שאני רק חיבור קבוע מרחוק מקומץ מקומות, אז אני חסם את כל יציאת 22 חיבורים מכל מקום אחר, ולהשתמש דפיקות נמל כדי שאוכל להתחבר מכל מקום עם המחשב הנייד שלי אם אני צריך .


2
2018-06-03 00:51





כל פתרון אשר כרוך באופן אוטומטי חסימת כתובות IP לאחר כשלים מרובים מציג סיכון של התקפות מניעת שירות. כל עוד יש מדיניות סיסמה טובה במקום להפחית את האפקטיביות של כוח הזרוע או התקפות מילון, לא הייתי מודאג יותר מדי עליהם.

אם אתה מגביל את המשתמשים / קבוצות רק למי צריך להיות מותר ssh מלכתחילה, ולהשבית כניסה כמו שורש, אתה צריך להיות יותר מאובטח מספיק. ואם זה לא מספיק, תמיד יש אימות מבוסס מפתח.


1
2018-06-02 17:03