Так как первоисточник постоянно пропадает- делаю себе копию.
Запрещает для всех разрешенных пользователей доступ из вне к OWA кроме тех которые в определенной группе.
Это возможно, если вы готовы внести небольшое изменение на одну из страниц .aspx. Предполагается, что у вас есть группа с именем «AllowExternalOWA» (или BlockExternalOWA, если вы блокируете).
Есть две вещи, которые необходимо выполнить с исходными файлами OWA на стороне сервера. Они должны выполняться с особой осторожностью, и перед заменой вы должны сделать резервную копию каждого файла.
Сначала найдите файл web.config в папке C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\Owa. Сделайте резервную копию, затем откройте ее в Блокноте. Найдите текст </assemblylies> (т. е. закрывающий тег) и вставьте перед ним следующую строку:
<add assembly="System.DirectoryServices.AccountManagement, Version=2.0.0.0, Culture=neutral, publicKeyToken=b77a5c561934e089" />
Во-вторых, найдите файл Default.aspx в той же папке. Сделайте резервную копию, затем откройте ее в Блокноте. Несколько строк вниз, вы увидите блок строк, которые все начинаются следующим образом:
<%@ Import Namespace="
Сразу же после этих строк вставьте блок кода:
<%@ Import Namespace="System.DirectoryServices.AccountManagement" %> <% string strGroupName = "AllowExternalOWA"; string strIP4 = "192."; string strIP6 = "fe80:"; string strIP = ""; try { strIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; } catch{} if(strIP == null) { try { strIP = Request.ServerVariables["REMOTE_ADDR"]; } catch{} } if(strIP == null) { Response.Write("Can't get user's IP address"); Response.End(); } bool blnExternal = true; if((strIP != "127.0.0.1") && (strIP != "::1")) { string strIPVersion = ""; if(strIP.IndexOf(".") != -1) strIPVersion = "4"; if(strIP.IndexOf(":") != -1) strIPVersion = "6"; if(strIPVersion == "4") { if(strIP4 == "") { Response.Write("IP4 range not defined"); Response.End(); } if(strIP.Substring(0, strIP4.Length) == strIP4) blnExternal = false; } if(strIPVersion == "6") { if(strIP6 == "") { Response.Write("IP6 range not defined"); Response.End(); } if(strIP.Substring(0, strIP6.Length) == strIP6) blnExternal = false; } } else { blnExternal = false; } if(blnExternal) { PrincipalContext objCtx = new PrincipalContext(ContextType.Domain); UserPrincipal objUser = UserPrincipal.FindByIdentity(objCtx, Page.User.Identity.Name); var objGroups = objUser.GetAuthorizationGroups(); if(!objGroups.Any(x => x.Name == strGroupName)) { Response.Write("Sorry, you are not allowed to access OWA from this location:" + strIP); Response.End(); } } %>
Это было сделано для клиентов «Premium» OWA. Чтобы пользователи не использовали клиент «Basic», выполните ту же процедуру для файла basicmessageview.aspx в папке C:/Program Files\Microsoft\Exchange Server\V15\ClientAccess\Owa\forms\basic.
В этом коде есть несколько вещей. Вначале вам нужно будет настроить имя созданной группы и диапазоны IP-адресов для вашей внутренней сети в формате IPv4 и/или IPv6. Мой собственный код охватывает диапазоны «192.168.» и «fe80:» по умолчанию. Если у всех ваших клиентов есть только адреса IPv6, вы можете оставить IPv4-адрес пустым и наоборот. Доступ с самого сервера (127.0.0.1 или :: 1) всегда разрешен.
Если вы хотите, чтобы код блокировал группу пользователей, измените строку
if(!objGroups.Any(x => x.Name == strGroupName))
на
if(objGroups.Any(x => x.Name == strGroupName))
чтобы проверять членство в группе, а не отсутствие членства в группе.
Как и в большинстве этих типов модификаций, вам нужно будет проверить, что они все еще функционируют, после каждого обновления продукта. Иногда ваш измененный файл будет заменен новым обновлением.