Servidores

Exportación de contactos de MailEnable a RoundCube

0

MailEnable permite la importación de contactos a partir de un fichero CSV, pero no así la exportación, de forma que lo que el usuario introduce no tiene forma de extraerlo posteriormente. A no ser que sea el administrador, claro, en cuyo caso lo puede hacer a partir de los ficheros vCard que se encuentran en C:\plesk\Mail Servers\Mail Enable\Postoffices\dominio.tld\MAILROOT\usuario en el caso de un servidor con Plesk 9.

Estos ficheros requieren algo de procesamiento para poder dejarlos al gusto de RoundCube, ya que éste es capaz de importar un único fichero vCard con todos los contactos juntos, en UTF-8 sin utilizar codificación QP. Así, pues, mediante las siguientes líneas de Python y un par de comandos, lo podemos dejar correctamente.

# This Python file uses the following encoding: utf-8
'''
qputf8: Elimina el quoted printable UTF-8 de un fichero
Created on 17/10/2011
@author: Vicente Monroig (Digital Disseny)
'''

import os
import sys

# Obtenemos la ruta donde se está ejecutando el archivo
ruta = os.path.dirname(os.path.abspath(__file__)) + '/'
# Recogemos los parámetros de entrada o mostramos la ayuda
if (len(sys.argv) > 1):
    entrada = sys.argv[1]
    if (len(sys.argv) > 2):
        salida = sys.argv[2]
    else:
        salida = entrada + '.OK'
    print "Procesando fichero " + entrada + "..."
    fentrada = open(ruta + entrada, "r")
    fsalida = open(ruta + salida, "w")
    lista = []
    while True:
        linorig = fentrada.readline()
        if not linorig: break
        # Si hay una cadena UTF-8, la procesamos
        lin = linorig.replace('=?UTF-8?Q?', '')
        if (lin != linorig):
            lin = lin.replace('=C3=80', 'À')
            lin = lin.replace('=C3=81', 'Á')
            lin = lin.replace('=C3=88', 'È')
            lin = lin.replace('=C3=89', 'É')
            lin = lin.replace('=C3=8C', 'Ì')
            lin = lin.replace('=C3=8D', 'Í')
            lin = lin.replace('=C3=92', 'Ò')
            lin = lin.replace('=C3=93', 'Ó')
            lin = lin.replace('=C3=99', 'Ù')
            lin = lin.replace('=C3=9A', 'Ú')
            lin = lin.replace('=C3=87', 'Ç')
            lin = lin.replace('=C3=91', 'Ñ')
            lin = lin.replace('=C3=A0', 'à')
            lin = lin.replace('=C3=A1', 'á')
            lin = lin.replace('=C3=A8', 'è')
            lin = lin.replace('=C3=A9', 'é')
            lin = lin.replace('=C3=AC', 'ì')
            lin = lin.replace('=C3=AD', 'í')
            lin = lin.replace('=C3=B2', 'ò')
            lin = lin.replace('=C3=B3', 'ó')
            lin = lin.replace('=C3=B9', 'ù')
            lin = lin.replace('=C3=BA', 'ú')
            lin = lin.replace('=C3=A7', 'ç')
            lin = lin.replace('=C3=B1', 'ñ')
            lin = lin.replace('=C2=AA', 'ª')
            lin = lin.replace('=C2=BA', 'º')
            lin = lin.replace('?=', '')
        # De paso, cambiamos los _ por espacios, con cuidado con las direcciones de e-mail
        if (not '@' in lin):
            lin = lin.replace('_', ' ')
        if (lin != linorig):
            print "Sustituída la línea " + linorig + " por " + lin + "."
        fsalida.write(lin)
    fentrada.close()
    fsalida.close()
    print("Fichero " + salida + " generado en %s." % ruta)
else:
    print """
Información:
    qputf8 es una pequeña utilidad que busca y elimina las cadenas codificadas como quoted printable en UTF-8
    dentro de un fichero de texto, transformándolo a su equivalente de texto "normal". Así, por ejemplo:
        ?UTF-8?Q?G=C3=B3mez_Domin=C3=B3?=;
    pasa a ser
        Gómez Dominó;
Uso:
    qputf8.py  []
       """

Con los siguientes comandos ejecutamos la utilidad en todos los ficheros y después creamos un único vCard:

find contactos/*.VCF -exec python qputf8.py {} \;
cat contactos/*.VCF.OK > todos.VCF

En cuanto a los grupos, no he encontrado nada, aunque tampoco le he dedicado mucho tiempo, así que cualquier sugerencia es bienvenida.

Uso de Apache::ASP en servidores Linux

0

A raíz de la migración de nuestro antiguo servidor Windows a uno nuevo con Ubuntu, y la necesidad de seguir alojando ciertas aplicaciones desarrolladas en ASP clásico, nos hemos visto en la necesidad de intentar que Apache procese correctamente estas páginas. Para ello, en Plesk 10 disponemos de la posibilidad de activar Apache::ASP.

Antes de que nadie se haga ilusiones, sólo sirve para pequeños desarrollos en ASP clásico. Si se utilizan scripts complejos en el servidor o si utilizamos componentes de terceros, como Persits AspEmail, ya nos podemos ir olvidando.

Si aun así te interesa probarlo, un par de apuntes al respecto:

  • Distingue mayúsculas de minúsculas. Mucho ojo con esto, porque tanto las directivas SSI, realizadas con <!--#include file="fichero" --> como el nombre del fichero, deben estar en minúsculas en el código, y en el caso del fichero de forma exacta a como esté en el disco.
  • El documento raíz (default.asp en un servidor Windows), hay que configurarlo, ya que si no te encontrarás con que sigue buscando index.htm o index.html únicamente. Así, con un fichero .htaccess con el siguiente contenido es suficiente:
DirectoryIndex index.asp
  • Sólo soporta scripting en Perl, que es como está desarrolado el módulo. No hemos encontrado solución a esto, de forma que el código tendrá que ser transformado desde VBScript o JScript. Había soluciones bastante prometedoras, como mod_VB o el servidor específico de ChiliSoft! -> Sun ASP One -> Oracle (?), pero hace tiempo que se dejó de invertir en ellas.

Así pues, si alguien se encuentra en esta situación, es momento de considerar muy seriamente un cambio de página web, que esto en 10 años cambia totalmente y ahora hay CMS de código abierto maravillosos. Si no es posible esto, pues quizá un cambio de ASP a PHP podría resultar suficiente, y quizá ASP2PHP pueda resultar de ayuda.

Instalación del webmail Roundcube en Plesk 10

5

La versión 10 de Plesk incluye en su versión Linux dos posibles webmail. Una es Horde, que si bien está bastante avanzada, tiene un skin que le da un toque viejuno bastante desagradable para los usuarios. La otra es Atmail, que si bien mejor algo, cuando quieres ponerle temas personalizables tienes que apoquinar más de $600, según la cantidad de dominios a gestionar. Así pues, buscando otras opciones, decidimos probar Roundcube, que resultó ser el más agradable, fácil de configurar, ligero y con un interfaz AJAX bien majete.

El tema es que a partir de la versión 10.2 de Plesk, han incorporado un sistema para añadir webmails externos, pero o bien somos extremadamente torpes, o simplemente no funciona correctamente. Y como ya conocemos a los amigos de Parallels, casi que me inclino por lo segundo. Además, tengo pruebas.

Sin embargo, es posible instalarlo, o bien como reemplazo de alguno de los webmails existentes, cosa que no termino de recomendar ya que en alguna actualización de Plesk volará todo, o bien desinstalando los dos existentes y dejando como única opción para los clientes el nuevo, cosa que tenemos instalada en producción.

Así pues, empezamos desinstalando los webmails existentes:

apt-get remove psa-horde psa-atmail

Después se descomprime el webmail, en /var/www/roundcube, por ejemplo.

wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail-beta/0.5-RC/roundcubemail-0.5-rc.tar.gz
tar xvfz roundcubemail-0.5-rc.tar.gz
mkdir /var/www/roundcube
mv /roundcubemail-0.5-rc/* /var/www/roundcube

Como alternativa a utilizar el instalador que incorpora el webmail, también se puede seguir este post, lo que otorga mayor control sobre lo que se está haciendo, aunque está algo desfasado, ya que en las últimas versiones se pueden utilizar variables de reemplazo para acceder al domino actual, o al del servidor IMAP. No olvidarse de hacer desaparecer el directorio installer al terminar, para evitar posibles problemas.

Por último, ya que hemos eliminado los webmails conocidos para Plesk, éste no interferirá con el subdomino webmail, así que creamos un VirtualHost común a todos nuestros dominios, creando un fichero roundcube.conf en el directorio /etc/apache2/conf.d, con el siguiente contenido:

<VirtualHost 192.168.0.250:80>
    ServerName webmail
    ServerAlias webmail.*
    DocumentRoot /var/www/roundcube
    <Directory "/var/www/roundcube">
        allow from all
        php_flag magic_quotes_gpc Off
        php_flag register_globals Off
        php_flag include_path /usr/share/awl/inc
    </Directory>
</VirtualHost>

Por supuesto, hay que cambiar la IP por la que toque, así como las rutas, si no son las correctas. Tras un reinicio del Apache podremos acceder al webmail si teníamos los DNS configurados.

service apache2 restart

Por cierto, gracias a Florian Moker por su inestimable ayuda en esto.

Activación de mod_proxy en Plesk

0

Ahora que disponemos de un servidor Linux y las páginas son servidas por Apache, podemos disfrutar de algunos módulos que se podían echar de menos en un IIS con Windows, como son mod_rewrite y mod_proxy. Sin embargo, el primero viene activado con la instalación estándar de Plesk, pero el segundo no, de forma que al escribir ciertas reglas en el fichero .htaccess obtendremos mensajes de error.

Así, el siguiente .htaccess:

RewriteEngine on
Options +FollowSymlinks

RewriteCond %{HTTP_HOST} url\.original\.com
RewriteRule (.*)$ http://otroserver.com/undircualquiera/$1 [P,L]

Que lo que busca es la redirección “neutra”, mediante un proxy, de una URL a otro sitio (por la directiva [P]), genera el siguiente error:

[Mon Sep 19 13:33:04 2011] [alert] [client x.x.x.x] /var/www/vhosts/dominio.com/subdominio/.htaccess: Invalid command 'ProxyPass', perhaps misspelled or defined by a module not included in the server configuration.

Bien, esto lo que nos indica es que el módulo no está activado, ya que instalado sí está en Plesk, así que procedemos a su activación con a2enmod proxy. Tras esto, nos podemos encontrar con otro error:

[Mon Sep 19 13:57:08 2011] [warn] proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

Esto es debido a que el módulo mod_proxy por si solo no funciona, así que instalaremos otros dos módulos, con a2enmod proxy_balancer y a2enmod proxy_http, y reiniciaremos apache con service apache2 restart.

Tras esto, ya deberíamos tener mod_proxy redirigiendo correctamente las peticiones, sin que cambie la URL que el cliente ve en su navegador.

Si en lugar de utilizar .htaccess preferimos definir las reglas en vhosts.conf, conviene recordar que la carpeta adecuada es /var/www/vhosts/dominio.com/conf, que luego Plesk ya generará el fichero vhosts.conf completo.

Bonus: mod_rewrite en IIS

Si por lo que sea —jugando a adivinar, por mantener ASP.NET en un servidor IIS 6— necesitamos mantener el Internet Information Server, pero queremos disfrutar de mod_rewrite, permitiendo así tener URLs amigables, disponemos de una estupenda solución: Helicon Ape.

Es gratuito hasta tres dominios, y si se necesitan más, tiene un precio muy interesante. Como se puede ver, soporta no sólo mod_rewrite, sino casi cualquier módulo que se te ocurra de Apache.

Ajustes de Rootkit Hunter en Ubuntu 10.04 Server con Plesk

0

Plesk incluye la utilidad Rootkit Hunter para la revisión de código malicioso en el servidor. El problema es que no han terminado de configurarla correctamente, de forma que siempre devolverá algunos warnings, que provocarán que se envíe un correo electrónico periódicamente con un críptico mensaje: Please inspect this machine, because it may be infected.

Sin embargo, se puede modificar el fichero de configuración, situado en /usr/local/psa/etc/modules/watchdog/rkhunter.conf, añadiendo las siguientes líneas, para que esto no ocurra:

XINETD_ALLOWED_SVC=/etc/xinetd.d/ftp_psa
XINETD_ALLOWED_SVC=/etc/xinetd.d/poppassd_psa
ALLOWHIDDENDIR=/dev/.udev
APP_WHITELIST="gpg OpenSSL PHP named"
ALLOW_SSH_ROOT_USER=no

La última línea dependerá de cómo tengamos configurado SSH, permitiendo acceso como root o no.

La siguiente vez que se lance el proceso ya no debería haber errores o advertencias, por lo que no se recibirá el correo. Si se desea lanzar manualmente el proceso de revisión, se puede realizar bien a través de Plesk, o desde consola, con el comando /usr/local/psa/admin/bin/modules/watchdog/rkhunter --check.

Ajuste en lote del TTL de los registros DNS con Plesk

0

Antes de realizar una migración de servidor que incluya cambio de IP es muy conveniente modificar el TTL de los registros DNS, que por lo general suele estar establecido en 24 horas, de forma que cuando procedamos a realizar el cambio en estos registros, haciendo que las peticiones cambien de un servidor a otro, minimicemos el tiempo durante el que éstas llegaran a uno u otro servidor de forma indeterminada, por ejemplo a 5 minutos.

En servidores Plesk, este cambio se puede realizar cómodamente modificando la base de datos. Este es el SQL a utilizar a partir de la versión 8.3, y probado sobre una 9.5.1:

UPDATE 'dns_zone' SET 'ttl' = '300', 'ttl_unit' = '60' WHERE 'id' > 1;

Una vez modificada la base de datos, ejecutamos este comando para que Plesk regenere los archivos de zona:

"%plesk_bin%\dnsmng.exe" update *

Hay que tener en cuenta que los cambios no serán inmediatos, debido al propio funcionamiento del sistema DNS, que provoca que la propagación no se pueda garantizar hasta que vaya caducando en la caché de los distintos servidores el registro anterior, así que hay que anticiparse y realizar este cambio al menos 24 horas antes de realizar la modificación de la IP.

Bonus 1: Modificación de la base de datos MDB de Plesk

Si estuvimos poco hábiles el día de la instalación de Plesk y decidimos que utilizase Access en lugar de MySQL, tendremos alguna dificultad para realizar cambios sin instalar el Microsoft Access, del que tendríamos que adquirir una licencia para poder realizar esta modificación, además de que dejarlo instalado en un servidor de producción no mola.

Pero tenemos una buena alternativa: MDB Viewer Plus, que permite examinar y desde hace bien poco también la ejecución de SQL sobre tablas Access, utilizando MDAC, que viene instalado con Windows.

Bonus 2: Comprobación de los registros DNS

Para comprobar que efectivamente el TTL de nuestros registros DNS es el correcto, podemos utilizar el comando dig en Linux contra cualquier servidor DNS, que nos mostrará lo que tenga almacenado:

jefazo@servidor:~$ dig midominio.tld @8.8.8.8

; <<>> DiG 9.7.3 <<>> midominio.tld @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10873
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;midominio.tld.                        IN      A

;; ANSWER SECTION:
midominio.tld.         300     IN      A       1.2.3.4

;; Query time: 108 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Sep 10 22:12:07 2011
;; MSG SIZE  rcvd: 48

Ajustes de IIS 7 en línea de comandos con Appcmd

0

Cuando tenemos que administrar un servidor web de cierta entidad, con muchos dominios, grupos de aplicaciones, etc., e interesa realizar alguna operación en lote sobre un grupo de ellos, no es necesario que nos pasemos media mañana haciendo click, botón derecho, propiedades, avanzadas… En esos casos es cuando vale la pena utilizar Appcmd utilidad provista con IIS 7 (Windows 2008).

La utilidad está en %windir%\system32\inetsrv, aunque también hay una pequeña aplicación de interfaz bastante simple llamada AppcmdUI, pero que nos ofrece la posibilidad de ir autocompletando el comando que vamos generando, lo que suele ser una ayuda, sobre todo al principio.

Una de las capacidades más notorias que nos ofrece Appcmd es el pipelining, lo que nos permite encadenar la salida de un comando como entrada del siguiente, consiguiendo así actuar sobre varios objetos fácilmente. Me explico con un ejemplo práctico:

  1. Obtenemos una lista de los grupos de aplicaciones:
    appcmd apppool list
  2. Modificamos a 30 minutos el tiempo de inactividad de un grupo de aplicaciones previo a su reciclaje:
    appcmd set apppool "pedazodeseñoraweb.es" /processModel.idleTimeout:00:30:00

Si juntamos estos dos comandos, podemos hacer que el tiempo de inactividad de todos los grupos de aplicaciones pase a ser de 30 minutos, con:

appcmd list apppool /xml | appcmd set apppool /in /processModel.idleTimeout:00:30:00

Obsérvese que la salida del primer comando se ha establecido para que se obtenga como XML, con /xml, y que se ha especificado que la entrada del segundo provendrá de su entrada estándar y en formato XML, con /in. Por último, se han unido la salida del primero con la entrada del primero mediante una tubería (|).

Así, podemos hacer cosas chachis, como reciclar todos los procesos, modificar en lote la configuración de los que empiecen por una cadena de texto dada, listar todas las copias de seguridad existentes…

Permitir a un usuario acceder un servidor mediante escritorio remoto

2

Seguro que si habéis necesitado activar el acceso remoto de un usuario no administrador a un servidor Windows que además esté haciendo el rol de controlador de dominio os habréis encontrado con este mensaje, pese a haber añadido el usuario al grupo Usuarios de escritorio remoto:

El motivo es precisamente que es un controlador de dominio, y como tal, tiene una directiva de seguridad específica, que se puede modificar en Herramientas administrativas | Configuración de seguridad predeterminada de controlador de dominio.

En esta consola, desplegamos Configuración de Windows | Configuración de seguridad | Directivas locales | Asignación de derechos de usuario, y en la directiva Permitir inicio de sesión a través de Servicios de Terminal Server añadimos al usuario que nos interese, en la forma DOMINIO\Usuario.

Como cualquier modificación en las directivas, tarda algo en hacerse efectiva, así que si tenemos prisa y no apetece reiniciar, podemos forzarlo con el comando:

gpupdate /force

Cambio de permisos en ficheros y directorios

0

Cuando se instala alguna web nueva, o se utliza algún paquete de actualización, es bastante común que los permisos no vengan correctamente especificados, y por tanto no funcione correctamente. Con estos dos simples comandos se puede resolver rápidamente:

  • Cambiar recursivamente los permisos de todos los directorios a 755:
    find . -type d -exec chmod 755 {} \;
  • Cambiar recursivamente los permisos de todos los archivos a 644, dejando intactos los directorios:
    find . -type f -exec chmod 644 {} \;

 

Directorio protegido con plesk

0

Al proteger una carpeta con contraseña desde plesk, en windows, pasa que los ficheros contenidos están disponibles para descargar con contraseña pero el directorio no se puede listar. Si es necesario listar el contenido entonces:

1.- Desde la opción de “Directorios protegidos con contraseña” añades el directorio que quieres proteger y le creas el usuario que quieras
2.- En este momento tienes el directorio protegido y si escribes la ruta completa a un fichero (p.e http://www.dominio.com/pruebas/documento.pdf) te pedirá usuario y contraseña para descargarlo o mostrarlo pero si pones una ruta sin fichero (p.e http://www.dominio.com/pruebas) no listará el contenido de la carpeta. Osea protege los ficheros con contraseña y no deja listarlos.
3.- Para que te deje listarlos tienes que crear un directorio virtual. Para eso te vas a directorios virtuales y creas uno nuevo con las opciones:
3.1 Ponle un nombre (p.e. pruebaspetardas o el mismo de antes)
3.2 Ruta: Deselecciona la opción “Crear directorio físico con el mismo…….” y te aparecerá una casilla nueva para poner la carpeta donde tienes los ficheros
3.3 Navegacion directorio: Finalmente selecciona la opcion “Navegación directorio”

Y ahora si, ya se lista el directorio. Para eso escribiriamos si pones www.dominio.com/pruebaspetardas.

Go to Top