Professional Documents
Culture Documents
Las direcciones IP son la base de la internet, sin embargo, normalmente nosotros no usamos las
direcciones IP sino que nos referimos por nombres a los sitios.
Los nombres de dominios se separan por niveles, estos niveles se separan por puntos, por ejemplo
nuestroserver.com es un dominio de segundo nivel (nuestroserver . com) y .com es un dominio de
primer nivel.
Existen una cantidad limitada y normalizada de nombres de dominios de primer nivel. Estos son por
ejemplo:
.com
.net
.org
.biz
.name
.info
Estos dominios de primer nivel pueden ser adquiridos por quien desee y por supuesto existe control
para evitar nombres repetidos. Este control se realiza a través de la centralización de los dominios
en registrars (registradoras autorizadas) y los dominios son manejados por verisign-grs.
Existen dominios de países que son llamados ccTLD (country code top level domains), estos
dominios son manejados normalmente por entidades autorizadas dentro de cada país. Los dominios
se rigen por una convención ISO que clasifica a los países por un código de dos letras:
.ec
.co
.pe
.nl
.de
.es
.us
.ca
.cu
.fr
.de
Etcétera.
Este manejo de dominios debe interpretarse como la búsqueda en una guía telefónica. Uno tiene un
nombre y pregunta en la guía por el teléfono. Así mismo se hace con los dominios, uno tiene un
nombre de dominio y la máquina nuestra pregunta en su "guía" por la IP de ese dominio.
Los dominios son un artilugio creado para memorizar fácilmente una dirección de internet. La
entidad autorizada para registrar dominios se llama internic. Ellos realmente no registran dominios
de internet sino que delegan en ciertas organizaciones llamadas registrars para realizar el registro.
internic cobra por cada dominio registrado 2usd por año. verisign es la empresa que mantiene una
lista centralizada de todos los dominios y cobra igualmente 2usd por cada uno registrado.
Esto es, cualquier precio por encima de los 4USD que nosotros paguemos por un dominio
consideremos que lo estamos dando como lucro a alguien. Por supuesto, los registrars autorizados
por internic tienen gastos de mantenimiento que hacen que un dominio no cueste exactamente 4usd
sino posiblemente un poquito más.
Anteriormente existía solamente una empresa registradora, esta se llama network solutions, ellos al
tener el monopolio del registro de dominios vendían a precios exhorbitantes superando si mal no
recuerdo los 50usd por cada año que se registrara un dominio. Digo exhorbitante porque,
definitivamente, pagar 4 y ganar unos 45usd (pensando que tienen 1usd de gasto por cada dominio)
es una ganancia muy buena.
Para evitar el monopolio es que se autorizaron a operar otros registrars, que están enlazados entre
ellos a través de verisign-grs, esto es, cuando alguien registra un dominio, el registrar primero
verifica en verisign-grs si ese dominio no lo acaba de registrar alguien y sino, lo asigna a esta
persona y le reporta a verisign-grs que lo registró para su cliente.
Los rangos de precios de los registrars son variables, todo depende, hay registrars que cobran cerca
de los 35usd/año, otros que cobran menos de 10usd/año por dominio. Todo depende de la fama que
tengan en el mercado y de cómo vean la posibilidad de lucrar.
Algunas personas nos han sorprendido con la idea de que está bien, que con network solutions es
caro (35usd/año) pero son seguros porque tienen muchos dominios y porque son conocidos. Y esta
es una afirmación falsa:
1. Network Solutions ha estado perdiendo dominios de forma alarmante en los últimos tiempos
debido a la cantidad de personas que migran los dominios hacia otros registrars más baratos.
2. Todo registrar autorizado debe tener un convenio con otro registrar, de forma tal que en el
evento inusual de que vayan a la quiebra y tengan que cerrar, los dominios serían asignados
por verisign-grs al registrar de respaldo. Esto es, si hay un registrar X y uno Y, y nosotros
tenemos registrados 200 dominios con Y, y resulta que Y se va a la quiebra, no debemos
preocuparnos, nuestros 200 dominios (y todos los dominios que registró Y) pasarán
automáticamente a ser parte de X el cual nos brindará el mismo nivel de soporte.
Este evento 2 es muy alarmante, un registrar quebrado?! Pero en realidad no ha ocurrido mucho, es
más, sólo conocemos de un caso de un registrar que cerró y los dominios que tenía (pocos pues no
eran muy conocidos) pasaron al registrar de respaldo.
Los dominios se pueden registrar hasta por 10 años consecutivos y por un mínimo de 1 año. Esto
para evitar la especulación de que alguien compre un dominio para un evento que ocurrirá en agosto
(por ejemplo) y en setiembre ya no quiera el dominio, no, un dominio se compra por un año
mínimo, independientemente de qué tiempo se usará.
Los dominios pueden ser transferidos entre registrars, esto es, un dominio que pertenezca a network
solutions (sería el que pierde el dominio, llamado: losing registrar) y lo querramos transferir a enom
(el que gana el dominio, llamado: gaining registrar) seguiría un proceso muy simple. Le solicitamos
la transferencia del dominio en el gaining registrar, este le enviará un mail a los contactos del
dominio, solicitándole que aprueben comenzar la transferencia. Estas personas (los emails listados
en el dominio) al aceptar esta transferencia le indicarán al gaining registrar que se comuniquen con
el losing registrar. Este último, en un plazo de 5 días deberá liberarlo y pasará a control del registrar
que ganó el dominio.
whois
Una vez verificado y/o instalado, podremos comenzar a preguntar por dominios. Veamos:
whois nuestroserver.com
[Preguntando whois.verisign-grs.com]
[whois.verisign-grs.com]
Domain names in the .com and .net domains can now be registered
with many different competing registrars. Go to
http://www.internic.net
for detailed information.
Domain Name: NUESTROSERVER.COM
Registrar: ENOM, INC.
Whois Server: whois.enom.com
Referral URL: http://www.enom.com
Name Server: DNS1.NUESTRODNS.COM
Name Server: DNS2.NUESTRODNS.COM
Status: clientTransferProhibited
Updated Date: 19-aug-2008
Creation Date: 13-jul-2005
Expiration Date: 13-jul-2013
>>> Last update of whois database: Mon, 10 Nov 2008 17:50:29 EST
<<<
TERMS OF USE: You are not authorized to access or query our Whois
database through the use of electronic processes that are high-
volume and
automated except as reasonably necessary to register domain names
or
modify existing registrations; the Data in VeriSign Global
Registry
Services' ("VeriSign") Whois database is provided by VeriSign for
information purposes only, and to assist persons in obtaining
information
about or related to a domain name registration record. VeriSign
does not
guarantee its accuracy. By submitting a Whois query, you agree to
abide
by the following terms of use: You agree that you may use this
Data only
for lawful purposes and that under no circumstances will you use
this Data
to: (1) allow, enable, or otherwise support the transmission of
mass
unsolicited, commercial advertising or solicitations via e-mail,
telephone,
or facsimile; or (2) enable high volume, automated, electronic
processes
that apply to VeriSign (or its computer systems). The compilation,
The Registry database contains ONLY .COM, .NET, .EDU domains and
Registrars.
Veamos poco a poco la información interesante, se lee de arriba a abajo y vamos viendo diferentes
detalles de un dominio como:
• Registrant Contact: Es el nombre del dueño, del registrante, de la persona que registra,
normalmente es alguien que tiene relación con la empresa y en última instancia será a quién
se recurra para recuperar información perdida de un dominio o alguna otra situación. Los
datos de los contactos, ya sea el registrante o cualquier otro, deben ser siempre correctos. La
información de contacto siempre consistirá en el nombre de la persona, dirección, teléfono,
país y sobre todo del email mediante el cual se le puede alcanzar.
• Administrative Contact: Es el nombre del contacto administrativo, la persona que se
encarga de manejar el dominio, aprobar cambios realizados, básicamente es el administrador
del dominio, puede ser alguna otra persona, pero sugiero que siempre sea el dueño
(registrant) del contacto. El contacto administrativo es tanto o más importante que el
registrant, pues las solicitudes de transferencias son enviadas al email listado en el contacto
administrativo.
• Technical Contact: Es el nombre del contacto técnico, básicamente no se usa mucho.
Normalmente se pone a la persona que registra el dominio (registrant)
• Billing Contact: Es el nombre de la persona que recibirá las indicaciones de que el dominio
va a expirar y los datos sobre cómo renovarlo. La información de renovación también
llegará al Admin Contact. Pero en caso de que tengamos una empresa grande con un
administrador del dominio y una contadora (o varias) siempre es bueno aqui poner a la
contadora (o contador) para que sepa que no somos alarmistas, que el dominio en efecto está
al expirar y deben hacer el trámite de renovación.
De los anteriormente expuestos, los más importantes son los Registrant (dueño) y Admin (el que
autoriza cambios). Y siempre debemos tener presente que un dominio nuestro o de nuestra empresa
esté registrado correctamente con nuestros datos y no con los de otra persona.
• Status: Es el estado de un dominio, básicamente hay algunos estados pero veamos los más
importantes:
• Locked: Bloqueado, indica que el dominio está activo pero que no se permiten las
transferencias. Esto es para evitar que por error se aprueben las transferencias o que
les vayan a robar un dominio mediante una transferencia maliciosa. Si quisiéramos
transferir un dominio, debemos quitarle el estado de bloqueado y dejarlo en el
estado:
• Active: Es básicamente igual que el anterior, sólo que el dominio no está bloqueado,
es decir, puede ser transferido. Este estado es el que debemos tener cuando queremos
transferir un dominio. Una vez transferido podemos bloquear nuevamente un
dominio. Esto es, los estados Active y Locked son mutuamente exclusivos y
podemos cambiarlos a voluntad entre uno y otro.
• Registrar-Hold: Este es el estado que alcanzan los dominios cuando expiran. Una
vez que un dominio expira, básicamente no puede ser usado a no ser que se le
renueve. Este periodo no tiene fecha exacta pero normalmente está entre los 30 y 120
días después de expirado un dominio. Durante este tiempo podemos renovar al
dominio por el mismo costo que nos tomó registrarlo la primera vez. Durante este
periodo no tenemos el dominio a nuestra disposición, es decir, no lo podemos usar
mientras no lo paguemos la renovación.
• Redemption Period: Periodo de redempcion, es un periodo posterior al registrar-hold
que indica que el registrar ha solicitado que este dominio sea borrado de las listas,
dura 30 días y durante este periodo todavía se puede renovar un dominio pero por un
costo de alrededor de 200usd. Casi nadie saca un dominio de redempción sobre todo
por los altos costos.
• Pending Delete: Es el periodo inmediatamente después del de redemción,
básicamente indica que el dominio ya va a ser borrado. Este periodo dura 5 días y no
se puede sacar un dominio que está en este estado. A los 5 días pasará a
disponibilidad de cualquier interesado.
• Name Servers: Son los servidores de DNS que resolverán las direcciones de nuestro
dominio, podemos tener entre 2 y 13 servidores de dns para cada dominio. Ahora
hablaremos más sobre dns.
DNS:
Las "guías" encargadas de resolver los nombres a direcciones IP (y su reversa) se llaman en la
internet "DNS" que es el acrónimo de Domain Name Servers o Domain Name System.
Básicamente, al inicio de la internet también existió la necesidad de usar algún sistema que
permitiera convertir de un nombre de fácil recordación hacia una dirección IP, para eso se crearon
unas listas que contenían todas las direcciones IP y sus hosts según sus creadores las fueran
necesitando.
Esta lista todavía se usa y se llama hostable, o sencillamente /etc/hosts por el lugar donde están
puestos.
Ahora, sucede que realmente, al seguir creciendo la internet, esta lista se fue haciendo muy grande y
lo peor es que las máquinas que quisieran estar al día necesitaban bajar una vez al día por lo menos
estas listas actualizadas lo que hacía que el tráfico se incrementara y algunas máquinas no pudieran
bajar listas actualizadas. Por supuesto se inventaron sistemas para bajar sólo actualizaciones y
demás, pero aún así se hacía muy inmanejable, ya que en ciertos casos habían máquinas que no
estaban actualizadas pero lo peor era que por cada una de las máquinas que tuviéramos en nuestra
red, debíamos tener una lista actualizada de este /etc/hosts.
Es básicamente lo mismo que ocurre con las guías telefónicas ahora, y es que son muy voluminosas
para manejarse.
El uso de DNS para nuestros dominios deben cumplir dos requisitos fundamentales, estos son:
1. Deben existir al menos dos (2) DNS para un dominio en particular.
2. Los dns de un dominio no deben tener punto de falla en común.
El primer punto es importante, ya que nos indica que no debemos tener un sólo dns para resolver un
dominio, esto por la lógica razón de que si tuviéramos uno y este se nos cayera, nadie podría
acceder a nuestro dominio pues no habría quién nos dijera qué dirección IP es la de nuestro
dominio.
El segundo punto es el más importante y definitivamente es una definición más clara del primero:
no basta con tener dos DNS; si los tenemos en el mismo sitio, si cae un rayo, caerá para ambos, si se
va la luz, se irá para ambos, si se roban uno, mejor se los roban a ambos, y si se cae la conexión de
internet, se caerá para ambos, ya que están ambos en el mismo sitio exactamente.
Es por esto que es necesario, pero imperioso, el tener dns sin punto de falla en común. Esto se logra
buscando redes alternativas donde alojar los DNS.
Básicamente, su cualquier elemento intermedio (ruteador) de la red que nos permite acceder hacia
un DNS determinado se cayera, es totalmente seguro que es un equipo que no afectará el acceso a
los otros 4 que tenemos.
Si el preguntarle a un DNS falla, los sistemas automáticamente preguntan a cualquier otro dns que
exista y así hasta agotar los dns a preguntar. Por tanto es muy difícil que los 5 DNS nuestros estén
caídos.
En efecto a veces han estado caídos dos o tres, pero el impacto es mínimo y no se nota casi,
precisamente por el hecho de tenerlos distribuidos.
Dónde podemos conseguir DNS distribuidos? En ecualinux.com con cada dominio que registramos,
tenemos incluidos 5 dns totalmente distribuidos en el costo de los dominios.
También podemos usar los dns de www.everydns.net que son gratuitos los primeros 20 dominios y
son distribuidos también.
TAREA: ¿Qué podemos decir de los dns de?:
elcomercio.com
Sugerencia: usemos el comando traceroute para trazar una ruta hacia una dirección IP determinada.
Como sugerencia aqui les mando la ruta de ambos dns del comercio:
NS.ACCESSINTER.NET (64.46.64.254) dns.elcomercio.org (64.46.84.2)
1 67.15.12.1 1 67.15.12.1
2 66.98.241.4 2 66.98.241.4
3 129.250.10.105 3 129.250.10.105
4 129.250.2.50 4 129.250.2.50
5 129.250.3.21 5 129.250.3.21
6 204.255.174.229 6 204.255.174.229
7 152.63.103.77 7 152.63.97.57
8 152.63.86.185 8 152.63.81.82
9 152.63.101.45 9 152.63.101.41
10 152.63.83.181 10 152.63.83.177
11 206.113.90.210 11 206.113.90.210
12 63.245.64.230 12 63.245.64.230
13 208.29.133.10 13 208.29.133.10
14 64.46.86.254
15 64.46.64.254
Tipos de DNS
Estos DNS son importantísimos, son los que usamos normalmente para preguntar por dominios en
internet, por ejemplo, cuando preguntamos por www.google.com no le preguntamos a los DNS que
tiene listado el dominio google.com sino que le preguntamos a unos DNS definidos por el
administrador de nuestra red o por nuestro proveedor. Estos son los dns de caché.
Estos DNS a su vez, verificarán con los root servers, cuáles son los DNS que google tiene listado
para su dominio google.com y entonces acudirán prestos a preguntarle a uno de esos DNS sobre el
sitio www.google.com.
Por supuesto, si uno de esos DNS estuviera caído, nuestro DNS de caché ya tiene una lista de los
DNS de google y por lo tanto le procederá a preguntar a otro y a otro, hasta alcanzar la respuesta.
Los DNS de caché tienen una peculiaridad, es que no usan disco, básicamente ellos almacenan toda
la información que vamos preguntando, con el objetivo de que si la preguntamos de nuevo, ellos no
tengan que salir a buscarla, sino que inmediatamente la obtienen de su caché. Es por eso que se
llaman DNS de caché.
Tienden a usar toda la memoria disponible, pero realmente no consumen mucha memoria, porque
los tamaños de las respuestas son pequeños.
Por supuesto un proveedor de internet debe tener al menos dos DNS de caché los que seguramente
sí consumirán memoria pues almacenarán records de muchos miles de usuarios. Pero normalmente
con menos de 1GB de memoria basta.
Los records cacheados son refrescados cada vez que el tiempo de vida de los records se cumplen.
Este valor se llama TTL y ya veremos cómo ponerlo. Un TTL adecuado puede ser 2 horas
(7200segundos) pero algunas personas gustan de usar un día (86400segundos). El problema de un
TTL de un día es que si decidimos cambiar de IP, no podremos hacerlo rápidamente pues algunos
DNS de caché tendrán una respuesta cacheada por un día y durará un día el cambio de IP.
Es por esto último que algunos proveedores dicen que el cambio de DNS toma 24 horas o más, es
porque el TTL puede ser alto y al estar cacheado por cientos o miles de DNS alrededor del mundo,
estos no volverán a preguntar por ese record en un día ya que considerarán válida una respuesta
mientras el TTL no sea cero.
Cómo montamos un servidor de caché? Es muy simple, sencillamente tenemos que asegurarnos de
que los siguientes paquetes estén instalados:
• bind
• bind-chroot
• caching-nameserver
y por supuesto tener levantado el servicio named:
chkconfig --level 2345 named on
service named start
Con esto tendremos un servidor de dns de caché activo. Entonces, cualquier máquina que use a
nuestro servidor linux como un servidor de DNS (es decir, cualquier máquina windows o linux que
tenga definido como DNS a nuestro servidor linux) podrá preguntar por cualquier dominio de
internet y recibir una respuesta.
En el archivo:
/etc/resolv.conf
Podemos tener hasta 255 lineas que comiencen con "nameserver" estos son los servidores de DNS a
los que nuestro servidor preguntará sobre un record.
Por ejemplo, pongamos en la segunda línea:
nameserver 127.0.0.1
esto significará que primero pregunte a localhost (a nuestro mismo servidor dns) sobre cualquier
record requerido. Si no lo encontrara, que pregunte a los siguientes en la lista. Posiblemente los
siguientes serán los dns que nuestro proveedor nos dió.
Records de un DNS
Las respuestas de los DNS se definen según un concepto que se llama records. Cada record se
refiere a una propiedad de una zona (dominio) y tiene diferentes valores.
por defecto nslookup abre y cualquier pregunta que hagamos la hace en records A.
Si lo ejecutamos sencillamente como nslookup, él se intentará conectar al primer servidor DNS que
tengamos definido en /etc/resolv.conf
En el caso nuestro del CEC, debido a que nuestras máquinas no tienen salida directa a internet, si
quisiéramos preguntar sobre un dominio externo, deberemos preguntarle al DNS que el CEC nos
brinda.
Comencemos, usemos el nslookup para preguntar por algunos records A, en mi caso se verá así:
nslookup
> www.elcomercio.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
Name: www.elcomercio.com
Address: 69.65.159.179
La respuesta que se obtuvo fué no autoritativa, esto es, la respuesta no estaba en el DNS nuestro
(127.0.0.1 en mi caso) sino que estaba en un DNS externo.
Nuestro nslookup mandó a nuestro servidor de DNS (127.0.0.1) a buscar a internet, éste preguntó a
los rootservers sobre los dns de elcomercio.com y le preguntó a uno de los DNS de elcomercio.com
sobre el record A llamado: www
Normalmente cualquier aplicación que pregunte por un record A, usará esta IP para dirigirse hacia
el sitio del dominio en cuestión.
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
Name: www.ecualinux.com
Address: 209.172.33.209
Lo mismo de elcomercio.com, preguntará a 127.0.0.1 (nuestro servidor) sobre ecualinux.com y
nuestro servidor dirá que no tiene la zona en su control y por lo tanto la respuesta salió a buscarla
(non-authoritative), y que la respuesta que encontró fue: 209.172.33.209 para el record A www de
la zona ecualinux.com
Preguntemos ahora sobre un record MX, lo primero que hay es que cambiar el tipo de A hacia MX
[root@linuxcasa ~]# nslookup
> ecualinux.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
set type=mx cambiará las preguntas a tipo MX. Los records MX se preguntan para los dominios,
solo para LOS DOMINIOS. por lo tanto cuando pregunten por un record mx no pongan www ni
mail, sólo pongan el nombre del dominio.
La respuesta básicamente dice que para la zona ecualinux.com el mail exchanger tiene un peso 10 y
es el record A: mail.ecualinux.com
Esto es, tengo un sólo servidor de mensajería para mi dominio que tiene un peso 10 y es
mail.ecualinux.com
Si tengo 0 como peso y un día tengo una necesidad imperiosa de insertar un nuevo servidor MX
delante del servidor actual tendría que primero cambiar el peso de este servidor actual hacia otro
valor pues no puedo poner nada menor a 0. Es por esto que un valor como 5 o 10 sería bueno, pues
en caso de emergencia podemos poner uno o varios valores delante.
Es un caso bien raro, realmente nunca lo he usado, pero esto no significa que no pueda existir una
situación así.
Ahora, ya sabemos que existen records A, SOA, CNAME, MX, etc. Dónde podemos definir estos
records?
Para eso tenemos que trabajar lo que son los DNS de zona. Estos DNS son los que contienen
información específica sobre una zona. Cuando uno compra un dominio, básicamente le define los
DNS de zona que manejarán este dominio, una vez comprado el dominio, tenemos que
inmediatamente crear en esos DNS definidos por nosotros las zonas del dominio.
Cómo se mantiene la información sincronizada? Básicamente, dados los DNS que tenemos para un
dominio (supongamos que tendremos dos) definimos un DNS como maestro o máster, de ser
posible que sea el que mejor conectividad tenga y al segundo (en general a todos los otros) le
definimos como esclavo para la zona.
Esclavo significa que este DNS no lo tendremos que configurar, cualquier cambio que hagamos en
el máster, enseguida se reflejará de forma automática en el esclavo. El esclavo siempre estará atento
a cualquier cambio en su DNS principal, de ocurrir, él replicaría esta información en su base de
datos.
De esta forma no tenemos inconsistencias, si algo está mal en nuestro DNS primario igual de mal
estará en los esclavos. Si algo cambiamos o corregimos en el master, enseguida los esclavos lo
cambiarán o corregirán. Así nos ahorramos tener que cambiar todos y cada uno de los DNS de un
dominio y con sólo cambiar el máster sabremos que los esclavos tomarán los datos.
Se nos demorará un poco, pero al final podremos entrar al webmin usando nuestro browser y
apuntando a:
https://127.0.0.1:10000
Esto nos mostrará la pantalla de login del webmin, por defecto usaremos root y la clave de root de
nuestra máquina:
Aqui podemos agregar todos los records que nosotros necesitemos para un dominio.
Al entrar veremos diferentes TABS (ver arriba en el webmin), el módulo para adminitrar los DNS
lo tendremos en el TAB "servers", vayamos allá, el módulo en cuestión se llama "Bind DNS
Server"
Para crear una zona master, sencillamente hacemos click en el enlace de abajo que dice: Create
Master Zone
Una vez en Create Master Zone, nos pedirá una serie de datos, los más importantes son el nombre
del dominio que pondremos (sin www ni nada, sólo nombre de dominio!) que va en el box llamado:
Domain name / Network y el email del contacto administrativo (Email address), los demás
valores, por favor dejarlos intactos.
Veremos que ahora estamos ya dentro de la zona que recién creamos y que podemos crear ya los
diferentes records (A, MX son los que nos interesan), se verá una pantalla así para mi zona de
prueba: "dominio.com"
dominio.com. MX 10 mail.dominio.com.
Las dos últimas al no tener valor en RECORD se refieren al dominio en sí. Esto es, sencillamente
estamos hablando de nuestro dominio (dominio.com en el caso de ejemplo)
Al hacer click sobre el ícono A iremos a la parte de creación de records A, al hacer click sobre MX
iremos a la creación de MX.
A propósito, si se han fijado bien, habrán notado que siempre me refiero a los subdominios con su
dominio incluido ( no www sino www.dominio.com) y que a la final de cualquier nombre ponemos
un .
De no poner el punto, le estaremos indicando al webmin que complete este record con el nombre
del dominio. Es decir si pusiéramos www.dominio.com sin el punto, el webmin pensará que es
www.dominio.com.dominio.com. es decir, le agregará el nombre del dominio.
El punto sirve para deternerlo, le estamos dicienteo que es exactamente eso y punto, no más.
esto nos servirá para que cualquier persona que pregunte sobre cualquiera de esos records de mi
dominio, reciban una respuesta adecuada. Cualquier record que no hayamos definido no podrá ser
usado por nadie.
Lo que hicimos fue en el nombre poner el nombre de nuestro dominio y en el mailserver poner el
record A por el que se debe preguntar para enviar los mails a mi dominio. En priority, poner el peso
o prioridad de este servidor.
Listo, con estos sencillos pasos logramos configurar los records más usados para cualquier dominio
de internet, por supuesto si tenemos necesidad de algún otro record o necesitamos apuntarlos a
alguna otra IP, somos libres de hacerlo, siempre planificadamente para no pasar sustos.
Los DNS son la base de la internet, y su incomprensión es lo que acarrea un mal uso de ellos y
normalmente son el servicio que genera la mayor cantidad de quejas por parte de los usuarios.
Realmente los usuarios no se dan cuenta de que es el dns el que falla, ellos sólo notan que una
página no se abre o dá timeout... pero esos son síntomas de que un dns anda dando respuestas
malas.
Una vez creados todos los records y zonas que querramos, podemos ir a la lista de zonas (ver enlace
al final de cada página del webmin) y apretar en el botón aplicar. Por favor hacerlo en la página
principal del bind, donde se muestran todas las zonas.
El bind no actualiza los datos instantáneamente, esto es, hasta que no hagamos click en "Apply
Changes" el bind no tomará estos cambios. Cada cambio que hagamos, también debemos ir a
apretar apply changes o sino, no tomará los cambios hasta que se reinicie el bind.
TAREA: con nslookup - 127.0.0.1 preguntarle a nuestro DNS (127.0.0.1) sobre los nuevos records
creados. Todos deben responder bien.
Definir un DNS esclavo es una tarea fácil, desde una segunda máquina, sencillamente apretamos el
enlace que dice: Create slave zone
TAREA: Para cada una de las zonas máster de las otras máquinas del curso (todas menos la de
usted mismo) definirnos como esclavos.
Tema 2
Instalación
Instalar un servidor DNS de Caché es una de las tareas más importantes en nuestra red.
El servicio de named en centos-5 no viene con un archivo de configuración predefinido, por lo tanto
hay que cambiarse al directorio de configuración (/var/named/chroot/named/etc) y crear un archivo
llamado named.conf:
cd /var/named/chroot/etc
vi named.conf
En este archivo sólo cambiamos las dos líneas que van en rojo, las cuales indican las redes
autorizadas a hacer preguntas (Queries)
options {
allow-recursion {
192.168.0.0/24; 127.0.0.1; };
allow-query { 192.168.0.0/24; 127.0.0.1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt"; };
zone "." IN {
type hint;
file "named.ca";
};
zone "localdomain." IN {
type master;
file "localdomain.zone";
allow-update { none; };
};
zone "localhost." IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa." IN {
type master;
file "named.local";
allow-update { none; };
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." IN {
type master;
file "named.ip6.local";
allow-update { none; };
};
zone "255.in-addr.arpa." IN {
type master;
file "named.broadcast";
allow-update { none; };
};
zone "0.in-addr.arpa." IN {
type master;
file "named.zero";
allow-update { none; };
};
include "/etc/rndc.key";
Activar el servicio
chkconfig --level 2345 named on
service named start
Con esto ya tenemos configurado nuestro servidor de DNS de caché, sólo nos queda usarlo.
Ahora en cada máquina de la red local nuestra debemos especificar que el servidor DNS de ellas es
la IP de nuestro linux. Con esto tendremos un DNS De caché en nuestra red y habremos ahorrado
tiempo y ancho de banda.
Tema 3
Maestro
El siguiente ejemplo es para un supuesto dominio llamado: dominio.com en rojo remarcamos el
ejemplo. En el caso de que usted haya adquirido un dominio, debe sustituir el nombre en rojo del
ejemplo por su propio dominio.
En /var/named/chroot/var/named/dominio.com.hosts
$ttl 7200
dominio.com. IN NS localhost.localdomain
www IN A 192.168.0.89
mail IN A 192.168.0.89
ftp IN A 192.168.0.89
dominio.com. IN MX 5 mail.dominio.com.
dominio.com. IN A 192.168.0.89
Cada cambio que se realice en el named requiere que recarguemos (reload) o reiniciemos (restart) el
named.
Esclavo:
En /etc/named.conf agregar:
zone "dominio.com" IN {
type slave;
file "slaves/dominio.com.zone";
// Esta es la IP del master
masters { 192.168.0.89; };
};
Tema 4
Tema 5
El Servidor Apache HTTP es un servidor Web de tecnología Open Source sólido y para uso
comercial desarrollado por la Apache Software Foundation (http://www.apache.org). Red Hat
Enterprise Linux incluye el Servidor Apache HTTP versión 2.0 así como también una serie de
módulos de servidor diseñados para mejorar su funcionalidad.
El archivo de configuración predeterminado instalado en el Servidor Apache HTTP funciona sin
necesidad de modificarlo, en la mayor parte de los casos. Este capítulo da una idea general de las
directrices dentro de este archivo de configuración (/etc/httpd/conf/httpd.conf) para
ayudar a aquellos que requieren una configuración personalizada.
Características del Servidor Apache HTTP 2.0
El Servidor Apache HTTP 2.0, incluye las siguientes funcionalidades:
• Los módulos Apache API se utiliza un nuevo conjunto de interfaces de programación de
aplicaciones (APIs).
• Filtrado Los módulos pueden actuar como filtros de contenido.
• Soporte a IPv6 Se soporta la próxima generación de formato de direcciones IP.
• Directrices simplificadas Se han eliminado una serie de directrices complicadas y otras se
han simplificado.
• Respuestas a errores en diversos idiomas Cuando usa documentos Server Side Include
(SSI), las páginas de errores personalizables se pueden entregar en diversos idiomas
En el siguiente sitio web se muestra una lista completa de los cambios realizados:
http://httpd.apache.org/docs-2.0/.
Como podemos observar, el apache ocupa casi un 70% del mercado de alojamiento de sitios web. Si
se fijan el más cercano tiene un 20% del mercado y es el IIS, los demás son muy pequeños para
contar.
tema 6
Apache no es un sólo servidor que podemos instalar desde un paquete, en realidad apache hace uso
de una variedad de paquetes que le permiten ofrecer diferentes funcionalidades a nuestro servidor
web.
Setting up repositories
dag 100% |=========================| 1.1 kB 00:00
Resolving Dependencies
Dependencies Resolved
=============================================================================
=============================================================================
Installing:
Transaction Summary
=============================================================================
Install 6 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Is this ok [y/N]: y
Downloading Packages:
Running Transaction
Complete!
Con esto logramos instalar algunos paquetes adicionales como php-pear, apr, apr-utils, httpd-
suexec, etc.
Básicamente el php es el lenguaje de programación web más usado para la programación en Linux,
por eso pido que se instale.
Si deseáramos usar bases de datos en nuestro servidor, sugiero también instalar los paquetes: php-
mysql y mysql-server
yum install php-mysql mysql-server
Setting up repositories
Resolving Dependencies
Dependencies Resolved
=============================================================================
=============================================================================
Installing:
Transaction Summary
=============================================================================
Install 5 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Is this ok [y/N]: y
El trabajo con bases de datos no lo veremos, pero básicamente esto es un gran paso de avance, pues
el resto sería configurarle accesos a la BD y estudiar cómo conectarnos a la BD desde nuestro
lenguaje de programación web (php).
Activando automáticamente el servicio apache
Activar el servicio es muy simple:
chkconfig --level 2345 httpd on
El php y cualquier lenguaje de programación no es necesario activarlo como servicio pues ellos son
módulos del httpd y por lo tanto se activarán al activarse httpd.
En el directorio conf.d se ponen los archivos particulares de configuración para cualquier módulo o
aplicación que corra vía apache. Estos archivos de configuración deben tener de extensión .conf
Por defecto el apache viene configurado para trabajar sin tenerse que modificar, pero siempre es
bueno comprender un poquito el archivo de configuración:
Veamos este archivo: /etc/httpd/conf/httpd.conf , en este caso he dejado solamente las directivas de
configuración que nos interesa ver. Hemos removido los comentarios para facilitar la lectura:
### Section 1: Global Environment
ServerTokens OS
#Listen 12.34.56.78:80
Listen 80
#ServerName new.host.name:80
DocumentRoot "/var/www/html"
Aunque existen una enorme cantidad de directivas de configuración del apache, las cuales podemos
leer y estudiar en los mismos comentarios del archivo de configuración y/o en el sitio web de
apache, yo considero importante estudiar las siguientes:
• ServerTokens: Indica qué datos muestra el servidor cuando se realiza una conexión. Por
defecto apache muestra la versión del servidor apache, la versión del Sistema Operativo, etc.
básicamente expone mucha información sobre el sistema que no tiene por qué conocerse.
Por esto, sugiero en este parámetro poner: Prod en vez de OS, de esta forma se mostrará
solamente el nombre del producto (apache) mas no la versión del producto ni la versión del
sistema operativo.
• Listen: Este parámetro no hay por qué cambiarlo, pero básicamente indica en qué puerto
ponemos al apache a escuchar (por defecto está en el puerto 80) pero también le podemos
indicar en qué interfaz de red le ponemos. Por defecto escucha en todas las interfaces.
Sugiero no tocarlo a no ser que sea necesario.
• ServerName: Aunque el apache le asigna el nombre al servidor apache basado en el nombre
de la máquina, para acelerar el proceso de arranque y para evitar potenciales problemas,
siempre es bueno poner el nombre del servidor directamente en este parámetro
(www.misitio.com:80)
• DocumentRoot: Es el directorio raíz del servidor apache, básicamente cuando el servidor
apache necesite buscar por /index.html para mostrarlo, realmente buscará en
/var/www/html/index.html, es la base desde donde se parte para mostrar un sitio web.
Sugiero dejarlo así.
• DirectoryIndex: Son los diferentes archivos índice que se muestran en caso de que el
cliente no especifique un archivo a mostrar. Por ejemplo: http://www.misitio.com/ mostrará
realmente a http://www.misitio.com/index.html puesto que en directoryindex le hemos
dicho que cuando no se especifique un archivo muestre el index.html. Le podemos poner
varias opciones, pero mientras más pongamos más posibilidades hay de que el servidor
demore buscando un archivo para mostrarlo. Y se muestra en ese orden. Por ejemplo:
• DirectoryIndex index.php index.php4 index.htm index.html : buscará primero a
index.php, si no hay ninguno, buscará index.php4, después index.htm y por último
index.html para mostrarlo.
• LogLevel: Es el nivel de verbosidad conque se guardan los logs. Mientras más verbosos,
más consumen recursos del disco. Normalmente lo bajo a nivel de crit (críticos) en vez de
warn (warning).
• Alias: Sirve para enmascarar un directorio que no existe, por ejemplo cuando alguien
escribe: www.misitio.com/icons realmente no hay un directorio icons, sino que es un alias
hacia /var/www/icons
• ScriptAlias: Lo mismo que el anterior, pero le indica al servidor apache que ahi hay un
directorio con archivos que puede ejecutar.
• AddDefaultCharset: Usar por defecto ISO-8859-1 en vez del UTF-8 que viene por defecto.
De lo contrario no saldrán bien los caracteres con acentos.
Al realizar cualquier cambio en la configuración del apache necesitamos reiniciarlo para que este
arranque con los nuevos valores:
service httpd restart
Subiendo las paginas web
Las páginas web normalmente se suben por ftp, pero como todavía no hemos visto cómo configurar
este servicio, sugiero que sencillamente creemos una página (o varias) de forma manual, vayamos al
directorio raíz: /var/www/html y ahi podemos crear un index.html o un index.php si conocemos
cómo hacerlo.
Básicamente dentro del directorio /var/www/html van todos los contenidos de nuestro sitio web. Es
el directorio base, lo que se vería si se accede a www.misitio.com/ (en caso de que
www.misitio.com sea el sitio alojado en mi sitio web).
Esto es, en el servidor DNS que maneja a nuestro dominio es al que debemos decirle que envíe los
records de www.midominio.com y midominio.com (suponiendo que sea midominio.com el dominio
del que hablamos) hacia la IP donde está mi servidor apache.
TAREA: Revisar que los dns estén configurados para nuestros dominios de prueba y apuntando a
la IP de nuestro sitio web.
Tema 7
Muchas veces no basta con tener un servidor apache, sino que también debemos asegurarlo. Todas
las medidas anteriormente tomadas durante el curso son buenas, pero nunca está de más protegernos
con seguridades adicionales.
mod_evasive
Conocido anteriormente como mod_dosevasive o dosevasive, es un módulo muy simple pero a la
vez muy efectivo.
Lamentablemente las RPM que ellos sugieren instalemos están un poquito viejas, y aunque es
potencialmente posible crear un RPM desde el archivo de código fuente (tar.gz) perfiero instalemos
este pequeño módulo directamente.
El mod_evasive es un módulo que compilaremos para apache y le indicaremos al apache que lo
ejecute. Este módulo tiene una funcionalidad muy sencilla: Antes de pasarle la petición al apache,
determinará si la IP que está realizando la petición ha hecho otras peticiones en los últimos
segundos, si estas peticiones pasan de un valor determinado, el dosevasive bloqueará la solicitud y
devolverá un error temporal.
Segundos o minutos después el dosevasive volverá a activar a la IP ofensora, para así evitar que un
falso positivo esté castigado por siempre.
Instalación
--10:14:23-- http://www.nuclearelephant.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
=> `mod_evasive_1.10.1.tar.gz'
cd mod_evasive
En este caso hemos bajado la última versión actual que es la 1.10.1, pero a medida que el tiempo
pase, pueden ir surgiendo otras versiones. Siempre recuerden bajar la más actual del sitio.
Dentro de este directorio que hemos abierto, podemos leer el README que nos explicará que con
el comando apxs podemos crear el módulo para nuestro apache2.
Atención: Siempre recordar que para compilar algún módulo de apache debemos tener instalado el
paquete httpd-devel (yum install httpd-devel) de lo contrario nos podría fallar la compilación
cp .libs/mod_evasive20.so /usr/lib/httpd/modules/mod_evasive20.so
cp .libs/mod_evasive20.lai /usr/lib/httpd/modules/mod_evasive20.la
cp .libs/mod_evasive20.a /usr/lib/httpd/modules/mod_evasive20.a
ranlib /usr/lib/httpd/modules/mod_evasive20.a
----------------------------------------------------------------------
/usr/lib/httpd/modules
during execution
during linking
----------------------------------------------------------------------
chmod 755 /usr/lib/httpd/modules/mod_evasive20.so
Si se fijan el las dos últimas líneas, el apxs se encarga de instalar el módulo (mod_evasive20.so) en
el directorio de módulos del apache (/usr/lib/httpd/modules) y además de "activar" el módulo en el
archivo de configuración (/etc/httpd/conf/httpd.conf), echémosle un vistazo a los cambios que ha
realizado en este archivo:
LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so
Sólo eso, al final de las directivas LoadModule, agregó una llamada al módulo dosevasive.
Realmente con esto nos basta, esto es, el dosevasive funcionará con sencillamente agregar el
módulo, y funcionará bien.
El dosevasive trabaja con todas sus directivas por defecto y son bastante buenas, pero nosotros
podemos modificarlas si agregamos algo así a nuestro archivo de configuración del httpd (estas
líneas las podemos poner justo debajo de los LoadModules:
<IfModule mod_dosevasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
</IfModule>
Reiniciando el apache
Para que cualquier cambio en la configuración tenga efecto debemos reiniciar el apache, así
cargaría a este nuevo módulo:
service httpd restart
Probando al dosevasive
Bueno, queremos probarlo? el paquete dosevasive viene con una pequeña utilería llamara test.pl que
ejecuta un ataque a 127.0.0.1 (nosotros mismos) si quisiéramos probarlo con otra IP debemos
obtener permiso del dueño de esa otra IP, editar test.pl y proceder a probarlo.
Ahi está, test.pl envió 100 solicitudes a mi servidor, pero a partir de un determinado momento
comenzamos a recibir el mensaje: Forbidden
Además otro signo es que en /tmp se nos guardó un archivo con el nombre dos* que contiene la IP
agresora (127.0.0.1) esto es: /tmp/dos-127.0.0.1 nos indica que esta IP nos agredió y fue bloqueada.
Conclusión
El dosevasive es un módulo muy simple pero que nos puede ahorrar algunos dolores de cabeza, al
menos minimizarlos bastante pues previene ataques de flooding que son comunes estos días, esto
sin dejar fuera del servicio a los clientes válidos que hacen peticiones razonables (no es razonable
hacer 100 peticiones en 2 segundos o 5 de una misma página en 2 segundos, a no ser que seamos
obsesivos compulsivos)
Mod_security
Es un módulo bien complejo pero muy útil. El servidor apache es comunmente sometido a algunos
tipos de ataques especiales para sitios web, como son:
• Uso de caracteres en formato unicode para insertar espacios: %20 es espacio %00 es nulo
• Inyección de sql: Inyectar comandos sql vía la URL
• Cruce o sobrepasado de directorios (http://www.elsitio.com/../../../etc/passwd por ejemplo
permitirá cruzarme las fronteras del sitio web y llegar hasta /etc/passwd de mi sistema y
verlo)
• Ejecución de comandos en la URL: /bin/bash, wget, id, tar, etc) Esto se puede lograr si algún
script no está bien programado y permite que se le envíen comandos los cuales él ejecutaría.
Básicamente no hay nada como una buena programación, esto es, los puntos anteriores se pueden
evitar si se programan correctamente los scripts que usamos y si se mantiene actualizado al servidor
apache para evitar cruces (XSS).
Sin embargo no siempre somos nosotros los que programamos, esto es, a veces usamos scripts y
sistemas completos hechos por 3ros de los cuales no tenemos la menor idea ni tiempo para revisar
su programación.
Es por esto que sería útil el poder instalar un sistema que permita validar que las URL que envían al
servidor no contengan ciertos caracteres o cadenas. Para esto el mod_security.
Igualmente es un módulo de apache, que se interpone entre el apache y la petición que le hacen, la
analiza y determina si la debe dejar pasar al apache o la debe descartar con un error.
Mediante éste módulo podemos evitar todos los puntos anteriormente expuestos, con algunas reglas
que le podemos insertar al mod_security y que evitarían estos ataques.
Obteniendo el mod_security
La última versión de su sitio es la 1.9, como siempre, a medida que el tiempo pase puede que salgan
nuevas versiones al mercado, por lo que siempre es recomendable usar la última disponible que no
sea beta.
La versión 1.9 es extremadamente nueva y no ha salido un rpm para compilar, así que tendremos
que instalarlo desde el tar.gz
wget http://www.modsecurity.org/download/modsecurity-apache_2.5.5.tar.gz
cd modsecurity-apache_2.5.5/
Dentro de este directorio tendremos un archivo llamado INSTALL que nos permitirá aprender
cómo instalarlo.
Primero tenemos que movernos al directorio apache2 y después proceder a llamar
al apx:
cd apache2
Listo, como veremos en las dos últimas líneas de compilación ha instalado el módulo
(mod_security.so) en el directorio de módulos de apache: /usr/lib/httpd/modules/ y además activó
el módulo en el archivo principal de configuración de apache: /etc/httpd/conf/httpd.conf
Listo, con esto tenemos activo el módulo y trabajando con sus parámetros por defecto que no están
mal pero podemos pulir.
Sugiero en este archivo httpd.conf agregar debajo de la sección LoadModules la siguiente sección:
LoadModule security_module modules/mod_security.so
<IfModule mod_security.c>
SecFilterEngine DynamicOnly
SecAuditEngine Off
SecFilterCheckURLEncoding On
# Unicode encoding check
SecFilterCheckUnicodeEncoding On
SecFilterForceByteRange 10 255
SecFilterCheckCookieFormat On
SecAuditEngine Off
#SecAuditLog logs/audit_log
SecFilterScanPOST Off
SecFilterDefaultAction "deny,log,status:406"
SecFilterSelective HTTP_Content-Type \
"!(^$|^application/x-www-form-urlencoded$| \
^application/x-vermeer-urlencoded$| \
^multipart/form-data)"
SecFilter /tmp/
#SecFilter /var/
SecFilter /root/
SecFilter /etc/
SecFilter /dev/
SecFilter /bin/
#SecFilter /sbin/
SecFilter "\;id"
SecFilter "uname\x20-a"
SecFilter "perl\x20-a"
SecFilter "wget\x20"
SecFilter "ftp\x20"
SecFilter "cat\x20"
<Location /MyAdmin>
SecFilterInheritance Off
</Location>
SecFilter "\.\./"
SecFilter "<[[:space:]]*script"
SecFilter "insert[[:space:]]+into"
Básicamente todo lo que le hemos indicado son modos de transferencia que debemos o no aceptar,
filtros para que no se acepten ciertas cadenas (/bin/, /tmp/, etc,etc) y así evitamos que nos envíen
ciertas cadenas vía URL. También le indicamos los caracteres ascii a usar así como a filtrar
caracteres unicode.
Una de las primeras líneas le indica al mod_security que sólo filtre páginas dinámicas (php, perl,
cgi) pues las páginas estáticas al no ser ejecutadas no pueden usarse para realizar ataques, así
mejoramos el performance del servidor.
Conclusión
Definitivamente el mod_security nos ayuda a evitar que un atacante se base en fallas de la
programación o de nuestro servidor web, para acceder a él, trabaja con patrones y filtros que son
genéricos y que pueden interferir el normal funcionamiento si escogemos un filtro de una forma
incorrecta (si en vez de /bin/ filtramos bin (sin /) entonces si una URL contiene cualquier palabra
que diga: binario o binladen o binoculares, será bloqueada.
Pero el mod_security nos puede ayudar muchísimo a coartar accesos no autorizados al sistema
mediante este sencillo sistema.
El mod_security introduce una sobrecarga al sistema, pues tiene que realizarse un análisis de las
URL, pero esta carga muchas veces se compensa con las muchas veces que podemos evitar ataques,
yo estimo que la carga esté entre un 5% a un 25% más del uso del procesador del sistema.
Tema 8
eaccelerator
No todo es protegerse contra ataques conocidos o desconocidos, muchas veces podemos proteger a
nuestro servidor de una caída con simplemente acelerar su funcionamiento.
PHP que es el lenguaje de programación dinámica más usado es un intérprete, esto es, cada vez que
se llama a un script, el servidor simplemente toma el script, lo interpreta y muestra su resultado. Si
el script es un poco grande, esto de interpretarlo siempre una y otra vez puede hacerse penosamente
lento y llegar a hacer que el servidor funcione muy mal o deje de funcionar.
Ahora, el php ofrece una versión pagada que está en www.zend.com la cual cambia un poco el
comportamiento del php y le introduce al php un módulo que permite que se cacheen las respuestas
y que se realice una especie de precompilación del código de forma tal que cada vez que se lea un
script no se tenga que interpretar sino que se interprete solamente la primera vez que lo leamos y
después quede precompilado.
El precompilar scripts es buenísimo y realmente ayuda a mejorar el rendimiento de un servidor y los
tiempos de respuesta pueden bajar absurdamente.
Ahora, pagar 600 o más dólares por un acelerador de php no está en los bolsillos de todo el mundo,
así que mucha gente opta por no acelerar los scripts.
En todo caso existe un acelerador de código php gratuito y disponible en internet, se llama
eaccelerator y lo mejor de todo es que está disponible en el sitio de dag
(http://dag.wieers.com/packages/php-eaccelerator) pero sólo hasta la versión EL4 de RedHat.
Así que si tenemos el repositorio de dag instalado podemos instalar este acelerador de forma muy
simple:
yum -y install php-eaccelerator
COMMAND: yum
Installroot: /
Ext Commands:
php-eaccelerator
Setting up repositories
reduced installs :
php-eaccelerator.i386 0:4.3.9_0.9.3-4.2.el4.rf
Resolving Dependencies
1131553760.64
Dependencies Resolved
1131553762.58
=============================================================================
=============================================================================
Installing:
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Downloading Packages:
Running Transaction
Complete!
Ya está funcionando.
Si queremos en realidad ver si el eaccelerator está activo, podemos escribir un pequeño script de
php que pondremos en nuestro sitio web (/var/www/html) para que nos indique qué puede hacer el
php:
vi /var/www/html/prueba.php
<? phpinfo(); ?>
phpinfo(); es una función de php que llamamos dentro del script php (los scripts php comienzan
con <? y terminan en ?>
Conclusiones
El eaccelerator es una excelente alternativa que va a hacer que nuestros scripts corran
definitivamente más rápido que de forma interpretada. Realmente puede acelerar enormemente el
trabajo con php. No por un 50 ni un 100, sino posiblemente en un 1000% o más, puesto que al tener
precompilado los scripts, sencillamente es cuestión de mostrarlos sin tener que reinterpretarlos.
Básicamente todos los browsers actuales son capaces de recibir una página comprimida y antes de
mostrarla pueden descomprimir esta página.
La idea es que la información viaje entre el servidor apache y nuestro browser de una forma
comprimida.
De esta forma podemos lograr reducir el tamaño de una página web hasta un 30% o menos en
dependencia de la cantidad de información. Por supuesto, al tener un menor tamaño, la página web
demora mucho menos en viajar hasta nosotros y por lo tanto no sólo la recibimos más rápido sino
que molestamos menos al servidor web que se puede desocupar de la conexión del cliente y atender
a otro cliente de una forma más efectiva.
La compresión de páginas web tiene lugar al vuelo, esto es, el servidor toma nuestra página en
formato .html, la comprime gastando ciclos de su cpu y la envía al cliente que se ocupará de
descomprimirla.
La única desventaja potencial es que se consumen más ciclos de cpu por parte del servidor en
encriptar la página, pero muchas veces esto es negligible dado el gran avance que obtenemos en
salir rápido de una solicitud.
El servidor apache es capaz de comprimir páginas estáticas (html), no tiene mucho sentido
comprimir .jpg o .gif ya que son archivos ya previamente comprimidos que no se lograría mayor
ventaja con hacerlo de nuevo.
y ponemos lo siguiente:
SetOutputFilter DEFLATE
DeflateFilterNote ratio
DeflateCompressionLevel 3
En todo caso, si tenemos un servidor poco cargado podemos subir la compresión a 5 o más, puesto
que no nos preocupará la CPU. Normalmente podemos ponerlo en 5 o más sinque nos afecte
mucho.
Comprobando la compresión
Podemos usar el siguiente sitio http://www.whatsmyip.org/http_compression/ para comprobar si la
compresión ha sido efectiva o no, por supuesto nuestro servidor httpd debe estar en internet para
que desde este sitio se pueda ver.
leknor como ejemplo nos muestra un sitio que no está comprimido, y nos indica el tamaño real del
index.html así como cuánto podría haber bajado el tamaño del index.html si se enviara comprimido.
Fíjense que para este sitio de ejemplo, el tamaño real es de 45KB y demoraría unos 12 segundos si
se estuviera transfiriendo desde una conexión de 32kbs (3.5kbs).
sin embargo, si estuviera comprimido, podríamos observar que con un nivel 5, lograríamos reducir
su index.html a: 24KB, esto es casi un 50%, y por lo tanto sólo tomaría 3.1 segundos en bajarse este
archivo desde una conexión de 32kbs (3.5KB/s).
Conclusiones
Como vemos, sí logramos una rapidez real, absolutamente mejor que si no comprimiéramos, lo que
da una mejor sensación de navegación por nuestro sitio y además permite que el servidor apache se
libere más rápidamente de nuestra conexión y pueda servir otras.
ahora, existe una pequeña desventaja, y es que el apache sólo comprime por alguna razón archivos
estáticos, mas no páginas dinámicas (php). Es por esto que a continuación estudiaremos la forma de
comprimir estas páginas igualmente.
zlib.output_compression_level = 3
Realmente el segundo sencillamente indica el nivel de compresión que por defecto es 5. Esto es,
podemos no poner este segundo parámetro puesto que por defecto se toma como 5. Siempre es
bueno recordar que mientras mejor compresión, mayor demora a la hora de comprimir y mayor
consumo de cpu, por esto no es bueno subir mucho la compresión pues se nos podría agotar el
sistema de tanto uso de cpu.
El primer parámetro activa la compresión para nuestro php (zlib.output_compression), ahora con
sencillamente reiniciar el httpd, podemos ver que ya están comprimiéndose también los scripts de
php:
service httpd restart
Igual con whatsmyip podemos comprobar que el script de php está siendo encriptado.
Tema 9
Apache no solamente es capaz de manejar un sitio web como anteriormente vimos, sino que
también es capaz de manejar diversos sitios web en una sola máquina.
Para esto usa una tecnología llamada de servidores virtuales (Virtual Hosts).
Los servidores virtuales se crearon para sobreponerse a dos dificultades fundamentales de los
servidores de internet y las redes tcpip:
Un servidor apache normalmente es capaz de alojar sin mayor inconveniente hasta unos 1024 sitios
web simultáneamente, por supuesto los inconvenientes provienen mayormente de la capacidad
física de la máquina, esto es, depende mucho de la cantidad de memoria RAM, del tamaño en disco
del sistema, del ancho de banda asignado, de la capacidad de él o los procesadores.
Pero teóricamente es posible tener más de 1 sitio web y el límite depende de las características del
sistema operativo y de las características físicas y de conectividad de las máquinas.
Por ejemplo, usando everydns.net tengo estos sitios apuntando al mismo lugar:
Si nos fijamos, ambos sitios apuntan a la misma dirección IP (209.172.33.209), como podemos
notar también, everydns usa records *, esto significa que cualquier subdominio lo apuntamos hacia
esa IP (www.ascofame.org.co, mail.ascofame.org.co, ftp.ascofame.org.co, etc).
Bueno, apache se fija en la solicitud que hace el browser en cuestión pues esta viene con el nombre
del sitio que se está intentando visualizar (vendrá pidiendo www.ascofame.org.ec) así que para el
apache no es mayor complicación, buscará en su lista de sitios y mostrará la página web.
Para los efectos de la prueba, por favor editar /etc/hosts y poner la siguiente línea:
127.0.0.1 www.dominio.com www.dominio1.com dominio.com dominio1.com
Así no tendremos que configurar los dns para realizar las pruebas y tendremos dos dominios
(dominio.com y dominio1.com) apuntando a la misma IP (localhost).
<VirtualHost *:80>
ServerAdmin info@ecualinux.com
DocumentRoot /var/www/html/dominio.com
ServerName www.dominio.com
ServerAlias dominio.com
ErrorLog logs/dominio.com-error_log
</VirtualHost>
<VirtualHost *:80>
ServerAdmin info@ecualinux.com
DocumentRoot /var/www/html/dominio1.com
ServerName www.dominio1.com
ServerAlias dominio1.com
ErrorLog logs/dominio1.com-error_log
CustomLog logs/dominio1.com-access_log common
</VirtualHost>
La única directiva nueva es ServerAlias que indica con qué otros nombres se conoce al servidor
(con y sin www)
Antes de reiniciar el apache debemos crear los directorios donde se alojarán ambos dominios (Los
definidos por DocumentRoot) sino nos fallará el apache al levantar.
mkdir /var/www/html/dominio.com
mkdir /var/www/html/dominio1.com
Entonces podremos proceder a visualizar ambos sitios, verán que son diferentes.
El problema más común es la gente que define el mismo directorio como raíz para dos o más sitios,
por lo tanto no se verán sitios diferentes sino el mismo
tema 10
El primer paso es crear la clave RSA privada. Esta clave es del tipo RSA de 1024 bits y estará
encriptada usando Triple DES y guardada en formato PEM de forma tal que sea visible como texto
ASCII.
Usaremos varios archivos como fuente de numeros aleatorios lo que ayudará a hacer la clave más
segura. Un buen formato son archivos texto comprimidos en formato gzip. La clave es generada
usando el siguiente comando (file1 a file5 son los archivos a ser usados para mejorar los numeros
aleatorios), en nuestro caso de ejemplo, yo usaré dos archivos binarios. En la vida real les
recomiendo poner algunos archivos más
openssl genrsa -rand /usr/bin/lsattr:/bin/cat -out server.key 1024
.........++++++
.......++++++
e is 65537 (0x10001)
Es muy importante mantener una copia de ésta clave pues es la base para la encriptación usando un
certificado. De ser posible mantener un respaldo en un disquete o cinta. El costo de un
certificado,aunque varía, está entre los 30 y los 600usd aproximadamente (al año, ver
www.nuestroserver.com) y es sumamente doloroso tener que regenerar un certificado nuevamente
por no haber guardado los archivos utilizados para la generación de éste.
Ahora procedamos a generar una petición de certificación (Certificate Signed Request). Con esta
podremos realizar la petición de un certificado a la entidad certificadora de nuestra elección. Este es
el archivo que se les envía cuando ellos solicitan el CSR. Sin embargo, también podemos hacer que
nuestro sistema genere un Certificado AutoGenerado el cual nos permitirá operar de forma segura,
pero siempre le sacará a los clientes una advertencia de que el certificado no puede ser validado en
una entidad certificadora.
En negrita está lo que nosotros debemos ir escribiendo. El ejemplo es para Quito, Pichincha,
Ecuador, pero debe ponerse los datos de su organización propiamente dichos.
openssl req -new -key server.key -out server.csr
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
-----
Please enter the following 'extra' attributes to be sent with your certificate request
Signature ok
subject=/C=EC/ST=Pichincha/L=Quito/O=Ecualinux/OU=IT/CN=Ernesto
Perez/emailAddress=direccionvalida@hotmail.com
Si no están instalados, instalarlo conjuntamente con el php y el módulo para el manejo de ssl:
yum install php php-imap php-mysql httpd mod_ssl
Una vez instalado el apache, los certificados SSL estarán activos. Puesto que por defecto mod_ssl
busca en /etc/httpd/conf.d/ssl.conf e intenta usar los certificados nombrados server.crt y
server.key
[root@laptop ~]# cp server.crt /etc/httpd/conf/ssl.crt/
Starting httpd: [ OK ]
Nota:
Si quisiéramos agregar un servidor virtual con ssl, sugiero editar el archivo
/etc/httpd/conf.d/ssl.conf ahi se definen los servidores virtuales en ssl. Tener en consideración que
el archivo .crt y el .key deben ser diferentes para cada sitio virtual. También debemos tener en
cuenta que apache permite sólo un certificado SSL por cada IP. Esto es, si quisiéramos más de un
certificado SSL en el servidor, debemos obtener más de una dirección IP para el servidor.