martes, 24 de enero de 2012

Creación de un repositorio, approx


   Pues bueno, esta vez, vamos a crear un repositorio con approx. Esto lo que hace es crearnos una replica en nuestro disco, pero no crea una replica completa, simplemente funciona como un proxi.
   Su funcionamiento es el siguiente, un cliente le pide un paquete, mira en el repositorio local y lo compara con el del repositorio que le pongamos, por ejemplo http://ftp.es.debian.org ¿es el mismo paquete? Si es el mismo paquete, se le envía a el cliente, si no lo tiene o el que tiene no esta actualizado, se lo descarga y se lo envía a el cliente. Esto en una empresa en la que encontremos maquinas linux, nos ahorra mucho ancho de banda y las descargas serían mas rapidas.
   Su instalación y configuración es muy sencilla. Para instalarlo simplemente:
# aptitude install approx

   Para el almacenamiento de nuestro repositorio, yo voy a crear un nuevo volumen lógico, y lo voy a montar. Primero vamos a crear el volumen y vamos a darle formato ext4:
# lvcreate -n repositorios --size 20GB vg
# mkfs.ext4 /dev/mapper/vg-repositorios

   Ahora vamos a crear una carpeta y vamos a añadir una linea a el archivo /etc/fstab que nos monte el volumen, cada vez que iniciemos el sistema.
# mkdir /srv/repositorios
# echo '/dev/mapper/vg-repositorios /srv/repositorios ext4 rw 0 0 '>>/etc/fstab
# mount -a
# chown approx.approx /srv/repositorios/ -R
   Con mount -a montamos lo que esta en el archivo fstab y por últimos hacemos que usuario approx sea el usuario de la carpeta repositorios.

   Su archivo de configuración se encuentra en la ruta /etc/approx/approx.conf .De primera se encuentra todo comentado. En este caso solo tenemos que añadir los repositorios y modificar la opción que nos indica la ruta donde se guardan los paquetes. La lineas a añadir son:
debian http://ftp.debian.org/debian → Esta linea se refiere a los repositorios. La primera palabra, es el directorio donde se guarda y que luego tendremos que especificar en el cliente. Después ponemos la url.
$cache /srv/repositorios/ → En esta definimos donde vamos a crear el repositorio.
   Mi archivo de configuración se queda así.

# cat /etc/approx/approx.conf

debian http://ftp.debian.org/debian
debian-backports http://backports.debian.org/debian-backports
security http://security.debian.org/debian-security
volatile http://volatile.debian.org/debian-volatile

$cache /srv/repositorios/
#$max_rate unlimited
#$max_redirects 5
#$user approx
#$group approx
#$syslog daemon
#$pdiffs true
#$offline false
#$max_wait 10
#$verbose false
#$debug false

   Para que nos coja los cambios que hemos hecho en el archivo de configuración de approx, tenemos que reiniciar el servicio.
# /etc/init.d/openbsd-inetd restart

   Para configurar los clientes, imaginemos que el servidor esta en la dirección 10.0.0.10. En este caso el archivo /etc/apt/sourcer.list tiene que quedar de la siguiente manera:
# cat /etc/apt/sources.list


deb http://10.0.0.10:9999/debian-backports/ squeeze-backports main

deb http://10.0.0.10:9999/debian/ squeeze main
deb-src http://10.0.0.10:9999/debian/ squeeze main 

deb http://localhost:9999/security squeeze/updates main
deb-src http://localhost:9999/security squeeze/updates main

   Con esto, ya tenemos instalado y configurado nuestro repositorio local.

miércoles, 11 de enero de 2012

Cherokee, creación de un virtualhost


   Para crear un host virtual, nos vamos a la pestaña vServers. En este menú, le damos a Nuevo, para crear uno.
 
   Nos saldrá una ventana, donde pondremos el directorio de la pagina, y el nombre. El directorio tiene que estar previamente creado en el servidor. Una vez introducidos los datos le damos a Añadir.
    
   Tras esto, le damos a guardar y le damos a reinicio forzado.

   A este virtual host, le podemos poner algunas opciones independiente de otras paginas. En cada pestaña tenemos unas opciones. En la Básica, tenemos la posibilidad de cambiarle el nombre a el host, en la opción “Nombre del servidor virtual”. Otras opciones que podemos cambiar son la del directorio donde tenemos nuestra pagina web o el archivo que carga por defecto “Raíz de documentos” o “Índices de directorio”. Por ultimo tenemos la opción, keep-alive, la cual nos permite navegar por el directorio, por lo que no cojera el archivo que definamos antes por defecto.

    Otra pestaña interesante es la de Comportamientos, en esta pestaña, se pueden hacer muchas cosas, como añadir PHP y poner contraseñas, cosas que veremos en otro momento. 

    Las otras tres pestañas que nos quedan son:
  • Errores: muestra las pagina de errores que dará el servidor.
  • Registro: como se guarda la información del servidor.
  • Seguridad: sirve para los certificados.


Mas sobre cherokee:

Cherokee, instalación y acceso a la configuración en debian squeeze

Cherokee, creación de un virtualhost

Cherokee, ejecución de scripts PHP.

CHerokee, autentificación digest

miércoles, 28 de diciembre de 2011

Cherokee, instalación y acceso a la configuración en debian squeeze

   Uno de los últimos trabajos que me han mandado trata sobre este servidor web. Lo he realizado junto con un compañero de clase, José Luis Martín, y he decidido hacer varias entradas sobre este servidor, ya que a nosotros nos costo encontrar información sobre el.


1 - Introducción al servidor web CHEROKEE

    Cherokee es un servidor web ligero multiplataforma, que nace con el objetivo ser una moderna alternativa a pesados y desfasados servidores como Apache.
    Es software libre con licencia GPL y se adapta con facilidad tanto a sistemas con variación de carga de trabajo como autónomos y empotrados.
    Su diseño es un híbrido que combina las características de servidores basados en sockets no bloqueantes con las de servidores basado en hilos, en busca de obtener beneficios de ambos modelos y minimizar los aspectos negativos.
    Básicamente, su funcionamiento es el de un servidor que procesa varias peticiones en cada uno de sus hilos. Estos hilos ni se crean ni se destruyen, se generan cuando arranca el servidor y permanecen vivos hasta que termina su ejecución.
    En su implementación, se ha puesto especial interés en la velocidad, flexibilidad y capacidad de ser empotrado.
    Soporta las siguientes tecnologías entre muchas otras: FastCGI, SCGI, PHP, CGI, SSI, TLS, conexiones seguras cifradas SSL, sitios virtuales, balanceo de carga, Streamming y diversos métodos de autenticación.
    En la página web del proyecto ( http://www.cherokee-project.com/downloads.html ) tenemos siempre disponible la última versión del código fuente comprimido y a través de subversión, listo para ser compilado, y de las últimas versiones compiladas (binarios) para diferentes distribuciones.
    Si optamos por utilizar los binarios (forma más rápida y sencilla) es preferible descargarlos desde la web, ya que la versión que alberga los repositorios de nuestra distribución suele ser más antigua.

 

2 - Instalación del servidor web

    La instalación de cherokee en debian, es un instalación sencilla, como casi todo. Lo primero que tenemos que instalar es MySQL.
# apt-get install mysql-server mysql-client

    Una vez instalado, solo tenemos que instalar cherokee.
# apt-get install cherokee

    Con esto ya podemos ver, si entramos en “http://localhost”, que cherokee esta funcionando.
    Por ultimo, la instalación nos crea la carpeta /etc/cherokee/ , que es donde se encuentra la configuración de cherokee y /var/www/ que es donde esta alojada la pagina por defecto.

3 - Configuración básica del servidor web.

    Cherokee nos ofrece una interfaz web para poder administrarlo. Para poder entrar en dicha pagina, primero tenemos que desde el servidor ejecutar el comando cherokee-admin. Si la administración es desde otra maquina tendríamos que poner la opción -b seguido de la dirección Ip de dicha maquina. En mi caso, lo yo lo estoy haciendo desde la 10.0.0.128, así que nos quedaría una cosa así.
# cherokee-admin -b 10.0.0.128

Login:
User: admin
One-time Password: PyOZABC5anyBqG5W

Web Interface:
URL: http://localhost:9090/


    Tras la ejecución del comando nos dice un usuario y contraseña, y nos dice que es en el puerto 9090. Si insertamos en nuestro navegador y ponemos “http://Ipdelservidor:9090”, nos aparecerá un cartel para que ingresemos un usuario y contraseña.

    Tras meter el usuario y contraseña que nos facilito anteriormente, le damos a aceptar y entramos en el menú principal.

   Con esto llego a el fin de la primera entrada dedicada a cherokee. Más adelante publicare algunas cosas mas complejas sobre este servidor web como pueden ser la autenticación o la ejecución de php.


Mas sobre cherokee:

Cherokee, instalación y acceso a la configuración en debian squeeze

Cherokee, creación de un virtualhost

Cherokee, ejecución de scripts PHP.

CHerokee, autentificación digest

jueves, 1 de diciembre de 2011

Apache, autenticación por maquina, basic y digest



    Empezando la semana de examenes, estoy repasando y que mejor manera de repasar que explicando. Buenos en este caso voy a explicar como restringir el acceso por maquina y por usuario en apache.

Restricciones por maquina.
    Empezaremos con las restricciones por maquina. Yo para probarlo sin tener que reiniciar apache cada vez que se hace un cambio, estoy poniendo las restricciones en el archivo .htacces de la pagina de pruebas. No olviden que para que el fichero .htacces, el cual se encuentra en el directorio donde se encuentra la pagina, funcione, tiene que esta activado en la configuración de la pagina. En mi caso le di todos los permisos “AllowOverride All”.

    La primera opción es la de Order, con la cual se define el orden en el que se miran lo permitido y lo denegado. Después irían Allow, que son las maquinas permitidas y Deny, lo denegado. Voy a poner un par de ejemplos:

    En el primer ejemplo, el Order determina que primero se mira lo permitido y despues lo denegado. En este caso si permites una en el Allow y lueg la dniegas con el Deny, esa ip sera denegada, por el orden de comprobación. En este ejempo no podría entrar nadie, ya que primero se le permite la entrada a la ip “10.0.0.128” y después de le deniega a todo. Si intentamos entrar nos saldra un bonito error “403 Forbidden”
# cat /var/www/prueba/.htaccess
Order Allow,Deny
Allow from 10.0.0.128
Deny from all

    En este ejemplo el Order esta definido al contrario, por lo que solo podremos entrar con la ip “10.0.0.128”.
# cat /var/www/prueba/.htaccess
Order Deny ,Allow
Allow from 10.0.0.128
Deny from all

    Por lo que veis es bastante fácil. Todo depende del orden en el que se miren lo permitido y lo denegado. Por ejemplo si queremos permitirle el acceso a todo el mundo menos a dos o tres direcciones primero se permite y luego se deniega.

    En estos campos se pueden poner ip tanto ipv4 como ipv6 con o sin mascaras. También se pueden poner nombres de dominios. Si queremos poner mas de una ip se separarían por espacios.

Restricciones por usuarios.
    El servidor web Apache tiene muchas maneras de autenticarse: kerberos, pam, radius, mysql, psql... . Yo voy a a explicar las dos mas básicas basic y digest.

Autenticación basic.
    Esta autenticación guarda los usuarios y sus contraseña encriptadas en un archivo. Los usuarios y contraseñas se tienen que ir metiendo uno a uno. Este modulo de apache viene activado por defecto. Para utilizarlo en nuestra pagina añadiremos las siguientes lineas al fichero .htaccess.
# cat /var/www/prueba/.htaccess
AuthType basic
AuthName “Identifiquese”
AuthUserFile “/etc/apache2/auth_basic”
Require valid-user
    Bueno estas opciones quieren decir:
  1. Le especificamos que es autenticación básica.
  2. Este sera el mensaje que nos aparecerá al pedir la contraseña.
  3. Esta es la ubicación del fichero con los usuarios y sus contraseñas.
  4. Le indicamos que requiere un usuario valido. También se podría poner uno o varios usuarios poniendo por ejemplo “Require user juan, jose, maria”.

    Si queremos combinar este tipo de acceso con el que vimos antes podemos añadirle la opción “Satisfy”. Esta puede tener dos valores all/any, para que se tengan que cumplir las dos restricciones utilizaremos “all”, para que con que se cumpla una nos baste “any”.

    Por ultimo, para crear el fichero utilizamos el comando “htpasswd”. La primera vez que lo utilicemos tenemos que ponerle la opción -c, para que cree el archivo. Creariamos el usuario de la siguiente manera:
# htpasswd -c /etc/apache2/auth_basic juanlu
New password:
Re-type new password:

    Como veis nos pedirá la contraseña. Si queremos añadir otro usuario no le pondremos la opción -c.

    Si ahora intentamos acceder a nuestra pagina nos saldrá algo como esto:





 
Autenticación digest.
    La autenticación tipo digest soluciona el problema de la transferencia de contraseñas en claro sin necesidad de usar SSL. El procedimiento, como veréis, es muy similar al tipo básico pero cambiando algunas de las directivas y usando la utilidad “htdigest” en lugar de “htpassword” para crear el fichero de contraseñas. El módulo de autenticación necesario suele venir con Apache pero no habilitado por defecto. Para habilitarlo:
# a2enmod auth_digest
# /etc/init.d/apache2 restart

    En este caso el fichero .htaccess nos quedaría así:
# cat /var/www/prueba/.htaccess
AuthType Digest
AuthName "grupo1"
AuthUserFile "/etc/apache2/auth_digest"
Require valid-user

    En este caso en la primera opción ponemos digest en vez de basic. La directiva AuthName en este caso no especifica el mensaje que nos saldrá, si no el dominio al que pertenecen los usuarios. Este seria mas o menos algo parecido a un grupo. Las otras dos opciones no hace falta que las explique.

    En este caso, como dije antes, no se utiliza el comando “htpasswd”. Esta vez los usuarios y dominios se agregan de la siguiente manera:
# htdigest -c /etc/apache2/auth_digest grupo1 juanlu
Adding password for juanlu in realm grupo1.
New password:
Re-type new password:

    Si intentamos acceder a nuestra pagina nos saldrá un cartel parecido al anterior.

 
    Cuando estéis comprobando tener cuidado con la cache de los navegadores, pueden hacer que te lleves un rato pensando porque no te pide autenticación.

    Por ultimo decir que esto también se puede aplicar a archivos. Si intentamos descargar o ver ese archivo nos pedirá usuario y contraseña. El archivo .htaccess nos quedaría así:
# cat /var/www/prueba/.htaccess
<Files "prueba.txt">
AuthType Digest
AuthName "grupo1"
AuthUserFile "/etc/apache2/auth_digest"
Require valid-user
</Files>


lunes, 28 de noviembre de 2011

DDNS y DHCP en debian squeeze amd64.


1 – Introducción. 
   Según wikipedia:
   DHCP (sigla en inglés de Dynamic Host Configuration Protocol - Protocolo de configuración dinámica de host) es un protocolo de red que permite a los clientes de una red IP obtener sus parámetros de configuración automáticamente. Se trata de un protocolo de tipo cliente/servidor en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va asignando a los clientes conforme éstas van estando libres, sabiendo en todo momento quién ha estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién se la ha asignado después.

   Domain Name System o DNS (en español: sistema de nombres de dominio) es un sistema de nomenclatura jerárquica para computadoras, servicios o cualquier recurso conectado a Internet o a una red privada. Este sistema asocia información variada con nombres de dominios asignado a cada uno de los participantes. Su función más importante, es traducir (resolver) nombres inteligibles para los humanos en identificadores binarios asociados con los equipos conectados a la red, esto con el propósito de poder localizar y direccionar estos equipos mundialmente.


2 – Escenario.
   Suponemos que vamos a instalado en nuestro servidor al cual llamaremos gary un servidor DNS caché que da servicio a los ordenadores de nuestra intranet y además actúa como servidor maestro (master) de un dominio DNS (infoasir.net), de forma que todos los equipos de la red local tengan un nombre DNS completo o FQHN (Full Qualified Host Name). Por otra parte, tenemos instalado en gary un servidor DHCP para que asigne direcciones IPv4 únicas a los equipos de la red local y les facilite el resto de parámetros necesarios para que tengan conectividad y salida a Internet.

    Las características del servidor DNS serán:
  • El nombre del servidor DNS para la zona infoasir.net sera nuestro servidor, es deir, gary.infoasir.net (registro NS).
  • En un primer momento el único nombre que resuelve nuestro servidor será el suyo propio, gary.infoasir.net, que corresponde a la dirección 192.168.2.1

    Las características del servidor DHCP instalado serán:
  • Tiempo de concesión: 1 mes
  • Rango de direcciones: 192.168.2.100 - 192.168.2.150
  • Puerta de enlace: 192.168.2.1
  • Servidores DNS: 192.168.2.1

3 – Instalación de los servicios.
    Los primeros pasos son de la instalación del servidor dhcp y dns
# aptitude install dhcp3-server
# aptitude install bind9

4 – Configuración del dns.
    Una vez instalados pasamos a la configuarción de cada uno de ellos. Empezaremos con el servidor dns.

    El primer archivo que vamos a modificar es el named.conf. En el incluiremos dos archivos que no estaban incluidos "/etc/bind/bind.keys" y "/etc/bind/rndc.key". También añadiremos una clausula de control. Nos quedaria de esta manera:
# cat /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/bind.keys";
include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};

    El próximo archivo es el “/etc/bind/named.conf.local” en el cual agregaremos las zonas. También incluiremos el archivo “/etc/bind/zones.rfc1918 ”. Que impedirá que preguntemos a los servidores dns raiz por ip privadas. Si ha los archivos de las zonas no le ponemos ruta, lo intentara leer por defecto de la ruta “/var/cache/bind9. Este archivo nos quedara con la siguiente forma:
# cat /etc/bind/named.conf.local
include "/etc/bind/zones.rfc1918";
zone "infoasir.net" {
type master;
file "db.infoasir.net";
allow-update { key rndc-key; };
notify yes;
};
zone "2.168.192.in-addr.arpa" {
type master;
file "db.2.168.192";
allow-update { key rndc-key; };
notify yes;
};

    Ahora vamos a crear las zonas que definimos en el paso anterior. El primero corresponde a la zona inversa. Los archivos tienen que tener el nombre que le definimos en el paso anterior.
# cat /var/cache/bind/db.2.168.192
$ORIGIN .
$TTL 604800 ; 1 week
2.168.192.in-addr.arpa IN SOA asir.es. root.asir.es. (
2 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
604800 ; minimum (1 week)
)
NS gary.asir.es.
$ORIGIN 2.168.192.in-addr.arpa.
1 PTR gary.asir.es.

# cat /var/cache/bind/db.infoasir.net
$ORIGIN .
$TTL 604800 ; 1 week
infoasir.net IN SOA infoasir.net. root.infoasir.net. (
2 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
604800 ; minimum (1 week)
)
NS gary.infoasir.net.
$ORIGIN infoasir.net.
gary A 192.168.2.1

5 – Configuración del servidor dhcp.
    Con esto ya hemos terminado con el servidor dns. Ahora pasamos a la configuración del dhcp. Este es mas fácil de configurar, solo tendremos que modificar dos archivos. En el tendremos que hacer referencia a el servidor dns. Los archivos que vamos a modificar son el “/etc/dhcp/dhcpd.conf” y “/etc/default/isc-dhcp-server ”. En el primero va la configuración del dhcp. En el segundo solo añadiremos la interfaz por la que el servidor dhcp prestara servicio. Los archivos se nos tienen que quedar de la siguiente manera:
# cat /etc/dhcp/dhcpd.conf
# Líneas para la actualización del servidor DNS:
server-identifier gary ;
ddns-updates on;
ddns-update-style interim ;
ddns-domainname "infoasir.net.";
ddns-rev-domainname "in-addr.arpa.";
deny client-updates ;
include "/etc/bind/rndc.key";
zone infoasir.net. {
primary 127.0.0.1;
key rndc-key;
}
zone 2.168.192.in-addr.arpa. {
primary 127.0.0.1;
key rndc-key;
}
# Configuración general del servidor DHCP
default-lease-time 2592000;
max-lease-time 2592000;
authoritative ;
# Se reparten las direcciones 192.168.2.2 -192.168.2.127
# entre los clientes :
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.2 192.168.2.127;
option routers 192.168.2.1;
option domain-name "infoasir.net.";
option domain-name-servers 192.168.2.1;
option broadcast-address 192.168.2.255;
}

# cat /etc/default/isc-dhcp-server
INTERFACES="eth0"

    Para terminar reiniciamos los servicios.
# /etc/init.d/isc-dhcp-server restart
# /etc/init.d/bind9 restart
6 – Comprobaciones.
    En mi caso lo he comprobado con dos clientes. El primero un debian squeeze, a el cual le he tenido que descomentar una linea del archivo /etc/dhcp/dhclient.conf. La linea que le he añadido quedaria asin:
# cat /etc/dhcp/dhclient.conf |grep 'send host-name'
send host-name patricio;
    Donde patricio es el nombre de la maquina.
    Para comprobar que funciona he comprobado desde cada cliente la ip del otro de la siguiente manera.
En windows, el cual se llama arenita, he utilizado un ping y el nslookup.
 
    En patricio, el cliente debian squeeze, he utilizado dig. En este caso no he utilizado el ping por no tener que desactivar el cortafuegos de windows, el cual da tanto ruido. Los resultados deben de ser los siguientes:
# dig arenita.infoasir.net
; <<>> DiG 9.7.3 <<>> arenita.infoasir.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39981
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;arenita.infoasir.net. IN A
;; ANSWER SECTION:
arenita.infoasir.net. 1800 IN A 192.168.2.101
;; AUTHORITY SECTION:
infoasir.net. 604800 IN NS gary.infoasir.net.
;; ADDITIONAL SECTION:
gary.infoasir.net. 604800 IN A 192.168.2.1
;; Query time: 1 msec
;; SERVER: 192.168.2.1#53(192.168.2.1)
;; WHEN: Mon Nov 28 19:21:42 2011
;; MSG SIZE rcvd: 89