Exchange 2013 OWA запрет на доступ извне.

Так как первоисточник постоянно пропадает- делаю себе копию.

Запрещает для всех разрешенных пользователей доступ из вне к 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))

чтобы проверять членство в группе, а не отсутствие членства в группе.

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