domingo, 11 de marzo de 2012

Asegurando nuestra granja de SharePoint 2010

Cuando pensamos en seguridad dentro de la empresa para los productos de Microsoft debemos hablar de los productos para servidores Microsoft Forefront.  Hoy en día Microsoft dispone de toda la gama de infraestructura necesaria para proteger los servidores Windows Server esta son: Firewall para protección de la red interna, Antivirus para los archivos de sistema y Antivirus para el contenido de los portales.

En este artículo echaremos un vistazo a los productos Forefront disponibles para proteger nuestra granja de Servidores SharePoint 2010 y mencionaremos los otros productos que podrían estar en un escenario real dentro de las organizaciones.

Escenario:

El portal deberá exponerse de cara al internet para una extranet es decir usuarios internos que accederán el portal desde el internet.  Para ello realizaremos el siguiente diseño de arquitectura:

image

En este diseño los usuarios acceden desde una conexión al internet el portal Web de SharePoint no sin antes pasar por un primer filtro que delimita la forma de comunicarse al portal Web de SharePoint, esto lo hace a través del un servidor:

Forefront Threat Management Gateway 2010 o Forefront TMG-2010,esta configuración se le llama Edge Firewall, ya que el servidor se encuentra al final de la red interna y conectado directamente a la red externa.  Este es la primera línea de defensa limitando los puertos de acceso, inspeccionando el https. El cable de la WAN o sea que proviene del proveedor de Internet se conecta directamente a este servidor el cual tiene dos tarjetas de Red; una para la WAN y otra para la LAN o red Interna corporativa.

El Front-End de SharePoint que contiene la interfaz de usuario Web de SharePoint esta delimitada lógicamente en una zona desmilitarizada o DMZ, también es conocida como red perimetral.  Como el portal esta de cara al internet es recomendado que la comunicación sea a través de certificados de encriptación entre el cliente y el servidor y sea por medio del protocolo HTTPS o Secure Socket Layer. Aquí no se encuentra el Central Administration de SharePoint 2010 y mucho menos las bases de datos de contenido, únicamente la interfaz web que recibe las solicitudes filtradas del Forefront TMG-2010.  Aquí también instalaremos el producto para proteger todos los archivos que se suban y lean en las bibliotecas de SharePoint este es Forefront Protection 2010 for SharePoint o FPFS 2010.

El Back-End Forefront TMG 2010.  Este servidor en cuanto a producto es el mismo servidor de Edge Firewall, pero esta configurado para ser la ultima línea de defensa para la red interna o corporativa con reglas mas restrictivas especialmente para las solicitudes de entrada o inbound.

SharePoint Back-End or Database Server.  Aquí se encuentran todas las bases de datos de SharePoint (Configuración, Contenido, Servicios, Búsqueda, Perfiles de Usuario).

SharePoint Application Server; donde esta instalado el Central Administration.  Es una buena práctica recomendada por microsoft que el Central Administration este instalado en el servidor que tiene el Rol de Aplicación y que no este en el servidor Front-End donde esta expuesto a los ataques de usuarios malintencionados.   Si nos atacan el servidor Front-End no podrá afectar mucho mas allá de los servicios de la interfaz web y posiblemente la extracción del contenido del portal si el ataque fue contundente, pero podrá ser restablecido con cierta rapidez ya que los servidores de aplicación y de base de datos se encuentra protegidos por varias capas de seguridad y restricción.  Además podemos tener una configuración de la granja de alta disponibilidad donde contamos con redundancia en el front-end, aplication Server y una configuración de Cluster o Mirroring de lado de base de datos.  Si realizamos indagación o crawling de contenido que esta en File Server debemos de contar con protección a nivel de archivos y para ello debemos de tener instalado el producto Microsoft® Forefront® Endpoint Protection 2010 (FEP).

En este artículo vimos 3 productos que no deberían de faltar en nuestra granja de SharePoint para proteger nuestros servidores.

  • El Firewall Forefront Threat Management Gateway 2010
  • El Antivirus para el sistema de archivos Forefront Endpoint Protection 2010
  • Y el Antivirus para el contenido de SharePoint Forefront Protection 2010 for SharePoint.

Y por ultimo y no por ello menos importante el diseño de la arquitectura de la red (externa, perimetral e interna) para asegurarnos que los servicios que si deben estar expuestos están asegurados y los que no bien resguardados.

SharePoint4Fun!,

Juan Manuel Herrera O.

Referencias:

http://technet.microsoft.com/en-us/magazine/gg537286.aspx

http://social.technet.microsoft.com/Forums/en-US/FSSPNext/thread/01dda33b-16bd-42b0-85b1-3b87ffa6895b/

http://blogs.technet.com/b/forefront/

viernes, 2 de marzo de 2012

SharePoint 2010 Error al publicar cualquier flujo desde SharePoint Designer. Mensaje:the root activity type is invalid

 

Problema:  Desde SharePoint Designer 2010 al momento de publicar un flujo de trabajo con el cual se estaba trabajando reporta el siguiente error:

(1,1) The root activity type is invalid

Ambiente:

Pequeña Granja de SharePoint 2010. Dos Servidores: Uno de base de datos y el otro Front-End y de aplicación.  Sin Service Pack 1.0., con algunos hotfixes antes del SP1 de SharePoint 2010.  3,000 usuarios unos 1,000 concurrentes. 16 GB de Ram en cada servidor.

Diagnóstico:

Luego de revisar logs, el analizador de salud del Central Administration y no encontrar una causa probable del problema.

En el log de SharePoint aparecía repetidas veces error en el worker process de SandBoxed Solutions, con lo cual no tiene ninguna relación.

-  - Error starting worker process. - Inner Exception: System.ComponentModel.Win32Exception: CreateSandBoxedProcess failed     at Microsoft.SharePoint.Security.SandBoxInterop.StartProcess(SandBoxedProcessArguments sbpArgs, Boolean fSuspended, ProcessInformation* psandBoxProcessInfo)     at Microsoft.SharePoint.Security.SandBoxedProcess.StartProcessSuspended(SandBoxedProcessArguments sbpArgs)     at Microsoft.SharePoint.UserCode.SPUserCodeWorkerProcess.CreateSandBoxWindowsProcess(String processExeName

Solución:

Se reinicio el servicio que controla el código que corre las soluciones Sandboxed, sin ningún éxito.  Entonces decidí reiniciar el IIS, y esto resolvió el error.

SharePoint4Fun!,

Juan Manuel Herrera O.

miércoles, 29 de febrero de 2012

Guía rápida para configurar Kerberos para los servicios de SharePoint 2010

En muchas ocasiones que se configura Kerberos para los servicios relacionados con SharePoint 2010 es necesario recordar los códigos de los servicios, y algunos otros detalles que pueden pasársenos por alto.  La siguiente guía es precisamente para recordarnos esos detalles:

image

Para purgar el cache de Kerberos podemos utilizar la línea de comando kplist /purge.

Es Importante conocer la delegación que es necesario hacer en el Directorio Activo.  Hay 3 escenarios a continuación los describo:

Delegación para SQL Server Services

image

Delegación para Reporting Services

image

Delegación para servicios que dependen de c2WTS

image

SharePoint4Fun!,

Juan Manuel Herrera

viernes, 24 de febrero de 2012

Cómo programar un script de PowerShell para SharePoint 2010 para que se ejecute periódicamente

El problema:

Necesitamos realizar una tarea de mantenimiento periódicamente en el portal de SharePoint 2010, sin requerir mucho esfuerzo administrativo y que sea automático.

Solución:

Realizar un script que ejecute de lado del servidor en el Front-End de SharePoint 2010 y se ejecute periódicamente asistido por el Task Scheduler de Windows.

Para ello vamos a crear una tarea de Windows que se ejecute periódicamente y para ello necesitamos crear un archivo de lotes con extensión .bat para que el Task Scheduler lo ejecute el contenido de este archivo de lotes debe ser el siguiente:

C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe  c:\Directorio\MiScriptSharePoint2010.ps1

El script debe de validar si tiene el snap-in de SharePoint habilitado para ello escriba dentro del archivo ps1 la siguiente instrucción:

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null)
{
  Write-Host "Loading SharePoint Powershell Snapin"
  Add-PSSnapin "Microsoft.SharePoint.Powershell"
}

El procedimiento para crear una tarea en el Task Scheduler de Windows Server 2008 r2 es muy intuitivo y esta documentado por todas partes por lo que no lo voy a documentar en el artículo.  Aquí uno de estos enlaces: http://allcomputers.us/windows_server/windows-server-2008-r2--task-scheduler.aspx

Recomendación:

Para evidenciar que el script se ejecutó y realizó la operación requerida registre en un archivo log.  Para ello utilice Start-Transcript para iniciar el registro del log y Stop-Transcript para finalizarlo.  Para registrar cada evento utilice Write-Host.

Ejemplo:

Start-Transcript [ruta del archivo log]

Write-Host (“Mensaje”+Variable)

Stop-Transcript

El Script completo puede ver se de la siguiente forma:

image

Si quiere saber mas del propósito de este Script vea el siguiente artículo: http://jmhogua.blogspot.com/2012/02/script-de-power-shell-de-sharepoint.html .

La tarea en el Task Scheduler puede lucir similar a la siguiente imagen:

image

En esta ocasión revisamos el procedimiento para programar una tarea que se ejecuta periódicamente y nos apoya en una labor de mantenimiento para el servidor SharePoint 2010.

SharePointJust4Fun!,

Manolo Herrera

miércoles, 22 de febrero de 2012

Script de Power Shell de SharePoint 2010 para eliminar los elementos de una lista mayor a 60 días de antigüedad

Problema:

Hay una lista que constantemente crece debido a que guarda los usuarios que ha visitado el portal y es necesario depurar esta lista luego de 60 días de caducidad.  La lista actualmente esta en más de 50,000 elementos y debería de mantenerse alrededor de 7,000 elementos como máximo.

Solución:

Utilizar Power Shell para crear un script que realice esta tarea.  El Script consta de 4 Partes que a continuación describo:

1) Cargar en memoria la biblioteca de clases de SharePoint para poder ejecutar el script desde una tarea de Windows.

[void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

2) Obtener el listado de elementos a eliminar.  Esto lo hacemos por medio del lenguaje de consultas de SharePoint llamado CAML.

$site    =     new-object Microsoft.SharePoint.SPSite("Dirección url de mi colección de sitios")                                                       
$web     =    $site.rootweb                                                                                               
$list    =    $web.Lists["Nombre de la lista"]                                                                             
$DeleteBeforeDate = [Microsoft.SharePoint.Utilities.SPUtility]::CreateISO8601DateTimeFromSystemDateTime([DateTime]::Now.AddDays(-60))
$caml='
   <Where>
      <Lt>
         <FieldRef Name="CampoFechaAComparar" />
         <Value Type="DateTime">{0}</Value>
      </Lt>
   </Where>
' -f $DeleteBeforeDate
$query=new-object Microsoft.SharePoint.SPQuery
$query.Query=$caml

$col=$list.GetItems($query)

3) Copiar los Id’s de los elementos selccionados a un arreglo para evitar el error “Collection was modified; enumeration operation may not execute”

$items = New-Object System.Collections.ArrayList
#Obtiene los elementos a eliminar (No los elimina de una sola vez para evitar el error de elementos perdidos dentro del loop)
$col |  % {
$items.add($_.id)
}

4) Se eliminado los elementos de la lista por su ID.

# Procede a desplegar los elementos a borrar
$contador = 0
Foreach($item in $items)
{
$contador ++
$detalle = "No.: "+$contador+" |Id: "+$item
write-host $detalle
$col.DeleteItemById($item)
}
$mensaje = "total de elementos eliminados: "+$contador
write-host $mensaje
$web.Dispose()
$site.Dispose()  

Abajo todo el código.

image

Parte de la solución fue extraída del siguiente sitio:

http://blogs.flexnetconsult.co.uk/colinbyrne/2008/02/26/PowerShellSharePointThreeWaysToDeleteAListItemIDCAMLStringMatching.aspx

Mejoras:

En cuando a desempeño el realizar la operación DeleteItemById() demora 10 a 15 segundos en realizarla así que 40,000 elementos demorará aproximadamente 11 horas que no es muy eficiente, pero será solo una vez ya que no se permitirá luego crecer la lista con demasiados elementos para eliminar.

SharePoint4Fun,

Juan Manuel Herrera O.

martes, 21 de febrero de 2012

Sabias que en Project Server puedes mantener versiones de los proyectos

Esta funcionalidad esta disponible desde Project Server 2007, pero es poco conocida sin embargo es muy útil en casos donde necesitamos recuperar el proyecto antes de cambios que no fueron aceptados.

Para la versión 2007 la opción se llama “Schedule Backup”

image

En la versión 2010 la opción se llama acertadamente “Daily Schedule Backup”  (Algo que le hizo falta aclararlo en la versión 2007).

image

Ambas opciones despliegan la misma pantalla que permite definir el número de versiones que retendrá de los proyectos.  Es importante distinguir que la información es almacenada en la base de datos de archivo (Usualmente ProjectServer_Archive) y no la de publicación (ProjectServer_Published) la que usualmente se utiliza en el Centro de Proyectos y es mas de naturaleza transaccional.

clip_image002

Tome en cuenta que este número incrementará considerablemente el tamaño de la base de datos ProjectServer_Archive de Project Server.

Para realizar el respaldo “Administrativo” seleccione la opción “Administrative Backup”

image

Esta opción realizará la copia de respaldo hacia la base de datos ProjectServer_Archive en ese preciso momento cuando presione el botón “Backup”.

image

Para restaurar una versión anterior diríjase a la opción “Administrative Restore”

image

Seleccione la versión que desea restaurar (Esto trasladará la información del proyecto de la base de datos ProjectServer_Archive a la base de datos ProjectServer_Draft; donde están los proyectos borradores) y presione el botón Restore.

image

Nota: Para poder mover los proyectos restaurados de la base de datos de borradores ProjectServer_Draft es necesario ejecutar nuevamente el proceso de publicación.  Un usuario con suficientes permisos puede visualizar este proyecto en borrador desde el MS Project Professional y seleccionar la opción de publicación. Ojo que el que publique el proyecto será el nuevo administrador del mismo.

 

Esta opción nos permitirá depurar los proyectos muy antiguos sin desaparecerlos del todo.  Si deseamos consultarlos podemos utilizar Reporting Services que viene integrado con SharePoint para mostrar la información de estos proyecto que ya no estarán en la base de datos de publicación pero si en la de Archivo.

Hasta la próxima,

Juan Manuel Herrera O.

lunes, 6 de febrero de 2012

Desarrollo en SharePoint 2010: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible

 

Escenario:

Una Solución de granja o Farm solution, realizaba una conexión hacia el mismo servidor de SQL Server 2008 R2 donde estaban las bases de datos de SharePoint 2010, pero reportaba el siguiente mensaje:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)     at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)     at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)     at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)     at System.Da...      8b06f50c-8cdf-49aa-a527-63b636efc09d

Lo extraño de esto es que si se ingresaba al servidor WFE de SharePoint 2010 y se ingresaba a la´solución desde el navegador habilitaba la conexión al servidor de SQL Server 2008 y desplegaba al información  y luego los demás usuarios podían acceder a la solución sin problemas.

La solución:

Aunque al final fue obvia al principio no fue así, fuimos validando y descartando los problemas uno a uno. De la siguiente forma:

1) Se revisó el código línea por línea registrando en el visor de eventos cada paso para validar que si obtuviera la conexión y se determino que al momento de ejecutar el Query reportaba el error de arriba.

2) Se verificó que no estuvieran habilitados los Firewall de Windows Server 2008 r2 en ambos servidores.

3) Se verificó que la cuenta de SQL Server tuviese acceso a la base de datos.

4) No se verificó si los servicios de SQL Server estuviesen levantados ya que eran los mismos que usaba SharePoint y el portal estaba arriba y funcionando correctamente.

5) La conexión hacia la base de datos parecía correcta ya que era la instancia predeterminada es decir el nombre del servidor.  El detalle estaba que este servidor de SQL Server tenía un alias porque no se conectaba por el puerto predeterminado de SQL Server 1433 sino uno personalizado 4050 por ejemplo y esto era todo el problema la conexión debía hacerse a través del alias.

En conclusión algo que debemos de verificar siempre es si la base de datos utiliza un alias y la rezón de porque lo hace ya que esto puede afectar nuestra conexión hacia la misma.

SharePoint4Fun!,

Juan Manuel Herrera O.