jueves, 15 de enero de 2015

Los roles de la autenticación por formularios pareciera no funcionar en SharePoint 2013

 

La autenticación por formularios en SharePoint existe desde la versión 2007 y es la respuesta de Microsoft para proveer otra forma de autenticación que no sea a través del Directorio Activo.  Este método de autenticación a evolucionado con las versiones más recientes de SharePoint y se ha convertido en una implementación más de la autenticación basada en reclamos permitiendo al administrador de IT o consultor de SharePoint personalizar el método de autenticación elegido de forma muy flexible.

En este artículo resolveremos el acertijo porque no funciona el rol de FBA dentro de un grupo de SharePoint y cual es la aplicación correcta.

En la imagen de abajo muestra el flujo de autenticación de una implementación por formularios.  Fundamentalmente el usuario navega a la URL del sitio de SharePoint y al momento de autenticarse es redirigido a una página aspx donde le solicita el usuario y la contraseña esta solicitud es trasladada al servicio en SharePoint para autenticar los usuarios el cual es conocido como Security Token Service o STS este valida el tipo de autenticación que en este caso es Autenticación basada en Reclamos y en una implementación de Formularios el cual conoce que su proveedor de membresía es una base de datos en SQL Server y allí valida que exista el usuario, que sea valida su contraseña y luego si es válida pasa al proceso de autorización sino lo es es rechazada la solicitud.

Forms-based authentication process

La implementación del repositorio de credenciales en la autenticación por formularios es a través de una implementación de base de datos denominada ASP.NET membership and role providers.  Dentro del esquema de base de datos se almacena los usuarios y los roles y la combinación de ambos. 

Expanded aspnetdb_claim node

Podemos concluir que los Roles es una forma de agrupar los usuarios dentro de esta implementación. 

EXEC aspnet_Roles_CreateRole 'MyAppName', 'Employee'
EXEC aspnet_Roles_CreateRole 'MyAppName', 'TeamManager'
EXEC aspnet_Roles_CreateRole 'MyAppName', 'CEO'

EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'bob', 'Employee', 8
EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'mary', 'TeamManager', 8
EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'jack', 'CEO', 8
EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'jack', 'Admin', 8

Por tanto los Roles a diferencia de los usuarios deben de aplicarse directamente a los permisos del sitio y no a otro grupo de SharePoint.  En ocasiones hemos aplicado a grupos de SharePoint y SharePoint no logra descubrir los permisos del usuario, en cambio por el otro lado si ha funcionado.


SharePoint4Fun!,


Juan Manuel Herrera Ocheita

jueves, 8 de enero de 2015

Nuevo hallazgo sobre como evitar la autenticación cuando se esta desplegando contenido de un App en SharePoint 2013

 

Luego que a realizado el procedimiento para registrar el nombre para las Apps en el DNS y también las del portal, pueda con que se tope que aún le pide las credenciales del usuario a pesar de que esta en una red interna o Intranet.  Si esto le sucede pueda que el problema sea el permiso que tiene el usuario.

Recientemente nos hemos percatado que el permiso mínimo que debe de tener un usuario en SharePoint para que no le solicite credenciales es Read y No Restricted Read.  Así valide eso por favor.  Algo que debe de tomar en cuenta es que SharePoint valida siempre sobre el nivel de permisos mayor que tenga el usuario esto para evitar conflictos en los permisos que puedan ser otorgados a los usuarios a través de los diferentes grupos y objetos de SharePoint (Sitios, Bibliotecas, Listas y elementos)

NOTA: Si usted esta teniendo este problema en una IOS su problema pueda derivarse a que el navegador de SAFARI no tiene las opciones de autenticación que si dispone IE por lo que una alternativa sería utilizar el Firewall de su organización para que guarde las credenciales del usuario cada vez que utilice el navegador Safari.  Ver más información aquí: http://sharepoint.stackexchange.com/questions/38086/sharepoint-repeatedly-prompting-ipad-users-for-credentials

Procedimiento para configurar Internet Explorer

How to hide the message "Only secure content is displayed":

1. In IE 10, go to Tools (alt+x) + Internet Options.

2. Go to the “Security TAB”

3. Select “Local Intranet”

4. Add to this zone the next domains:

a. Microsoftonline.com

b. Sharepoint.com

c. Yahooapis.com

5. Click on “Close” + “Apply”

6. Go to “Custom Level”:

7. Click on “enable” under the section “Display Mixed Content”:

8. Close the IE 10 completely, and re – open it (this is only required the first time, after applying the procedure).

9. Done.

Script en PowerShell para actualizar correo y puesto del perfil de usuario

Con la tendencia mundial de migración hacia la nube y en especial a Office 365, la migración de dominios que estén listos para Office 365 es uno de los caminos a seguir, pero en este proceso de migración pueden salir las cosas mal, por ello he escrito un Script en PowerShell para que actualice la propiedad de WorkEmail y Title (o sea Puesto) en el servicio de Perfiles de Usuario, basado en un archivo CSV con el objetivo de corregir algún error que se haya efectuado o bien porque no se han migrado aún los correos al nuevo dominio pero es necesario que sigan funcionando las alertas de SharePoint con la cuenta de correo anterior… Bueno y lo del puesto no sería necesario si se sincroniza, pero si se desea hacer una rápida actualización de un puñado de usuarios de esta propiedad sin necesidad de sincronizar todos los usuarios, es una solución práctica.

Como el Script se basa en un archivo CSV vamos a describir el formato de este archivo.

Formato del Archivo CSV

El formato CSV es un archivo de texto que tiene en su primera línea contiene el nombre de cada columna como parte del encabezado y se separa por una coma. Luego cada línea siguiente representa una fila y se separa igualmente por comas

Los nombres de las columnas del archivo CSV deben de tener por lo menos las siguientes:

NewAccount: Es la cuenta de usuario. Ejemplo: DOMINIO\NOMBRE_USUARIO

Title: El Puesto del usuario. Ejemplo: NOMBRE DEL PUESTO

Email: EL correo del usuario. Ejemplo: nombre_usuario@dominio.com

Un ejemplo del contenido de un archivo es el siguiente

NewAccount,Title,Email

DOMINIO\NOMBRE_USUARIO,Nombre del Puesto,nombre_usuario@dominio.com

El Script

 

#Primera línea de archivo UpdateUPAProperties.ps1

#Primero solicitaremos dos parámetros; $archivoEntrada = Que es la ruta de la ubicación del archivo csv y $misitioUrl que la URL de My Site. 

param (
    [string]$archivoEntrada , [string]$miSitioUrl
)

#Valida si fue ingresado el parámetro $archivoEntrada, sino le asigna un valor predeterminado para pruebas
if ($archivoEntrada -eq $null -or $archivoEntrada -eq "")
{
    $archivoEntrada = "E:\Infoware\Scripts\PruebaActualizaPropiedadesPerfilUsuario.csv"

    Write-Host "No ha recibido parametro archivoEntrada"
}

#Valida si fue ingresado el parámetro $miSitioUrl sino le asigna uno predeterminado
if ($miSitioUrl -eq $null -or $miSitioUrl -eq ""){
    $miSitioUrl = http://misitio.dominio.com
}

#Se Cargan las librerias de SharePoint para ejecutar la actualización de los perfiles de usuario

if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {
    Add-PSSnapin Microsoft.SharePoint.PowerShell;
}
[reflection.assembly]::Loadwithpartialname("Microsoft.Office.Server.Search") | out-null
[reflection.assembly]::Loadwithpartialname("Microsoft.Office.Server") | out-null

#Se Carga en memoria el Administrador de Perfiles de Usuario para ello es necesario la url que solicitamos en el parámetro e instanciar en memoria la colección de sitios y el sitio principal de MySite.
$site=Get-SPSite $miSitioUrl
$web=$site.RootWeb
$serverContext=[Microsoft.Office.Server.ServerContext]::GetContext($site)
$upm=New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($serverContext)


# Ahora cargaremos en memoria como una tabla el archivo CSV
$FileExists = (Test-Path $archivoEntrada -PathType Leaf)
if ($FileExists) {
   "Loading $archivoEntrada for processing..."
   $listadoUsuarios = Import-CSV $archivoEntrada
} else {
   "$archivoEntrada not found - stopping import!"
   exit
}

#El objetivo de esta función es actualizar el valor de la propiedad del perfil de usuario en cuestión

function set-SPProfileProperty([string]$propertyName, [string]$val, $up)
{

        #Validamos que no venga el perfil de usuario nulo
         if($up -ne $null)
        {

            #Obtenemos la propiedad por su nombre
            $property = $up.Properties.GetPropertyByName($propertyName)

     #Validamos que no si hayamos obtenido la propiedad


            if (-not [System.String]::IsNullOrEmpty($property))
            {
                $up[$propertyName].value = $val;
                $up.Commit();
                write-host "Actualizo la propiedad " $propertyName " con el valor" $val -ForegroundColor yellow
            }
        }
 
    Write-Host "Done" -foregroundcolor green
}

#Recorremos la tabla en memoria del archivo CSV

foreach ($row in $listadoUsuarios)
{
   $loginName = $row.NewAccount

   #Validamos que obtuvimos la columna NewAccount que trae la cuenta del usuario
   if( $loginName)
   {
        #validamos que el usuario exista en los perfiles de usuario
        if($upm.UserExists($loginName)){

            #Obtenemos el Perfil del Usuario
            $up = $upm.GetUserProfile($loginName);

            #Validamos que hayamos obtenido el perfil del usuario
            if($up) {
                $Puesto = $row.Title
                $Correo = $row.email       

                    #Si la columna Title trae valor invocamos la función para que modifique la propiedad en UPA
                    if($Puesto) {
                        set-SPProfileProperty -propertyName "Title" -val $Puesto -up $up
                
                    }

                   #Si la columna Corre trae valor invocamos la función para que modifique la propiedad en UPA

                    if($Correo) {
                        set-SPProfileProperty -propertyName "WorkEmail" -val $Correo -up $up
                    }
            }    
        }else
        {
            Write-Host "Usuario no existe " $loginName -ForegroundColor Red
        }
   }
}


Write-Host "End of file"
# Fin del archivo ps1

Procedimiento de Ejecución

Para ejecutar el Script puede utilizar PowerShell de Windows 3.0 o bien la consola de administración de SharePoint 2013.  Abajo una imagen que muestra como ejecutar el Script desde una ubicación predeterminada.

image

Bueno amigos espero les sirva el Scrip como lo hizo conmigo.

Hasta la próxima!… SharePoint4Fun!,

Juan Manuel Herrera Ocheita

sábado, 3 de enero de 2015

El nombre del usuario no aparece cuando se le asigna a un grupo de SharePoint 2013

Este error es raro de que suceda y su comportamiento es extraño. 

Les explicó:  Cuando se realiza la búsqueda del usuario en la ventana de búsqueda aparece debidamente el nombre y el puesto del usuario pero cuando se asigna al grupo solo aparece el puesto y no el nombre del usuario, como se muestra en la siguiente imagen: 

image

Pero si le asignamos directamente el permiso al usuario este si se muestra correctamente.

Entonces, qué está sucediendo?, Bueno realizando algunas pruebas e investigando como estaban asignados los permisos descubrí que el grupo Propietarios estaba asignado como propietario del grupo el mismo grupo. 

Lo inaceptable del caso es que SharePoint no valida que se pueda asignar así mismo el mismo grupo, y esto provoca este error extraño.  

Cual es la razón porque SharePoint permite esto.  Bueno la idea de asignar un grupo como propietario es que varios usuarios puedan atender la solicitud de usuarios que deseen ser miembros del grupo a través de las opciones de configuración del grupo como se muestra en la siguiente imagen:

image

Lo más extraño de todo es que esta configuración funciona correctamente en el SPO o SharePoint Online y sucede cuando al crear el sitio le indicamos que asigne permisos exclusivos y lo configura así.

La solución para la versión On premises SharePoint 2013 con Service Pack 1.0 es asignar un usuario u otro grupo que no sea el mismo.

image

Con ello se corrije el problema encontrado en una instalación On Premises.

Hasta la próxima SharePont4Fun!,

Juan Manuel Herrera Ocheita

miércoles, 31 de diciembre de 2014

Script para migrar Usuarios de cubos de dominio para una implementación de Inteligencia de Negocios en SharePoint

 

Introducción

En la edición Enterprise de SharePoint 2013 tenemos herramientas de inteligencia de negocios disponibles para exponer o desplegar la información de los cubos multidimensionales o tabulares en tableros de control mostrando indicadores de rendimiento o KPI´S, reportes, gráficos de todo tipo.  En la versión 2013 de SharePoint todas las herramientas de Excel como PowerPivot, PowerView, PowerQuery y otras más están disponibles para ser desplegada en un navegador o browser como lo es Internet Explorer, Chrome y Safari.   Típicamente cuando se implementa una solución así si implementa también Kerberos que es un protocolo de autenticación basado en reclamos o claims, donde hace posible que la identidad del usuario que se autentica en el portal de SharePoint no pierda su identidad sino que esta pueda ser pasada a otros servicios y servidores como lo es el Servidor de base de datos SQL Server y uno de sus servicios Analysis Services que nos sirve para procesar y construir los cubos multidimensionales y tabulares también.  Entonces cuando migramos los usuarios de dominio estos usuarios que están asignados a los roles de los cubos para mostrar solo aquellas dimensiones y medidas deseas es necesario adicionarlos a estos roles de los cubos que están disponibles y consumiéndose a través de Excel, SharePoint y Reporting Services, entre otros.   Por ello realizaremos un script en PowerShell para adicionar los usuarios del dominio anterior que se hayan migrado al dominio nuevo.

 

NOTA: En otro artículo veremos como migrar los permisos dentro de SharePoint de los usuarios del dominio anterior al actual, pero este no es el objetivo del artículo sino enfocarnos en los usuarios asignados a los roles de los cubos de Microsoft SQL Server Analysis Services o SSAS.

Objetivo

El siguiente script adiciona basado en un archivo CSV los usuarios a los roles de un cubo en específico. Para ejecutar el script ese necesario ejecutar PowerShell en modo administrador y pasar como parámetro la ruta del archivo CSV y el servidor y el nombre de la instancia de Analysis Services donde se encuentra el cubo.

 

FORMATO DEL ARCHIVO CSV

El formato CSV es un archivo de texto que tiene en su primera línea contiene el nombre de cada columna como parte del encabezado y se separa por una coma. Luego cada línea siguiente representa una fila y se separa igualmente por comas

Los nombres de las columnas del archivo CSV deben de tener por lo menos las siguientes:

o BASE DE DATOS

o ROL

o USUARIO

El usuario debe de estar en el siguiente formato: DOMINIO\USUARIO, se reemplazara el dominio ANTERIOR por el nuevo DOMINIO. 

Ejemplo:

BASE DE DATOS,ROL, USUARIO

ZZ SIB PRUEBAS DOMINIO,Rol Analista,DOMINIO_ANTERIOR\nombre_usuario1

ZZ SIB PRUEBAS DOMINIO,Rol Analista,DOMINIO_ANTERIOR\nombre_usuario2

NOTA: Si el archivo CSV contiene más columnas de las esperadas esto no importa, lo importante es que existan las columnas que esta esperando el script.

EL SCRIPT

#definimos los parametros que recibirá el archivio de extensión ps1 que contendrá el siguiente código

param (
    [string]$archivoEntrada , [string] $servidorBaseDatos
)
 
if ($archivoEntrada -eq $null)
{
    $archivoEntrada = "F:\work\migracion-dominio\PruebasCubos3.csv"
    Write-Host "No ha recibido parametro archivoEntrada"
    #break
}
if ($servidorBaseDatos -eq $null){
    $servidorBaseDatos = "DELLLATITUDE8\TESTING"
    Write-Host "No ha recibido parametro servidorBaseDatosEinstanciaSQL"
    #break

}

# El siguiente comando solo debe de ejecutarse una primera vez para habilitar en la computadora la ejecución de script de forma remota
#Set-ExecutionPolicy RemoteSigned
# Esto se debe ejecutar cada vez que ejecute el script en powershell
#Import-Module sqlps -DisableNameChecking

$archivo = Import-Csv $archivoEntrada

[System.reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$svr = new-Object Microsoft.AnalysisServices.Server


#AQUI VA LA MAGIA HACE UNA CONEXION AL SERVIDOR Y A LA INSTACIA NO PREDETERMINADA SINO NOMBRADA DE SSAS
$svr.Connect($servidorBaseDatos)

#Vamos a recorrer cada línea del archivo para adicionar dichos usuarios en los cubos y roles indicados en el archivo

ForEach ($item in $archivo){

    $usuario= $item.USUARIO   
    $usuarioNuevo=$usuario

    # VAMOS A REEMPLAZAR EL VALOR DE LA COLUMNA USUARIO LA PARTE DEL DOMINIO ANTERIOR POR LA ACTUAL LA CUAL SERA ADICIONADA EN EL ROL
    $usuarioNuevo=$usuario -replace "DOMINIO_ANTERIOR" , "DOMINIO_ACTUAL"   
    $basedatos = $item."BASE DE DATOS"
    $role = $item.Rol

        # VALIDAMOS QUE CADA COLUMNA REQUERIDA NO VENGA NULA O VACIA
        if($usuarioNuevo -ne $null -and $basedatos -ne $null -and $role -ne $null)
        {      

        #RECORREMOS LAS BASES DE DATOS DISPONIBLES EN LA CONEXION HACIA EL SERVIDOR DE SSAS QUE HICIMOS ARRIBA
        foreach ($db in $svr.Databases)
        {                       

            # COMPARAMOS EL NOMBRE DE LA BASE DE DATOS  DEL SERVIDOR CON LA DEL ARCHIVO
            If ($db.Name.ToLower() -eq $basedatos.ToLower())
                {

                # RECORREMOS TODOS LOS ROLES PARA COMPARARLOS CON LOS DEL ARCHIVIO
                foreach ($roles in $db.Roles)
                  {                   

                 # COMPARAMOS EL NOMBRE DEL ROL DE LA BASE DE DATOS  DEL SERVIDOR CON LA DEL ARCHIVO

                    if( $roles.Name.ToLower() -eq $role.ToLower())
                    {
                        $usuarioExiste = $false

                        # RECORREMOS CADA MIEMBRO DENTRO DEL ROL

                        foreach ($member in $roles.Members)
                                {                           

                                   # COMPARAMOS EL NOMBRE DEL USUARIO DEL ROL CON EL DEL ARCHIVO
                                    if ($member.Name.ToLower() -eq $usuarioNuevo.ToLower())
                                    {

                                           #ACTUALIZAMOS LA VARIABLE $usuarioExiste que luego nos servirá para realizar la actualización o no del usuario dentro del rol
                                            $usuarioExiste=$true
                                    }                           
                                }
                        if( $usuarioExiste -eq $true ){

                            # SI EL USUARIO EXISTE DESPLEGAREMOS UN MENSAJE EN LA CONSOLA QUE YA EXISTE
                            "Usuario "+ $usuarioNuevo +" ya existe"
                        }
                        else{

                            # SINO EXISTE EL USUARIO ENTONCES ADICIONAMOS EL USUARIO AL ROL
                            $roles.Name
                            $roles.Members.Add($usuarioNuevo)
                            $roles.Update()

                            # SI le da un error el función Update() valide cada usuario de la lista  ya que en ocasiones da error un usuario y este de replica en el resto no importando si esta bien el resto de usuarios debe de validar que el usuario en le nuevo dominio exista esto puede hacerlo intentando dar permisos a una carpeta en el servidor con el usuario del nuevo dominio.


                            "Usuario "+$usuarioNuevo+" agregado al Rol "+$roles.Name
                        }
                    }
                }
            }
        }
        }
}

 

Procedimiento

1. Levantar una sesión remota al servidor NOMBRE_SERVIDOR (Puede ejecutar el mstsc y d ebe tener credenciales para ingresar de modo remoto)

2. Ejecutar PowerShell como administrador en el Servidor de SQL Server 2012

3. Posicionarse en la carpeta d:\scripts

4. Ejecutar el script addUsersToRole.ps1 pasándole como parámetro el archivo donde se encuentran los usuarios a agregar script y el servidor y la instancia de Analysis Services donde se encuentran los cubos:

5. .\AddUsrsToRole.ps1 –archivoEntrada “\.Pruebas con cubos solo cubo de prueba.csv” –servidorBaseDatos SERVIDOR\NOMBRE_INSTANCIA_NO_DEFAULT

 

Bueno amigos, eso es todo por hoy en este artículo vimos como adicionar usuarios a los roles de cubos que son expuestos en SharePoint 2013 en un servidor de Analysis Services que tiene una instancia nombrada y no la predeterminada basado en un archivo separado por comas o CSV que contiene la información de la base de datos, el cubo, el rol y el usuario del dominio anterior que se adicionará como el nuevo.

SharePoint4Fun!,

Juan Manuel Herrera Ocheita

martes, 30 de diciembre de 2014

Error al asignar cuentas a la alertas de SharePoint en una migración de dominios

Cuando se están migrando usuarios de dominio pueda ser que no se migren de una vez sus buzones y esto implica que las alertas de SharePoint dejan de funcionar porque no esta asociado a una cuenta de correo la cuenta del nuevo dominio.  Las direcciones de correo en SharePoint Server son tomadas de los Perfiles de Usuario.  Este servicio tiene mapeado a través de propiedades que muchas de ellas apuntan a campos del Directorio Activo.

El campo del Directorio Activo que mapea la propiedad de Correo Electrónico d el servicio de Perfiles de Usuario es ProxyAddresses y esta es llenada cuando una cuenta de dominio tiene buzón de correo de Exchange. 

image

Entonces cuando se migra un usuario de dominio sin el buzón esta esta vacía que podemos hacer en el ínterin.  Bueno podemos utilizar el campo del Directorio Activo Mail y mapear esta en las propiedad del Perfil de Usuario. 

 

El procedimiento

Para que podamos realizar este procedimiento y mapear la propiedad del nuevo dominio es necesario crear una Conexión de Sincronización en el servicio de Perfiles de Usuario.  Como este tema no es el objetivo del artículo los dejo con la documentación de Technet para que la realicen:

http://technet.microsoft.com/es-es/library/ee721049(v=office.15).aspx#Phase2

Para mapear este nuevo campo del Directorio Activo en el Servicio del Perfil de Usuario, es necesario editar la propiedad del Perfil de Usuario, para ello seleccionamos dentro del Servicio la Opción “Administrar propiedades de usuario”.

image

Luego seleccionamos la opción Editar de la Propiedad Correo Electrónico del trabajo  que se encuentra en la sección Información del contacto.

image

Dentro de la edición en la parte de abajo encontraremos el mapeo hacia el Directorio Activo

image

En la opción Agregar nueva asignación seleccionaremos el nuevo dominio en el dropdown list Conexión de datos de origen. Y el Atributo buscaremos el nombre “Email”.  En el campo Dirección deberemos de seleccionar la opción Importar y por último presionamos el botón Agregar.

image

El resultado deberemos verlo un poco arriba en la sección Asignación de propiedades para sincronización como se muestra en la imagen de abajo.

image

Por último presionamos el botón Aceptar y listo.  Podemos sincronizar los perfiles y revisar si efectivamente tomo el correo electrónico del campo Mail del Directorio Activo.

Con esta configuración las cuentas que no están migradas aún utilizaran el campo proxyAddresses y para las cuentas del nuevo dominio se utilizarán el campo mail del nuevo dominio.

Hasta la próxima amigos SharePoint4Fun!,

Juan Manuel Herrera Ocheita

sábado, 27 de diciembre de 2014

Moviendo una granja de SharePoint a una zona desmilitarizada o DMZ

 

Para comprender a lo que nos estamos metiendo vamos a definir primero que es una DMZ (Extracto de Wikipedia http://es.wikipedia.org/wiki/Zona_desmilitarizada_(inform%C3%A1tica))

DMZ

En seguridad informática, una zona desmilitarizada (conocida también como DMZ, sigla en inglés de demilitarized zone) ored perimetral es una red local que se ubica entre la red interna de una organización y una red externa, generalmente enInternet. El objetivo de una DMZ es que las conexiones desde la red interna y la externa a la DMZ estén permitidas, mientrasque en general las conexiones desde la DMZ solo se pParaermitan a la red externa -- los equipos (hosts) en la DMZ no pueden conectar con la red interna. Esto permite que los equipos (hosts) de la DMZ puedan dar servicios a la red externa a la vez que protegen la red interna en el caso de que intrusos comprometan la seguridad de los equipos (host) situados en la zona desmilitarizada. Para cualquiera de la red externa que quiera conectarse ilegalmente a la red interna, la zona desmilitarizada se convierte en un callejón sin salida.

La DMZ se usa habitualmente para ubicar servidores que es necesario que sean accedidos desde fuera, como servidores de correo electrónico, Web y DNS. Y es precisamente estos servicios alojados en estos servidores los únicos que pueden establecer tráfico de datos entre el DMZ y la red interna, por ejemplo, una conexión de datos entre el servidor web y una base de datos protegida situada en la red interna.

NAT (Network address translation)

Para aislar los equipos dentro de la DMZ de la red interna, se implementa una NAT con el objeto de traducir las direcciones públicas en internas.

Este mecanismo se implementa en un dispositivo de enrutamiento que utiliza tablas de traducción “estado” que mapea las direcciones ocultas en una sola dirección  IP que expone en Internet aparentando que fueron originados del dispositivo de enrutamiento.En la ruta de comunicación inversa, el Router mapea las respuestas de regreso a las direcciones IP originadas utilizando las reglas “Estado” almacenadas en las tablas de traducción.

Por ende si se desea acceder los servidores desde internet se utilizarán las IP publicas o externas si se desea acceder desde la red interna se utilizan las IP de la red interna.

 

CONFIGURACION

Debido a que las IPs son modificadas y se bloquean muchos puertos dentro de la DMZ es necesario revisar que estén abiertos:

Deberemos revisar el archivo host también para validar que no hayan registro desactualizados apuntando al las ips anteriores.

Podemos utilizar las siguientes utilerías:

1) ipconfig /flushdns  (Esto comando elimina el cache del DNS)

2) ping nuevas direcciones

3) telnet dirección ip : puerto  (Este es necesario instalarlo de las características o features de Windows)

Los puertos que deberán estar abiertos son los siguientes:

Protocol

Port

Usage

Comment

TCP

80

http

Client to SharePoint web server traffic
(SharePoint – Office Web Apps communication)

TCP

443

https/ssl

Encrypted client to SharePoint web server traffic
(Encrypted SharePoint – Office Web Apps communication)

TCP

1433

SQL Server default communication port.

May be configured to use custom port for increased security

UDP

1434

SQL Server default port used to establish connection

May be configured to use custom port for increased security

TCP

445

SQL Server using named pipes

When SQL Server is configured to listen for incoming client connections by using named pipes over a NetBIOS session, SQL Server communicates over TCP port 445

TCP

25

SMTP for e-mail integration

Cannot be configured

TCP

16500-16519

Ports used by the search index component

Intra-farm only
Inbound rule Added to Windows firewall by SharePoint

TCP

22233-22236

Ports required for the AppFabric Caching Service

Distributed Cache…

TCP

808

Windows Communication Foundation communication

WCF

TCP

32843

Communication between Web servers and service applications

http (default) To use custom port, see references section
Inbound rule Added to Windows firewall by SharePoint

TCP

32844

Communication between Web servers and service applications

https
Inbound rule Added to Windows firewall by SharePoint

TCP

32845

net.tcp binding: TCP 32845 (only if a third party has implemented this option for a service application)

Custom Service Applications
Inbound rule Added to Windows firewall by SharePoint

TCP

32846

Microsoft SharePoint Foundation User Code Service (for sandbox solutions)

Inbound on all Web Servers
Inbound rule Added to Windows firewall by SharePoint
Outbound on all Web and App servers with service enabled.

TCP

5725

User Profile Synchronization Service(FIM)

Synchronizing profiles between SharePoint 2013 and Active Directory Domain Services (AD DS) on the server that runs the Forefront Identity Management agent

TCP + UDP

389

User Profile Synchronization Service(FIM)

LDAP Service

TCP + UDP

88

User Profile Synchronization Service(FIM)

Kerberos

TCP + UDP

53

User Profile Synchronization Service(FIM)

DNS

UDP

464

User Profile Service(FIM)

Kerberos change password

TCP

809

Office Web Apps

Intra-farm Office Web Apps communication.

Referencia Original de Microsoft: http://technet.microsoft.com/en-us/library/cc262849.aspx

NOTA:  En ocasiones SharePoint no despliega las páginas adecuadamente y lo que se ha tenido que hacer es ejecutar el asistente de Configuración de SharePoint.

SharePoint4Fun!,

Juan Manuel Herrera Ocheita