IPv6 y lentitud con Postfix

Este ha sido un extraño problema. Correo con Postfix, configurado con unas cuantas cosas: spamassassin, listas negras, etc.

A mayores un firewall nazi, con política DROP por defecto, límite de conexiones, etc.

El problema era que enviar un correo era eternizante. Sabía que era del firewall, puesto que, cuando lo desactivaba, todo iba bien. Tenía los puertos abiertos para IPv4 e IPv6, todo funcionaba bien, sólo que demasiado lento.

Tras varias pruebas, compruebo que si pongo política por defecto ACCEPT con ip6tables o bien desactivo IPv6, todo funciona bien.

Si bien tenía el firewall correctamente configurado para IPv4 e IPv6, ¡había olvidado dar permiso en IPv6 para el interfaz de loopback! Y esto estaba provocando unos cuantos problemas.

Pues nada, error tonto ¡a anotar para no olvidarlo! He aquí la solución:

Leer más

Wake On Lan (WOL) en placa Gigabyte

La placa Gigabyte con tarjeta de red: Realtek Semiconductor Co., Ltd. RTL8111/8168B. Además de Wake On Rign/Wake on Modem (WOR/WOM) soporta Wake On Lan (WOL).

He aquí los sencillísimos pasos para que el «paquete mágico» encienda vuestro ordenador:

1) Activar WOM/WOR en la BIOS (por si acaso).

2) Activar modo WOL para siguiente vez:

ethtool -s eth0 wol g

3) Editar /etc/init.d/halt y en la línea que pone:

halt -d -f -i $poweroff $hddown

sustituirla por:

halt -d -f $poweroff $hddown

Es decir, quitar el «-i» que según la documentación de halt apaga los interfaces de red y en linux (repito, según la docuemntación de halt) «no es necesario porque lo hace el kernel».

4) Editar /etc/rc.local que es el archivo que se ejecuta al inicio y antes de la línea que pone «exit 0» ejecutar el mismo comando que antes para permitir en cada arranque el WOL.

ethtool -s eth0 wol g

5) Apagar el ordenador.

6) Desde otro ordenador que pueda mandar un «paquete mágico» al broadcast de la red en que se encuentre nuestro ordenador apagado usar el script wakeonlan (yo lo usé desde gentoo):

$ wakeonlan 00:01:02:03:04:05

Sustituir 00:01:02:03:04:05 por la MAC de vuestra tarjeta de red, et voilá, vuestro ordenador se encenderá «mágicamente».

La MAC la podéis conseguir desde vuestro ordenador por medio del comando /sbin/ifconfig

Lighttpd con SSL

Todos los servidores web suelen tener métodos bastante estándares para añadir SSL, lo típico cuando se usa OpenSSL es (como ya he explicado en otro articulo anterior):

Generar la clave privada:

openssl genrsa -out serhost.com.key 1024

Generar la solicitud de certificado:

openssl req -new -key serhost.com.key -out serhost.com.csr

Ahora queda o bien enviar esa solicitud a una entidad certificadora (que nos cobrarán: 10$ (registerfly), 20$ (godaddy) a otros precios menos razonables como verisign que intentará cobrar más de 350$ por certificado, todas las compañías hacen lo mismo, pero unas tienen «mas nombre» que otras).

La otra opción es optar también por una entidad certificadora gratuita (cacert.org) que ya no está reconocida ni siquiera por firefox, para lo cual, mejor, autofirmamos nuestro certificado (nos dará un aviso que el certificado no está firmado por una autoridad certificadora de confianza, pero podemos aceptarlo de forma permanente).

Actualización: Desde que se creó este artículo, existen alternativas gratuitas como por ejemplo: letsencrypt.

Para firmarlo y obtener un crt:

openssl x509 -req -days 365 -in serhost.com.csr -signkey serhost.com.key -out serhost.com.crt

Ahora necesitamos el certificado en formato .pem (el .pem no es más que el archivo .key y a continuación el archivo .crt), luego los concatenamos:

cat serhost.com.key serhost.com.crt > serhost.com.pem

En mi caso he guardado todos estos archivos:

  • serhost.com.key
  • serhost.com.csr
  • serhost.com.crt
  • serhost.com.pem

En un directorio: ssl-certs, de modo que tengo todo un poco más clasificado, hay que recordar darles los permisos adecuados (que el propietario sea el usuario con que se ejecuta lighttpd y solo puedan ser accedidos por él).

Una vez tenemos todo esto (vamos a suponer que en: /etc/lighttpd/ssl-certs) editamos el fichero de configuración de lighttpd (que suponemos está en: /etc/lighttpd/lighttpd.conf) y añadimos al final:

var.confdir = "/etc/lighttpd"
$SERVER["socket"] == "127.0.0.1:443" {
ssl.engine = "enable"
ssl.pemfile = var.confdir + "/ssl-certs/serhost.com.pem"
server.name = var.confdir + "serhost.com"
server.document-root = "/var/www/localhost/htdocs/"
}

Las opciones creo que son autoexplicativas, también se puede establecer la opción:

ssl.ca-file = var.confdir + "/entidadcertificadora.crt"

que indicaría donde se encuentra el certificado con que ha sido firmado nuestro propio certificado.

Por último, comentar que lighttpd soporta PHP, python, perl, ruby, y que tiene soporte para virtualhosts y diferentes módulos útiles: mod_proxy, mod_auth, mod_alias, mod_cache, mod_deflate, mod_cgi, mod_accesslog, mod_rewrite, etc, además, sus fuentes comprimidos ocupan unos 700 KB y parece ser que funciona más rápido que apache, una vez compilado a mano con todas las librerías y el man correspondiente ocupa menos de 2 megas (tras pasarle el comando strip).

Más información:

  • Configuración extraída y adaptada de: http://www.varlogarthas.net/blog/2007/03/installing_a_godaddy_ssl_certi.html (el enlace ya no funciona)
  • Lighttpd: http://www.lighttpd.net

mod_autoindex de apache

mod_autoindex es un módulo de apache que nos permite mostrar un listado de archivos y directorios de un directorio cuando no hay un fichero index predeterminado (o si bien queremos mostrar este listado y obviamos este index).

La documentación de este módulo, puede encontrarse en: http://httpd.apache.org/docs/1.3/mod/mod_autoindex.html

A continuación pongo un ejemplo de un archivo .htaccess que añade una cabecera y un pie al listado, además, añade descripción a los distintos archivos:

Opciones (convertir iconos en parte del link, que coja anchos de las descripciones de forma automática y muestre primero las carpetas y luego ordene por fecha de modo que los archivos más recientes se encuentren al final):

IndexOptions +IconsAreLinks
IndexOptions NameWidth=* DescriptionWidth=*
IndexOptions +FoldersFirst
IndexOrderDefault Ascending Date

Añadir descripciones a los ficheros:

AddDescription "Instrucciones de instalación del programa" LEEME.txt
AddDescription "Aplicación" aplicacion.tar.gz

Añade una cabecera (en lugar de: Index of diretory/)

HeaderName cabecera.html

Añade el pie de página

ReadmeName LEEME.txt

Lo bueno de este sistema es que podemos integrar el diseño de nuestro sitio (y más si usamos CSS) con el listado de archivos predeterminado de apache.

Como parar ataques DOS al servidor web

El título más bien debería decir: Como pararlos parcialmente, ya que como sea un dDOS en condiciones desde varias IPs, es complicado de parar sin muchos recursos.

Este caso me ha pasado recientemente, una persona se puso en contacto conmigo porque estaba recibiendo ataques de una sóla IP que conectaba demasiadas veces contra su servidor apache (en el puerto 80 pero usando tantas conexiones que le chupaba todo el ancho de banda).

La solución sencilla, cuando os pase algo del estilo, pasa por poner una pequeña regla en el firewall que impida a esa IP ver vuestro servidor, de forma que piense que ha conseguido su objetivo: tirarnos el servidor, pero que otros puedan seguir viendo el servidor.

Leer más

Compresión gzip sobre http para mejorar la velocidad

Si tienes tu propio servidor esto quizás pueda interesarte para consumir menos ancho de banda, o en mi caso, que las páginas al servirlas, ocupen menos y por tanto se carguen más rápido. Una técnica conocida desde hace tiempo pero que no he probado hasta ahora debido a que no me había entrado curiosidad hasta que haciendo un programilla descubrí que diciéndole a cierto servidor que yo era IE y que aceptada compresión gzip, me devolvía la página comprimida.

Buscando por ahí, encontré el modo de hacerlo en apache (gracias a lo cual haré antes pruebas en mi servidor antes de seguir con el programa).

Leer más