‘ Tutoriales ’ category archive

¿Cómo configurar DNS con Bind9? segunda parte

March 03, 10 by serumax

La verdad es que no escribiré un extenso manual sobre las zonas inversas, básicamente porque en Internet hay muchos ejemplos. Además, la resolución de nombres inversa no es algo completamente necesario para tener un DNS sencillo funcionando de manera local, como podría ser para el uso de una oficina o pequeña red doméstica donde generalmente tenemos un sólo servidor web que responde a varios dominios ficticios.

Pero si lo que quieres obtener es el nombre de una máquina localizada en la IP 200.72.85.X, necesitarás configurar la zona de resolución de nombres que puede ser llamada, por ejemplo, 85.72.200.in-addr.arpa. Es decir, la numeración IP al revés y sin el último octeto.

Lo primero será editar /etc/bind/named.conf.local y añadir:

zone “85.72.200.in-addr.arpa” {
type master;
file “db-reverse-85.72.200″;
};

Luego escribiremos la información para el dns inverso en un archivo específico llamado db-reverse-85.72.200

nano /etc/bind/db-reverse-85.72.200

y copia las siguientes líneas:

;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA dominio.cl. dominio.cl. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS dominio.cl.
55 IN PTR dominio.cl.
56 IN PTR sub1.dominio.cl.
57 IN PTR sub2.dominio.cl.

De forma que el último octeto de la IP (55, 56 o 57) escrito a la inversa y omitiendo el 85.72.200 que ya se especificó en “named.conf.local” corresponden a los dominios dominio.cl, sub1.dominio.cl y sub2.dominio.cl respectivamente.

Podemos comprobar su funcionamiento reiniciando el demonio BIND9 y realizando una consulta:

$ /etc/init.d/bind9 restart
$ host 200.72.85.55
85.72.200.55.in-addr.arpa domain name pointer dominio.cl

Finalmente, una de las grande confusiones respecto de el funcionamiento de las zonas inversas tiene que ver con la cantidad de octetos que se especifican al definir la zona inversa en el named.conf.local,  pues sería válido definir zone “72.200.in-addr.arpa” o zone “200.in-addr.arpa” y en dichos casos en el archivo db-reverse-85.72.200 (da igual el nombre) variarían las últimas líneas:

En el caso 72.200.in-addr.arpa

55.85 IN PTR dominio.cl.
56 .85 IN PTR sub1.dominio.cl.
57.85 IN PTR sub2.dominio.cl.

En el caso 200.in-addr.arpa

55.85.72 IN PTR dominio.cl.
56 .85 .72 IN PTR sub1.dominio.cl.
57.85.72 IN PTR sub2.dominio.cl.

Todo dependerá del tamaño del la red.

Email Push para iphone gratis

February 05, 09 by serumax

Tienes 6 mail

Como bien comenta @micronauta en Huasonic, una de las grandes promesas del iPhone 3G es poder recibir e-mails vía push, o sea, de forma inmediata. La ventaja de esto es que no hace falta revisar la cuenta de e-mail cada cierto tiempo para saber si tenemos un correo nuevo, más bien el teléfono nos avisa de ello con un ring, casi como si fuese un SMS.

Pues bien, ignorando las desventuras de @micronauta con el push de Yahoo (que aún no publicaba su nota) y no teniendo una cuenta de MobileMe, me puse a googlear para ver que alternativas encontraba. Así fue como llegué a mail2web.com que ofrece un servicio llamado “mail2web Live” con push, que en el fondo se trata de un servidor virtual Microsft Exchange. Después de probar la versión gratis o “basic” por una semana debo decir que ha funcionado bastante bien, aunque no ha estado exento de problemas:

  1. Cuando configuras la cuenta por primera vez, BORRA LOS CONTACTOS existentes en el iphone
  2. Te quedas con una segunda cuenta (en mi caso es la tercera) que salvo para esto del push no usaras para nada, pues no se compara con gmail en cuanto a interfaz web.

Pero vamos por paso, una vez que creas la cuenta tienes la posibilidad de enviar la configuración para el iphone por email, SMS o descargarla. El procedimiento es bastante sencillo por lo que pasaré por alto los detalles, sólo recuerda hacer un backup de los contactos.

Read the rest of this entry »

Password random en php

December 06, 08 by serumax

Hace un par de años tuve que comenzar a generar claves aleatorias para algunos sistemas de registro de usuarios seguros y captchas en los que he trabajado. He utilizado varias fórmulas, pero hasta ahora la que considero más acabada y elegante es esta:

$claves = array_flip(array_merge(range(’a’,’z’),range(’A’,’Z’),range(0,9)));
$password = implode(“”,array_rand($claves, 6));

No necesita mucha explicación, pero lo que hace es generar tres arrays, uno de la “a” a la “z” en minúscula, otro en mayúscula y el tercero, del “0″ al “9″.  Luego unimos los arrays en uno gracias a array_merge, y con array_flip intercambiamos “keys” por “values“. En la segunda línea generamos un nuevo array compuesto por 6 “keys” aleatorias y, finalmente, obtenemos nuestra password random con el implode que nos devuelve un string de 6 dígitos.

Referencia
Generador de Password Aleatorios

¿Cómo configurar DNS con Bind9? Primera parte

November 17, 08 by serumax

Con este post había pensado continuar mi serie de post de “Problemas comunes“, pero ciertamente siendo este un problema común entre administradores de redes, debo confesar tal como sucede con el tema de las particiones de Discos Duros, la configuración de un servidor DNS necesita un poco más de conocimientos, experiencia y  -oops!- cabeza.

¿Qué necesitamos?

  • Un servidor con Linux (para este caso usaremos Ubuntu)
  • Bind 9
  • Un poco de experiencia con el terminal y opcionalmente con Midnight Commander
  • Un editor de texto plano (vim, nano, gedit, kate, o el de MC)
  • Privilegios de root o sudo

Como este tutorial es sobre DNS no me extenderé en detalles anexos, es decir, si usas Fedora o Centos, o prefieres Nano en vez de Vim notarás ciertas diferencias que supongo dominarás bien!

Lo primero es lo primero, instalar Bind9:

serumax@bunbury:~$ sudo apt-get install bind9
[sudo] password for serumax:

Acto seguido editamos el archivo named.conf.local

//o nano o gedit
sudo vim /etc/bind/named.conf.local

y agregamos una nueva zona:

zone “dominio.cl”{
type master;
file “/etc/bind/db.dominio.cl;
};

Read the rest of this entry »

Claves DSA para conectarse por ssh sin contraseña

November 11, 08 by serumax

Terminal terminator ubuntu linux

Cada vez administro más servidores Linux (ayer se sumaron dos más ubicados en Chicago), por lo que suelo conectarme todo el tiempo por SSH y, obvio, tengo teclear las contraseñas cada vez me conecto a una máquina, algo que realmente se ha vuelto tedioso. Por suerte se puede configurar SSH para que utilice certificados o claves DSA, de tal forma podremos autenticarnos automáticamente en el servidor.

Entonces generaremos las claves DSA usando el protocolo 2, que es el protocolo utilizado y recomendado hoy por hoy. Una de las claves generadas será la “clave privada” que quedará guardada en nuestra máquina y opcionalmente podrá ser protegida con una contraseña.  La otra será la “clave pública” que es la que transferiremos al servidor remoto.

Para generar estas claves utilizamos el comando ssh-keygen:

traveler@talita:~$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/traveler/.ssh/id_dsa):
Created directory ‘/home/traveler/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/traveler/.ssh/id_dsa.
Your public key has been saved in /home/traveler/.ssh/id_dsa.pub.
The key fingerprint is:
b4:23:82:5a:19:5b:6f:f3:78:31:fb:f8:45:0b:ed:8f traveler@talita

En la pregunta “Enter file in which to save the key…” hagan enter para que tome el valor predeterminado, lo mismo pueden hacer cuando se les pregunte por la contraseña si no quieren proteger la clave privada con una password.
Read the rest of this entry »

Problemas comunes II: Cambiar permisos de archivos

October 10, 08 by serumax

El sistema de permisos en linux aparentemente es complejo, sobre todo porque hay al menos dos notaciones: simbólica y octal.

Pero lo cierto es que que con un par líneas de comandos es suficiente para comenzar a entender.

//Darle permisos de escritura, lectura y ejecución a un archivo
$sudo chmod 777 archivo.txt

//Darle permisos de escritura, lectura y ejecución a todos los archivos de una carpeta
$sudo chmod -R 777 /home/serumax/public

//hacer un archivo ejecutable
$sudo chmod +x scriptshell.sh

Pero si necesitas más, como con cualquier comando de linux o unix, tienes una ayuda a mano invocando el comando seguido con el parámetro -help:

//También pudes invocar man chmod para algo más completo
$chmod –help

Referencias:

Problemas comunes I: Max File Uploads en PHP

October 02, 08 by serumax

Como programador y administrador de servidores muchas veces me encuentro con problemas simples que, por diversas razones, se repiten cada cierto tiempo. Algunas veces son tareas que fueron realizadas en  proyectos antiguos que nadie recuerda o conoce; otras, en cambio, se pierden en la trivialidad de lo cotidiano y, por lo tanto, no están debidamente documentadas para que el resto de las personas con las que trabajo puedan resolverlas por su cuenta.

La idea entonces es crear y compartir algo así como un repositorio de soluciones rápidas a estos problemas comunes. Por tanto, si se animan, espero que en los comentarios pregunten lo que sea pertinente al tema expuesto o propongan nuevos problemas.

Problema: aumentar tamaño máximo para subir archivos con PHP

Estamos trabajando con un gestor de contenidos como Wordpres o Drupal y necesitamos subir mediante un formulario archivos PDF, PNG o DOC que pesan sobre 2 MB, pero resulta que no se puede y nos sale un mensaje de error.

El problema no es del gestor de contenidos. La configuración por defecto de PHP en un servidor Linux permite copiar o subir archivos desde la máquina local al servidor que tengan un tamaño máximo de 2MB. Aunque no es recomendable aumentar esta cuota en entornos poco protegidos o públicos es posible hacerlo de la siguiente forma:

serumax@bunbury:~$  sudo nano /etc/php5/apache2/php.ini
[sudo] password for serumax:

Ingresamos la clave sudo de nuestra máquina y con CTRL+W procedemos a buscar “upload_max_filesize“:

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M

Nos fijamos que el parámetro file_uploads esté en On y donde dice upload_max_filesize = 2M reemplazamos por el tamaño que necesitamos, pero ojo con el tiempo de ejecución de los script en PHP, que por defecto es de 30 segundos (se archiva un nuevo draft) y si subimos un archivo muy grande esto puede verse afectado.

Por ejemplo, podemos aumentarlo a 5 Megas:

; Maximum allowed size for uploaded files.
upload_max_filesize = 5M

Guardamos con CTRL+O y salimos con CTRL+X.  Con esto ya hemos hecho lo más díficil. Ahora sólo nos resta volver a iniciar Apache, sí Apache, para  que los cambios tengan efecto. Esto porque PHP generalmente corre como módulo de Apache

serumax@bunbury:~$sudo /etc/init.d/apache2 restart
[sudo] password for serumax:

o mejor solo recargamos la nueva configuración

serumax@bunbury:~$sudo /etc/init.d/apache2 reload
[sudo] password for serumax:

Como comentario final, este ejemplo lo hice pensando en un servidor Linux  Ubuntu 8.04, con Apache2 y PHP5. Espero que sea de utilidad :)

Tips para .htaccess

September 23, 08 by serumax

Quienes trabajan con Wordpress y URL’s amigables en los permalinks seguramente habrán tenido que retocar pelear más de alguna vez el archivo .htaccess (hypertext access).

En el caso de las rewrite rules de Wordpress lo que se hace es redirigir todas las peticiones al servidor web al archivo index.php, salvo  que el archivo o la carpeta que se está solicitando en la URL exista realmente en el servidor, pues, de ser así, prevalecerá dicha condición:

Reglas de redirección de Wordpress
En este caso se necesita tener activado el módulo rewrite.load de Apache

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Por otra parte, se establece que se trabajará en la raíz (document root) del servidor web, lo que se puede cambiar fácilmente modificando los parámetros RewriteBase y RewriteRule de una forma que sea coherente.

# el espacio entre el “.” y el “/” no es casual
RewriteBase /folder
RewriteRule . /folder/index.php [L]

Pero lo cierto es que a través del archivo  .htaccess se puede hacer bastante más que redirigir URL’s

Habilitar la navegación del directorio

Options +Indexes
## bloquea algunos tipos de archivos para mostrar
IndexIgnore *.wmv *.mp4 *.avi

Deshabilitar la navegación del directorio

Options All -Indexes

Personalizar mensajes de error

ErrorDocument 403 /forbidden.html
ErrorDocument 404 /notfound.html
ErrorDocument 500 /servererror.html

Hacer que los SSI trabajen con HTML/SHTML

AddType text/html .html
AddType text/html .shtml
AddHandler server-parsed .html
AddHandler server-parsed .shtml
# AddHandler server-parsed .htm

Cambiar la página por defecto (en el siguiente orden)

DirectoryIndex mihome.htm index.htm index.php

Bloquear el acceso al sitio a ciertas IP

order deny,allow
deny from 202.54.122.33
deny from 8.70.44.53
deny from .spammers.com
allow from all

Permitir el acceso sólo a usuarios de la red local (LAN)

order deny,allow
deny from all
allow from 192.168.0.0/24

Redireccionar visitantes a Nueva Página/Carpeta

Redirect viejapagina.html http://www.midominio.com/nuevapagina.html
Redirect /viejacarpeta http://www.midominio.com/nuevacarpeta/

Bloquear el acceso al sitio a ciertas referencias

RewriteEngine on
RewriteCond %{HTTP_REFERER} site-to-block\.com [NC]
RewriteCond %{HTTP_REFERER} site-to-block-2\.com [NC]
RewriteRule .* – [F]

Bloquear el acceso a nuestros ficheros desde otros servidores (Hot Linking)

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?midominio.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ – [F]

Mostrar un mensaje cuando se acceda desde otros sevidores a nuestros ficheros
Agrega la siguiente línea al código para bloquear el acceso a nuestros ficheros desde otros servidores

RewriteRule \.(gif|jpg)$ http://www.midominio.com/no_robes.gif [R,L]

Hacer invisible el archivo .htaccess (o cualquier otro)

order allow,deny
deny from all

Evitar el error 500

# Avoid 500 error by passing charset
AddDefaultCharset utf-8

Conceder el acceso CGI a una carpeta

Options +ExecCGI
AddHandler cgi-script cgi pl
# To enable all scripts in a directory use the following
# SetHandler cgi-script

Cambiar la extensión del script

AddType application/x-httpd-php .gne
gne será ahora tratado cómo un archivo PHP, se puede hacer lo mismo con x-httpd-cgi para archivos CGI, etc.

Ahorrar ancho de banda
Unicamente si utilizas PHP

php_value zlib.output_compression 16386

Apagar las magic_quotes_gpc
Solamente si utilizas PHP

php_flag magic_quotes_gpc off

Referencias

  1. http://enespanol.com.ar/2006/04/03/tutorial-de-htaccess/
  2. http://www.desarrolloweb.com/manuales/htaccess-para-urls-amigables.html
  3. http://www.desarrolloweb.com/articulos/pasar-url-a-buscadores-con-rewriterule.html
  4. http://www.desarrolloweb.com/articulos/introduccion-htaccess.html

Producir plantillas HTML con wget

September 16, 08 by serumax

Seguramente muchas veces un cliente les ha pedido un sitio completo y enorme sólo en HTML. O sea, nada de utilizar PHP, Ruby o Python, ni menos hablar de un CMS como Drupal o Wordpress. Si es así, entonces sabrán lo tedioso que se vuelve modificar una pequeña parte del sitio en una centena de plantillas cuando éste ya está prácticamente listo.

Por suerte en linux existe una pequeña pero poderosa herramienta llamada wget, que sirve para descargar sitios completos.

Con wget y un poco de ingenio podremos producir las plantillas HTML que necesitamos, pero usando nuestro gestor de contenidos favoritos. Para conseguirlo, por ejemplo, podemos usar reglas de reescritura en el .htaccess para que los archivos .html sean tratados tal como uno .php; también sería posible usar un pequeño y muy básico modelo MVC para que según la variable $_SERVER["REQUEST_URI"] (quitando los slashes y  la extension .html con ereg_replace o split) se pueda obtener el nombre de la plantilla HTML/PHP que deseamos utilizar.

En index.php:
if (file_exists(“/ruta_template/”.$mvc->uri.’.php’)){
include(“/ruta_template/”.$mvc->uri.’.php’);
}

Y en .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Y finalmente descargamos con wget usando sus opciones:

  • recursive: descarga el sitio web completo.
  • domains misitio.org: no descarga enlaces fuera de website.org.
  • no-parent: no sigue los enlaces fuera del directorio micarpeta/html/.
  • page-requisites: obtiene todos los elementos que componen la página (imágenes, css, javascript)
  • html-extension: guarda los archivos con extensión .html (ojo con esto que no lo he probado y seguro nos ahorra harto trabajo)
  • convert-links: convierte los enlaces para que puedan trabajarse fuera de línea.
  • restrict-file-names=windows: modifica el nombre de archivos para que también funcionen en Windows.
  • –no-clobber: no sobrescribe ningún archivo existente (en caso de reanudar una  descarga interrumpida)

Debug PHP en Firebug

September 05, 08 by serumax

Desde que entendí cómo funcionaba firebug se ha vuelto una de mis extensiones favoritas de firefox para desarrollar aplicaciones Jacascript y, también, para solucionar problemas de CSS y HTML, incluso por sobre web developer.

Pero como la mayor parte del tiempo estoy trabajando con formularios y validaciones que corren sobre PHP necesitaba tener una funcionalidad similar para este lenguaje. Sin embargo, pese a haber probado algunas herramientas que me prometían el cielo de la depuración no encontré nada que funcionase fácilmente y bien. En otras palabra, ni Pear ni FirePHP fueron opción. PHP_debug, por otra parte, se me hizo muy atractivo de usar en algún momento, pero como también corre sobre Pear, me terminó desencantando.

Determinado a conseguir un depurador que pudiese usar con Firebug, me propuse crear uno, pero en eso encontré un pequeño script que hizo la magia.