Instalación PHP en Windows 2003 con FastCGI Extension y con soporte a SQL 2008 R2

En realidad este post ya no debería de escribirlo, pues Windows 2003 ya esta fuera de soporte por parte de microsoft y ya va en via de desaparecer, pero aun muchos en el mundo utilizan Win 2003 y necesitan este tipo de configuración!!!

Mi necesidad se basa en que hay un aplicativo específico que uso y funciona muy bien en Windows 2003 R2 x64 y si no lo migro a Windows 2008/2012 este se pone muy pero muy lento, asi que para que hacerme problema, lo reinstalo de cero en un  servidor Win2003 que si anda muy bien.

Manos a la obra:

Suposiciones:

  • Ya tienes corriendo Windows 2003 R2 x64 con SP2
  • Tienes instalado el IIS 6.o

Ojo: antes de instalar aplicaciones x86 en servidores x64 hay que decirle a windows que pueda ejecutar programas de 32 bits, para esto y dependiendo de la version de windows tienen que ejecutar el siguiente comando dentro del command prompt (Inicio->Ejecutar->cmd) (a mi me funciono esto)

cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

Caso contrario les va a aparecer el siguiente mensaje: (“%1 is not a valid Win32 application.“)  aqui les dejo el KB de Microsoft que habla sobre este problema: http://support.microsoft.com/kb/894435

Instalación de PHP 5.3.27

Actualmente existe la versión 5.4 y 5.5 de php pero a pesar que he tratado de instalarlo no he podido hacerlo funcionar con el soporte para SQL 2008, pero si tu objetivo es solo instalar PHP 5.4 o 5.5 estas instrucciones son validas.

1.- Descargar de la web de php la version mencionada, para eso vamos al siguiente link: http://windows.php.net/download/#php-5.3 para nuestro caso y siempre los binarios y la version Non Thread Safe ojo es muy importante recordar esto, pues de esto dependerá las librerias que vamos a activar.

php-mssql-2003-1

2.- Desempaquetar el archivo y colocar todos los archivos dentro de la carpeta c:\php

php-mssql-2003-2

3.- Modificar el archivo “c:\php\php.ini-production”, este archivo primero hay que renombrarlo a “php.ini” y luego modificar los siguientes parametros para que sea ejecutado por “FastCGI Extension” . (La idea es: que cuando el servidor reciba peticiones de paginas con extencion .php, estan sean pasadas a la extención FastCGI y esta las procese, de esta manera descongestionamos el servidor con este tipo de solicitudes ver mas detalles aqui).

  • Descomentar (quitarle el punto y coma”;”) y establecer la llave  cgi.force_redirect = 0
  • Descomentar (quitarle el punto y coma”;”) y establecer la llave, fastcgi.impersonate = 1
  • Descomentar (quitarle el punto y coma”;”) y establecer la llave, extension_dir a la carpeta ‘ext’, en nuestro caso c:\php\ext
  • Descomentar (quitarle el punto y coma”;”) y establecer la llave, date.timezone a la zona horaria de tu pais.

4.- Copiar  el archivo php.ini modifcado a la carpeta de C:\Windows

php-mssql-2003-3

 

5.- Instalación de FastCGI extención en IIS6

php-mssql-2003-4

6.- Configuración de FastCGI extencion

la configuración es bastante simple, pero a veces por algun motivo no funciona solo modificando este archivo, por lo que les voy a dar 2 opciones para hacerlo:

  • Opcion 1.- Modificando el archivo C:\WINDOWS\system32\inetsrv\fcgiext.ini  .- Bien, aqui hay que modificar este archivo colocando al final lo siguiente:
[Types]
php=PHP
[PHP]
ExePath=C:\PHP\php-cgi.exe
InstanceMaxRequests=5000
EnvironmentVars=PHP_MAX_REQUESTS:5000

Bastaría con eso!!!!!, pero a mi me ha sucedido que colocando esto NO me funcionaba y me daba el siguiente error:

FastCGI Error
The FastCGI Handler was unable to process the request.
--------------------------------------------------------------------------------

Error Details:

Section [c:\php\php-cgi.exe] not found in config file.
Error Number: 1413 (0x80070585).
Error Description: Invalid index.
HTTP Error 500 - Server Error.
Internet Information Services (IIS)

Este error es muy comun y en la web encontras que la respuesta es modificar el archivo C:\WINDOWS\system32\inetsrv\fcgiext.ini  con los datos mencionado arriba!!!!… pero si ya lo hicimos!!! asi me paso 3 horas dandole vueltas hasta que por fin encontre algo que me saco del problema.

  • Opción 2.-  Si con la opcion 1 no pudiste hacer correr el FastCGI, la modificacion del archivo lo debes hacer con una linea de comandos. hacer lo siguiente:

a).-Inicio->Ejecutar->cmd

        cd c:\Windows\system32\inetsrv
        c:\Windows\system32\inetsrv>cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"c:\php\php-cgi.exe"

Por algún motivo que desconozco, muchas veces FastCGI no reconoce lo que escribimos directamente sobre el archivo fcgiext.ini, pero al hacerlo por script todo anda bien!!!!!

PD. el resultado lo probaremos despues de terminar de configurar PHP.

 

7.- Configuracion de  IIS6 para correr PHP via FastCGI

Ahora viene lo mas facil, que es decirle al IIS 6 que toda solicitud de paginas PHP lo traslade a FastCGI y todo estará corriendo.

  • Abrir la consola de IIS6 y dirigirse a la sección “Web Service Extencion” y habilitar “FastCGI Handler” y ponerlo como “allowed” o permitido en español.
    php-mssql-2003-5
  • Luego,….. ir a propiedades de la carpeta “Web sites”, luego ir a la lengüeta “home directory” y presionar el botón “configuration”php-mssql-2003-6php-mssql-2003-7
  • Buscar el archivo fcgiext.dll y ponerlo como executable,…. en extencion colocar “.php” .. ver imagen
    php-mssql-2003-8Luego, cerrar todas ventanas y reiniciar el IIS
  • Para reiniciar ya sabemos que tenemos que colocar IISRESET dentro del command prompt
    php-mssql-2003-9

Bien, si hemos colocado todo esto ya deberiamos de tener corriendo PHP sobre Windows….

8.- Probando……

Hasta aqui, solo hemos configurado PHP bajo Windows 2003 nada mas……. Para probar creamos un archivo con extención php (test.php) en la siguiente ruta:  C:\Inetpub\wwwroot     y colocamos lo siguiente:

<?php
phpinfo();
phpinfo(INFO_MODULES);
?>

php-mssql-2003-10

Luego vamos a un navegador y lo ejecutamos (http://ip-de-servidor/test.php)….. si todo ha salido bien, debería de mostrarnos la siguiente pantalla:

php-mssql-2003-11

 

Hasta aqui……. ya tenemos instalado PHP en Windows 2003 R2 x64 y corriendo bajo FastCGI….. Ahora nos queda configurar para que  PHP pueda soportarconsultas SQL 2008, para esto hay que seguir los siguientes pasos.

 

 Instalación de librerias MSSQL en PHP

Bien, hasta el punto anterior si seguiste los pasos, ya debes de poder hacer consultas a paginas php dentro de tu server, por defecto esta versión ya viene activado las librerias MySQL, por lo que si deseas instalar algún programa q utilice este motor de BD ya lo puedes hacer…. pero si lo que necesitas es hacer consultas a una BD MSSQL 2008 no podrás, pues falta instalar y habilitar las librerías de este motor.

1.- Descargar las librerias de este sitio de Microsoft:

http://www.microsoft.com/en-us/download/confirmation.aspx?id=20098

Para nuestro caso escoger la version 2 que es la que da soporte a Windows 2003

php-mssql-2003-12

 

En realidad al ejecutar este archivo, va a desempaquetar en una carpeta que le indiques las librerias necesarias, luego hay que copiarlas dentro de la carpeta de extenciones de php…

2.- Una vez descargado, ejecutamos el archivo SQLSRV20.EXE y mandamos los archivos a una carpeta de nuestra elección

php-mssql-2003-13

 

3.- En la carpeta a donde hemos descomprimido vamos a encontrar las librerias que nos va a permitir conectarnos a MSSQL, para esto hay que tener mucho cuidado en elegir que librería utilizar.

php-mssql-2003-14

 

4.- RECUERDAN que en el punto 1 de la seccion anterior (Instalación de PHP 5.3.27) les mencione que se fijen que verion estabamos bajando de PHP??? pues bien, bajamos la versión  “Non Thread Safe” por lo tanto la librería que deberíamos utilizar será la que mencione “nts” y compilado con la versión VC9 (significa Visual C++ 9).

Entonces copiamos a la carpeta “c:\php\ext” los siguientes archivos: php_sqlsrv_53_nts_vc9.dll y php_pdo_sqlsrv_53_nts_vc9.dll(opcional)

php-mssql-2003-15

 

5.- Solo nos falta verificar 2 cosas muy simples dentro del archivo c:\php\php.ini

  • Que la llave extension_dir tenga como valor a “C:\PHP\ext\”
extension_dir="C:\PHP\ext\"
  • Al final del archivo dentro de la seccion extenciones habilitar las librerias como extenciones colocando el siguiente valor
[PHP_SQLSRV]
extension=php_sqlsrv_53_nts_vc9.dll
[PHP_PDO_SQLSRV]
extension=php_pdo_sqlsrv_53_nts_vc9.dll

6.- Probar que la librería haya cargado dentro del PHP.

Volver al navegador y ejecutamos el archivo test.php de nuevo (http://ip-de-servidor/test.php)….. si todo ha salido bien, debería de mostrarnos la siguiente pantalla:

php-mssql-2003-16

 

Bien, eso es todo por ahora, cualquier consulta me lo hacen saber….

Configurar Diccionario en español para el cliente de Zimbra Desktop

“Este pequeño manual NO es una copia de alguna pagina de internet, es propiedad intelectual de Martín Lugo Palmadera, ud. es libre de usarlo y distribuirlo, pero con la condición de citar la fuente…. http://martinlugo.networksolutions-peru.com”

Sucede que cuando instalamos ZIMBRA y deseamos utilizar como cliente de correo Zimbra desktop, esta viene configurado por defecto con el corrector ortográfico en Ingles, por lo que cuando escribimos un correo, todas las palabras quedan marcadas en rojo, pues el sistema no reconoce las palabras que digitamos.

Pues bien, para esto me he basado en unas instrucciones de la misma web de Zimbra (LINK)

Para los que les aburre leer en ingles y necesitan que los guie, aqui la versión en castellano y con imagenes:

Como Instalar el diccionario en Español-España

1.- Descargar el diccionario en Español a cualquier ubicación de nuestra PC de la siguiente dirección web:

2.- Descomprimir el archivo en la ubicación a donde descargamos el archivo ZIP. Al descomprimir este archivo nos mostrará 2 archivos:

diccionario_zimbra-1

3.- Copiar estos 2 archivos y dependiendo del SO a las siguientes carpetas (En mi caso Windos 7 – 64 bits)

diccionario_zimbra-2

Para otros SO aqui va las rutas:

Windows: <install>\win32\prism\xulrunner\dictionaries
MacOS: <install>/macos/prism/Prism.app/Contents/Frameworks/XUL.framework/dictionaries
Linux: <install>/linux/prism/xulrunner/dictionaries

4.- Editar el archivo user.js de las siguientes carpetas:

  • <install>/data/profile/user.js                   en mi caso es C:\Program Files (x86)\Zimbra\Zimbra Desktop\data\profile\user.js , y
  • X:/Users/***/AppData/Local/Zimbra/Zimbra Desktop/profile/user.js            en mi caso es C:\Users\mlugo\AppData\Local\Zimbra\Zimbra Desktop\profile\user.js

diccionario_zimbra-3

diccionario_zimbra-4

Se corrige la siguiente linea “spellchecker.dictionary” de la siguiente manera:

  • user_pref(“spellchecker.dictionary”, “es-ES”);

Ambos archivo deberían de quedar de la siguiente manera:

diccionario_zimbra-55.- Reiniciar Zimbra Desktop.

No basta con cerrar el programa, hay que cerrarlo desde el administrador de tareas y volver a abrirlo:

diccionario_zimbra-6

6.- Probamos el diccionario dentro del ZD.

diccionario_zimbra-7

Es todo!!!

Martín Lugo Palmadera

Configurar PHP 5.4.14 en IIS 7 con soporte MSSQL 2008 R2 en Win2008 x64

He tenido la necesidad de migrar algunos  servidores con SO Win2003 hacia Win2008, pero con el detalle que estos servidores (Wind 2003) tenian aplicaciones PHP y con soporte a bases de datos SQL 2000.

He leido que en esta versión (2008) de SO ya no da soporte a la famosa libreria php_mssql y por la tanto la pregunta es como hacer esto y de la mejor forma.

Supongo:(Escenario)

===================

1.- Tienes un servidor Win 2008 R2 x64 corriendo sin problemas.

2.- Tienes instalado en este servidor la Base de datos SQL 2008 R2.

3.- Tienes instalado el Rol de dw Servidor Web .

Pasos 1.- Instalando PHP en IIS 7

Lo que recomiendo es hacerlo a traves de la plataforma web del mismo sitio de microsoft:

http://www.microsoft.com/web/platform/phponwindows.aspx

Webinstaller

 

Este proceso va descargar un ejecutable EXE el cual deberias de instalar, (ya saben siguient siguiente, etc.)

Al final reiniciamos el servidor y veremos que dentro del administrador del IIS 7 se habrá colocado un icono PHP justo para ser administrador, es desde  aqui donde podremos manipular las variables del php.

 

Si ingresamos al modulo vamos a ver lo siguiente: (detalles mas abajo)

1.- La version php instalada en IIS 7

2.- Si deseamos ver la configuración y extenciones que tiene nuestra instalación nada mejor que ver el archivo phpinfo()

3.- Ruta del archivo de configuración de PHP (php.ini), y si deseamos ver el contenido, nos basta con darle clic.

4.-Con esta opcion podemos habilitar/inhabilitar y hasta agregar extenciones, es aqui donde trabajaremos mas adelante para agregar extenciones de MSSQL.

5.- Lo mismo que el punto 4 pero solo nos permite agregar extenciones.

Pueden ver un video resumido de esto aqui: http://www.youtube.com/watch?v=u9YVMXNHPco

Paso 2.-  Instalar el Driver de php para SQL server

Decargar la última version Driver de PHP ára SQL : http://www.microsoft.com/en-us/download/confirmation.aspx?id=20098

Este archivo ejecutable lo que hace es descargar una serie de librerias en un archivo EXE. Una vez descargado lo ejecutamos y nos parecerá un mensaje pidiendonos la ruta a donde va a descargar las librerias (*.dll), alli escogemos la carpeta “ext” de nuestra instalación, en mi caso sería:  C:\Program Files (x86)\PHP\v5.4\ext

Este archivo al momento de ejecutarse y desempaquetarse genera un archivo de ayuda (SQLSRV_Help.chm) el cual nos da todos los pasos para implementar este driver.

Bien, por si no desean leerse este archivo de ayuda se los voy a resumir:

Una vez que desempaquetamos las librerias y dependiendo de la version de PHP quen tengamos instalada vamos a habilitar (ver imagen )las librerias correspondientes. En mi ejemplo yo tengo instalado la versión 5.4.14 por lo tanto habilitare las librerias:

  • php_pdo_sqlsrv_54_nts.dll
  • php_pdo_sqlsrv_54_ts.dll
  • php_sqlsrv_54_nts.dll
  • php_sqlsrv_54_ts.dll

 

Con esto ya estaría habilitado PHP con soporte a consultas a SQL 2008, ahora lo que nos queda es probar la conexión!!.

3.- Probando la conexion.

Para probar con una base de datos cualquiera, vamos a descargar la base de datos ( AdventureWorks) de Microsoft de esta direccion:

http://go.microsoft.com/fwlink/?LinkID=67739

Al descargar y desempaquetar nos va a mostrar 2 archivos:

  • AdventureWorksDW_Data.mdf
  • AdventureWorksDW_Log.LDF

Estos archivos hay que subirlos a la base de datos. (La mejor forma d hacerlo es siguiendo este Link):

http://msdn.microsoft.com/en-us/library/ms190209.aspx

Bien ahora si, ya instalado la BD vamos a probar creando un archivo php y solicitando datos a nuestra BD.

Creamos un archivo llamado test.php en la raiz de nuestro servidor web y probamos:

test.php

<?php
/* Specify the server and connection string attributes. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");

/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
     echo "Unable to connect.</br>";
     die( print_r( sqlsrv_errors(), true));
}

/* Query SQL Server for the login of the user accessing the
database. */
$tsql = "SELECT CONVERT(varchar(32), SUSER_SNAME())";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
     echo "Error in executing query.</br>";
     die( print_r( sqlsrv_errors(), true));
}

/* Retrieve and display the results of the query. */
$row = sqlsrv_fetch_array($stmt);
echo "User login: ".$row[0]."</br>";

/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>

Este archivo test.php lo colocamos en C:\inetpub\wwwroot

El resultado es esto:

 

Con esto hemos probado que ya tenemos el PHP listo para hacer consultas a la BAse de datos de SQL 2008 R2 x64

Importante: Aqui solo he probado la conexión usando autenticacion por Windows!!! Existe otra forma de conexión a la Base de datos que es la autenticación por SQL Server, el cual lo vere en una actualización de este post.

 

Para los que desean seguir ahondando aqui les mando un link que trata el mismo tema de manera distinta: http://www.deepshiftlabs.com/dev_blog/?p=1880&lang=en-us

Configurar Zimbra 8 para control de usuarios en Centos 6.3

Configurar Zimbra para control de usuarios

“Este pequeño manual NO es una copia de alguna pagina de internet, es propiedad intelectual de Martín Lugo Palmadera, ud. es libre de usarlo y distribuirlo, pero con la condición de citar la fuente…. http://martinlugo.networksolutions-peru.com”

El escenario es el siguiente:

He instalado una versión fresca Zimbra (versión 8) y esta funcionando al 100%, todos los usuarios envian y reciben mensajes.

Se me ha solicitado que solo algunos usuarios puedan  enviar correos al exterior sin restricciones  y otros solo correo local y a algunos dominios conocidos.(Tambien es recomendable poner restricciones en el Header_Checks)

(Hacer esto es con la version de nativa de postfix es simple y rapida), pero con Zimbra todo cambia, pues agregar las sentencias sobre el archivo de configuracion (main.cf) se borrará al siguiente reinicio.

Para que no suceda esto, vamos a modificar el archivo /opt/zimbra/conf/zmconfigd.cf

Paso 1: Editar el archivo “zmconfigd.cf” como root

 

 

#nano /opt/zimbra/conf/zmconfigd.cf

 

Agregar al final del grupo MTA lo siguiente (antes de “RESTART mta):

 

POSTCONF smtpd_restriction_classes inter, local
POSTCONF inter FILE zmconfigd/postfix_restrict_inter.cf
POSTCONF local FILE zmconfigd/postfix_restrict_local.cf

Creamos 2 variable inter y local (los usuarios que tengan el valor inter podran enviar correos sin restricciones y los usuarios que posean el valor local, solo podran enviar correos a algunos dominios listados en otro archivo), ademas le decimos que sus valores lo lea de los archivos ubicado dentro de la carpeta “zmconfigd” “postfix_restrict_inter.cf” y “postfix_restrict_local.cf” respectivamente.

Paso 2:

Modificar el  archivo “smtpd_sender_restrictions.cf” :

#nano /opt/zimbra/conf/zmconfigd/smtpd_sender_restrictions.cf

Agregar las siguientes lineas al inicio:

 check_sender_access hash:/opt/zimbra/conf/zmconfigd/usuarios
 check_sender_access hash:/opt/zimbra/conf/zmconfigd/prohibido
 hash:/opt/zimbra/conf/zmconfigd/access
 reject_unknown_sender_domain
 reject_invalid_hostname

En el archivo “smtpd_recipient_restrictions.cf”  Agregar la siguiente linea debajo de “permit_mynetworks”

#nano /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf
permit_mynetworks
check_sender_access hash:/opt/zimbra/conf/zmconfigd/usuarios
check_sender_access hash:/opt/zimbra/conf/zmconfigd/prohibido

Deberia quedar asi mas o menos:

%%contains VAR:zimbraServiceEnabled cbpolicyd, check_policy_service inet:localhost:@@cbpolicyd_bind_port@@%%
reject_non_fqdn_recipient
reject_unlisted_recipient
permit_mynetworks
check_sender_access hash:/opt/zimbra/conf/zmconfigd/usuarios
check_sender_access hash:/opt/zimbra/conf/zmconfigd/prohibido
%%contains VAR:zimbraMtaRestriction reject_invalid_helo_hostname%%
%%contains VAR:zimbraMtaRestriction reject_non_fqdn_helo_hostname%%
%%contains VAR:zimbraMtaRestriction reject_non_fqdn_sender%%
%%contains VAR:zimbraMtaRestriction reject_unknown_client_hostname%%
%%contains VAR:zimbraMtaRestriction reject_unknown_helo_hostname%%
%%contains VAR:zimbraMtaRestriction reject_unknown_sender_domain%%
%%explode reject_rbl_client VAR:zimbraMtaRestrictionRBLs%%
%%contains VAR:zimbraMtaRestriction check_policy_service unix:private/policy%%
permit

 

 

 

 

 

Paso 3.- Crear el archivo “usuarios” y “prohibido”:

Si nos percatamos, he ingresado también un archivo llamado “prohibido”, esto sirva para decirle a Zimbra que los dominios que coloque allí van a estar prohibidos de ser enviados

#nano /opt/zimbra/conf/zmconfigd/usuarios
pepito@mydomain.com inter
luchito@mydomain.com local
 ................

Ahora el archivo prohibido:

#nano /opt/zimbra/conf/zmconfigd/prohibido
yahoo.com.pe	reject

Paso 4.- Crear los archivos postfix_restrict_inter.cf y postfix_restrict_local.cf

#nano /opt/zimbra/conf/zmconfigd/postfix_restrict_inter.cf

y colocar esto dentro:

permit

Ahora creamos el segundo archivo:

#nano /opt/zimbra/conf/zmconfigd/postfix_restrict_local.cf

y colocar esto dentro:

check_recipient_access
hash:/opt/zimbra/conf/zmconfigd/interno
reject

Paso 5.- Crear el archivo interno y access

Dentro de este archivo llamado “interno” vamos a colocar los dominios que queremos que envien lo usuarios restringidos

#nano /opt/zimbra/conf/zmconfigd/interno

y colocar alli los dominios que a los que solo podrá enviar mail

dominio1.com.pe      ok
dominio2.com.pe   ok

Ahora creamos el archivo Access:

#nano /opt/zimbra/conf/zmconfigd/access

colocar un espacio en blanco dentro de este archivo “access” y grabar

Paso 6.- indexar archivos “usuarios” “interno” “access”

postmap /opt/zimbra/conf/zmconfigd/usuarios
postmap /opt/zimbra/conf/zmconfigd/interno
postmap /opt/zimbra/conf/zmconfigd/access
postmap /opt/zimbra/conf/zmconfigd/prohibido

Paso 7.- Modificar la variable mynetworks a 127.0.0.0/8 y la red interna de la empresa, esto hara que lo spammer no puedan utilizar nuestro servidor como relay, sino que el postifx solo aceptará conexiones de el mismo, previa validacion del usuario que se trata de conectar Para esto hacer lo siguiente:

#su - zimbra
$ zmprov modifyServer mail.dominio.com.pe zimbraMtaMyNetworks '127.0.0.0/8 192.168.0.0/24'
$ postfix reload

Paso 8.- Reiniciar servicios y listo!!!!!!!!!

#su - zimbra
$ zmmtactl restart

Cuando PHP-mssql no funciona Centos 6.3.

Me ha sucedido que cuando instalo un nuevo servidor y esta requiere conectarse a una BD MSSQL 2008 por php, a veces no funciona, entonces hize este pequeño manual de paso que segui para que me funciones.

 setup (deshabilito el firewall y  configuro la tarjeta de red)
 nano /etc/selinux/config  (deshabiltar SELinux)
 nano /etc/sysconfig/network-scripts/ifcfg-eth0 (Configurar la tarjeta de red)
 service network restart
 ping yahoo.com (pruebo si tengo coneccion a internet)

Actualizo mis repositorios

 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
  rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
  cd /tmp/
  wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
  rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
  rpm --import https://fedoraproject.org/static/0608B895.txt
  wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
  rpm -ivh epel-release-6-8.noarch.rpm
  yum install yum-priorities

Instalar por yum php php-devel php-mssql freetds

En este orden:

yum update
yum groupinstall 'Development Tools'
yum install httpd
yum install freetds
yum install php php-devel php-mssql
service httpd restart
php -m (verifico que modulos tiene instalado el php, alli debe figurar php-mssql)

Verificar pagina
================
SI NO FUNCIONA verificar en PHP.INI la variable short_open_tag este en On

nano /etc/php.ini
short_open_tag = On

Reiniciar el servidor!!!

Probar!!!

Backup y Restaurar Servidores (Probado en Zimbra 7.2 y 8.09)

Con este Post, vamos sacar copias de seguridad y restaurar en un sistema Zimbra ya instalado y corriendo.

 

Backup de Zimbra

Para sacare una copia de Zimbra 7.2 utilizamos el siguiente script:

#!/bin/bash

 # Zimbra Backup Script
 # Requires ncftp to run
 # This script is intended to run from the crontab as root
 # Date outputs and su vs sudo corrections by other contributors, thanks, sorry I don't have names
 # to attribute!
 # Free to use and free of any warranty!  Daniel W. Martin, 5 Dec 2008

 start_date="$(date +%F)"

 # Outputs the time the backup started, for log/tracking purposes
 echo Time backup started = $start_date at $(date +%T)
 before="$(date +%s)"
 rm -rvf /backup/zimbra/*

 # Live sync before stopping Zimbra to minimize sync time with the services down
 # Comment out the following line if you want to try single cold-sync only
 rsync -avHK --delete /opt/zimbra/ /backup/zimbra

 # which is the same as: /opt/zimbra /backup
 # Including --delete option gets rid of files in the dest folder that don't exist at the src
 # this prevents logfile/extraneous bloat from building up overtime.

 # Now we need to shut down Zimbra to rsync any files that were/are locked
 # whilst backing up when the server was up and running.
 before2="$(date +%s)"

 # Stop Zimbra Services
 su - zimbra -c "/opt/zimbra/bin/zmcontrol stop"
 sleep 15

 # Kill any orphaned Zimbra processes
 kill -9 `ps -u zimbra -o "pid="`

 # Only enable the following command if you need all Zimbra user owned
 # processes to be killed before syncing
 # ps auxww | awk '{print $1" "$2}' | grep zimbra | kill -9 `awk '{print $2}'`

 # Sync to backup directory
 rsync -avHK --delete /opt/zimbra/ /backup/zimbra

 # Restart Zimbra Services
 su - zimbra -c "/opt/zimbra/bin/zmcontrol start"

 # Calculates and outputs amount of time the server was down for
 after="$(date +%s)"
 elapsed="$(expr $after - $before2)"
 hours=$(($elapsed / 3600))
 elapsed=$(($elapsed - $hours * 3600))
 minutes=$(($elapsed / 60))
 seconds=$(($elapsed - $minutes * 60))
 echo Server was down for: "$hours hours $minutes minutes $seconds seconds"

 # Create a txt file in the backup directory that'll contains the current Zimbra
 # server version. Handy for knowing what version of Zimbra a backup can be restored to.
 su - zimbra -c "zmcontrol -v > /backup/zimbra/conf/zimbra_version.txt"
 # or examine your /opt/zimbra/.install_history

 # Display Zimbra services status
 echo Displaying Zimbra services status...
 su - zimbra -c "/opt/zimbra/bin/zmcontrol status"

 # Create archive of backed-up directory for offsite transfer
 # cd /backup/zimbra
 tar -zcvf /home/backup/backup/${start_date}-dominio-com.tgz -C /backup/zimbra .
 rm -rf /backup/zimbra/*

 ############ We don't make the file transfer from here we do it from the XM1-BCK2 ###########
 # Transfer file to backup server
 # ncftpput -u  -p / /tmp/mail.backup.tgz

 # Outputs the time the backup finished
 # echo Time backup finished = $(date +%T)

 # Calculates and outputs total time taken
 after="$(date +%s)"
 elapsed="$(expr $after - $before)"
 hours=$(($elapsed / 3600))
 elapsed=$(($elapsed - $hours * 3600))
 minutes=$(($elapsed / 60))
 seconds=$(($elapsed - $minutes * 60))
 echo Time taken: "$hours hours $minutes minutes $seconds seconds"

Grabamos estos comandos en un archivo en cualquier lado con la extención sh (ejemplo: backup_zimbra.sh)

(Lo que hace este  script es muy sencillo: se encarga de copiar todo la carpeta /opt/zimbra al directorio /backup, luego detiene los servicios y realiza nuevamente la copia para asegurarse de transferir los archivos que estaban en uso y asi minimizar el tiempo de caida.)

Ojo: asegurarse de colocar bien el directorio a donde quisiéramos hacerle un backup, en mi caso particular lo he direccionado a otro disco duro físico.

 

Restaurar el Backup en una instalación fresca

Para restaurar la copia de seguridad, lo unico que hay que hacer es reemplazar la carpeta /opt/zimbra del nuevo servidor por la que tenemos en nuestro backup

En el Nuevo servidor hacer esto:

Paso 1.- Apagar los servico de zimbra por si estuvieran levantados y renombrar carpeta /opt/zimbra

#su - zimbra
$zmcontrol stop
$exit
#mv /opt/zimbra  /opt/zimbra_old

 

Paso 2.- Copiar el archivo de backup al nuevo servidor, ejemplo a la carpeta /opt/zimbra

Crear carpeta /opt/zimbra

#mkdir /opt/zimbra

Utilizar algun gestor de archivos para copiar el archivo de backup backup-dominio-com.tgz hacia /opt/zimbra del nuevo servidor

Paso 3.- Descomprimir el archivo de backup en la carpeta /opt/zimbra

Ejemplo:

 

#cd /opt/zimbra

# tar -xzvf backup-midominio.com.tgz

Paso4.- Con los siguientes comandos se verifica y repara permiso a la carpeta  descomprimida /opt/zimbra

$ chown -R zimbra.zimbra /opt/zimbra

$ /opt/zimbra/libexec/zmfixperms

Paso 5.- Reiniciamos Zimbra

$ su - zimbra

[zimbra@mail ~]$ zmcontrol restart

[zimbra@mail ~]$ zmcontrol start

 

Posibles errores:

[zimbra@mail ~]$ zmcontrol status
/usr/bin/perl: symbol lookup error: /opt/zimbra/common/lib/perl5/x86_64-linux-th read-multi/auto/Socket/Socket.so: undefined symbol: Perl_Istack_sp_ptr

 

Esperar  de 3 a 5 minutos, luego verificar que todos los servicios corran:

[zimbra@mail ~]$ zmcontrol status

deberá de mostrar lo siguiente:

antispam                Running
 antivirus               Running
 imapproxy               Running
 ldap                    Running
 logger                  Running
 mailbox                 Running
 memcached               Running
 mta                     Running
 snmp                    Running
 spell                   Running
 stats                   Running
 zmconfigd               Running

 

Si sale esto, es que ya todo esta corriendo, solo queda verificar!!

Tarea para sacar copias todos los días

Luego lo que queda es colocar una tarea para que todos los días se haga una copia de seguridad en la madrugada, por si falla, ya lo reparamos .

$ crontab -e

agregar esta línea:

00 02 * * 2-6 /root/Backup_Zimbra.sh

 

Lo que hará el crontab es ejecutar el archivo Backup_Zimbra.sh y este a la vez
sacará
una copia a las 2:00 am los días martes, mier,Jue, Vier, Sab

 


Destrabar cola de impresión en Windows 2008 R2

A veces sucede con frecuencia que cuando enviamos una impresión, esta se queda en cola y no imprime!!! luego le damos elimimar y se queda alli, no lo elimina y pueden pasar horas alli.
Lo que hay que hacer es parar la cola de impresión del servidor windows 2008 eliminar las impresiones y luego reiniciar la cola de impresión. Veamos como se hace esto:

Paso 1.- Parar la cola de impresión
Colocar en la ventana de comando la siguiente sentencia: net stop spooler

Paso 2.- Eliminar todos los archivos de la cola de impresión

Ir a la carpeta C:\Windows\System32\spool\PRINTERS

y eliminar todos los documentos

Paso 3.- Reiniciar cola de impresiones

Colocar en la ventana de comando la siguiente sentencia:   net start spooler

 

Paso 4.- Probar de nuevo, lanzando mas impresiones

 

Listo!!

Parte 1: Configuracion completa de un servidor de Correos con usuarios virtuales: Centos+Postfix+mysql+courier+ Webmail_Rouncube+clamav+ amavis+spamassing +restricción de usuarios para envio de correos internos o externos.

Version 1.0
Author: Martín Lugo mlugop@hotmail.com

Edición :

Este tutorial es Copyright (c) 2011 de Martín Lugo Palmadera. Ha sido derivado  de una traducción del tutorial de Falko Timme y modificado según mi conveniencia para poner en funcionamiento un servidor de estas características. El manual de Falko Timme lo puede encontrar en http://www.howtoforge.com/virtual-users-and-domains-postfix-courier-mysql-centos5.1

Ud. es libre de usar este tutorial, siempre y cuando cite la fuente.

Este documento describe cómo instalar un servidor de correo Postfix que se basa en usuarios y virtuales, es decir, los usuarios y los dominios  se encuentran en una base de datos MySQL. Voy a demostrar también la instalación y configuración de Courier (Courier-POP3, Courier-IMAP), por lo que pueden autenticar Courier contra la misma base de datos MySQL que usa Postfix.

El resultado será tener un servidor Postfix capaz de autenticar por SMTP-AUTH y TLS y poner cuotas a los usuarios (las cuotas no se construye en Postfix por defecto, voy a mostrar cómo parchar adecuadamente para que trabaje con Postfix). Las contraseñas se almacenan en forma encriptada en la base de datos (la mayoría de los documentos que he encontrado se trataba de contraseñas en texto plano que es un riesgo para la seguridad). Además de eso, este tutorial incluye la instalación de Amavisd, SpamAssassin y ClamAV para que los mensajes de correo electrónico seán analizados en busca de spam y virus.

La ventaja de una configuración “virtual” (usuarios y dominios virtuales en una base de datos MySQL), es que es mucho más eficiente que una configuración que se basa en usuarios “reales” del sistema. Con esta configuración virtual en tu servidor de correo se puede manejar miles de dominios y usuarios. Además, es más fácil de administrar, porque lo único que tienen que hacer frente a la base de datos MySQL es añadir nuevos usuarios/dominios o editar los ya existentes. No más comandos postmap comandos para crear ficheros de base de datos, no más carga de Postfix, etc ( a no ser que restrinjamos usuarios). Para la administración de la base de datos MySQL se puede usar herramientas basadas en web como el phpMyAdmin que también será instalado en esta guía. La tercera ventaja es que los usuarios tendrán una dirección de correo electrónico como nombre de usuario (en lugar de un nombre de usuario + una dirección de correo electrónico) que es más fácil de comprender y tener en cuenta.

Este tutorial está basado en CentOS 5.1 (i386). Debería haber instalado un sistema básico de CentOS, tal y como se describe aquí: http://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig y http://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig-p2. Además, usted debe asegurarse de que el cortafuegos esté apagado (al menos por ahora) y que SELinux esté desactivado (esto es importante!), como se indica en el capítulo seis en http://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig-p3.

Esta guía pretende ser una guía práctica, que no cubre los antecedentes teóricos. Ellos son tratados en un montón de otros documentos en la web.

Este documento viene sin garantía de ninguna clase! Quiero decir que esta no es la única manera de establecer un sistema de este tipo. Hay muchas maneras de lograr este objetivo, pero esta es la forma en que yo he configurado varios servidores. Yo no doy ningún tipo de garantía de que esto trabaje para usted!

Obs. Como editor de textos yo uso nano o mcedit, es mas flexible que el vi

Paso 1: Editar archivo HOSTS

Nuestro Hostname en este ejemplo es server1.example.com, y el IP address 192.168.0.100, por lo que debemos de cambiar en /etc/hosts  como sigue:

#nano /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
192.168.0.100           server1.example.com server1
::1             localhost6.localdomain6 localhost6
Paso 2.- Instalar algunos softwares
Primero vamos a importer algunas llaves para los paquetes de software (GPG keys):
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
A continuación, vamos a actualizar nuestros paquetes existentes en el sistema :
#yum update
Ahora, vamos a instalar algunos paquetes que vamos a necesitar después:
yum groupinstall 'Development Tools'

yum groupinstall 'Development Libraries'

Paso 3.- Instalar Apache, MySQL, phpMyAdmin

En primer lugar, vamos permitir los paquetes se tomen del repositorio de RPMforge en nuestro sistema CentOS, pues muchos de los paquetes que vamos a instalar en el transcurso de este tutorial no están disponibles en los repositorios oficiales CentOS 5,1: (Tambien lo puden descargar de DAG)

rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
(Si este link no trabaja, ud puede buscar la version actual de rpmforge-release aqui: http://apt.sw.be/packages/rpmforge-release/)

Luego vamos instalar los paquetes necesarios con un solo comando (incluyendo los paquetes que necesitan para construir Courier-IMAP):

#yum install ntp httpd mysql-server php php-mysql php-mbstring php-mcrypt phpmyadmin rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel
Paso 4.- Install Courier-IMAP, Courier-Authlib, And Maildrop

Lamentablemente no hay paquetes rpm para Courier-IMAP, Courier-Authlib, maildrop y, por lo tanto tenemos que instalarlos, tal como se describe en este tutorial: How To Install courier-imap, courier-authlib, And maildrop On Fedora, RedHat, CentOS (http://www.howtoforge.com/installing-courier-imap-courier-authlib-maildrop-fedora-redhat-centos)

En caso de que tengas problemas al momento de generar estos archivos lo puedes descargar de:

Paso 5.- Aplicando el parche de cuotas para Postfix
Primero tenemos que conseguir la fuente rpm de Postfix, el parche con la cuota de parches, y construir un nuevo paquete de Postfix rpm e instalarlo.

cd /usr/src
 wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.1/os/SRPMS/postfix-2.3.3-2.src.rpm
 rpm -ivh postfix-2.3.3-2.src.rpm

Si al final de aplicar este commando me muestra algunas de estas advertencias ignórelas:

warning: user mockbuild does not exist - using root
 warning: group mockbuild does not exist - using root

 

cd /usr/src/redhat/SOURCES

wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz
 gunzip postfix-2.3.3-vda.patch.gz
 cd /usr/src/redhat/SPECS/

Ahora debemos de editar el archive postfix.spec:

nano postfix.spec

Cambiar el valor de las variables %define MYSQL 0 por  %define MYSQL 1, adicionar Patch0: postfix-2.3.3-vda.patch a la sección  # Patches , y finalmente adicionar %patch0 -p1 -b .vda a la sección %setup -q :

[...]
%define MYSQL 1</br>
[...]
# Patches
Patch0: postfix-2.3.3-vda.patch
Patch1: postfix-2.1.1-config.patch
Patch3: postfix-alternatives.patch
Patch6: postfix-2.1.1-obsolete.patch
Patch7: postfix-2.1.5-aliases.patch
Patch8: postfix-large-fs.patch
Patch9: postfix-2.2.5-cyrus.patch
[...]
%setup -q
# Apply obligatory patches
%patch0 -p1 -b .vda
%patch1 -p1 -b .config
%patch3 -p1 -b .alternatives
%patch6 -p1 -b .obsolete
%patch7 -p1 -b .aliases
%patch8 -p1 -b .large-fs
%patch9 -p1 -b .cyrus
[...]

Una ves que hemos modificado estas variables, debemos de construir un Nuevo Postfix el cual tiene soporte para cuotas y MySQL:

rpmbuild -ba postfix.spec

Si le sale algunas de estas advertencias, ignórelas:

msg.h:12:1: warning: "/*" within comment
msg.h:14:1: warning: "/*" within comment
msg.h:33:1: warning: "/*" within comment
msg.h:34:1: warning: "/*" within comment
msg.h:35:1: warning: "/*" within comment
msg.h:36:1: warning: "/*" within comment

Finalmente los paquetes de nuestro nuevo Postfix es creado en /usr/src/redhat/RPMS/i386, por lo que debemos de ir hacia allá:

cd /usr/src/redhat/RPMS/i386

Luego listamos los archivos

ls -l

Debería de mostrar todos estos paquetes disponibles:

[root@server1 i386]# ls -l
total 11280
-rw-r--r-- 1 root root 3819299 Dec  5 15:25 postfix-2.3.3-2.i386.rpm
-rw-r--r-- 1 root root 7655069 Dec  5 15:25 postfix-debuginfo-2.3.3-2.i386.rpm
-rw-r--r-- 1 root root   50346 Dec  5 15:25 postfix-pflogsumm-2.3.3-2.i386.rpm
[root@server1 i386]#

Luego elija el paquete de Postfix e instalelo:

rpm -ivh postfix-2.3.3-2.i386.rpm

(En caso que tengan problemas al crear el paquete rpm de postfix, ud. puede descargarlo de aquí: postfix-2.3.3-2.i386.rpm.)

Paso 6.- Establecer el password de  MySQL y  Configurar phpMyAdmin

Iniciar MySQL:

chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start

A continuación, establecer contraseñas para la cuenta de root del MySQL:

mysqladmin -u root password yourrootsqlpassword
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

Ahora configurar phpMyAdmin. Cambiamos la configuración de Apache para que phpMyAdmin permita conexiones no sólo desde localhost

(hay que comentar la sección <Directory “/usr/share/phpmyadmin”> ):

nano /etc/httpd/conf.d/phpmyadmin.conf
#
#  Web application to manage MySQL
#
#<Directory "/usr/share/phpmyadmin">
#  Order Deny,Allow
#  Deny from all
#  Allow from 127.0.0.1
#</Directory>

Alias /phpmyadmin /usr/share/phpmyadmin
Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /mysqladmin /usr/share/phpmyadmin

 

Seguidamente vamos a cambiar la autenticación en phpMyAdmin de cookie a http:

nano /usr/share/phpmyadmin/config.inc.php
[...]
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]

 

Ahora le vamos a decir que Apache siempre se inicie en los niveles 235:

chkconfig --levels 235 httpd on
/etc/init.d/httpd start

Terminado esto, ya podemos dirigirnos a nuestro navegador y teclear http://server1.example.com/phpmyadmin/ o http://192.168.0.100/phpmyadmin/ y loguearse con el nombre de usuarior root  y el password que estableció para el MySQL.

 

Soluciones sencillas para implementar entornos informáticos pequeños

Les comparto un documento que lei de APC (sistemas electricos) se trata de las consideraciones que hay que tener para armar un datacenter en empresas de mediana envergadura.

Link: APC_centro_datos_small_offices_EN

Header Checks en Zimbra 7.2

Usualmente deseamos  configurar nuestro servidor de correos de tal manera que un mensaje antes de llegar a los controles habituales (antivirus, antispam) este sea rechazado por el titulo que lleva en el subject.

En Zimbra NO es complicado hacer esto, es solo tener un poco de maña.

Segui este Howto, pero no me dio resultado, el sistema valida el encabezado, y si el mensaje es inofensivo no lo deriva a la casilla del usuario, si no, lo envia al diferido y alli se queda.

Solución….. trabajar con sus propios archivo del zimbra y acomodarlos a nuestros requerimientos.

Seguiremos hasta cierta parte el Howto del Link y luego alli haremos nuestras modificaciones.

1.- Miramos la configuración del postfix respecto del header check

su - zimbra
$zmlocalconfig | grep header_checks

Most likely you will see the following:
postfix_header_checks = pcre:/opt/zimbra/conf/postfix_header_checks

 

2.- Vamos a ingresar a la variable “postfix_header_checks” el valor por defecto del header_check

 

$zmlocalconfig -e postfix_header_checks="pcre:/opt/zimbra/conf/postfix_header_checks"
$zmprov mcf zimbraMtaBlockedExtensionWarnRecipient FALSE

 

Reinicimos

$zmmtactl restart

3.- Agregamos los valores en el archivo “/opt/zimbra/conf/postfix_header_checks.in” los mensajes que NO deseamos ingresen por nigun motivo a nuestros servidores (hacerlo como usuario root)

 

#nano /opt/zimbra/conf/postfix_header_checks.in
%%uncomment VAR:zimbraMtaBlockedExtension%%/^Subject:.*publicidad/ REJECT No permitimos SPAM1
%%uncomment VAR:zimbraMtaBlockedExtension%%/^Subject:.*sexo/ REJECT No esta permitido el % en el encabezado2
%%uncomment VAR:zimbraMtaBlockedExtension%%/^Subject:.*viagra/ REJECT No esta permitido el % en el encabezado3
%%uncomment VAR:zimbraMtaBlockedExtension%%/^Subject:.*publcidad/ REJECT No permitimos SPAM4

 

Explicacion:

Linea1.- Le indico al sistema que todo correo que en el subject contenga la palabra “publicidad” lo rechaze

Linea2.- Le indico al sistema que todo correo que en el subject contenga la palabra “sexo” lo rechaze

Linea1.- Le indico al sistema que todo correo que en el subject contenga la palabra “viagra” lo rechaze

Linea1.- Le indico al sistema que todo correo que en el subject contenga la palabra “publcidad” lo rechaze

Uds, pueden poner su propias reglas

4.- Reiniciamos el Zimbra y listo!!!

 

#su - zimbra
$zmmtactl restart