API לפתיחת וסגירת פורט 3389 לRDP לעולם החיצוני באמצעות PHP
-
יצרתי לעצמי API שאני יכול ממחשב מרוחק לגשת לIP (הקבוע) של המחשב שלי ולפתוח לעצמי פורט שיחובר לפורט 3389 עבור חיבור לשולחן עבודה מרחוק.
הרעיון הוא שכל הזמן אין פורט שמופנה לRDP, ורק בעת הצורך פותחים או סוגרים את החיבור
זה נועד לתוספת אבטחה.
להלן הקוד
זה נכתב בהתאם לראוטר D-LINK 225
הרעיון הוא שעבור פתיחת פורט ניגשים לכתובת של הדף
http://31.31.31.31/openport.php?action=open
ועבור הסגירה ניגשים כך
http://31.31.31.31/openport.php
כמובן יש לשנות לכתובת הIP הנכון
וכן להשים את שם הקובץ בו שמרתם את הקוד
וכן יש לוודא ששמתם את שם המשתמש והסיסמא הנכונים של הראוטר
וכן לוודא שהמחשב המארח נמצא בכתובת 10.0.0.1 או להחליף בקוד לכתובת הנכונה
ניתן לשנות את הפורט המאזין לכל פורט אחר כמובן<?php $username = 'Admin'; $pass = 'Admin'; $header = 'Content-Type: application/x-www-form-urlencoded'. "\r\n" . 'Cookie: username=' . $username . '; password=' . $pass . ''; $opts = array('http' => array( 'method' => 'GET', 'header' => $header, 'follow_location' => false ) ); $context = stream_context_create($opts); $Login = file_get_contents('http://10.0.0.138/login.cgi?web_login_name=' . $username . '&web_login_pass=' . $pass . '&loginfo=on&loginId=Login', FALSE, $context); $form = file_get_contents('http://10.0.0.138/scvrtsrv.html', FALSE, $context); $form = explode('&sessionKey=', $form); $sessionKey = explode("'", $form[1])[0]; //print_r($sessionKey); $eStart = '5546'; //תחילת פורט נכנס $eEnd = '5546'; //סיום פורט נכנס $iStart = '3389'; $iEnd = '3389'; if (isset($_GET['action']) && $_GET['action'] == 'open') { $open = 'http://10.0.0.138/scvrtsrv.cmd?action=add&srvName=RDP&dstWanIf=ppp1.1&srvAddr=10.0.0.1&proto=1,&eStart=' . $eStart . ',&eEnd=' . $eEnd . ',&iStart=' . $iStart . ',&iEnd=' . $iEnd . ',&sessionKey=' . $sessionKey; $open2 = file_get_contents($open); print_r($open2); } else { $delete = 'http://10.0.0.138/scvrtsrv.cmd?action=remove&rmLst=10.0.0.1|' . $eStart . '|' . $eEnd . '|TCP|' . $iStart . '|' . $iEnd . ',&sessionKey=' . $sessionKey; $delete2 = file_get_contents($delete, FALSE, $context); print_r($delete2); } $LogOut = file_get_contents('http://10.0.0.138/logout.cgi', FALSE, $context);
-
@חוקר אמר בAPI לפתיחת וסגירת פורט 3389 לRDP לעולם החיצוני באמצעות PHP:
זה דורש כנראה גישה לAPI של ווינדוס.
לא צריך API. אם זה אפשרי כלל, אפשר לעשות את זה באמצעות פקודות, אבל מסיבה לא ברורה מייקרוסופט לא תומכים בכביית שירות RDP.
https://www.windows-commandline.com/start-terminal-services-command-line/ -
נסיתי לבדוק קצת יותר (באמצעות procmon), ובעז"ה מצאתי את המתכון להשבית ולהפעיל שירות RDP על ידי פקודה:
השבתה:reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f
הפעלה:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
(השירות תמיד מופעל אבל הוא מאזין לשינויים במפתח רג'יסטרי ההוא והוא מפסיק להאזין כאשר משנים את הערך ל-1)
-
@איש-ימיני אמר בAPI לפתיחת וסגירת פורט 3389 לRDP לעולם החיצוני באמצעות PHP:
@חוקר
זה דורש התקנת PHP במחשב?
וא"כ דורש גם פתיחת פורט 80?אכן
אצלי כבר מותקן בין כך -
@musicode אמר בAPI לפתיחת וסגירת פורט 3389 לRDP לעולם החיצוני באמצעות PHP:
רק צריך להריץ את זה בכל הפעלה וכיבוי של הראוטר...
דהיינו כשאין לך כתובת IP יוצא קבוע?
כי אני עשיתי את זה לעצמי לטאבלט ששם אין לי IP קבוע, אך במחשב אין לי בעיות (מה גם שהמחשב נטפרי וכמעט אין מושג של שינוי IP, משא"כ הטאבלט הוא סייפטק שם בדר"כ משתנה) -
זה מאד מזכיר port knocking
-
@upsilon01 אמר בAPI לפתיחת וסגירת פורט 3389 לRDP לעולם החיצוני באמצעות PHP:
(אפשר ב iptables לתת timeout ל rule)
הוא משתמש בווינדוס