Anda di halaman 1dari 30

Cmo mont mi servidor

Las pginasque ests viendoestn(Sep2006: estaban) alojadas en mi propio servidor (IP 217.126.10.173), que est en mi habitacin encendido todo el da. Aqu explico las ideas que tuve durante el montaje y los respectivos problemas y soluciones. En lo que invert ms tiempo fue en la parte terica: pensar todos los detalles (todos) sobre papel. Cuando ya tuve todas las decisiones hechas pude empezar a montarlo y a solucionar los imprevistos. En total tard menos de un mes, a ritmo lento (era mi mes de vacaciones). Aqu pondr todo en orden cronolgico. Septiembre 2006: cuando lo apagu, escrib otro artculo, en donde explico las cosas que pasaron, qu problemas me dio, y qu mejorara. Vase:Qu tal funcion mi servidor.

1. Problema 2. Formas de alojar una web 3. Qu ordenador elijo? 4. Dnde meto este trasto? 5. Lo que tengo que comprar 6. Mi primera vez con la grimpadora 7. Ms cables 8. Qu sistema operativo le pongo? 9. Particiones 10. Hostname 11. Necesito nuevo kernel... 12. y qu kernel le pongo? 13. Parches del kernel 14. make menuconfig 15. La maldita 100tcl no va 16. Kernel monoltico 17. 100 Mbits 18. Paquetes 19. Necesito poco consumo 20. Estn pasando cosas... 21. No al ARP poisoning 22. Acceso remoto 23. Qu hora es? 24. Problemas con cron 25. Usuarios y grupos 26. El servidor web 27. Si no es Apache, cul elijo?

28. CGIs, qu es eso? 29. Virtual hosting... vhosting para los amigos 30. El entorno para chroot 31. Opciones de thttpd 32. Logs 33. Un watchdog para el servidor web 34. Servidor FTP 35. Acceso al FTP desde fuera 36. Empiezan los problemas serios: esto se cuelga 37. Comparar distancias entre ordenadores 38. No pierdo el honor; arreglo lo del cuelgue 39. iptables 40. Cambios en el router 41. Cmo prob el virtual hosting yo solito 42. Quiero un contador; no tengo PHP 43. Copias de seguridad peridicas 44. Trabajar cmodamente en mi web 45. Cambios en el dominio 46. Conclusiones 47. Sobre este documento

Problema
Primero, algo de introduccin y de pruebas con la cmara. stesoy yo (Daniel Clemente Laboreo, 19 aos), stees mi ordenador (Celeron 800, 192 Mb RAM), aques donde vivo (Gav, Barcelona), y estoes una foto del sol. Mi pgina web, www.danielclemente.com, ha pasado por muchos servidores gratuitos (galeon.com, freewebz, iespana, host.sk, y ms) y quera algo estable, fcil de actualizar (porque sin la pgina tambin es 'estable'), y ms elegante que los sitios gratuitos y llenos de publicidad.

Formas de alojar una web


Pens en:

Contratar un servicio de hosting y pagar muchos euros cada mes.

Comprar un ordenador para que haga de servidor y contratar a una empresa de housing para que lo cuide. An ms caro. Usar un servidor gratuito. Entonces dependes de ellos, si deciden dejar de ser gratis o dejan de ofrecer un servicio hay que cambiarse (cosa que ya hice varias veces). Directamente no tener pgina web. Eso soluciona muchas cosas... :-) Montar un aparato que haga de servidor. Me decid por la ltima opcin por ser la ms divertida de todas.

Qu ordenador elijo?
Lo ms importante para m al decidir fue: 1. Que gastara poca electricidad 2. Que no hiciera ruido Todo est relacionado, y adems implica que el ordenador tena que ser poco potente, en el sentido estricto de la palabra. Lo que pagas a tu compaa elctrica por un aparato determinado depende de su potencia (en watts) y del tiempo que haya estado encendido. Es fcil de calcular, aunque no digo que sea exacto ya que, al ser corriente alterna, lo que pagas (S) est relacionado con lo que gastas (P) mediante el factor de potencia de tu instalacin elctrica. Veamos un ejemplo del fcil:
La fuente de alimentacin de mi ordenador (que es lo que da electricidad a todos los aparatos del ordenador excepto pantalla) es de como mximo350 W. En kW, 0'35 kW (1 kW = 1000 W). Imaginemos que tengo encendido el ordenador (sin pantalla) 24 horas al da todo el mes. Eso seran unas 24 * 30 = 720 horas al mes. La frmula dice que P = W / t (potencia = trabajo entre tiempo). Aislamos el trabajo (que equivale a energa): W = P * t Las unidades son las del sistema internacional: W en joules (J), P en watts (W) y t en segundos (s). El W tambin se suele expresar en kWh (se lee 'kilowatts hora', no 'kilowatts por hora'), y 1 kWh = 1 kW * 1h al igual que 1 J = 1 W * 1 s Ya podemos calcular cunta energa gasta -en el peor de los casos- mi fuente encendida todo el mes: W = P * t = 0'35 kW * 720 h = 252 kWh En la factura de la luz vi que pagbamos cada kWh a 0'0804 (aprox.). Por lo tanto, tener mi ordenador encendido todo el mes saldra a 252 kWh * 0,0804 (/kWh) = 20'2 cada mes como mucho

AQU MET LA PATA : Estas notas de "como mximo" las he aadido despus de que mucha gente haya ledo el artculo y me haya corregido: cuando en una fuente pone 350 W, se refiere a la potencia mximaque puede llegar a proporcionar, pero para saber el consumo en un instante

determinado hay que sumar el de la CPU, placa, disco duro, etc., y segn dicen puede ser de unos 100 W (eso quiere decir que la potencia ser de 100 W para arriba, hasta 350). Act. Septiembre 2005: Hice pruebas del consumo, y mi porttil gasta 9 W, unos 6 7 euros al ao. Ms informacin:Cunto gasta un ordenador?. Contina el artculo...

Es muy caro, por eso necesito otro ordenador. Busqu miniordenadores (mini PCs, placas micro-ATX, ITX y barebones) por Barcelona, pero lo mnimo que tenan era de 200 W (11'5 al mes en mi casa). Pero se fabrican hasta de 50-60 W, yo quera uno de esos! (seran 3 al mes). Desgraciadamente, nos intentan convencer de que "cuanto ms potente, mejor" y de que "si hace mucho ruido es porque es muy potente". Las dos cosas son mentira; lo nico cierto es la definicin de potencia: "cuanto ms potente, ms gasta". Hay maravillas como sta(586 a unos 200 Mhz con 128 Mb SDRAM, CompactFlash o disco duro, ...), pero salen bastante caras por el transporte desde el extranjero. Las VIA EPIA (silenciosas) son demasiado potentes para mis necesidades y adems no me atrevo a comprar un aparato desconocido (para m) sin verlo antes. Entonces pens en los porttiles, una muestra de lo avanzada que est la tecnologa (por qu se sigue fabricando todo tan grande y chapucero si desde hace dcadas se sabe hacer pequeo y bien?). Slo les vi ventajas: Estn diseados para gastar poco (sobre 60W). Si no necesitan gastar, no gastan [casi nada]. Eso es maravilloso! Te has fijado en que tu ordenador grande est todo el rato transformando energa (en la fuente) tanto si est trabajando como si no? Adems el ventilador est todo el rato girando, aunque el transformador ya est fro (ojal me equivoque y cuando leas esto ya no se hagan estas chapuzas). En un porttil el ventilador se enciende cuando la CPU est muy caliente, y la fuente 'chupa' mucha energa cuando necesita cargar la batera, o el mnimo cuando no lo necesita. Tienen SAI incorporado: la batera. Si se va la luz, pueden aguantar horas. Y todo por el mismo precio. No hacen ruido (bueno, algunos s). Caben fcilmente en cualquier sitio, hasta en un cajn. Yo no les veo desventajas, pero por lo que me han dicho:

Son caros: de segunda mano no. Yo me apao con cualquier cosa y la aprovecho bien; de todas formas para un servidor no hace falta nada potente. No estn hechos para estar tanto tiempo encendidos, se calentaran mucho y se quemaran: mi servidor va a consumir CPU durante menos de 10 minutos cada da; no llegar a calentarse demasiado. De todas formas, en caso extremo llegara a la temperatura mxima para la que ha estado diseado, no ms. "Ests loco, vas a destrozar la batera": en eso estoy ms de acuerdo, y s que es probable que pase. Las consecuencias sern que mi batera, que ahora dura 2 h, durar 5 min. al cabo de varios meses. Pero para m eso ya es suficiente para el uso que tiene (es slo para resistir apagones). Querra conservar esta batera y hacerme una mala slo con ese fin; s que hacen falta pilas (recargables, supongo) pero no he encontrado tutoriales por Internet as que adis, batera de 2 horas!

Decid hacer lo del porttil, pero despus tuve otras ideas: yo ya tena un aparato encendido las 24 horas al da y que tena un servidor web, pero an no me haba dado cuenta. Es mi router. Uno normal, Office Connect Remote 812 ADSL de 3Com, con una web de configuracin servida por un Allegro-Software-RomPager/2.10. Probablemente tenga un sistema operativo tipo UNIX por dentro; sea cual sea me veo capaz de manejarlo e instalar nuevos programas o mi propio servidor http. El problema es que 3Com no explica a nadie cmo hacerlo ni deja intentarlo; el interior del aparato es secreto y no les interesa decirlo. No por comportarse as dan un producto mejor, ya que el OCR 812 tiene muchsimos fallos.

Hay otro aparato con ms suerte en eso: el punto de acceso wireless Linksys WRT54G. Es tan cerrado como el que yo tengo (al principio Linksys no dio el cdigo de todo el software GPL que usa), y tambin tiene fallos, como el mo. El caso es que a travs de uno de esos fallos se puede acceder a todo el sistema Linux que lleva dentro y ejecutar programas, como un servidor ssh, un IDS, o un servidor web (aunque ya lleva uno para la configuracin). Y el servidor sera rpido porque estara en lo ms externo de mi red. Este AP/router lo compran a montones los linuxeros slo por esto, pero los problemas que le veo son: Linksys no quiere colaborar, de hecho intenta evitar que la gente 'juegue' con su AP. Si se puede hacer todo esto es por fallos tontos en su firmware. Por esa razn, es posible que me compre uno y que el fallo est arreglado y no pueda tocar nada. Estpidos! Si dejaran usar al 100% este cacharro, venderan muchsimos ms. No entiendo por qu lo 'capan'. Siguiendo con lo anterior: aunque consiguiera poner un servidor web, no s si subir y bajar ficheros, CGIs, etc. sera cmodo, o todo seran 'hacks'.

El aparato no est hecho para que lo usen los freakies; si hay espacio libre en la FLASH es por casualidad. Para una web se podran usar unos 2 Mb, cosa que me parece poco. Quizs sea ampliable. Es una pena, porque es barato, consume muy poco ( 10 W !!! o sea 60 cntimos al mes), y adems de regalo me permitira freir mi cerebro y el de los vecinos con microondas de 2'4 GHz...

Al final hice lo del porttil: por 200 compr por Internet (de segunda mano, claro) un Toshiba Portg 300CT: Pentium 133 MMX, 32 Mb RAM, 1'5 Gb disco duro, USB, infrarojos, PCMCIA, disquetera externa, sin CD ni red, con tarjeta de sonido, y pantalla 16:9 en la que puedo poner las X a 1024x600 :-) Lo mejor: es muy pequeo y consume muy poco: mximo 30 W (la mitad que una bombilla). En euros, 1'7 al mes. Ver fotos:

Dnde meto este trasto?


Tena que buscar un sitio por mi habitacin que me quedara lejos de la cama (para no or posibles ruidos), poco caliente y al que llegaran cables. Lo dej en la galera que hay al lado de mi habitacin; aqu hay unas fotos de antes y despus, a ver si descubres dnde est escondido:

Lo que tengo que comprar


Para integrar este ordenador en mi red necesitaba unas cosillas: Una tarjeta de red: USB o PCMCIA; prefer PCMCIA porque tiene 2 ranuras (ahora 1 libre). Por 10 compr de segunda mano una Conceptronic 100

TCL 10/100, sabiendo que funcionaba pero que iba a dar problemas...

Un switch o hub; mejor switch por seguridad (as es algo ms complicado usar sniffers). Compr uno nuevo por 20 ,y es muy pequeo. Gasta 7'5 W, en eso no haba pensado :-(

Muchos cables. Decid hacerlos yo mismo, por lo que compr una grimpadora, latiguillos y varios metros de UTP CAT 5.

Mi primera vez con la grimpadora


Poda haber comprado cables hechos, pero quera aprender a hacer eso de 'grimpar'. An no he investigado por qu hay diferentes formas de ordenar los 8 cablecitos de dentro; creo que depende de si conectan router con router, PC con PC o router con PC (y se llaman MDI y MDI-X). Lo que hice fue coger un cable muy largo que ya tena, fijarme en cmo estaba hecho y hacer lo mismo. Puse por las dos puntas la siguiente ordenacin: si se coge el latiguillo con el [futuro] cable apuntando hacia nosotros y con el trocito que sobresale por la parte de abajo, el orden de izquierda a derecha es: verde, verde/blanco, naranja/blanco, azul, azul/blanco, naranja, marrn/blanco, marrn

Nunca haba usado una grimpadora, pero es un aparato que te lo hace todo: corta el cable, lo pela (para que queden sueltos los cablecitos de colores), y una vez que los has conseguido meter dentro en orden, chafa el plstico para que no se suelten. En unos minutos de retorcer y retorcer cablecitos ya consegu hacer uno. Lo prob, funcion, y puse 4 5 latiguillos ms sin miedo. Tal como tema, una vez acabados los cables la grimpadora pierde toda su utilidad, as que si puedes, no te compres t una, pdesela a un amigo!

Ms cables
Con tanto cable, la red ir ms lenta y adems cogern bastante polvo.

Por ahora mi situacin es sta; fjate que el ordenador grande lo tengo en la galera pero la pantalla, teclado y ratn estn lejos, en una mesa. Es por el ruido... slo tengo un ventilador y el de la fuente de alimentacin; los dos Enermax (que fabrica slo componentes silenciosos), pero an as se oyen mucho incluso a la mnima velocidad. Y eso que la caja est forrada con material aislante acstico... Adems, mi CPUy mi pantalla tambin hacen mucho ruido, pero esa es otra larga historia que me gustara poder explicar algn da. [HECHO].

Adivina de quin es este cable de 30 metros que une mi switch con el router OCR 812. Fjate en cmo atraviesa la puerta y dems obstculos... :-)

Qu sistema operativo le pongo?


Creo que no hay dudas... Windows Server 2003 es el mejor. Me sale un 33% ms barato que Linux, la instalacin es un 70% ms fcil, es mucho ms seguro y adems viene con IIS, que es un 276% ms rpido que los servidores web de Linux, segn cuentan algunas empresas que no tienen mejores cosas que hacer.

Dejando aparte todas las chorradas que pueda decir la gente que quiere tu dinero, bsicamente tena que elegir entre Linux o no-Linux (*BSD, Hurd, otros). He usado OpenBSD algn tiempo, pero no me siento capaz de hacer un sistema seguro porque no me lo conozco tanto como Linux. Pero me gustara ms poner un BSD, porque Linux tiene demasiados fallos (demasiados = 1 o ms), y ms que los BSD.

Entonces me toc elegir distribucin... no pens mucho; quera Debian por el apt-get (para las actualizaciones de seguridad, porque no quiero tener que enterarme por casualidad de fallos graves). Eleg una estable porque no me importaba tener programas viejos; los quera seguros, pocos en nmero y que no hubiera que actualizarlos. De todas formas el kernel y los programas importantes me los compil yo. La instalacin la hice por disquets (buuuuuuffff.......) Recuerdo que el porttil no tiene CD ni red.

Particiones
No se puede poner todo mezclado en una particin raz por el tema de los logs: si algn gracioso empieza a generar accesos a mi sitio, empezar a gastar espacio de mi disco. Imaginemos que es muy gracioso y que sigue hasta llenarlo todo; eso podra afectar al funcionamiento de otros programas (no habra espacio ni para los ficheros temporales). Por eso los logs van en una particin aparte, para que si se llena entera no moleste a todo lo dems. Naturalmente, quiero un sistema de archivos con journalling por si se apaga a lo bestia. Eleg ext3 porque se lleva muy bien con Linux, y porque no veo muchas diferencias entre los otros que he probado, xfs y reiserfs. Para entretenerme algo ms, los servidores estarn en un entorno chroot (lo explico ms adelante), y todo este entorno (que incluye los logs) tendr su propia particin. En total me quedan los 1625 Mb as:

hda1 hda2 hda5 hda6 hda4

/home /f /f/log swap /

150 500 50 50 875

Ya cabe lo necesario El entorno chroot, con las webs Los logs (Luego decid que no la quera) Para todo lo dems

Por qu no quiero swap? Bueno, creo que 32 Mb de RAM son suficientes, pero lo importante es lo siguiente: el disco duro va a estar la mayor parte del tiempo apagado. Cuando haga falta grabar algo en swap, habra que volver a hacer girar el disco, y eso gasta electricidad, tiempo y adems hace ruido. De eso se estropea innecesariamente el motor.

Hostname
Esta vez no perd mucho tiempo pensando... se llamar amarok. En realidad es un disco de Mike Oldfield que me gusta mucho, pero lo eleg por la misma razn que l: suena bien. Quiere decir 'lobo' en algn idioma nrdico. Mis otros aparatos con nombre en red son pc(el grande, un nombre muy original) y trasto, un Pentium-I 120 con 16 Mb de RAM y que ocupa ms que el mo.

Necesito nuevo kernel...


...pero no tengo red ni CD, y estoy cansado de los disquets. La tarjeta de red PCMCIA me funcionar despus, con el kernel nuevo. Lo que hice fue pasarle los archivos por wireless (en mi universidad, la UPC), con una tarjeta que no cost mucho configurar. Una vez hecho esto ya no us ms el wireless.

y qu kernel le pongo?
En principio yo quera un 2.2, porque es el que lleva ms aos probando su seguridad y porque no necesito caractersticas especiales; pero luego descubr que si consegua hacerlo

funcionar era a base de parches: para ext3, para la tarjeta de red, para pcmcia, ... en fin, que no lo vea muy elegante. Al final me decid por un 2.4.24 slo por esto, por ser ms 'limpio'. El 2.6 no me sirve, es demasiado nuevo para poner en un servidor.

Parches del kernel


Al 2.4.24 le apliqu el parchepatch-2.4.25-pre8, que contiene las cosas nuevas que se le aadieron al 2.4.24 cuando lo baj. Tena inters especial en 'arreglar' una cosa que me parece que deberan tener todos los sistemas operativos: la seccin de datos de la pila no debe ser ejecutable. As se evitan los 'buffer overflows' en los que se mete cdigo en un sitio donde slo tendra que haber datos (texto, nmeros, ... pero no instrucciones). Hay varios parches que hacen estas cosas, por ejemplo GrSecurity, OpenWall, HAP, LIDS o StackGuard. Me qued con OpenWall porque es mucho ms sencillo y menos ambicioso que GrSecurity, y porque funciona tambin en kernels 2.2 (por si acaso...). Cuidado:esto no hace maravillas; si hay algn bug de BOF, alguien puede explotarlo si le interesa, pero le costar ms. Como ejemplo hay que leer la Phrack 56 (o en espaol).

make menuconfig
En total recompil unas 20 veces el kernel... pero ya tena las ideas claras desde el principio, as que me qued bastante bien a la primera; el resto fue para arreglar imprevistos (ver siguiente punto). Los detalles:

2.4.25-pre8 parche OpenWall: linux-2.4.24-ow1 monoltico (sin mdulos, ni siquiera los de la PCMCIA de red) Sin: agp, apm, alsa, fb, i2c, isa, pnp, scsi, usb, v4l Con: 8139too, ide, pci, pcmcia Con soporte para red e iptables Con las optimizaciones adecuadas, por ejemplo la opcin de Toshiba

La maldita 100tcl no va
La PCMCIA de red, la meto y no pasa nada (ni logs ni ruidos ni luces ni nada). Por un mensaje perdido en Internet descubro la posibilidad de que se arregle poniendo en la BIOS que las PC Card han de funcionar en modo 16 bits. Lo pruebo, y funciona (la detecta). Me pas das con esto.

Kernel monoltico
Pues s, esto me dio algunos problemas, sobre todo con la tarjeta de red PCMCIA (que puede estar conectada o desconectada). Al final consegu que todo fuera muchsimo mejor (cargaba lo necesario nada ms conectar, instantneamente) y pude quitar el paquete pcmcia-cs, porque ya nadie tena que decidir cul era el mdulo apropiado para cargar. Por cierto, el kernel me ocup 724 kb, los mdulos nada... :-) y carga rapidsimo.

100 Mbits
Cuando me fue la tarjeta de red, descubr estas velocidades de 1'5 Mb/s. Ojal el ADSL estndar en Espaa fuera as de rpido! Por suerte haba preparado todo para que fuera compatible con 100 Mbits: la tarjeta de red era 10/100, el switch tambin y la que ya tena en mi PC tambin. El router 3Com 812 slo va a 10 Mbits... :-( pero bueno, no hago muchas ms conexiones por mi red. Mi conexin al exterior era a travs de un ADSL 256/128 Kbits (slo 128 Kbits de subida!, eso es enviar datos a un mximo de 16 Kb/s). Adems es carsimo, 45 /mes (siempre por culpa del monopolio de Telefnica), aunque por lo menos va bien: pocos meses he notado que haya cortes de conexin.

Paquetes
Quit muchos programas que no necesitaba. Al final me qued slo con 129 paquetes... y con muchas cosas innecesarias y peligrosas que hacen todo ms interesante, como nc, gcc, nmap o tcpdump. El servidor web y el de ftp los compil a mano.

Necesito poco consumo


Ajust la BIOS para que la pantalla y el disco duro se apagaran a los 3 minutos de inactividad. Creo que ya es suficiente, porque si estuviera al mnimo (1 minuto) y alguien se pone a mirar mi pgina y pasa 2 minutos en cada pgina (si hay suerte), el disco estara encendindose a cada peticin y apagndose despus. Creo que sale ms a cuenta 3 minutos. Por cierto, que si mi BIOS no hubiera tenido esa opcin, hdparm -S va muy bien.

Tambin le mando que nunca se suspenda y que est en el modo lento. Y ya no se me ocurren ms formas de hacer que gaste menos (mmmm.... aparte de unas placas solares, pero eso es otra historia).

Estn pasando cosas...

En todos mis Linux configuro el syslog para que me muestre todo (*.*) por una consola libre, por ejemplo /dev/tty10, y as poder ver antes todo lo que pasa. Me di cuenta de que, aunque yo no hiciera nada, haba varias cosas que estaban ejecutndose peridicamente y que yo no haba pedido, as que las quit. Quito inetd, anacron, at (no lo necesito) y desactivo esos molestos MARKs que salen peridicamente. Adems, lo dejo todo ms sencillo de lo que estaba: hago que todos los logs (*.*) vayan al mismo fichero,/var/log/syslog, adems de /dev/tty10como he dicho antes. Las emergencias se mandan directamente a los usuarios conectados, y todos los dems archivos de log no los necesito; los borro. De todas formas no los iba a mirar. Ahora ya hay tranquilidad en el syslog, interrumpida slo por el cron cada da, semana y mes. Compruebo que los logs se roten bien; s.

No al ARP poisoning
El ARP poisoning y los MITM son muy divertidos, pero no en mi red :-) Si alguien entra como root a mi PC de uso diario tendr que pensar un poquito ms para molestar al servidor, porque tiene la tabla ARP con MACs estticas. Ya he probado con todo lo que conozco y ningn intento de cambiarlas ha tenido xito. Desgraciadamente, mi router no se deja ponerle una tabla ARP esttica... no tiene esa funcin :-( y eso que es bastante caro. Por cierto, tambin activ las SYN cookies para hacer ms complicados los SYN floodings.

Acceso remoto
Por el sitio en el que he dejado escondido el porttil, ms me vale tener formas de manejarlo a distancia...

Pero nada de rlogins ni chapuzas gigantescas como telnets sin contrasea. Usar SSH para las comunicaciones, y slo pc(el ordenador grande) podr entrar por SSH al servidor, desde fuera no se puede [directamente]. Claro que conectndose primero al grande y desde ah al servidor.... bueno, no doy ideas.

Qu hora es?
Las 5:05 de la maana... Pero en fin, estoy de vacaciones. Bueno, a lo que iba: Mis relojes suelen ir entre 10 y 20 minutos adelantados, y alguno se atrasa slo. Para colmo, el porttil tiene la pila gastada y no mantiene la hora al apagarse. Existe una solucin muy bonita: actualizar la hora por Internet. De eso se encarga el protocolo NTP. En Debian he usado el programa ntpdate para sincronizarse con algunos servidores espaoles; puse un script que se ejecuta al arrancar y cada da (mediante cron) y lo primero que hizo fue fallar diciendo que no haba servidores apropiados: Lo que deca: "no servers suitable for synchronization" Lo que realmente quiere decir: "Ests usando demasiado la red, por lo que los paquetes con la hora me tardan mucho en llegar y por tanto no son exactos" Por eso lo ejecuto cada da por la maana a horas raras. Por cierto, que esto de las horas me sirvi para aprender algo de terminologa: CET, CEST, GMT, ...

Problemas con cron


Bsicamente, uno: que yo pona ah ficheros ejecutables (scripts) o enlaces a ellos, pero no todos se ejecutaban. Por qu? Pues porque les faltaba la primera lnea:
#!/bin/sh

Y cuidado con el $PATH... porque no es lo mismo tu shell que las condiciones en las que se ejecuta lo del cron.

Usuarios y grupos
Esto tambin es importante pensrselo bien... poca gente usa eso de los grupos, y hacindolo aprend a tener cuidado con lo de los permisos (u, g, o). Lo interesante de /etc/passwd :
root:x:0:0:root:/root:/bin/bash webo:x:1000:1000:webo,,,:/home/webo:/bin/bash dc:x:1001:1000:,,,:/home/dc:/bin/bash

ip:x:1002:1000:,,,:/home/ip:/bin/bash efetepe:x:1003:1003:,,,:/home/efetepe:/bin/bash

El /etc/shadow no te lo voy a poner, pero ya te aviso de que las contraseas son bastante absurdas (eso s, las mas suelen ser de 20 caracteres para arriba). O sea, que hay un grupo llamado webo, al que pertenecen los usuarios que tienen web (en este caso dc eip). Elefetepe es, como su nombre indica, para poder subir o bajar archivos fcilmente.

El servidor web

Qu me hace falta? Eso es lo que necesito saber. Parece que al hablar de "buen servidor web en Linux" hay que hablar de Apache, pero no quiero Apache. Tiene algn fallo (demasiados, pues no debera tener ninguno) y es muy extenso, tanto que no conseguira aprender a manejarlo por completo. Y en mi ordenador no voy a poner cosas que no sepa usar. Adems, es que no necesito todo lo que tiene Apache. Ni me gusta su licencia... Quiero algo sencillo. Probando varios servidores diferentes empiezo a ver qu cosas ofrecen, y si me interesan. Decido que no necesito PHP por ser demasiado complicado, pero que lo de generar pginas mediante scripts de bash (que es lo que siempre haba querido) se puede hacer con CGIs. Tambin veo lo til que es el 'virtual hosting': asociar varios dominios a la misma IP y que el servidor decida cada vez cul le han pedido para saber qu pgina dar. Eso me servir para....... bueno, ms bien les servir a mis amigos que quieran que les aloje algo. Que asocien su dominio a mi IP y ya est, nada de frames o subcarpetas. En total: quiero un servidor web sencillo, fcil de meter en un chroot, sin PHPs, con CGIs y con virtual hosting.

Si no es Apache, cul elijo?


Estuve mirando varios (hay muchsimos, algunos muy curiosos): Tux: al parecer es un LKM (loadable kernel module) que hace que todo vaya mucho ms rpido, pues est integrado en el kernel. Permite pasar las

peticiones que no entiende a servidores en el espacio de usuario, bueno, me parece que slo a Apache. Este sistema es muy bonito pero yo no quiero ejecutar nada como root y menos a nivel de kernel, ni quiero tener que instalar esto y Apache. Adems encontr poca informacin sobre este programa; creo que lo hizo Red Hat pero est algo abandonado. screws: Script Enhaced Web Server. La idea me gusta mucho: es modular y funciona a base de scripts; los mdulos que no me interesan los puedo directamente borrar. As me quedaran pocas lneas de cdigo fciles de revisar. Est todo muy bien hecho; conozco a los programadores pero an no llego a su nivel y me costara detectar problemas o fallos. No lo us por este motivo, pero tengo ganas de entenderlo y probarlo porque lo veo muy til. nc (netcat): alguna vez he dicho que es fcil hacerse un servidor web con un script en bash y netcat. No cuesta mucho (logs, CGIs, virtual hosting, .... en eso no veo problemas), pero me preocupa lo de los threads/fork o el sistema que use para aceptar varias conexiones a la vez (ya que slo puedo abrir un nc por el puerto 80). Cuando aprenda cmo se hace me arrepentir de haber escrito esto. mini-httpd (de Peter Simons): no soporta contenido dinmico... :-( Por lo dems est muy bien. mini_httpd(ste es otro): hace todo lo que quiero, es muy sencillo, pero ya dice el autor que es una prueba y que no est optimizado para ser rpido (su velocidad es el 90% de la de Apache). Me lo habra mirado, pero es que el autor ha hecho varios servidores ms que me van mejor. micro_httpd: del mismo que el anterior, pero ste ocupa 150 lneas de cdigo y funciona desde inetd. No me gusta inetd, as que nada de nada. thttpd: del mismo que los dos anteriores, Jef Poskanzer. ste est ms trabajado y es con el que me qued; me gusta cmo est diseado. Es mucho ms rpido que Apache (y mucho ms sencillo) y su seguridad est comprobada por cientos de personas; no tantas como Apache pero al menos ya s que tiene un mnimo de seguridad (tambin ha tenido algunos fallos gordos, desgraciadamente). Tiene todo lo que necesito y alguna cosa ms, como soporte IPv6 y limitacin de velocidad por tipo de archivo. Reviso el cdigo, y me gusta. publicfile: de Dan J. Bernstein, ste lo vi despus de haber acabado todo el montaje. Me habra ido perfecto, porque incorpora servidor http y ftp, con watchdog y gestin de logs; y creo que no tiene fallos de seguridad conocidos. No soporta CGIs. Requiere pasar ms tiempo aprendiendo cmo funciona, pero creo que vale la pena y que cuando el thttpd me d problemas cambiar a estas utilidades. Gracias a los que me las habis recomendado.

CGIs, qu es eso?
Antes lo nico que saba de los CGIs era que permitan ejecutar programas en Perl y que se usaban para los contadores, pero ahora ya los he descubierto del todo. Un CGI no es ms que un programa cuya salida se mandar al visitante web. Imagina que haces un

cualquier_comando > fichero # toda la salida se queda grabada ah nc -l -p 80 <fichero # servir ese fichero.... :-)

Por eso puedes hacer cosas tan bonitas como:


#!/bin/bash echo "Content-type: text/html" echo fortune cat << EOF < br><br>Hola, esto es una prueba en HTML, <br> < b>probando</b>, <i>probando</i>. < br> Mi uptime: EOF uptime

O incluso:
#!/bin/bash echo "Content-type: image/jpeg"; echo; cat imagen.jpg

El echo se suelto es para ese ENTER que hay que hacer para mandar cada peticin/respuesta HTTP.

Virtual hosting... vhosting para los amigos


Eso mismo. Al ponerme un servidor ya saba que habra ms cosas alojadas aparte de mi web, y ya que me he preocupado de montarlo prefiero que sirva de algo ms que de contenedor para la basura que es mi web. Mucha gente crea carpetas en su servidor, por ejemplo www.miservidor.com/~pepe, o www.serv.com/users/yoo cosas as, lo malo es que si no te gusta esa direccin tienes que hacer una redireccin por HTTP, y eso es muy feo. Lo del virtual hosting es mucho ms elegante: imaginemos que Google y Slashdot leen esta web y me piden alojar sus pginas en mi servidor. Entonces los root servers de DNS traduciran google.com y slashdot.orga mi IP, 217.126.10.173. Y si vienen de los dos sitios a mi IP, cmo distingo qu pgina dar a cada visitante? Pues por la peticin HTTP que me hacen. Ejemplo:
GET / HTTP/1.1 Host: www.google.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7a) Gecko/20040215 Accept: text/xml,application/xml,application/xhtml+xml,text/html, etc, etc, etc Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive

Fjate en el campo Host, se es el que le dice qu dominio ha pedido. Con esta informacin, que entiende mi servidor, ya s qu pgina dar, en este caso ser la / (lo dice la peticin GET) del hostwww.google.com. Esta peticin es HTTP/1.1, por tanto es obligatorio especificar el Host. El problema es que en HTTP/1.0 es opcional y en HTTP/0.9 no hay nada de eso (slo un GET pgina). Puedes ver en qu consiste cada versin aqu: HTTP 0.9,HTTP 1.0,HTTP 1.1. Por suerte no quedan muchos navegadores que usen la 0.9 (al menos yo no he visto ninguno). En todo caso, mi idea es tener como mnimo dos webs: la ma, a la que se entra desdewww.danielclemente.com o danielclemente.com, y una 'por defecto' a la que se entrar si no has especificado ningn Host o si has escrito la IP a mano. Esta pgina tendra un ndice de las pginas que alojo en mi servidor y la forma de entrar en ellas.

El entorno para chroot


Dentro del directorio /f tena que crear una estructura de directorios y archivos propia de un sistema UNIX para que se ejecutara el servidor web y los programa CGIs. El chroot lo que hace es convertir en raz (/) el directorio especificado, por lo que si, dentro de la jaula, el usuario root te hace un rm -rf /, slo te habr borrado el directorio de chroot. Lo primero que pens es que ya habra mini-distribuciones de Linux preparadas para esto que contengan los programas necesarios: bash, ls, gcc, perl, ... Seguro que hay, pero no busqu mucho y decid hacerlo a mano. Descubr que es muy fcil si se usan las herramientas apropiadas. Esta captura de pantalla deja claro el proceso ('captura' en modo texto aqu):

Y as con cada programa, tienes que copiar las libreras que necesita (ya sabes, man ldd si no sabes qu hace).

Opciones de thttpd
Lo bueno de elegir un servidor sencillo es que pude revisar todo el cdigo fuente y leerme y entender por completo el manual de uso. Sabiendo manejar el programa entero, no tuve ningn problema. thttpd no necesita archivo de configuracin; todas las opciones se pasan como parmetros. Por eso me hice un script que haca lo siguiente:
#!/bin/sh /bin/thttpd -p 80 -d /f -r -u webo -dd web -c "\ 217.126.10.173/cgi-bin/*|\ danielclemente.com/cgi-bin/*|\ www.danielclemente.com/cgi-bin/*|\ amarok/cgi-bin/*|\ 172.26.0.11/cgi-bin/*\ " -l /f/log/este_mes -v

Explicacin:
-p 80: es el 'por defecto', pero slo para asegurarme. Mi intencin era que thttpd no se ejecutara como root sin como un usuario normal, y por tanto pensaba usar un puerto no privilegiado (ej. 8000) y hacer NAT desde el router, pero como para el chroot hace falta ser root (luego baja de privilegios), acab usando el 80. -d /f: directorio al que entra al ejecutar el programa -r: hacer chroot en el directorio del programa (o sea, el /f de la opcin anterior) -u webo: usuario al que cambiar despus de hacer las cosas que requieren ser root. Es importante no ser root dentro del chroot, porque entonces es 'fcil' salir mandando unas seales. -dd web: directorio al que entra despus de haber hecho el chroot. O sea, que las webs estn en /f/web -c "blablabla": archivos que deben ejecutarse en vez de mostrarse, o sea CGIs. Adems han de ser ejecutables (+x). Tengo que poner cada nombre de host (aunque la web sea la misma) por la diferencia que se hace con lo del virtual hosting: quizs alguien quiera que desde miweb.com vayan los CGIs pero desde www.miweb.com no. Nota que el * lo traduce el bash a los nombres de archivo que hay en ese momento en cada directorio, por lo que si luego aades nuevos CGIs hay que reiniciar el servidor dndole la nueva lista. -l /f/log/este_mes: dnde aadir los logs (lo explico luego) -v: hacer virtual hosting. En /f/webno habr una web con su index.html, sin directorios, cada uno llamado con un nombre de host (ej. www.miweb.com) y con su index.htmly familia dentro. El proceso se arranca como demonio; para hacer pruebas va bien el -D que lo deja en primer plano.

Logs
Me hice este script que rota y archiva los logs, muy sencillo. Est en
/etc/cron.monthly #!/bin/sh # Rotar logs. EJECUTAR EL PRIMER DA DE CADA MES

cd /f/log rm -f hace12meses.gz mv hace11meses.gz hace12meses.gz

mv hace10meses.gz hace11meses.gz mv hace9meses.gz hace10meses.gz mv hace8meses.gz hace9meses.gz mv hace7meses.gz hace8meses.gz mv hace6meses.gz hace7meses.gz mv hace5meses.gz hace6meses.gz mv hace4meses.gz hace5meses.gz mv hace3meses.gz hace4meses.gz mv hace2meses.gz hace3meses.gz mv hace1mes.gz hace2meses.gz /bin/gzip este_mes mv este_mes.gz hace1mes.gz kill -HUP `pidof thttpd` || /root/servweb

Si no sabas lo que era rotar logs, pues ya lo sabes (es descartar el ms viejo para que quepa uno nuevo; slo tengo 12 posiciones). La ltima lnea reinicia el servidor web o, en caso de que no est activo, lo inicia. Tambin poda haber usado herramientas automticas que lo hacen, como logrotate. Pero mi script es ms sencillo porque tiene slo lo que yo quiero.

Un watchdog para el servidor web


Puede que, por alguna razn rara, el proceso thttpd muera y me quede sin servidor. Por eso me hice un 'watchdog', o 'perro guardin', que comprueba peridicamente si est activo y si no lo est lo inicia. Al principio se ejecutaba cada da porque no encontr un /etc/cron.hourly(lo mmino era daily)... pura vagancia. Luego le aad 05 * * * * root /root/wdogweb al /etc/crontabpara ejecutarlo cada hora a los 05 minutos. El script es realmente sencillo y muy bonito:
#!/bin/sh pidof thttpd || /root/servweb # equivale a: if ! pidof thttpd; then /root/servweb; fi

Me han comentado que hay utilidades como daemontools que se encargan de arrancar y vigilar servicios, pero ahora que ya he aprendido a usar cron creo que no me hace falta otro programa para hacer lo mismo. No digo que no sea til; al contrario, va muy bien por si tienes muchos servidores.

Servidor FTP
Necesito uno para dos cosas: 1. Subir/bajar archivos de la web, no slo yo sin cualquier otro usuario 2. Espacio temporal para chorradas al que pueda acceder desde cualquier sitio.

Y quiero uno como el servidor web, que sea sencillo y elegante (sin chapuzas). Me mir muchos (me fue bien un 'apt-cache search ftp' en una Debian inestable), pero eran difciles de entender, y muchos no funcionaban o directamente no compilaban por fallos en el cdigo. Al final acab usando 'el de siempre': mi preferido, el pure-ftpd. Lo compil con la opcin de chroot virtual (--with-virtualchroot), que encierra a cada usuario en su directorio personal, pero si hay un enlace que lleva fuera deja seguirlo. ste es el caso, ya que el usuario dc, por ejemplo, tiene en su home /home/dc el enlace simblico /home/dc/webque le lleva a /f/web/danielclemente.com (su web). Sin esta opcin no deja salir del $HOME de ninguna manera. El servidor lo arranco con este comando:
/usr/local/sbin/pure-ftpd -A -B -u 100 -C 5 -4 -E -k 90

Qu hace cada cosa: -A: hacer chroot() en el home de cada usuario (excepto root, pero root no se conectar) -B: arrancar en segundo plano -u 100: no pueden entrar los usuarios con UID menor de 100 (root y otros de sistema) -C 5: mximo 5 conexiones por IP -4: escuchar slo conexiones IPv4 (no s usar IPv6, mejor lo desactivo) -E: no permito conexiones annimas, aunque es interesante activarlo, as entra gente que ni conoces y te deja programas (lo malo es que suelen ser ilegales). -k 90: no deja subir nada ms si el disco duro est lleno al 90%

Acceso al FTP desde fuera


Quiero una cuenta FTP multiuso que sirva para dejar notas y ficheros sueltos y poder acceder desde cualquier sitio. Ser casi pblico, pero con contrasea. No voy a usar las cuentas de la web, porque el FTP es inseguro (va en texto plano) y no hay conexin SSH directa al servidor, por tanto no puedo usar sftp. Eso no va muy bien y puede dar problemas, pero no doy acceso SSH por seguridad (ms adelante me lo pensar). Por tanto, lo que hice fue crear una cuenta 'basura', de nombre efetepe, grupo efetepe, y una contrasea realmente absurda.

Empiezan los problemas serios: esto se cuelga


Ahora me tocaba hacer un cortafuegos y probar la seguridad, as que le hice varios nmap como de costumbre. Lo curioso fue que al cabo de varios nmaps empez a tener los puertos cerrados. Me extra, porque an no haba puesto ningn IDS, pero luego descubr levantndome y sacndole de su sitio- que se haba quedado colgado. (Quizs es un nuevo sistema de seguridad; lo he visto en accin en las ltimas versiones de Windows).

No me cost mucho descubrir cul era el problema, ya que al pasar archivos grandes por FTP pasaba lo mismo. Curiosamente, el ping -f lo aguantaba, pero los escaneos rpidos de nmap no. Usando las opciones de velocidad de nmap, vi que se colgaba slo con -T3 para arriba, el -T2ya iba bien. Lo caracterstico del -T2 es que manda los paquetes en serie, o sea uno detrs del otro. -T3 ya empieza a mandar varios a la vez, y eso es lo que haca que se colgara la tarjeta de red PCMCIA.

Comparar distancias entre ordenadores


Haciendo pruebas con el ping -f y otros descubr el 'ping adaptativo', estaba en la primera pgina del man ping. La sintaxis es ping -A host y consiste en mandar pings lo ms rpido que pueda sin perder paquetes. Eso no quiere decir 'muy muy rpido', sin lo ms rpido posible. Si ve que se pierden paquetes manda ms despacio. Mandamos un ping, que viaja a travs del cable, llega a su destino y vuelve en forma de respuesta. Nada ms llegar mandamos otro, y as todo el rato. Por el tiempo que tardan en volver podemos adivinar cmo de lejos est el destino. Naturalmente, depende de muchas condiciones, por eso no he hablado de medir distancias sin de comparar. Las pruebas que he hecho en mi casa son crebles y se corresponden con la topologa de mi red. Supongo que si se llaman ICMP echo request y reply es por esto; tambin podemos saber cmo de lejos est una pared por el tiempo que tarda en llegar el eco.

No pierdo el honor; arreglo lo del cuelgue


La verdad es que no tena ni idea de por qu fallaba la tarjeta de red, slo saba que no era normal. Prob muchas cosas sin parar, porque no puedo ir diciendo por ah que 'mi Linux se cuelga y no s cmo arreglarlo'. Despus de tocar muchas cosas y de compilar muchos kernels, descubr la opcin mgica que lo solucionaba: Dentro de la seccin de dispositivos de red, en la del 8139too, "RealTek RTL-8139 PCI Fast Ethernet Adapter support", hay una que pone "Use PIO instead of MMIO". Hay que activarla. Ahora aguanta sin problemas un while :; do nmap -vv -P0 -T5 -p1-65535 -r
amarok; done

iptables
Nada complicado; el servidor usar FTP y HTTP desde fuera y SSH desde mi ordenador 'grande' (cuya direccin MAC es esttica y por tanto siempre corresponder a la misma IP).

Adems slo analizo las conexiones nuevas (las que slo tienen el bit SYN activado), acepto las de loopback, no acepto UDP, y s que dejo ICMP request y reply. Todo lo dems lo ignoro (DROP). Las conexiones salientes las acepto (para que funcione el FTP) pero el forwarding no. Me queda este script para ejecutar al inicio:

#!/bin/sh # Mi cortafuegos; 13/2/2004 1:49 AM, Daniel Clemente iptables -F INPUT iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -m state --state NEW -i lo -j ACCEPT iptables -A INPUT -m state --state NEW -i eth0 -p tcp --dport 20 -j ACCEPT iptables -A INPUT -m state --state NEW -i eth0 -p tcp --dport 21 -j ACCEPT iptables -A INPUT -m state --state NEW -i eth0 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -m state --state NEW -i eth0 -s 172.26.0.2 -p tcp -dport 22 -j ACCEPT iptables -A INPUT -m state --state NEW -i eth0 -p icmp --icmp-type echorequest -j ACCEPT iptables -A INPUT -m state --state NEW -i eth0 -p icmp --icmp-type echoreply -j ACCEPT iptables -P INPUT DROP iptables -F FORWARD iptables -P FORWARD DROP iptables -F OUTPUT iptables -P OUTPUT ACCEPT

Cambios en el router
El ordenador destino por defecto es el grande, de nombre pc. Para el servidor slo tuve que redirigirle los puertos 20, 21 y 80; el resto de puertos se refieren al ordenador grande. Normalmente el router (OCR 812) tiene una pgina web de configuracin en el puerto 80; la cambi al puerto 8000 de esta forma:
disable network service httpd set network service httpd socket 8000 enable network service httpd save all

Cmo prob el virtual hosting yo solito


Ahora necesitaba probarlo todo un poco: ped que me hicieran unos escaneos de puertos, pero an me quedaba mucho por probar sobre lo de servir pginas distintas dependiendo de la pgina pedida. Puse dos pginas diferentes: una para cuando se entrara por 172.26.0.11 y otro para cuando se entrara por 217.126.10.173. Cul es el problema? Pues que si yo, desde el host pc (172.26.0.2), intento conectar a 217.126.10.173, la peticin llega al router, y ste debera redirigirla al servidor (172.26.0.11) aplicando el NAT, pero no lo hace. No lo hace porque est configurado para aplicar estas reglas de redireccin de puertos slo a las conexiones que vienen de la red ATM que tiene configurada, o sea de fuera. Para simular conexiones desde fuera lo ms cmodo es tener una shell en algn ordenador y conectar desde ah, pero en ese momento no tena ningn login y password preparados para eso. Lo que hice fue buscarme unos proxys de Telefnica, configurar mi navegador, y acceder a mi IP (pblica). Entonces la peticin s que vena de fuera, y el router la rediriga al puerto 80 del servidor. Le dije al Mozilla que no usara proxy para acceder a los 172.26.0.*, y as ya poda entrar al mismo ordenador de dos formas distintas, y cada una recibiendo una respuesta distinta.

Quiero un contador; no tengo PHP


Cuando usaba PHP me hice un index.php que inclua un contador en modo texto, y no me cost mucho. Pero ahora he decidido no poner PHP en el servidor web, y tengo que hacerme un contador nuevo. Qu puedo hacer? Podra instalar PHP como un programa (en vez de como extensin de servidor) y hacer que se ejecute como CGI, pero para hacer un programita que suma 1 a una variable no me hace falta todo eso.

Es fcil hacer un contador en bash. El siguiente comando ya sirve:


echo $(( `cat cont` + 1 )) > cont

El problema es que no puedo incrustar en miindex.html el contenido del archivo cont. Me gustara hacer un<#include "cont"> pero en HTML eso no se puede hacer y thttpd no es de los que tienen Server Side Includes (bueno, tiene, pero no es nada cmodo). Podra hacer que el fichero index.htmlfuera un ejecutable (CGI) que mediante echos mande la pgina y con un 'cat cont' meta el nmero correspondiente en el sitio que toca. Me parece bastante chapucero... prefiero tener todos los CGIs en el mismo sitio. En HTML no se puede incrustar contenido text/html, pero s imgenes (se hace con la etiqueta IMG). O sea, que mi CGI podra crear una imagen, y hacer un catmandndola con el Content-type correspondiente. Y ahora, cmo creo una imagen -por ejemplo un PNG- que tenga escrito un nmero? Eso lo hacen los magnficos programas de ImageMagick; por ejemplo con este comando:
# blanco.png es todo blanco. Seguro que hay formas mejores de hacer esto... convert -font helvetica -pointsize 25 -fill blue -draw "text 5,22 '142857'" blanco.png texto.png

Aparte de ser muy chapucero, esta solucin requiere meter muchsimos programas, libreras y fuentes dentro del chroot, y adems sera bastante lento.

Encontr otro programa (tambin dentro de ImageMagick) muy til, es montage y sirve para juntar imgenes. Me bastara con tener los dgitos del 0 al 9 cada uno en un archivo, y luego, mediante un script, ir juntando cifras para hacer cada nmero. Por ltimo, servir la imagen con un cat. Ejemplo:
montage 1.png 4.png 2.png 8.png 5.png 7.png 142857.png

Sera lento, pero tampoco mucho. Tendra que hacer el script que creara la lista de parmetros a partir del nmero ledo; ahora mismo no se me ocurre ninguna forma fcil de hacerlo, pero con sed, awk o perl se puede. Me falta tiempo para esto... antes tengo que aprender a usar los paquetes de coreutils y leerme el man bash.

Tiene que haber programas que hagan solos lo de crear una imagen con un nmero escrito. No busqu mucho, pero encontr uno, swc(simple web counter), pero no me gust porque ha tenido un fallo importante de seguridad y -lo importante- porque usa imgenes GIF, que es un formato con un sistema de compresin patentado por Unisys Corporation, el LZW. Me da asco meterme en estos temas, as que mejor no uso el programa. Yo lo veo como una trampa. Resumiendo, que no puedo incrustar texto en HTML, pero s imgenes (IMG). Entonces me acord de que tambin se pueden incluir scripts; ah vi la solucin. Hice un script llamado cuenta as:
#!/bin/bash echo "Content-type: text/plain" echo echo -n $(( `cat cont` + 1 )) > cont echo -n document.write\(\" cat cont echo -n \"\)\;

Y luego slo tena que inclurlo en todas las pginas que quiera con <SCRIPT
TYPE="text/javascript" SRC="cgi-bin/cuenta"></SCRIPT>

El problema es que no todos los navegadores soportan JavaScript. Normalmente los que no lo soportan tampoco muestran imgenes, as que creo que mi solucin es tan efectiva como la de la imagen. De todas formas sigue siendo una chapuza que he de arreglar cuando me aburra.

Copias de seguridad peridicas


Siempre hay que hacer una copia de seguridad de todo; aunque la web est en mi casa es posible que el porttil se queme (tal como han pronosticado algunos) o que el disco duro deje de girar de tanto arrancarlo y pararlo. Prefiero no fiarme y mantener una copia actual en mi ordenador grande (desde ah la puedo pasar a CDs). Lo hice con este script, bakupa, que es para ejecutar en el ordenador grande (172.26.0.2). 172.26.0.11 es el servidor.
#!/bin/sh # Esto hace una copia de la web del servidor, y la archiva # 17-2-2004 Daniel Clemente dia=`date +%Y_%m_%d` mkdir temp echo Pon password del usuario dc scp -r dc@172.26.0.11:/f/web/danielclemente.com/* temp tar jcvf ${dia}.tar.bz2 temp rm -rf temp

Trabajar cmodamente en mi web


Lo de tener un servidor FTP rpido donde dejar la web ya es bastante cmodo, pero quiero ms: quiero montar el rbol de directorios de mi web (en el servidor) en un directorio local. Para eso est el NFS, pero es muy complicado de configurar y a veces poco seguro. Samba estaba bien, pero no quiero instalarle ms cosas al servidor, y menos eso (a ver si ahora va a tener tantos recursos compartidos como los Windows que me encuentro por Internet). Lo que me interesa son los mdulos para el kernel que implementan un sistema de archivos basado en FTP o en SSH. No hay que tocar nada del servidor, slo tener los servidores correspondientes. O sea, que los kernels los tengo que modificar en el ordenador 'grande', el servidor no lo toco para nada. Hay un proyecto llamado lufs que hace todo esto con muchos sistemas de archivos, pero lo vi demasiado extenso comparado con los proyectos que trabajan slo con uno. El de FTP es ftpfs, y me fue bien pero me daba un error de "Stale NFS file handle" al querer cambiar de directorio. De todas formas, el FTP no es seguro, as que prob por SSH. El de SSH se llama shfs y es muy fcil de usar. Aqu(Linuca) vi un tutorial que me ayud un poco con unos problemas que tuve con el kernel. Lo consegu poner, y, bueno, funciona perfectamente. Tampoco hay mucho ms que decir.

Ahora puedo usar Mozilla Composer y mis programas preferidos para tocar archivos del servidor sin tener que instalarlos en el servidor.

Cambios en el dominio
Ahora mi pgina sera accesible para todos cuando escribieran mi direccin IP en su navegador (por suerte tengo IP fija y sera siempre la misma). Pero lo que yo quiero es que se pueda entrar desde www.danielclemente.com. Qu hace falta para eso? Pues comprar(en realidad alquilar por un ao) un dominio libre y hacer que se traduzca a mi IP cuando alguien lo escriba. Hay unos cuantos ordenadores importantes por el mundo que mantienen una tabla con la equivalencia entre cada nombre de dominio y cada IP: son los servidores DNS. Para que aadan un registro que apunte a tu IP tienes que pagar, aunque no mucho. Por ejemplo, yo lo compr en GoDaddy por unos 9 dlares USD, y vale por un ao. No voy a

hacer propaganda de ninguna empresa; busca 'domain registrars' que es que como se llaman en ingls. Que sepas que un .comte puede salir por $7 o $30 dependiendo de en dnde te dejes timar, y un .es de 100 euros para arriba, ms gastos de patentes, tasas, trmites, etc. (viva el Ministerio de Ciencia y Tecnologa!). Ah, el registro de un .com suele ser fcil. Tienes que dar datos ciertos sobre tu nombre, direccin, telfono y e-mail, y pagar con tarjeta de crdito (una de esas 'virtuales' ya vale). Como pagas, tienes soporte tcnico que te ayudar en todo. Una vez "comprado" el dominio, hay varias opciones (todas hay que buscarlas desde el 'Centro de control' de la web del registrador): por ejemplo, puedes redirigirlo a otra pgina, poner un mensaje de 'En venta', alojar algn archivo (pero con publicidad ya que el hosting se paga aparte) o decir directamente a qu IP est ligado ese dominio. Lo que yo hice fue informar a todo el mundo de quewww.danielclemente.com = 217.126.10.173. De eso se encargan los servidores DNS; pero como yo no tena ganas de poner un servidor DNS en mi ordenador, us los servidores de GoDaddy para aadir esa entrada mediante una opcin de su web (es un servicio que dan gratis). Como todos los DNS estn relacionados, un cambio en uno de ellos se propaga a todos los del mundo en unas horas. Encontr una opcin perdida en la web que permita editar el archivo de zonas DNS; desde ah pude incluir la lnea A necesaria. Qued as: Nombre de zona
@ www A CNAME

Tipo
@

Valor
217.126.10.173

La A da la traduccin de danielclemente.com(que sale representado como @) y el www es un alias a @, o sea, que tanto danielclemente.comcomo www.danielclemente.com resuelven a mi IP. De hecho, todos los subdominios traducen a mi misma IP, as que seguro que podra quitar el www se. Tuve que esperar dos das para que los cambios surtieran efecto, y despus fue muy bonito ver la 'propagacin DNS': poco a poco esta informacin fue llegando a todos los servidores -incluso a los pequeos, pero ms tarde- empezando desde los de la empresa de dominios hasta llegar a todos los del mundo. Es fcil comprobarlo usando rdenes como stas:
dig www.danielclemente.com # Uso los servidores configurados en mi /etc/resolv.conf dig @195.235.113.3 www.danielclemente.com # A ver qu hay en el de Telefnica dig @PARK3.SECURESERVER.NET www.danielclemente.com # A ver qu piensan los de GoDaddy (los primeros en actualizarse)

Conclusiones

Por fin tengo mi servidor montado; creo que me he enrollado bastante en algunos puntos pero tena ganas de hacerlo. Resumiendo, he montado mi propio servidor desde cero tanto a nivel hardware como software. En realidad es poca cosa (servidor web y ftp), pero lo poco que hace lo hace muy bien. Lo he pensado todo mucho y creo que he tomado la mejor decisin en cada momento, con varias excepciones: s que he hecho bastantes 'chapuzas' (o 'problemas que no he resuelto de forma elegante'), pero soy consciente de ello y las arreglar cuando haya aprendido lo suficiente. He aprendido mucho, y lo importante es que no me he repetido. Ya pas muchos meses escribiendo y pensando cmo montar un servidor que hiciera de todo para mi instituto (fue mi 'Treball de Recerca' del Bachillerato, y gan un premio CIRIT de la Generalitat). Todo el tiempo que perd con eso no lo he vuelto a perder aqu, y tampoco se parecen mucho. En el servidor-que-hace-de-todo de mi instituto slo tuve que instalar cada cosa, una detrs de otra. En este estudio resuelvo mis necesidades personales, y eso cuesta mucho ms que hacer apt-gets. Una conclusin importante que deberas sacar si ya has ledo hasta aqu es que el documento se acabar pronto... Septiembre 2006: bueno... no del todo, porque cuando apagu el servidor (dos aos y medio despus), escrib qu tal funcion mi servidor

Anda mungkin juga menyukai