A Django site.
Diciembre 6, 2011

Criado Indomable
Sebastian D. Criado
Criado Indomable trata sobre »
» criadoindomable

Que lindo es abrir el Nagios por las mañanas y ver todo su verdor. Una brisa de aire fresco llega desde mi pantalla.


Diciembre 3, 2009

Leonardo Andrés Gallego
hombrepac
Leonardo Andrés Gallego trata sobre »
» Recuperar GRUB en Ubuntu luego de re-instalar Windows

Bueno, si tenes una laptop es muy probable que te haya venido con Windows Vista (de aquí en más tal vez Seven) y aunque tenes Ubuntu instalado, si usas Windows, tarde o temprano lo vas a tener que reinstalar. Es su naturaleza y nada vas a poder hacer para evitarlo. Cuando ese día llegue, te va a borrar GRUB… por que es el tipico brabucon del barrio, al que no le gusta compartir :D

Ahora, sea cual fuere tu caso, si queres volver a reinstalar grub, y esto aplica para cualquier distribución — pongo Ubuntu por que es la más común y suele ser la que más ayuda necesita hoy día –, ahora ya no hacen falta todos esos pasos de antes, y se reduce a 4 lineas.

Arrancamos con un LiveCD (puede ser Ubuntu 9.04 o 9.10 o cualquier otra distribución, siempre y cuando sea la misma que tenemos instalada).

Luego, una vez que arranco todo ejecutamos:

sudo grub

Y una vez dentro de la shell de Grub:

> root (hd0,0)
> setup (hd0)
> exit

Ojo, aquí es donde esta el truco:
Los comandos root y setup se deben ejecutar teniendo en cuenta el disco donde esta Windows. Normalmente las laptop tienen uno solo, con lo cual siempre sera hd0, pero no es el caso de los pc de escritorio y la particion de Windows no siempre es la 0.

Para saber donde esta Windows, deben ejecutar:
sudo fdisk -l

Verán algo como esto:

Disk /dev/sda: 160.0 GB, 160041885XXX bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x04XXXXXX                     

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        2444    196313XX+   7  HPFS/NTFS
/dev/sda2            2445       18431   1284155XX+   5  Extended
/dev/sda3           18432       19452     82011XX+  1c  Hidden W95 FAT32 (LBA)
/dev/sda4           19453       19457       401XX+  ef  EFI (FAT-12/16/32)
/dev/sda5            2445        2456       963XX+  83  Linux
/dev/sda6            2457        2578      9799XX+  83  Linux
/dev/sda7            2579        5010    19535XXX+  83  Linux
/dev/sda8            5011       15882    87323XXX   83  Linux
/dev/sda9           15883       18431    20474XXX   83  Linux

Allí la primera partición NTFS en aparcer, muy probablemente sea la que tiene Windows instalado. Va a tener la forma de /dev/sdaX donde X es un numero. En Grub, deben ingresar ese numero menos uno. Entonces, yo tengo Windows en mi primer disco “sda” y la primer particion “sda1″. Osea, en mi caso es /dev/sda1 entonces en Grub utilizo (hd0,0).

Fuente:

http://www.howtogeek.com/howto/ubuntu/reinstall-ubuntu-grub-bootloader-after-windows-wipes-it-out/

Octubre 30, 2009

Leonardo Andrés Gallego
hombrepac
Leonardo Andrés Gallego trata sobre »
» Debian Lenny 5.0 actualiza phpMyAdmin y te sobre-escribe config.inc.php

Vaya dios a saber que paso, pero el mantenedor se olvido de omitir config.inc.php al actualizar el paquete.
Este es el error:

“#1045 – Access denied for user ‘root’@'localhost’ (using password: NO)”

Para solucionarlo, pasarse por:

/etc/phpmyadmin/config/config.inc.php

Y corregir la linea que dice:

$cfg['Servers'][$i]['auth_type'] = ‘config’;

Cambiarla por http o cookie, dependiendo de lo que prefieran:

$cfg['Servers'][$i]['auth_type'] = ‘http’;

Si tienen caracteres raros en la linea de host, entonces es probable que alguien haya explotado una vulnerabilidad en su servidor.

Actualización: Al final parece que no es un problema del desarrollador que mantiene el paquete de phpmyadmin, sino que es una vulnerabilidad de Debian en dicho paquete. Tengo que revisar un poco más, pero si es el caso, hay que tener especial cuidado!

Julio 31, 2009

Criado Indomable
Sebastian D. Criado
Criado Indomable trata sobre »
» SysAdmin Day


Hoy 31 Julio es el SysAdmin Day. Para todos aquellos que no entienden que es un SysAdmin es simplemente aquella persona que posibilita que  puedas conectarte a Internet, chequear tu correo, usar Google y cualquier cosa que tenga involucrado una computadora que se conecta con otra.

Así, que por un día, no los ignores y dile a tu “Pibe tira cables” más cercano, FELIZ DÍA SYSADMIN :D
Y si sos SysAdmin y pensas que sos groso, sabelo, no lo sos :D

Para este SysAdmin, con una birra, es suficiente.


Boris Quiroz
cereal_bars
wreeeeoooowww trata sobre »
» System Administrator Appreciation Day

El día más esperado por las personas que tenemos la suerte de tener el trabajo mas cool de la tierra! Es el dia en que no nos dicen nada por estar sacando la vuelta y no tenemos que recurrir a escusas como esta:

Es de esperar que este año nos regaloneen como merecemos, y que solo por un dia se acuerden de las personas que hacen que todo funcione… Ah, y de paso a ver si cae algún gadget como regalo :D

Muchas felicidades a mis amigos/colegas.

Julio 25, 2009

Boris Quiroz
cereal_bars
wreeeeoooowww trata sobre »
» Sysadmin Day, el próximo viernes!

El próximo día Viernes 31 de Julio se celebra el SysAdmin Day. Qué es esto, se preguntarán mis lectores no-geeks? Es un dia en donde usted, simple mortal, debe mostrar todo su aprecio y respeto a una persona que hace un trabajo que la gran mayoria nisiquiera intentaria entender. Es un trabajo transparente, muchas veces cuestionado, pero vital. Vea que ocurre en un mundo sin Sysadmins.

Por qué las secretarias tienen su día, les regalan flores y hasta los hoteles hacen eventos especiales con regalos, almuerzos, concursos y todas esas cosas? Los Sysadmins tenemos que celebrarnos entre nosotros! Nadie se preocupa por prepararnos cosas como esto:

Tendremos que empezar a usar falda? Espero que no.

Ya sabe. Este 31 de Julio salude a su sysadmin. Si no lo conoce, preocupse! Deberia conocerlo y llevarle algun regalo. Un regalo geek, claro. No nos regalen lápices. No escribimos con lápiz sobre árboles muertos (aka papel).

Si no conoce a su Sysadmin, busque en su empresa a alguien que lleve una polera que usted no entieda, y que diga algo como “/*no comments*/”, “There’s no place like 127.0.0.1″, “SYN/ACK” o “I lost my virginity on ICQ”. Él es el Sysadmin!

Otro video sobre SysAdmins.

Julio 24, 2009
» Sólo un SysAdmin puede entender a otro SysAdmin…

…y es por eso que en Capital Federal están organizando una fiesta especial para celebrar el día del Administrador de Sistemas!

Lástima que estoy levemente lejos, pero pienso que ningún SysAdmin capitalino que se precie, debería faltar a semejante evento.

Un buen SysAdmin es aquel que es invisible a sus usuarios, y eso es una maldición ya que nadie aprecia realmente el trabajo de un SysAdmin y sólo nos dedican pensamientos (de enojo) cuando las cosas van mal, es por eso que el próximo Viernes 31 de Julio, si estás leyendo esta página, al menos sentí gratitud porque lo estás haciendo gracias al buen trabajo de uno o más SysAdmins.

Si querés realmente demostrar tu aprecio hacia nosotros, lo que podés hacer es simple: aparecete en la fiesta y pagale unas buenas birras al SysAdmin que te parezca!

Dejo un video alusivo para sensibilizar a la población…

PD: Gracias Nelson por la noticia!

Julio 9, 2009

Boris Quiroz
cereal_bars
wreeeeoooowww trata sobre »
» Solo un sysadmin…

No olvide saludar a su sysadmin favorito el próximo 31 de Julio, en nuestro dia :-)

Notable el video. Via lugfi list.

Mayo 15, 2009
» Despliegue de aplicaciones web Rails con Puppet y Capistrano (parte I)

Hace algunas semanas me puse a investigar un poco sobre el despliegue de aplicaciones hechas con Ruby on Rails, ya que en mi laburo vamos a comenzar a desarrollar algunas apps en esta plataforma, y quería tener cocinado el tema de infraestructura antes que sea necesario ponerlas en producción.

Leyendo variados artículos en la blogósfera, he visto que una buena dupla como software “plataforma base de Rails” es el uso de Mongrel y Nginx, siendo el primero el servidor de aplicaciones y el último el frontend HTTP. Esta combinación nos permite instalar una aplicación web en un servidor de recursos no muy abundantes, y aún así servir a una buena cantidad de usuarios concurrentes. Obvio que no he hecho métricas propias, pero Internet está lleno de este tipo de análisis.

El problema entonces se divide en dos:

  • Instalar el software base necesario en los servidores
  • Realizar el despliegue (deploy) de la aplicación en si

En este artículo vamos a ver cómo hago yo para mantener el software base (mongrel, nginx, gemas, …) instalado y configurado en los servidores que correspondan. Esta tarea la hago con Puppet, una herramienta que en un artículo anterior he comentado que me permite administrar una gran cantidad de servidores sin tener que volverme un esclavo.A modo de preámbulo, les voy a contar que mis servidores son todos Debian Lenny (stable) y usamos Rails 2.3.x.

Como primera medida, vamos a definir en Puppet lo necesario para que Ruby y Rails estén instalados, ya que son el sistema operativo de nuestra aplicación web.

Para poder instalar Rails 2.3.x desde el instalador de gemas, tenemos primero que instalar rubygems y rubygems1.8, pero Debian Lenny no trae la versión 1.3.1 que es la necesaria, por lo tanto acá es el único lugar donde vamos a hacer un poco de trampa, y vamos a instalar el paquete que podemos bajar desde la versión experimental acá y acá.

¿Cómo instalar un paquete que no está en la distribución actual? Mi solución seguro no fue la mejor, pero anduvo! Lo que hago es vía Puppet envío el paquete al servidor en cuestión y después le digo que lo instale usando dpkg, de esta manera:

# Instalamos rubygems 1.3.1 desde paquetes de experimental, ya que Lenny no lo tiene
# La versión 1.3.1 es necesaria para rails 2.3.x

class rubygems {
    file {
        "/usr/src/rubygems1.8_1.3.1-1_all.deb":
            source => "puppet://puppet.marketingsur.com/files/packages/rubygems1.8_1.3.1-1_all.deb",
            owner => root,
            group => root,
            mode => 0644;
        "/usr/src/rubygems_1.3.1-1_all.deb":
            source => "puppet://puppet.marketingsur.com/files/packages/rubygems_1.3.1-1_all.deb",
            owner => root,
            group => root,
            mode => 0644;
    }

    package {
        "ruby1.8":
            ensure => installed;
        "ruby1.8-dev":
            ensure => installed;
        "make":
            ensure => installed;
        "rubygems1.8_1.3.1":
            source => "/usr/src/rubygems1.8_1.3.1-1_all.deb",
            provider => dpkg,
            ensure => installed,
            require => File["/usr/src/rubygems1.8_1.3.1-1_all.deb"];
        "rubygems_1.3.1":
            source => "/usr/src/rubygems_1.3.1-1_all.deb",
            provider => dpkg,
            ensure => installed,
            require => [ Package["ruby1.8"], Package["rubygems1.8_1.3.1"],
                         File["/usr/src/rubygems_1.3.1-1_all.deb"] ];
    }
}

Con esto ya puedo definir la clase que me va a mantener instalado rails desde gemas:

# Instalamos rails desde gems porque la versión Debian es muy vieja
class rails {

    include rubygems

    package {
        "rails":
            provider => gem,
            ensure => installed,
            require => Package["rubygems_1.3.1"];
    }
}

Nótese la libertad que Puppet no provee al mantenerse independiente del sistema de paquetes, mediante la palabra clave provider puedo decirle que instale paquetes desde otras fuentes, permitiendonos seguir tratando a ese recurso como un paquete abstracto.

Hasta aquí tenemos entonces el lenguaje ruby 1.8 instalado, y rails 2.3.x listo para ser usado.

Mongrel Cluster

Mongrel es una biblioteca Ruby que se usa para armar servidores web, está diseñada para tener buena performance sirviendo contenido dinámico, pero no estático… es por eso que lo último se lo dejamos a Nginx, como explico más abajo.

Volviendo a mongrel, la distribución Debian tiene un paquete llamado mongrel-cluster que nos deja todo bastante listo para usar, con scripts de inicio y apagado de los clusters, por lo que el trabajo adicional que hay que hacer es relativamente poco.

Primero armamos una clase para instalar el software y mantener funcionando el servicio:

class mongrel {
    include rails

    package {
        "mongrel-cluster":
            ensure => installed,
            require => Package["rails"];
    }

    service {
        "mongrel-cluster":
            ensure => running,
            enable => true,
            hasrestart => true,
            hasstatus => true,
            require => Package["mongrel-cluster"];
    }
}

Luego escribimos la definición que va a permitir dar vida a varios clusters mongrel:

define mongrel-cluster-app ( $ipaddr="127.0.0.1",
                             $appdir="",
                             $port=8000,
                             $servers=3) {
    $root = $appdir ? {
        "" => "/var/www/${name}",
        default => "${appdir}",
    }

    include mongrel

    file {
        "/etc/mongrel-cluster/sites-available/${name}.conf":
            owner => root,
            group => root,
            mode => 0644,
            content => template("mongrel/cluster-app.conf.erb"),
            require => Package["mongrel-cluster"],
            notify => Service["mongrel-cluster"];

        "/etc/mongrel-cluster/sites-enabled/${name}.conf":
            ensure => "/etc/mongrel-cluster/sites-available/${name}.conf",
            require => File["/etc/mongrel-cluster/sites-available/${name}.conf"],
            notify => Service["mongrel-cluster"];
    }
}

Esto configura el cluster mongrel en cuestión, activándolo y escribiendo el archivo de configuración a partir del siguiente simple template:

---
address: <%= ipaddr %>
log_file: log/mongrel.log
port: "<%= port %>"
cwd: <%= root %>/current
environment: production
pid_file: tmp/pids/mongrel.pid
servers: <%= servers %>

Con esto, tenemos el software mongrel-cluster instalado, y el cluster específico que va a ejecutar nuestra aplicación configurado y corriendo, listo para atender los requerimientos de los usuarios cuando le lleguen a través de nginx.

Nginx

Primero vamos a empezar con el webserver, el que se encarga de atender a los requests de los usuarios. Éste es un proyecto Ruso que está ganando popularidad por su gran velocidad y poco consumo de memoria. Mi anterior favorito era lighttpd, pero he tenido varios problemas de uso de memoria, y por lo que vi el proyecto está bastante frenado.

Del lado de Puppet, primero defino una clase que mantiene instalado y corriendo el servidor nginx, nada del otro mundo:

class nginx {
    package {
        "nginx":
            ensure => installed;
    }

    service {
        "nginx":
            ensure => running,
            enable => true,
            hasrestart => true,
            hasstatus => false,
            require => Package["nginx"];
    }
}

Luego, tengo una definición que me permite generar varias configuraciones de sitios basados en nginx y mongrel:

define nginx-railsapp ( $rootdir="",
                        $ipaddr="",
                        $port=80,
                        $mongrels=["127.0.0.1, 8000, 3"] ) {
    $root = $rootdir ? {
        "" => "/var/www/${name}",
        default => "${rootdir}",
    }
    $listen = $ipaddr ? {
        "" => "${port}",
        default => "${ipaddr}:${port}",
    }
    $upstream_name = "mongrel-${name}"

    include nginx

    file {
        "${root}":
            ensure => directory,
            owner => www-data,
            group => www-data,
            mode => 0755;
        "/etc/nginx/sites-available/${name}":
            content => template("nginx/railsapp.conf.erb"),
            owner => root,
            group => root,
            mode => 0644,
            require => Package["nginx"],
            notify => Service["nginx"];
        "/etc/nginx/sites-enabled/${name}":
            ensure => "/etc/nginx/sites-available/${name}",
            require => File["/etc/nginx/sites-available/${name}"],
            notify => Service["nginx"];
    }
}

Esta definición acepta 4 parámetros: el directorio raíz donde va a estar la app, la dirección IP en la que va a atender el webserver, su puerto, y las instancias mongrel que van a darle vida a la aplicación. Noten que por defecto todos los parámetros tienen un valor configurado, por lo que son opcionales.

Otro detalle a tener en cuenta es el parámetro mongrels, se puede ver que es una lista de strings, esa string define una tupla de 3 valores separados por coma, el primero corresponde al IP donde los mongrels atienden, el segundo es el puerto inicial, y el tercer valor la cantidad de instancias.

La receta configura un par de directorios y además el archivo de configuración de la aplicación, que obtiene a partir de un template (railsapp.conf.erb) que incluyo acá abajo:

###
# ATENCION: Archivo de configuración manejado por Puppet!
###

upstream <%= upstream_name %> {
    #fair;
<% mongrels.each do |mongrel| -%>
<% mongrel_ip, mongrel_port, mongrel_qty = mongrel.gsub(' ', '').split(',') -%>
<% mongrel_qty.to_i.times do |n| -%>
    server <%= mongrel_ip %>:<%= mongrel_port.to_i + n %>;
<% end -%>
<% end -%>
}

server {
    listen <%= listen %>;
    server_name <%= name %> www.<%= name %>;
    charset off;

    # this rewrites all the requests to the maintenance.html
    # page if it exists in the doc root. This is for capistrano’s
    # disable web task
    if (-f <%= root %>/system/maintenance.html) {
        rewrite ^(.*)$ /system/maintenance.html last;
        break;
    }

    location / {
        root <%= root %>/current;
        index index.html index.htm;
    }

    # / -> first search for local index.html then go to <%= upstream_name %>
    location ~ ^/$ {
        if (-f /index.html) {
            rewrite (.*) /index.html last;
        }
        proxy_pass http://<%= upstream_name %>;
    }

    # rails caching: searching first for $action.html local pages
    location / {
        if (!-f $request_filename.html) {
            proxy_pass http://<%= upstream_name %>;
        }
        rewrite (.*) $1.html last;
    }

    # serve static files directly
    location ~ .html {
        root <%= root %>/current/public;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov)$ {
        root <%= root %>/current/public;
    }

    # resend everything else to <%= upstream_name %>
    location / {
        proxy_pass  http://<%= upstream_name %>;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

Éste es un archivo de configuración que encontré por ahi y que lo adapté al formato de templates de ERB. Básicamente lo que hace es servir todo lo que sea contenido estático, y para lo dinámico (la aplicación web en si) hace de proxy ruteando los requests a el o los clusters mongrel que hayamos definido. Esto nos permitiría tener varios servidores atendiendo a la aplicación web, para repartir la carga.

El toque final

Luego de definir todos estos recursos, no nos queda más que usarlos. Ésto lo podemos hacer con una clase que defina la aplicación en cuestión, de la siguiente manera:

# midominio.com Web App (proxy balancer + backend)
class midominio-webapp {
    include rails
    include mongrel

    $mongrel_ipaddr = "127.0.0.1"
    $mongrel_port = 8000
    $mongrel_servers = 5

    $needed_gems = ["gema1", "gema2", "gema3"]

    nginx-railsapp {
        "midominio.com":
            ipaddr => "1.2.3.4",
            mongrels => ["${mongrel_ipaddr}, ${mongrel_port}, ${mongrel_servers}"];
    }
    mongrel-cluster-app {
        "midominio.com":
            ipaddr => "${mongrel_ipaddr}",
            port => "${mongrel_port}",
            servers => "${mongrel_servers}";
    }

    package {
        $needed_gems:
            provider => gem,
            ensure => installed,
            require => Package["rails"];
    }
}

Luego esta clase la incluímos en el nodo que corresponda, y listo… al rato tenemos instalada la infraestructura para hostear nuestra aplicación web.

Espero se animen a usar Puppet si aún no lo han hecho. Su sintaxis no es de lo mas hermoso que puede existir, pero los beneficios que trae hacen ese tema algo insignificante.

En la segunda parte vamos a hablar de cómo automatizar la instalación de la aplicación en los servidores, usando Capistrano.

Mayo 13, 2009
» Cerrando la puerta a los crackers

cyber-criminal

No es noticia nueva que tener una computadora conectada a Internet la deja expuesta a una serie de riesgos de seguridad, y es por eso que los administradores de sistemas, normalmente tomamos una serie de medidas básicas preventivas para evitar un disgusto posterior.

Si bien mis servidores normalmente tienen un nivel de seguridad más que aceptable, los molestos bots de estas personas no dejan de intentar adivinar las claves de mis cuentas para poder acceder con privilegios de administrador a los servidores. Esto me causa un problema, pero no de seguridad, sino que me ocupan los recursos que tengo para otras cosas y a veces hasta producen enlentecimientos notables en los servidores virtuales mas pequeños.

Es por esto que me puse manos a la obra, a averiguar alguna manera de mantener a raya a estos muchachos, y lo que me encontré fue con un software pensado justamente para esto: fail2ban.

Este programa está ya listo para ser instalado y usado en mi distribución favorita (Debian GNU/Linux), y al instalarse comienza a chequear los accesos fallidos de conexión por SSH, dejando 6 intentos y prohibiendo el acceso por IP por 10 minutos. Para prohibir el acceso utiliza reglas de iptables, y su funcionamiento es en modo daemon, un pequeño programa queda corriendo (muy chiquito, sirve hasta en VPS de 256 MB de RAM) revisando los distintos archivos de registros de sistema.

Lo interesante además es que trae una serie de plantillas para poder chequear otros tipos de servicios como FTP, SMTP, Web, etc. todo esto mediante reglas de análisis y acciones acordes, que se pueden personalizar para un uso específico.

En resumen, una muy simpática herramienta para los administradores de sistemas GNU/Linux, fácil de instalar y poner a funcionar, y el beneficio es enorme.

¡Que la disfruten!

Marzo 18, 2009

Criado Indomable
Sebastian D. Criado
Criado Indomable trata sobre »
» ¿Quién te dijo que ser SysAdmin es ser groso?


CerebroHoy me puse a charlar con un amigo sobre el tema de ser SysAdmin, trabajo que realice por un tiempo (unos años) y del cual tengo alguna experiencia.

A priori trabajar como SysAdmin de una empresa puede sonar interesante y sobre todo una experiencia para incluir en el CV como uno de los mejores puestos que se han tenido. Pero luego uno se da cuenta que son más difíciles los usuarios que los servidores y es allí donde las cosas pueden ser bastante frustrantes.

Mientras que le decía que no crea que es una gran cosa trabajar en ese puesto, le pase algunos tips de lo que puede ser la experiencia de trabajar como SysAdmin de una organización y que pongo a disposición:

  • Vas a ser el tipo menos entendido y más odiado de la organización
  • Tu empleador no tiene idea por que te contrato, solo sabe que tenes algo que ver con las computadoras
  • Cuando des opiniones técnicas un gerente comercial tendrá más peso que vos para tirarlas abajo
  • En tu escritorio reposara toda clase de artículos electrónicos para que “repares”, como si esa fuera tu función (celulares, relojes, notebook por supuesto, blacberries (si, así, mal escrito por que así lo pronuncian los guay), y hasta un velador)
  • Al momento de tener que contratar a una empresa para tercerisar un trabajo te dirán - Por que no lo haces vos?, aunque sea tener que desarrollar un nuevo sistema de gestión. Es que no entienden como “si tenes que ver con las computadoras” no podes hacer el sistema. Al final, no se para que te pagan.
  • Los demás empleados se esforzarán para romper la paciencia por teléfono por las tonteras más increíbles y por cosas que por ejemplo serán que el posa vasos de la computadora esté roto. WTF?
  • Al momento que no los atiendas rápidamente, te llamará el jefe de la división para recordarte que sos un esclavo de la organización y que si quieres seguir trabajando allí tendrás que darle a las putas teclas para limpiar la fucking computadora que se infecto con el fucking mail por que un estupido de administración abrió un powerpoint que le llego en una cadena y que está infectado.
  • Siempre tendrás que andar explicando en las reuniones cual es tu función ya que nadie sabe que se hace como SysAdmin ni que haces VOS en la empresa.
  • Serás tildado de “paranoico” y tendrás que demostrar las “probabilidades” cada ves que des alguna recomendación sobre la seguridad de sistemas.
  • Te pediran que permitas usuarios/servicios aunque le demuestres que son peligrosos y al momento de negarte habrá alguién que te recordara que eres un empleado que tiene que hacer lo que los jefes pidan, por más que eso sea algo peligroso. Igualmente, siempre que algo salga mal, la culpa será tuya.
  • ¿Te recordé que la culpa siempre es tuya?
  • El día del SysAdmin, nadie se acordará de vos ya que ni te tienen en cuenta ni saben que carajo es un sysadmin.

Si tienes más tips, bienvenidos :D

Octubre 1, 2008

Leonardo Andrés Gallego
hombrepac
Leonardo Andrés Gallego trata sobre »
» WRT54GL v1.1 flasheado con DD-WRT v24 SP1

Finalmente me decidí y lo hice.

De repente mi conexión wireless dejo de responder, por alguna razón knetworkmanager al momento de asignar la IP, luego de unos cuantos segundos, reportaba un error. Justo ayer me había pasado dos horas (por teléfono! me sentí un bot de call center…) ayudando unos amigos a configurar su modem/router Zyxel P600 de telefónica/speedy más un Linksys WRT54G (v8) en modo router + wifi, y como para acceder al mio (un WRT54GL) tengo deshabilitada la administración vía wifi, tuve que ponerme un cable. Como ya lo tenia ahí, supuse que habría tocado algo mientras los guiaba, y me conecte a la interfaz web del router para ver si encontraba el problema.

Resulta que mirando, mirando… no notaba nada raro, y en una de esas, me encontré jugando con la opción de DDNS (”Dynamic DNS” para el q no sabe), que siempre lo configure en la PC (es más, cree un par de scripts para actualizar la IP y todo, un día debería subirlos), por que el servicio que utilizo no lo soportaban mis routers previos. Cuestión que en este Linksys habían dos disponibles, uno era DynDNS.org y el otro era TOZ.net o algo así. Como ya dije, no son los que yo utilizo… pero dije, ya fue, me creo una cuenta en dyndns, total, que le hace una clave mancha más al tigre (el tigre? el tigre tiene rayas! el leopardo es el de las manchas! por que se dice al tigre?).

Cuestión que recuerdo fugazmente que en algún momento tuve un dyndns, y que lo reemplace por mi actual proveedor por no brindarme el servicio de dominios propios. Cuando intento reflotar mi cuenta me aparece algo así como “Su cuenta violo las Políticas de Uso Aceptable y ha sido bloqueada”, en ingles y sin mucho mas detalle que eso. Nunca supe ni sabre que política de uso aceptable habré violado, ya que no utilizaba la cuenta hace ¿años?. Aparte de darme bastante bronca el no tener una razón hace tiempo que venia leyendo sobre OpenWRT, DD-WRT, Tomato y tantos otros firmwares libres para routers. Es más, me compre este mismo router por que sabia que si quería, podría aplicarle estas versiones embebidas de Linux. Me tente con la idea nuevamente, me puse a leer, vi lo fácil que era, las ventajas que ganaba… y no dude más. Lo hice.

Algunas ventajas puntuales al convertirme a DD-WRT:

  • Puedo asignar DHCP estático (algo que me molestaba de sobremanera que no tuviera la firmware original ya que lo utilizo para poder forwardear puertos específicos a PCs especificas)
  • Puedo utilizar como 10 servicios de DNS dinámico, incluyendo EveryDNS.
  • Puedo hacer calidad de servicio y controlar al descontrolado de mi hermano y sus descargas (un QoS que anda!).
  • Puedo hacer ssh a mi router!
  • Tengo soporte para OpenVPN! (y no que “pase” nomas, sino conectarme vía VPN)
  • Estadísticas de verdad! Con gráficos y todo.
  • Incrementar la potencia de la wifi
  • Puedo poner un web server, si quiero.
  • Montar un Samba
  • Usar Iptables como firewall

Por otro lado, había algo que hace tiempo venia molestándome y es que la conexión wireless de una de las PC se caia seguido, por lo que vi, parece ser bastante recurrente en ese modelo de placa  (la ironía de que sea una Linksys no me deja de sorprender), y me preguntaba si no tendría algo que ver con el router… aunque las laptops anduvieran sin inconvenientes. Bueno, está confirmado y no era el router. Ni el soft del router. Es la placa. Recomendación para todos los que quieren adquirir una placa inalambrica para su PC: compren un dongle USB <-> Wifi. Después dejo la marca y modelo de uno que funciona muy, pero muy bien en Linux.

Llegamos a la parte practica.

Como se instala DD-WRT en un Linksys WRT54GL v1.1?

  1. Descargamos las firmwares que queremos aplicar
    1. URL: http://www.dd-wrt.com/dd-wrtv3/dd-wrt/downloads.html
    2. dd-wrt.v24_mini_generic.bin (md5: 51cb0315084c292b79988821bfeee738)
    3. dd-wrt.v24_vpn_generic.bin  (md5: de2aa2fb41e75562b8a350ae493ecce0)
  2. Nos conectamos via cable al Linksys.
  3. Guardamos la configuración actual por las moscas, en la parte de administración hay un submenu que permite hacer un backup de está. Opcional.
  4. Reseteamos el router a los valores de fabrica vía la interfaz administrativa web.
  5. Nos logueamos nuevamente, y vamos a la parte de Upgrade Firmware
    1. Le damos a Browse y buscamos el 1er archivo que descargamos: dd-wrt.v24_mini_generic.bin
    2. Es obligratorio utilizar la firmware mini, ya que Linksys limito el tamaño de la firmware a subir vía la interfaz.
    3. Una vez que le damos al upgrade. No tocar nada ni cerrar el navegador hasta que termine. Pueden pasar un par de minutos, lo ideal es irse a tomar algo, estirar los pies, o si tienen; acariciar al perro.
    4. Una vez que aparece la pagina con el boton de Continue, esperamos un par de minutos y le damos click.
    5. Vamos hasta el router y, durante 30 segundos, mantenemos apretado el boton de resetear que se encuentra detras.
  6. Nos volvemos a loguear, y voila! Tenemos DD-WRT en nuestro router. Ahora vamos nuevamente a actualizar el firmware, esta vez para cargar la version mas completita con unas cuantas caracteristicas extra, en este caso las de VPN, aunque existen alternativas como la standard o la de voip. Pueden consultar las diferencias aquí
  7. Una vez logueados nuevamente procedemos (a traves de menus mucho mas bonitos y ajaxiados) hasta la opción de Upgrade Firmware.
  8. Una vez allí, le damos a Browse nuevamente y está vez cargamos la firmware mas grande (std, vpn o voip). Tengan en cuenta que este router no soporta la mega.
  9. Seleccionamos que vuelva a los valores de fabrica al terminar y le damos aceptar.
  10. Nuevamente, vayan a acariciar al perro, vuelvan y sean mas felices. ;)

Lo que se viene: Como destriparlo y agregarle una memoria SD/MMC!

Compartí este articulo: del.icio.us Meneame BarraPunto Facebook Digg Slashdot MisterWong

Julio 25, 2008
» Sysadmins Feliz Dia!!!

SYSADMIN DAY

Mortales.. saluden a sus administradores que les han tenido otro año de paciencia! :)

Diciembre 3, 2007
» ¿Cómo seleccionar el browser web por defecto en Debian?

Tux MagoTe puede estar pasando que cuando haces click en algún enlace desde Thunderbird (ejem, Icedove…) en Debian, te cargue el navegador Epiphany por más que hayas configurado en “aplicaciones preferidas” que use Firefox (cof, Iceweasel…). Esto es porque Icedove no tiene en cuenta esas configuraciones de GNOME, mas bien hay que configurar a nivel sistema que Iceweasel sea el navegador web por defecto, ¿cómo hacemos esto?

En Debian disfrutamos de una herramienta muy útil llamada “update-alternatives”, que nos permite configurar la aplicación favorita a partir de una lista de opciones. Como root nos logueamos y ejecutamos lo siguiente:

computita:~# update-alternatives --config x-www-browser

Hay 2 alternativas que proveen `x-www-browser'.

  Selección     Alternativa
-----------------------------------------------
*+        1    /usr/bin/epiphany
          2    /usr/bin/iceweasel

Pulse <Intro> para mantener el valor por omisión [*] o pulse un número de selección:

Seleccionamos la opción “2″ y listo, mágicamente el icedove comienza a funcionar como debería: abriendo páginas en nuevas pestañas del iceweasel activo.