lunes, 27 de abril de 2009

Cambiar fingerpint Apache2[ Actualización ]

Mañana marcho de vacaciones , haciendo una breve escala,hasta el día 6 de Mayo, así que hasta entonces tendré esto un poco parado. Han enviado un comentario sobre el post anterior del cambio de fingerprint en Apache2. Apuntan no es necesario compilar el paquete, que basta con habilitar mod_security. Lo cierto es que ahora no tengo tiempo, pero por lo poco que he leído sí se puede hacer. Entre mis planes está escribir algo sobre mod_security, me parece muy interesante.

viernes, 24 de abril de 2009

Cambiar fingerprint Apache2

A raíz de una conversación con un coleguilla, acerca Cherokee, me comentaba las bondades de este software, que estaba escrito en C, tiene soporte para PHP,CGIs y demás. También comentábamos el poco consumo memoria y recursos en general. Mi pregunta fue "¿Sabes o has cambiado el fingerprint de Apache2?". Nunca lo había hecho pero llegamos a la conclusión de que compilando desde las fuentes se podría modificar. Tenía razón. Intentaré explicarlo con un ejemplo. Pero antes de nada.¿Qué es un fingerprint? Como siempre, hay mucha información en la red, pero podemos definirlo como "la impresión de una huella en cualquier tipo de superficie". Extrapolando a términos de networking, podríamos definirlo como "la repuesta(huella) que devuelve un servicio ejecutándose en una máquina cuando recibe una petición(...)".¿Por qué modificar esta respuesta?. A esta pregunta respondería con otra: ¿Y por qué no? Supongo, y creo que no voy mal encaminado, que a quién le interese el tipo y versión del software que se ejecuta en una máquina, tendrá como mínimo un interés de dudosa finalidad. Voy a otorgarle el beneficio de la duda. También por que con un simple nmap podemos "descubrir" de un modo muy sencillo estos datos. Ejemplo:

root@debian alberto#nmap -A server.ejemplo -p 80
Starting Nmap 4.68 ( http://nmap.org ) at 2009-04-24 10:16 CEST
Interesting ports on server.ejemplo:
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS webserver 5.0
MAC Address: 00:50:56:A9:4D:AB (VMWare)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Microsoft Windows 2000
OS details: Microsoft Windows 2000 SP4
Network Distance: 1 hop
Service Info: OS: Windows
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.792 seconds

Vamos al grano. Evidentemente, para modificar el fingerprint de Apache, debemos descargar las fuentes de Apache.org y compilar el paquete. No temais, es muy sencillo.Con el paquete httpd-2.2.11.tar.gz desempaquetado en nuestra máquina, procedemos a instalar unos cuantos paquetes necesarios para el proceso de compilación:

[root@debian]apt-get update && apt-get install gcc make

Dentro del directorio de httpd-2.2.11/include editamos el fichero ap_release.h,
localizamos las siguiente cadenas y modificamos los valores a nuestro gusto:

#define AP_SERVER_BASEVENDOR "La Sexta Software Foundation"
#define AP_SERVER_BASEPROJECT "Patricia Conde Server"
#define AP_SERVER_BASEPRODUCT "Jachonda"

#define AP_SERVER_MAJORVERSION_NUMBER 1
#define AP_SERVER_MINORVERSION_NUMBER 1
#define AP_SERVER_PATCHLEVEL_NUMBER 1
#define AP_SERVER_DEVBUILD_BOOLEAN 0

Ahora, como siempre, ./configure && make && make install. Si no ha dado ningún error, debemos añadir al fichero httpd.conf el "ServerSignature On" para comprobar que añade la "firma" de nuestro nuevo Patricia Conde Server.
Ejemplo de un Error 404 :

La pruebas las he realizado sobre una Debian GNU/Linux 5.0 NetInstall sobre VirtualBox 2.14 corriendo en Debian Testing con Kernel 2.6.27.

jueves, 23 de abril de 2009

Rendimiento de un proveedor de Hosting.

Al hilo de un twitt de un coleguilla, me pregunta, aún no sé muy bien el porqué, acerca de cómo "medir" el rendimiento de un proveedor de Hosting. La verdad es que la pregunta es muy interesante. Nunca me lo había preguntado directamente; pero intentaré responder de un modo coherente. Realmente la respuesta es compleja, ya que un "hosting" puede alojar multitud de servicios: web,correo,ftp,cvs...etc.Empecemos por la cuestiones generales:


Cuestiones Generales, me fijaría principalmente en :

  • Calidad de las respuestas y tiempo en responder ante duda antes de la "compra".
  • Calidad del proceso de registro/compra.[Amigable/Complejo]
  • Notificaciones acerca actualizaciones
  • Periodo de prueba gratuito[Si/No]
  • Calidad de la documentación y manuales.
  • Calidad y tiempo de respuesta antes cuestiones técnicas.
  • Formas de contacto: mail,telefono,skype...etc.
  • Precio/Calidad

Cuestiones Técnicas

  • ¿Tienen acuerdo con Puntos Neutros?. Gran ventaja en relación a la calidad del servicio. Si tienen acuerdos con puntos neutros, "nuestros paquetes" no viajarán por toda la red, y serán "cacheados" en puntos de intercambio de redes.
  • ¿Cuantos servidores o cuál es su estructura DNS?. No sé bien cómo explicar este punto sin liarme.Casi mejor con un ejemplo. Hagamos una consulta con dig a as.com, y después otra a google.com. Como vemos, google.com, como era de esperar "tiene" más sevidores DNS que "almacenan" la BBDD con los registros A,MX...etc del dominio. Personalmente, me da más seguridad que otro dominio que sólo tiene dos, o como burradas que he visto últimamente, dominios que sólo disponen de un DNS; con lo cual, cae el server, y...

[root@patriciaconde]dig as.com
;; AUTHORITY SECTION:
as.com. 25890 IN NS dns1.ibercom.com.
as.com. 25890 IN NS dns2.ibercom.com.
[root@patriciaconde]dig google.com
;; AUTHORITY SECTION:
google.com. 284739 IN NS ns4.google.com.
google.com. 284739 IN NS ns3.google.com.
google.com. 284739 IN NS ns2.google.com.
google.com. 284739 IN NS ns1.google.com.



  • ¿Dónde se localiza el/los DataCenter/s? Haría un pequeño análisis y/o aproximación acerca la procedencia de los visitantes de la web. Por ejemplo, si la web está escrita en Portugués, lo más normal es que lo visitante procedan de Portugal o Brasil, pero claro, tratándose de Internet, ya se sabe. Personalmente me he topado con el "inconveniente" de terner un VPS en US cuando lo usuarios potenciales visitan el site dede Europa. En fin, la ignorancia tiene estas cosas. En Debian GNU/Linux tenemos el paquete geoip-bin, que no "dice" el pais al que pertenece la IP de nuestro servidor.

[root@patriciaconde]apt-get update && apt-get install geoip-bin
[root@patriciaconde]geiplookup permuy.org
GeoIP Country Edition: ES, Spain
[root@patriciaconde]geiplookup www.permuy.org
GeoIP Country Edition: US, United States

  • Latencia y rendimiento de red : Cómo de lejos está nuestro server/servers. Ping, traceroute, dig +trace,smokeping, incluso herramientas de monitorización "free" como mon.itor.us pueden ayudarnos a tomar decisiones técnicas finales acerca del proveedor de Hosting.
  • Sistema Operativo: Sin comentarios. GNU/Linux o FreeBSD en su defecto. Si no tiene acceso por SSH no me vale! Juas!
  • ¿ Son Geeks ?. Es algo que valoro, a veces en exceso. Rodearse de Unix/Linux Geeks tiene cosas positivas, por ejemplo, si aburres con tus conversaciones, siempre puedes hacer un apt-get update e instalar una versión nueva de la conversación....se me va la pinza. Retomando, si realmente son geeks y buenos, algo que deberían hacer es compilar su software. Por ejemplo, el fingerprint del webserver. A mucha gente no le dice nada, a mi , muchísimo. Quiere decir que se han preocupado por optimizar sus máquinas, y probablemente también dedicasen tiempo a elegir que software van a instalar. Pero, como casi todo en esta vida, mejor con un ejemplo. El señor Permuy, no se ha preocupado en compilar su Apache y ahora, en lugar de Debian GNU/Linux tiene que usar Ubuntu en su webserver por X motivos. El Sr.Kutus tiene su server detrás de un Firewall, probablemente IPCOP o alguna solución empotrada. Mientras que el Sr.Ferrolmoda.com aloja sus webs en un DinaHTTPD Server de Dinahosting. Veamos.

[root@patriciaconde]nmap -A www.comunidadeozulo.org -p 80
(...)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.9 ((Ubuntu) PHP/5.2.6-1+lenny2 with Suhosin-Patch)
-------------------------------------------------------------
[root@patriciaconde]nmap -A www.kutus.es -p 80
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: firewall|telecom-misc|WAP|general purpose|server appliance
Running (JUST GUESSING) : IPCop Linux 2.4.X (89%), Avaya Linux 2.6.X (88%), FON Linux 2.4.X|2.6.X (87%), Linksys Linux 2.6.X (86%), Netgear Linux 2.6.X (86%), Linux 2.6.X (85%), Toshiba Linux 2.4.X (85%)
--------------------------------------------------------------
[root@patriciaconde]nmap -A www.ferrolmoda.com -p 80
Interesting ports on hl58.dinaserver.com (82.98.134.13):
PORT STATE SERVICE VERSION
80/tcp open http?
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port80-TCP:V=4.62%I=7%D=4/23%Time=49F0A3A7%P=i686-pc-linux-gnu%r(GetReq
SF:uest,239,"HTTP/1\.1\x20200\x20OK\r\nDate:\x20Thu,\x2023\x20Apr\x202009\
SF:x2017:23:14\x20GMT\r\nServer:\x20DinaHTTPd\x20Server\r\nLast-Modified:\
SF:x20Mon,\x2024\x20May\x202004\x2016:25:22\x20GMT\r\nETag:\x20\"b475-147-


Espero que este post sea útil, seguro que existen un montón de errores y deficiencias técnicas, pero me he divertido mucho escribiéndolo.


miércoles, 22 de abril de 2009

Splitvt


Ayer, charlando con un amiguete, me entero que existe splitvt, una herramienta muy útil, que permite dividir el terminal en dos, ejecutando en cada "parte" un comando. Realmente me parce una gran herramienta, que desde ayer por la noche no faltará en mis utilidades para terminal. Para instalar splitvt, basta con un simple apt-get:

[root@pilarrubio]apt-get update && apt-get install splitvt

Imaginemos que queremos ejecutar dmesg en la parte superior y top, en la inferior:

[root@patriciaconde]splitvt -upper dmesg -lower top

lunes, 20 de abril de 2009

Truecrypt command line!



Color del texto
Hasta hace poco, cifraba los(mis) ficheros con TrueCrypt. Lo malo es la acción montar/desmontar lo hacía de forma manual. TrueCrypt está muy bien documentado, es multiplataforma, y para mí que uso el 70% del tiempo Debian GNU/Linux y un 30% MacOS X, es perfecto. Dejo un pequeño apunte para montar volúmenes cifrados con TC vía shell.

truecrypt --text --password=mipassword --non-interactive /media/lacie/cifrado /cifrado

Ahora con un script utilizando rsync, sincronizaré los directorios /etc /home/proyecto y /root.
Salud!

miércoles, 15 de abril de 2009

Mis Feeds

En el post anterior he olvidado mi fichero de feeds. [ Este es el fichero ].

watch

08:00 de la mañana. Entro en la oficina; saludo con un "Buenos días". Enciendo el PC(Debian GNU/Linux SID/Testing/No sé que 2.6.27.1). Lo "primero" que hago es bajar el correo.Lo "segundo" es revisar mis RSS. Desde hace un par de años más o menos tengo total dependencia de los feeds.Lo reconozco: leo RSS a diario; también reconozco que me envuelven en un bucle del que, a veces, sobre todo en casa, me cuesta insertar un "break". Un site realmente bueno, es CommandLineFU, con una frecuencia de actualización muy buena, y sobre todo, muy buenas aportaciones. Esta mañana me ha soprendido una en la que se hacía referencia al comando watch, el cual desconocía por completo. En la página del manual( man watch) encontraréis más info. Básicamente, sirve para ejecutar un programa periódicamente, y mostrar el resultado por pantalla.
Ejemplo: Monitorizar las conexiones tcp:

[root@localhost] watch -n 1 "netstat -tpanl | grep ESTABLISHED"

Para este tipo de cosas prefiero iptraf...


martes, 14 de abril de 2009

Sinde Pírate

lunes, 13 de abril de 2009

UTF-8, Apache2 y PHP5

Hace tiempo,un año más o menos, escribí un post en el que comentaba los pasos para habilitar la codificación UTF-8 para el webmail squirremail.

Un año después, me envían un fichero SQL con información para alimentar campos para la BBDD del proyecto en el que estoy trabajando actualmente. La codificación de esta tablas está en

martes, 7 de abril de 2009

Script Backup [ tar , md5 , cifs ]

Dejo un pequeño script para backups en un disco Western Digital de 1TB con Ethernet 1GB. Resumen:
  • De Lunes a Sabado realiza backup de los directorios definidos en $DESTINO.
  • Los Domingos añade los directorios definidos en $DIRECTORIO_ADICIONALES.
  • Mantiene los ficheros durante 14 días.Suficiente en este caso.
  • Opcion gzip comentada, haciendo pruebas me interesaba observar el funcionamiento del script.Se recomienda descomentar la linea.
  • Comprueba el montaje del directorio destino, en este ejemplo /usb/copias.
  • Detalles en el fichero log especificado en la variable $REPORTE.
  • Genera suma md5 del fichero y lo imprime en el log.
  • Envia por correo el resultado del backup.
No es nada del otro mundo, pero funciona. Las sugerencias son bienvenidas!

#!/bin/bash
#Backup Script Alberto Permuy Leal
#Version 0.0.1
#Licencia: GPLv2 o cualquiera de sus variantes
#
#
#
#
#Fecha: Abril 2009
#
#
#Definicion de variables
#
#Fichero Reporte Backup
REPORTE=/tmp/reporte-backup-$(date +%d-%m-%y).txt
#
#Variables Tiempo
FECHA=$(date +%d-%m-%y)
DIA_SEMANA=`echo $(date +%w)`
#
#Variables Host/Fichero
HOST=`/bin/hostname `
SISTEMA=`/bin/uname -sr `
#
#
#Variables Generales
DESTINO="/usb/copias"
DIRECTORIOS_BACKUP="/etc /root /var/lib/mysql"
DIRECTORIO_ADICIONALES="/var/log"
DESTINATARIO="user@dominio.com"
ASUNTO="InformeBackup"
#
#
#CABECERA
rm -rf $REPORTE
touch $REPORTE
echo "-----------------------------" > $REPORTE
echo "REPORTE BACKUP " >> $REPORTE
echo "-----------------------------" >> $REPORTE
echo "" >> $REPORTE
echo "Host:"$HOST >> $REPORTE
echo "Sistema:"$SISTEMA >> $REPORTE
echo "" >> $REPORTE
echo "Fecha Copia Seguridad :"$FECHA >> $REPORTE
echo "El destinatario del email es:"$DESTINATARIO >> $REPORTE
###############################################################
# #
#COMIENZO DEL SCRIPT #
# #
###############################################################
if [ -d /usb/copias ]; then
echo "Parece que el disco USB está montado"
else
echo "Montando disco USB"
mount.cifs //192.168.1.200/PROGRAMAS /usb -o username=user,password=pass,rw
echo "Fin montaje"
fi
#
#
case $DIA_SEMANA in
1)
NOMBRE_DIA="lunes"
;;
2)
NOMBRE_DIA="martes"
;;
3) NOMBRE_DIA="miercoles"
;;
4)
NOMBRE_DIA="jueves"
;;
5) NOMBRE_DIA="viernes"
;;
6) NOMBRE_DIA="sabado"
;;
0) NOMBRE_DIA="domingo"

esac

case $DIA_SEMANA in

[1-6])
echo "Hoy es :"$NOMBRE_DIA
echo "Backup iniciado a las: "`date |awk '{ print $4 }'` >> $REPORTE
rm -rf $DESTINO/$NOMBRE_DIA-old.tar
mv $DESTINO/$NOMBRE_DIA.tar $DESTINO/$NOMBRE_DIA-old.tar
tar cvf $DESTINO/$NOMBRE_DIA.tar $DIRECTORIOS_BACKUP
#gzip $DESTINO/$NOMBRE_DIA.tar
echo "El fichero ocupa :"`du -sh $DESTINO/$NOMBRE_DIA.tar|awk '{ print $1 }'` >> $REPORTE
echo "Se ha realizado backup de los directorios:"$DIRECTORIOS_BACKUP >> $REPORTE
echo "La suma MD5 del fichero es:"`md5sum $DESTINO/$NOMBRE_DIA.tar|awk '{ print $1 }'` >> $REPORTE
echo "Esta cifra puede ayudarle a comprobar coherencias en caso de restaurar la copia." >> $REPORTE
if [ -f $DESTINO/$NOMBRE_DIA-old.tar ]; then
echo "El fichero de la semana anterior existe.Parece que todo esta en orden." >> $REPORTE
else
echo "El fichero de la semana anterior no existe." >> $REPORTE
echo "Es probable que todavia no se haya cumplido el ciclo de rotaciones de backups." >> $REPORTE
echo "Si continua recibiendo este mensaje.Contacte con el Administrador." >> $REPORTE
fi
echo "Backup finalizado a las: "`date |awk '{ print $4 }'` >> $REPORTE

;;
0)
echo "Hoy es Domingo.Se han añadido directorios adicionales a la copia de seguridad." >> $REPORTE
echo "Son los siguientes :"$DIRECTORIOS_ADICIONALES >> $REPORTE
echo "Backup iniciado a las: "`date |awk '{ print $4 }'` >> $REPORTE
rm -rf $DESTINO/$NOMBRE_DIA-old.tar
sleep 2
mv $DESTINO/$NOMBRE_DIA.tar $DESTINO/$NOMBRE_DIA-old.tar
sleep 2
tar cvf $DESTINO/$NOMBRE_DIA.tar $DIRECTORIOS_BACKUP $DIRECTORIOS_ADICIONALES
#gzip $DESTINO/$NOMBRE_DIA.tar
echo "El fichero ocupa :"`du -sh $DESTINO/$NOMBRE_DIA.tar|awk '{ print $1 }'` >> $REPORTE
echo "Se ha realizado backup de los directorios:"$DIRECTORIOS_BACKUP >> $REPORTE
echo "La suma MD5 del fichero es:"`md5sum $DESTINO/$NOMBRE_DIA.tar|awk '{ print $1 }'` >> $REPORTE
echo "Esta cifra puede ayudarle a comprobar coherencias en caso de restaurar la copia." >> $REPORTE
if [ -f $DESTINO/$NOMBRE_DIA-old.tar ]; then
echo "El fichero de la semana anterior existe.Parece que todo esta en orden." >> $REPORTE
else
echo "El fichero de la semana anterior no existe." >> $REPORTE
echo "Es probable que todavia no se haya cumplido el ciclo de rotaciones de backups." >> $REPORTE
echo "Si continua leyendo este mensaje.Contacte con el Administrador." >> $REPORTE

fi
echo "Backup finalizado a las: "`date |awk '{ print $4 }'` >> $REPORTE

;;

esac
echo "-----------------------------" >> $REPORTE
echo "SysAdmin - Alberto Permuy Leal" >> $REPORTE
echo "Contact :" >> $REPORTE
echo "Email: email at dominio com" >> $REPORTE
echo "Mobile: +0034 666 666 66 " >> $REPORTE
echo "-----------------------------" >> $REPORTE
mail -s $ASUNTO $DESTINATARIO < $REPORTE

lunes, 6 de abril de 2009

Alternativas a Postfix: ssmtp

Habitualmente , no necesitamos configurar un servidor de correo en un sistema Linux de escritorio. La mayoría de los clientes de email gráficos(GUI), como por ejemplo Mozilla Thunderbird, soportan configuraciones IMAP y POP3 para cuentas de Gmail.Pero, ¿cómo envías un email por el típico /usr/bin/mail o por un shell script? Aplicaciones como Sendmail,Postfix o Exim pueden ser configurados como relayhost de Gmail, pero requieren un mayor tiempo de configuración.

Podemos usar Gmail como "smart host" para enviar todos los mensajes desde un sistema Linux/Unix de escritorio. Necesitas una aplicación simple llamada ssmtp, que acepta el envio de mensajes desde una entrada estándar a buzones de correo específicos desde la línea de comandos , que redirige el mensaje al MTA configurado como relayhost. Los mensajes fallidos se depositan en el fichero dead.letter, dentro directorio home del usuario que envia el mensaje.
Instalar ssmtp
En sistemas Fedora/RedHat/CentOS

[root@localhost] yum install ssmtp

En sistemas Debian GNU/Linux / Ubuntu

[root@localhost] apt-get update && apt-get install ssmtp

Configurar gmail como relayhost:
Editamos el fichero /etc/ssmtp/ssmtp.conf con el siguiente contenido

AuthUser = usuario@gmail.com
AuthPass = passwordgmail
FromLineOverride = YES
mailhub = smtp.gmail.com:587
UserSTARTTLS = YES

También debemos asegurarnos de deshabilitar Sendmail:
En sistemas Fedora/RedHat/CentOS

[root@localhost] service sendmail stop
[root@localhost] chkconfig sendmail stop
[root@localhost] mkdir /root/.backup
[root@localhost] mv /usr/sbin/sendmail /root/.backup
[root@localhost] ln -s /usr/local/ssmtp/sbin/ssmtp /usr/sbin/sendmail

En sistemas Debian GNU/Linux / Ubuntu

[root@localhost] /etc/init.d/sendmail stop
[root@localhost] update-rc.d -f sendmail remove
[root@localhost] mkdir /root/.backup
[root@localhost] mv /usr/sbin/sendmail /root/.backup
[root@localhost] ln -s /usr/local/ssmtp/sbin/ssmtp /usr/sbin/sendmail

Ahora ya podemos usar el comando mail o mailx para enviar mensajes, y probar la configuración con el siguiente ejemplo:

echo "Email Prueba" | mail -s "Probando 1,2,3" usuario@dominio.com

Nota acerca de ssmtp:
ssmtp funciona perfectamente para equipos de escritorio, pero no es un reemplazo a Sendmail, Postfix o Qmail.
Nota del traductor: Añadida la distinción entre Debian/Fedora a la hora de deshabilitar sendmail.El artículo original lo podéis encontrar aquí , escrito por Vivek Gite.


jueves, 2 de abril de 2009

Articulo Squid 2.6 Linux + DVD



Hace más de año que han publicado el artículo de Squid que escribí para Linux + DVD. Dejo la URL, por si interesa. La verdad es que ni me acordaba, pero posteo el enlace por nostalgía de otros tiempos que no fueron mejores, curioso, no?

Squid 2.6 en la PYME por Alberto Permuy Leal

miércoles, 1 de abril de 2009

Genial!

JRMora, genial , como casi siempre. Recomiendo encarecidamente visitar su web http://www.jrmora.com .