Так как первоисточник постоянно пропадает- делаю себе копию.
Запрещает для всех разрешенных пользователей доступ из вне к 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))
чтобы проверять членство в группе, а не отсутствие членства в группе.
Как и в большинстве этих типов модификаций, вам нужно будет проверить, что они все еще функционируют, после каждого обновления продукта. Иногда ваш измененный файл будет заменен новым обновлением.
