# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

VMware P2V: Unable to query the live Linux source machine


Vamos a ver la posible solución a este problema, que se nos presenta cuando intentamos convertir un sistema Linux de una máquina física a una máquina virtual (vmware p2v) de VMware con la herramienta VMware vCenter Converter Standalone.

El problema se reproduce después de introducir los datos correctos de conexión SSH al servidor. Estos datos vemos que son correctos porque si ponemos unos incorrectos salta el error. Además, en la máquina que intentamos migrar si hacemos un tcpdump vemos que efectivamente está llegando bien.

Este es el error que recibimos en el primer paso de la conversión:

VMware: Unable to query the live Linux source machine

VMware: Unable to query the live Linux source machine

En nuestro caso, el problema no tenía que ver ni con el firewall del sistema, ni con restricciones TCP Wrappers, ni con SELinux, etc. El problema tenía origen en las restricciones establecidas en la partición temporal /tmp. Nosotros montamos /tmp con los bits noexec y nosuid. Algo común en servidores con cPanel:

/usr/tmpDSK on /tmp type ext3 (rw,noexec,nosuid,loop=/dev/loop0)

Al parecer VMware intenta ejecutar y realizar acciones en /tmp, y debido a esto no puede. Podemos solucionarlo entonces montando /tmp temporalmente con los bits de ejecución:

# mount -o remount  -t ext3 /usr/tmpDSK /tmp -o rw,exec,nodev -o loop

Y cuando acabemos securizar de nuevo:

# mount -o remount  -t ext3 /usr/tmpDSK /tmp -o rw,noexec,nosuid -o loop

Exim: establecer filtros anti-spam para entrada y salida de correo


eximExim nos brinda la posibilidad de establecer filtros para todos los correos que circulan por el servidor, tanto entrada como salida. Estos filtros son personalizables y permiten crear reglas que revisen las cabeceras, asunto y cuerpo de los correos en busca de ciertos patrones maliciosos conocidos, expresiones regulares, etc.

Por defecto, en servidores con cPanel disponemos de una base de reglas en el fichero /etc/antivirus.exim en el cual podemos ver bastantes reglas ya establecidas y usarlas como base para las nuestras. Si queremos activar estos filtros antes debemos acceder a WHM -> Exim Configuration Editor y modificar la opción:

** System Filter File

The system filter file is usually stored as /etc/cpanel_exim_system_filter. [INFO] Custom values must be existing files.

En el cuadro de texto ponemos la ruta contra el fichero /etc/antivirus.exim.

Una vez activado, simplemente queda modificar, borrar o añadir nuestras reglas personalizadas, la sintaxis y estructura a utilizar es sencilla:

if $message_body matches "XXXXXXXXX"
then
  fail text "Texto que aparece en el log\n\
             cuando se filtra un correo\n\
             con esta regla, se pueden \n\
             utilizar variables $1 $2 $3.\n\
  seen finish
endif
if $header_content-type: matches "XXXXXXXX"
then
  fail text "Texto que aparece en el log\n\
             cuando se filtra un correo\n\
             con esta regla, se pueden \n\
             utilizar variables $1 $2 $3.\n\
  seen finish
endif

A partir de aquí todo depende de la pericia de cada uno con las expresiones regulares. Se puede activar un log independiente para el registro de todos los correos electrónicos filtrados, establecemos la siguiente directiva al comienzo del fichero:

logfile /var/log/filtros-exim.log 0744

Y creamos el fichero de log:

# touch /var/log/filtros-exim.log
# chown cpaneleximfilter. /var/log/filtros-exim.log
# chmod 0744 /var/log/filtros-exim.log

En caso de establecer un log, debemos especificar en cada una de las reglas si queremos que se registre dicho filtrado y como, se hace mediante la directiva logwrite, también se pueden establecer las variables y datos a registrar en el log:

if $header_content-type: matches "XXXXXXXX"
then
  logwrite "$tod_log $message_id from $sender_address TEXTO_PERSONALIZADO"
  fail text "Texto que aparece en el log\n\
             cuando se filtra un correo\n\
             con esta regla, se pueden \n\
             utilizar variables $1 $2 $3.\n\
  seen finish
endif

Este filtro central para Exim puede ser muy útil para evitar el spam, tanto entrante como saliente y establecer ciertas reglas puntuales para controlar el tráfico de correo en el servidor.

Este es el fichero base para aquellos que no lo tengáis:

# Exim filter
## Version: 0.17
#	$Id: system_filter.exim,v 1.11 2001/09/19 11:27:56 nigel Exp $

## Exim system filter to refuse potentially harmful payloads in
## mail messages
## (c) 2000-2001 Nigel Metheringham 
##
##     This program is free software; you can redistribute it and/or modify
##    it under the terms of the GNU General Public License as published by
##    the Free Software Foundation; either version 2 of the License, or
##    (at your option) any later version.
##
##    This program is distributed in the hope that it will be useful,
##    but WITHOUT ANY WARRANTY; without even the implied warranty of
##    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##    GNU General Public License for more details.
##
##    You should have received a copy of the GNU General Public License
##    along with this program; if not, write to the Free Software
##    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## -A copy of the GNU General Public License is distributed with exim itself

## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
## If you haven't worked with exim filters before, read
## the install notes at the end of this file.
## The install notes are not a replacement for the exim documentation
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

## -----------------------------------------------------------------------
# Only run any of this stuff on the first pass through the
# filter - this is an optomisation for messages that get
# queued and have several delivery attempts
#
# we express this in reverse so we can just bail out
# on inappropriate messages
#
if not first_delivery
then
  finish
endif

## -----------------------------------------------------------------------
# Check for MS buffer overruns as per BUGTRAQ.
# http://www.securityfocus.com/frames/?content=/templates/article.html%3Fid%3D61
# This could happen in error messages, hence its placing
# here...
# We substract the first n characters of the date header
# and test if its the same as the date header... which
# is a lousy way of checking if the date is longer than
# n chars long
if ${length_80:$header_date:} is not $header_date:
then
  fail text "This message has been rejected because it has\n\
	     an overlength date field which can be used\n\
	     to subvert Microsoft mail programs\n\
             The following URL has further information\n\
	     http://www.securityfocus.com/frames/?content=/templates/article.html%3Fid%3D61"
  seen finish
endif

## -----------------------------------------------------------------------
# These messages are now being sent with a <> envelope sender, but
# blocking all error messages that pattern match prevents
# bounces getting back.... so we fudge it somewhat and check for known
# header signatures.  Other bounces are allowed through.
if $header_from: contains "@sexyfun.net"
then
  fail text "This message has been rejected since it has\n\
	     the signature of a known virus in the header."
  seen finish
endif
if error_message and $header_from: contains "Mailer-Daemon@"
then
  # looks like a real error message - just ignore it
  finish
endif

## -----------------------------------------------------------------------
# Look for single part MIME messages with suspicious name extensions
# Check Content-Type header using quoted filename [content_type_quoted_fn_match]
if $header_content-type: matches "(?:file)?name=(\"[^\"]+\\\\.(?:ad[ep]|ba[st]|chm|cmd|com|cpl|crt|eml|exe|hlp|hta|in[fs]|isp|jse?|lnk|md[be]|ms[cipt]|pcd|pif|reg|scr|sct|shs|url|vb[se]|ws[fhc])\")"
then
  fail text "This message has been rejected because it has\n\
	     potentially executable content $1\n\
	     This form of attachment has been used by\n\
             recent viruses or other malware.\n\
	     If you meant to send this file then please\n\
	     package it up as a zip file and resend it."
  seen finish
endif
# same again using unquoted filename [content_type_unquoted_fn_match]
if $header_content-type: matches "(?:file)?name=(\\\\S+\\\\.(?:ad[ep]|ba[st]|chm|cmd|com|cpl|crt|eml|exe|hlp|hta|in[fs]|isp|jse?|lnk|md[be]|ms[cipt]|pcd|pif|reg|scr|sct|shs|url|vb[se]|ws[fhc]))"
then
  fail text "This message has been rejected because it has\n\
	     potentially executable content $1\n\
	     This form of attachment has been used by\n\
             recent viruses or other malware.\n\
	     If you meant to send this file then please\n\
	     package it up as a zip file and resend it."
  seen finish
endif

## -----------------------------------------------------------------------
# Attempt to catch embedded VBS attachments
# in emails.   These were used as the basis for
# the ILOVEYOU virus and its variants - many many varients
# Quoted filename - [body_quoted_fn_match]
if $message_body matches "(?:Content-(?:Type:(?>\\\\s*)[\\\\w-]+/[\\\\w-]+|Disposition:(?>\\\\s*)attachment);(?>\\\\s*)(?:file)?name=|begin(?>\\\\s+)[0-7]{3,4}(?>\\\\s+))(\"[^\"]+\\\\.(?:ad[ep]|ba[st]|chm|cmd|com|cpl|crt|eml|exe|hlp|hta|in[fs]|isp|jse?|lnk|md[be]|ms[cipt]|pcd|pif|reg|scr|sct|shs|url|vb[se]|ws[fhc])\")[\\\\s;]"
then
  fail text "This message has been rejected because it has\n\
	     a potentially executable attachment $1\n\
	     This form of attachment has been used by\n\
             recent viruses or other malware.\n\
	     If you meant to send this file then please\n\
	     package it up as a zip file and resend it."
  seen finish
endif
# same again using unquoted filename [body_unquoted_fn_match]
if $message_body matches "(?:Content-(?:Type:(?>\\\\s*)[\\\\w-]+/[\\\\w-]+|Disposition:(?>\\\\s*)attachment);(?>\\\\s*)(?:file)?name=|begin(?>\\\\s+)[0-7]{3,4}(?>\\\\s+))(\\\\S+\\\\.(?:ad[ep]|ba[st]|chm|cmd|com|cpl|crt|eml|exe|hlp|hta|in[fs]|isp|jse?|lnk|md[be]|ms[cipt]|pcd|pif|reg|scr|sct|shs|url|vb[se]|ws[fhc]))[\\\\s;]"
then
  fail text "This message has been rejected because it has\n\
	     a potentially executable attachment $1\n\
	     This form of attachment has been used by\n\
             recent viruses or other malware.\n\
	     If you meant to send this file then please\n\
	     package it up as a zip file and resend it."
  seen finish
endif
## -----------------------------------------------------------------------

#### Version history
#
# 0.01 5 May 2000
#	Initial release
# 0.02 8 May 2000
#	Widened list of content-types accepted, added WSF extension
# 0.03 8 May 2000
#	Embedded the install notes in for those that don't do manuals
# 0.04 9 May 2000
#	Check global content-type header.  Efficiency mods to REs
# 0.05 9 May 2000
#	More minor efficiency mods, doc changes
# 0.06 20 June 2000
#	Added extension handling - thx to Douglas Gray Stephens & Jeff Carnahan
# 0.07 19 July 2000
#	Latest MS Outhouse bug catching
# 0.08 19 July 2000
#	Changed trigger length to 80 chars, fixed some spelling
# 0.09 29 September 2000
#	More extensions... its getting so we should just allow 2 or 3 through
# 0.10 18 January 2001
#	Removed exclusion for error messages - this is a little nasty
#	since it has other side effects, hence we do still exclude
#	on unix like error messages
# 0.11 20 March, 2001
#	Added CMD extension, tidied docs slightly, added RCS tag
#	** Missed changing version number at top of file :-(
# 0.12 10 May, 2001
#	Added HTA extension
# 0.13 22 May, 2001
#	Reformatted regexps and code to build them so that they are
#	shorter than the limits on pre exim 3.20 filters.  This will
#	make them significantly less efficient, but I am getting so
#	many queries about this that requiring 3.2x appears unsupportable.
# 0.14 15 August,2001
#	Added .lnk extension - most requested item :-)
#	Reformatted everything so its now built from a set of short
#	library files, cutting down on manual duplication.
#	Changed \w in filename detection to . - dodges locale problems
#	Explicit application of GPL after queries on license status
# 0.15 17 August, 2001
#	Changed the . in filename detect to \S (stops it going mad)
# 0.16 19 September, 2001
#	Pile of new extensions including the eml in current use
# 0.17 19 September, 2001
#	Syntax fix
#
#### Install Notes
#
# Exim filters run the exim filter language - a very primitive
# scripting language - in place of a user .forward file, or on
# a per system basis (on all messages passing through).
# The filtering capability is documented in the main set of manuals
# a copy of which can be found on the exim web site
#	http://www.exim.org/
#
# To install, copy the filter file (with appropriate permissions)
# to /etc/exim/system_filter.exim and add to your exim config file
# [location is installation depedant - typicaly /etc/exim/config ]
# in the first section the line:-
#	message_filter = /etc/exim/system_filter.exim
#	message_body_visible = 5000
#
# You may also want to set the message_filter_user & message_filter_group
# options, but they default to the standard exim user and so can
# be left untouched.  The other message_filter_* options are only
# needed if you modify this to do other functions such as deliveries.
# The main exim documentation is quite thorough and so I see no need
# to expand it here...
#
# Any message that matches the filter will then be bounced.
# If you wish you can change the error message by editing it
# in the section above - however be careful you don't break it.
#
# After install exim should be restarted - a kill -HUP to the
# daemon will do this.
#
#### LIMITATIONS
#
# This filter tries to parse MIME with a regexp... that doesn't
# work too well.  It will also only see the amount of the body
# specified in message_body_visible
#
#### BASIS
#
# The regexp that is used to pickup MIME/uuencoded body parts with
# quoted filenames is replicated below (in perl format).
# You need to remember that exim converts newlines to spaces in
# the message_body variable.
#
#	  (?:Content-					# start of content header
#	  (?:Type: (?>\s*)				# rest of c/t header
#	    [\w-]+/[\w-]+				# content-type (any)
#	    |Disposition: (?>\s*)			# content-disposition hdr
#	    attachment)					# content-disposition
#	  ;(?>\s*)					# ; space or newline
#	  (?:file)?name=				# filename=/name=
#	  |begin (?>\s+) [0-7]{3,4} (?>\s+)) 		# begin octal-mode
#	  (\"[^\"]+\.					# quoted filename.
#		(?:ad[ep]				# list of extns
#		|ba[st]
#		|chm
#		|cmd
#		|com
#		|cpl
#		|crt
#		|eml
#		|exe
#		|hlp
#		|hta
#		|in[fs]
#		|isp
#		|jse?
#		|lnk
#		|md[be]
#		|ms[cipt]
#		|pcd
#		|pif
#		|reg
#		|scr
#		|sct
#		|shs
#		|url
#		|vb[se]
#		|ws[fhc])
#	  \"						# end quote
#	  )						# end of filename capture
#	  [\s;]						# trailing ;/space/newline

#
#
### [End]

cPanel 11.30 disponible en rama RELEASE


cpanel logoEl pasado 28 de febrero anuncié la disponibilidad de cPanel 11.30 en su rama EDGE. Para aquellos que trabajamos con la rama RELEASE es una buena noticia conocer que ya se ha liberado la versión para la misma.

Las principales características y cambios de cPanel 11.30 son:

  • Long-term support: versión con soporte oficial durante más tiempo.
  • Mejor integración: cambios en el backend y la API y una nueva interfaz en perl diseñada para tener acceso a todas las APIs sin necesidad de conocer el funcionamiento de cada una.
  • Nuevo plugin DNS: permite integrar en cPanel sistemas DNS externos.
  • Soporte a CloudLinux de forma nativa.
  • Actualización y mejora del sistema de actualizaciones /scripts/upcp, se reduce el espacio y tiempo necesario al ejecutarlo.
  • Los módulos de Perl se instalan a través de app::cpanminus, lo que reduce notablemente el uso de memoria durante las instalaciones.
  • Nuevas mejoras cara al usuario: destaca la posibilidad de configurar franjas horarias para los Auto-Responder, Roundcube 0.5.2, recogida de logs de apache via jailshell, File Manager reprogramado y cambios en el sistema de asignado de permisos…
  • Soporte a CentOS 6 y RHEL 6.
  • Soporte a MySQL 5.1 con permisos TRIGGER y VIEW
  • Nuevo chkservd más preciso y que no detecta falsos positivos como cuando paramos un servicio de forma manual.
  • Actualización de cpanellogd, más rápido y liviano.
  • InnoDB activado por defecto en VPS.

Podéis ver todos los cambios con detalle en las Release Notes

cPanel 11.30


cpanel logoEn los próximos días se hará pública la versión 11.30 de cPanel y WHM en su versión EDGE. Los cambios más significativos han sido la integración de nuevas funcionalidades y el arreglo de una serie de bugs. Se ha reescrito completamente el sistema de actualizaciones (UPCP), se han añadido nuevas llamadas a la API y añadido un nuevo módulo de perl (Cpanel::PublicAPI)

Otros cambios son por ejemplo el cambio de ubicación del directorio /scripts, que será movida a /usr/local/cpanel/scripts. El sistema automáticamente migrará los datos de la carpeta a la nueva localización y creará una copia de seguridad de la carpeta además de crear un enlace simbólico para poder seguir accediendo a través de la ruta anterior (/scripts). Han avisado que puede haber problemas si el directorio contiene más de 5000 ficheros o pesa más de 100 megas. En caso de suceder esto se enviará un correo electrónico al administrador.

Hay un cambio en el sistema de RPM, ahora se permitirá al administrador proveer fuentes de un repositorio personalizado, de modo que el usuario final podrá tener versiones personalizadas de distintas aplicaciones si lo desea (exim, ftp, courier, dovecot, etc).

El nuevo módulo de perl Cpanel::PublicAPI permitirá lanzar consultas a las API desde una única interfaz y sustituirá al módulo Cpanel::Accounting, ofreciendo nuevas funcionalidades como la detección automática de credenciales, interfaces para consultas contra API1, API2, xml-api y DNS clustering system.

También se eliminará en esta nueva versión los temas Legacy. Estos son algunos de los cambios, en breve estará disponible la documentación, podéis ver algunos cambios más en el blog de cPanel.

Reducir el uso de memoria de Spamassassin en cPanel/WHM


Es especialmente útil reducir el uso de memoria de Spamassassin/spamd en servidor con poca memoria RAM, sobre todo en VPS. Por defecto, cPanel está configurado para tener un mínimo de 1 proceso de spare y 3 hijos por proceso. Para modificar estos valores, debemos hacerlo dentro del fichero de configuración /etc/cpspamd.conf:

maxspare=1
maxchildren=1

Y reiniciamos exim:

# /etc/init.d/exim restart

Un valor de 1 para ambos parámetros debería ser suficiente en un VPS. Por supuesto si no se hace uso del servicio es conveniente desactivar Spamassassin completamente.

Regenerar fichero named.conf en servidores con cPanel


Pese a que no es habitual, puede que en algún momento necesitéis regenerar el fichero de configuración de named (named.conf). En mi caso no era por borrado accidental del fichero sino porque necesitaba actualizarlo tras una migración en masa de zonas DNS (necesitaba que se incluyeran en el named.conf).

Bien, cPanel pone a nuestra disposición un script que regenera el fichero named.conf a partir de las zonas DNS alojadas en /var/named/. El script a ejecutar es “/scripts/rebuilddnsconfig“.

# /scripts/rebuilddnsconfig

Una vez ejecutado debería haberse regenerado correctamente. Es posible que haya alguna incongruencia, en ese caso os mostraría los errores por pantalla. Ejemplo:

Named could not be restarted, any obvious config errors should show up below this line.
WARNING: /etc/named.conf appears to contain errors which could not be corrected automatically!
/etc/named.conf:6552: zone 'xxxx.com': already exists previous definition: /etc/named.conf:4980
/etc/named.conf:6558: zone 'xxxx.biz': already exists previous definition: /etc/named.conf:2590
Please correct these errors manually and rerun /scripts/fixrndc

En ese caso tenemos llamadas a unas zonas duplicadas. Simplemente eliminamos la llamada duplicada y ejecutaríamos “/scripts/fixrndc” para levantar de nuevo named una vez solucionados los errores:

# /scripts/fixrndc

cPanel: eliminar directorio .cpan por excesivo tamaño


Si sois administradores de servidores con cPanel os habréis dado cuenta que muchas veces el directorio /home/.cpan termina ocupando cerca de 1G de espacio. Gracias a The cPanel Admin descubro la forma de eliminarlo y regenerarlo sin riesgo, pasando de ocupar 1G a apenas 20M.

Primero eliminamos el directorio:

# rm -rf /home/.cpan

Posteriormente ejecutamos los siguientes comandos:

# perl -MCPAN -e shell

Una vez en la shell de cpan:

cpan> install Bundle::CPAN
cpan> reload index
cpan> reload cpan
cpan> exit

Y finalmente de nuevo en la shell ssh:

/scripts/checkperlmodules --full

[cpanel] Unable to locate forwarder “” for account


Últimamente he encontrado dos veces el siguiente error dentro de los logs de error de cPanel:

/usr/local/cpanel/logs/error_log

[2010-08-09 08:38:52 +0200] info [cpanel] Unable to locate forwarder "" for account xxxxx@xxx.com on domain xxx.com
[2010-08-09 08:39:02 +0200] info [cpanel] Unable to locate forwarder "" for account xxxxx@xxx.com on domain xxx.com
[2010-08-09 10:02:42 +0200] info [cpanel] Unable to locate forwarder "" for account xxxxx@xxx.com on domain xxx.com
[2010-08-09 11:03:35 +0200] info [cpanel] Unable to locate forwarder "" for account xxxxx@xxx.com on domain xxx.com
[2010-08-09 11:03:54 +0200] info [cpanel] Unable to locate forwarder "" for account xxxxx@xxx.com on domain xxx.com
[2010-08-09 11:19:25 +0200] info [cpanel] Unable to locate forwarder "" for account xxxxx@xxx.com on domain xxx.com
[2010-08-09 11:25:37 +0200] info [cpanel] Unable to locate forwarder "" for account xxxxx@xxx.com on domain xxx.com

El error al tratar de eliminar una redirección de correo desde la sección “Alias y reenvío” del panel de control de una cuenta. Por el momento no he encontrado otra solución que eliminar la redirección de forma manual dentro del fichero de alias del dominio en cuestión:

vim /etc/valiases/xxx.com

Y eliminar la línea de la redirección que queremos borrar. Puede que sea un bug del skin que utilizamos para los paneles, pues parece que hay casos en los que cuando esto pasa, si cambias al tema x3 se puede eliminar sin problemas.