Назад | Перейти на главную страницу

Защитите Skype-трафик через Forefront

Как разрешить Skype работать правильно с ограниченными исходящими портами, проверкой HTTPS и включенным прокси IE? Вся документация, с которой я столкнулся, предлагает отключить хотя бы одну из этих функций.

В идеале это должно быть так же просто, как установка прокси-сервера в Skype на передний сервер через порт 8080, но использование самозаверяющих сертификатов делает это невозможным из-за административных накладных расходов, связанных с постоянным добавлением новых исключений проверки HTTPS для пункта назначения и источника.

Чего я действительно надеюсь достичь, так это разрешить весь трафик только для Skype и Skype.

В конце концов, я выбрал метод, разрешающий весь трафик из исполняемого файла Skype, но не из чего-либо еще. Поскольку Forefront не может надежно определить исполняемый файл, который выполняется под управлением, я решил создать правило, которое разрешает весь исходящий трафик для определенного пользователя / группы пользователей и заставляет Skype запускаться под этим пользователем / группой. Следующий сценарий AutoIT предоставляет необходимые функции для надежной работы.

#include <Crypt.au3>
; #RequireAdmin ; only for setting the password

Func SetEncrypted($vPassword,$Field)
_Crypt_Startup()
$path="HKLM\Software\MyORG\Skype"
$Key=_Crypt_DeriveKey($vPassword, $CALG_AES_256 )
$FieldValue=InputBox($Field,"")
$output=_Crypt_EncryptData($FieldValue,$Key,$CALG_USERKEY)
RegWrite($path,$Field,"REG_SZ",$output)
_Crypt_DestroyKey($Key)
_Crypt_Shutdown()
EndFunc

Func GetEncrypted($vPassword,$Field)
_Crypt_Startup()
$path="HKLM\Software\MyORG\Skype"
$Key=_Crypt_DeriveKey($vPassword, $CALG_AES_256 )
$input=RegRead($path,$Field)
$decrypted=_Crypt_DecryptData($input,$Key,$CALG_USERKEY)
$decrypted=BinaryToString($decrypted)
_Crypt_DestroyKey($Key)
_Crypt_Shutdown()
Return $decrypted
EndFunc

$EncryptionPassword="super password which will be buried in the exe itself, set this yourself "
;SetEncrypted($EncryptionPassword,"Domain")
;SetEncrypted($EncryptionPassword,"User")
;SetEncrypted($EncryptionPassword,"Password")

$User=GetEncrypted($EncryptionPassword,"User")
$Pass=GetEncrypted($EncryptionPassword,"Password")
$Domain=GetEncrypted($EncryptionPassword,"Domain")

; Find the executable name.
$Skype = RegRead("HKLM\SOFTWARE\Skype\Phone", "SkypePath") 
If( $Skype = "" ) Then
    ; 64 bit support
    $Skype= RegRead("HKLM\SOFTWARE\Wow6432Node\Skype\Phone", "SkypePath")
EndIf
MsgBox(0,"",$Skype)

; Run Skype under alternate credentials. 
RunAs($User,$Domain,$Pass, 4, $Skype, @SystemDir )

Сохранение идентификатора и пароля в реестре упрощает обновление пароля для учетных записей, связанных с альтернативными учетными данными - элемент реестра GPP делает свое дело.

EDIT - исходящее правило, которое использует аутентификацию для всего исходящего трафика. должен быть в самом низу списка приоритетов, прямо над правилом по умолчанию. Если этого не сделать, любой неаутентифицированный трафик изнутри (например, электронная почта внешним сторонам) будет отключен.