<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Linux Security</title>
	<atom:link href="http://mguazzardo.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mguazzardo.wordpress.com</link>
	<description>Linux Security, Hacking, Databases, seguridad, Tutoriales, LDAP</description>
	<lastBuildDate>Fri, 16 Sep 2011 23:54:58 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mguazzardo.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Linux Security</title>
		<link>http://mguazzardo.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mguazzardo.wordpress.com/osd.xml" title="Linux Security" />
	<atom:link rel='hub' href='http://mguazzardo.wordpress.com/?pushpress=hub'/>
		<item>
		<title>VPN &#8211; Posadas 2002</title>
		<link>http://mguazzardo.wordpress.com/2008/11/13/vpn-posadas-2002/</link>
		<comments>http://mguazzardo.wordpress.com/2008/11/13/vpn-posadas-2002/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 00:22:34 +0000</pubDate>
		<dc:creator>mguazzardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[hacking vpn]]></category>
		<category><![CDATA[Introduccion de vpns]]></category>
		<category><![CDATA[Posadas]]></category>
		<category><![CDATA[Tutorial de vpn]]></category>
		<category><![CDATA[VPNS]]></category>

		<guid isPermaLink="false">http://mguazzardo.wordpress.com/?p=43</guid>
		<description><![CDATA[Este tutorial de VPNS, mostrara como configurar rapidamente una vpn, e introducira en el mundo de vpns. Esta basado en una charla que prepare para la universidad Dachary.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=43&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Redes Privadas Virtuales<br />
(apunte preparado para la charla sobre vpns, Posadas 2002, Universidad Dachary)</p>
<p>¿Qué es una VPN?</p>
<p>Una Red Privada Virtual (VPN, Virtual Private Network) nos</p>
<p>permite conectar los componentes de una red sobre otra red, simulando un</p>
<p>enlace privado dedicado entre los extremos de la VPN, permitiendo de esta</p>
<p>manera que un usuario remoto, que se encuentre de viaje en cualquier parte</p>
<p>del mundo, o una oficina que se encuentre en otra localidad, puedan</p>
<p>conectarse a su red corporativa utilizando la infraestructura de una red</p>
<p>publica, como Internet.</p>
<p>1.1 Usos comunes de una VPN</p>
<p>- Acceso de un usuario remoto sobre Internet.</p>
<p>Una VPN permite el acceso remoto a recursos corporativos sobre una red</p>
<p>publica (de aqui en adelante, Internet). En lugar de conectarse con su</p>
<p>modem haciendo una llamada de larga distancia, el usuario solo debe</p>
<p>marcar a su ISP local. Una vez conectado a Internet, el software VPN</p>
<p>del usuario creara una red privada virtual entre su equipo de computo y el</p>
<p>servidor VPN corporativo a traves de Internet.</p>
<p>- Conexion de redes sobre Internet.</p>
<p>Es posible tambien implementar una VPN para conectar oficinas externas</p>
<p>situadas en diferentes ciudades, a la red corporativa, evitando con</p>
<p>esto la necesidad de un circuito dedicado como Frame Relay, por citar</p>
<p>solo uno. Por ejemplo, en mi trabajo utilizabamos una red nacional con</p>
<p>tecnología frame relay, lo cual requiere invertir una buena cantidad de</p>
<p>dinero en equipo de comunicaciones. En cambio, si se implementa una</p>
<p>VPN solo necesitariamos una linea dedicada a un ISP y</p>
<p>lo necesario para montar la VPN (servidores VPN, routers, etc.)</p>
<p>La oficina que quisiera establecer una conexion con la red corporativa</p>
<p>no necesariamente tendria que utilizar una linea dedicada a su ISP,</p>
<p>pues tambien podria realizar la conexion utilizando dial-up. No es lo</p>
<p>ideal, pero es posible hacerlo. Sin embargo, el servidor VPN deberia</p>
<p>estar conectado a Internet utilizando un enlace dedicado, para que</p>
<p>pueda estar escuchando trafico VPN las 24 horas.</p>
<p>Introducción a Tunneling</p>
<p>Definiremos rapidamente tunneling, para poder comprender redes</p>
<p>privadas virtuales.</p>
<p>Tunneling es un metodo que consiste en utilizar la infraestructura de</p>
<p>una interred (como Internet), para transportar datos de una red a otra.</p>
<p>Los datos a ser transportados pueden ser los cuadros (o paquetes) de</p>
<p>un</p>
<p>protocolo diferente al que maneje la interred en cuestion, es decir, en</p>
<p>lugar de enviar un cuadro tal y como fue producido por el nodo que lo</p>
<p>origino, el protocolo de tunneling (ya sea L2TP, IPSec, etc) encapsula el</p>
<p>cuadro en un header (encabezado) adicional que pertenece al protocolo de</p>
<p>transporte de la interred sobre la cual se establece el tunel (por ejemplo,</p>
<p>IP).</p>
<p>Los paquetes encapsulados son entonces enrutados sobre la interred</p>
<p>entre los extremos del tunel. A esa ruta logica a travez de la cual viajan los</p>
<p>paquetes encapsulados sobre la interred se le llama &#8216;tunel&#8217;.</p>
<p>Cuando los paquetes (o cuadros) encapsulados llegan a su destino, el</p>
<p>paquete es desencapsulado y reenviado a su destino final.</p>
<p>Algunos protocolos utilizados para tunneling son:</p>
<p>- Point-to-Point Tunneling Protocol (PPTP). Permite que el trafico</p>
<p>IP, IPX o NetBEUI sea encriptado y encapsulado en encabezados IP para</p>
<p>ser enviado a traves de una interred IP como Internet. Este Protocolo fue</p>
<p>creado por Microsoft, y existe una implementacion para Linux</p>
<p>(ver http://poptop.lineo.com/ para una implementacion PPTP opensource).</p>
<p>NOTA: La primera version de este articulo, la realice en el 2002. Ahora,</p>
<p>Hay que visitar la pagina</p>
<p>http://www.poptop.org</p>
<p>- Layer 2 Tunneling Protocol (L2TP). Permite que el trafico IP o</p>
<p>IPX sea encriptado y enviado sobre cualquier medio que soporte entrega</p>
<p>de datragramas punto-a-punto, tales como IP, X.25, Frame Relay o ATM</p>
<p>- IP Security (IPSec) Tunnel Mode. Permite que paquetes IP sean</p>
<p>encriptados y encapsulados en encabezados IP para ser enviados a traves</p>
<p>de una interred IP.</p>
<p>Durante el tunneling, los paquetes del protocolo ABC se encapsulan</p>
<p>en paquetes del protocolo XYZ para poder ser enviados a travez de una</p>
<p>interred XYZ. Al llegar estos paquetes, son desencapsulados y reenvia a su</p>
<p>destino final como paquetes ABC (*).</p>
<p>Cabe hacer la aclaracion que no necesariamente los paquetes</p>
<p>procesados por el protocolo de tunneling tienen que ser diferentes al</p>
<p>protocolo de la interred, tal es el caso de IP-sobre-IP y de IPSec, que</p>
<p>encapsulan paquetes IP para posteriormente ser transportados sobre una</p>
<p>red IP.</p>
<p>* Los protocolos ABC y XYZ son meramente ficticios.</p>
<p>2.1 Protocolos de Tunneling</p>
<p>Para que un tunel sea establecido, ambos, el cliente tunel y el</p>
<p>servidor tunel, deben usar el mismo protocolo de tunneling.</p>
<p>La tecnologia de tunneling puede basarse en un protocolo de</p>
<p>tunneling, ya sea de Layer 2 o de Layer 3.</p>
<p>Basandonos en el modelo OSI, los protocolos Layer 2, que</p>
<p>corresponden a la capa de enlace de datos, usan cuadros (frames) como</p>
<p>unidad de intercambio. PPTP, L2TP y L2F son protocolos de tunneling</p>
<p>Layer 2.</p>
<p>Ambos encapsulan los datos en cuadros PPP para ser enviados a</p>
<p>traves de una interred.</p>
<p>Los protocolos Layer 3, que corresponden a la capa de red, utilizan</p>
<p>paquetes (packets) como unidad de intercambio. IPoIP y IPSec Tunnel</p>
<p>Mode son ejemplos de protocolos de tunneling Layer 3. Ambos encapsulan</p>
<p>paquetes IP en un encabezado IP adicional antes de ser enviados a traves</p>
<p>de una interred IP.</p>
<p>2.1.1 Como funciona el tunneling</p>
<p>Diferencia entre Tuneling de Capa 2 y Capa 3.</p>
<p>En el caso de las implementaciones VPN basadas en Layer 2, tales</p>
<p>como PPTP y L2TP, el tunel es similar a una sesion, es decir, ambos</p>
<p>extremos del tunel deben negociar ciertas variables tales</p>
<p>asignacion de</p>
<p>direccion o parametros de cifrado o compresion.</p>
<p>En las implementaciones Layer 3, por contrario, se asume que toda</p>
<p>la configuracion ha sido resuelta con anterioridad. Para estos</p>
<p>protocolos el tunel no se mantiene. Para los protocolos Layer 2, sin</p>
<p>embargo, un tunel debe ser creado, mantenido y terminado.</p>
<p>Una vez que el tunel es establecido, los datos pueden ser enviados.</p>
<p>2.2 Point-to-Point Protocol</p>
<p>Debido a que los protocolos Layer 2 dependen enormemente de las</p>
<p>caracteristicas especificadas para PPP, vamos a ver un poco mas en detalle</p>
<p>este protocolo.</p>
<p>PPP fue diseñado para enviar datos a traves de conexiones dial-up o</p>
<p>a traves de enlaces dedicados punto-a-punto. PPP encapsula paquetes</p>
<p>IP,IPX y NetBEUI dentro de cuadros PPP, para posteriormente transmitir</p>
<p>los paquetes PPP encapsulados a traves de un enlace punto-a-punto.</p>
<p>El protocolo utilizado entre un modem y un NAS (Network Access</p>
<p>Server) es el PPP.</p>
<p>Existen ciertas fases de negociacion en una sesion PPP por dial-up,</p>
<p>que tienen que completarse antes de que la conexion PPP este lista para</p>
<p>transferir datos.</p>
<p>Fase 1: Creacion del enlace PPP</p>
<p>PPP utiliza LCP (Link Control Protocol) para establecer, mantener,y</p>
<p>terminar la conexion. Durante esta fase se definen los protocolos</p>
<p>de autenticacion que seran utilizados para autenticar al usuario pero no se</p>
<p>implementan sino hasta la siguiente fase. Es en esta primera fase donde se</p>
<p>decide tambien cual de los dos equipos</p>
<p>negociara el uso de compresion y/o cifrado.</p>
<p>Fase 2: Autenticacion del usuario</p>
<p>En esta fase, la computadora cliente se autentica con el RAS. La</p>
<p>mayoria de las implementaciones PPP utilizan los siguientes</p>
<p>protocolos para autenticacion:</p>
<p>- Password Authentication Protocol (PAP)</p>
<p>- Challenge-Handshake Authentication Protocol (CHAP)</p>
<p>El protocolo PAP ofrece una autenticacion de lo mas sencilla,</p>
<p>basada en texto simple. El NAS solicita al cliente su nombre de usuario y</p>
<p>su password y PAP los devuelve en texto simple, es decir, sin ser cifrados,</p>
<p>Por lo que esto es muy peligroso, ya que si algun “Espia anduviera</p>
<p>Snifeandonos, se llevaria nuestra contraseña..</p>
<p>Por el contrario, el protocolo CHAP ofrece un mayor grado de</p>
<p>seguridad, debido a que el password del usuario nunca viaja, ni siquiera</p>
<p>cifrado, durante la sesion PPP.</p>
<p>CHAP funciona de la siguiente manera: Cuando durante la primera</p>
<p>fase ambos, cliente y servidor, acuerdan utilizar CHAP como protocolo</p>
<p>deautenticacion, el NAS envia un &#8216;desafio&#8217; al cliente remoto. Este desafio</p>
<p>consiste en un ID de sesion y una cadena arbitraria de caracteres (desafio).</p>
<p>El cliente remoto debera utilizar MD5 para responder al servidor con el</p>
<p>nombre de usuario y una encriptación del desafio, ID de sesion y su</p>
<p>password. El nombre de usuario es</p>
<p>enviado sin cifrar. Las siguientes ecuaciones pueden ayudar entender esto:</p>
<p>desafio = id_sesion, cadena_desafio</p>
<p>respuesta = MD5(id_sesion, cadena_desafio, password),</p>
<p>nombre_usuario</p>
<p>Como se aprecia claramente, el password nunca viaja, ni siquiera</p>
<p>cifrado, durante la sesion, sino que es utilizado para un crear un hash del</p>
<p>desafio original. El servidor conoce el password del usuario, por lo que al</p>
<p>momento de recibir la respuesta del cliente remoto, realiza la misma</p>
<p>operacion con el desafio enviado y procede a comparar el resultado con la</p>
<p>respuesta del cliente. En caso de no coincidir, el servidor niega la conexion</p>
<p>con el cliente.</p>
<p>Otra caracteristica interesante de CHAP es que, una vez establecida</p>
<p>una sesion, el servidor continua enviando desafios al cliente en periodos de</p>
<p>tiempo arbitrarios, lo cual protege la sesion contra un posible ataque de</p>
<p>spoofing.</p>
<p>Bueno, pues ya para finalizar con esta fase 2: una vez que el NAS</p>
<p>obtiene los datos de autenticacion, los valida contra su propia base</p>
<p>de datos o contra un servidor central de autenticacion, por ejemplo,un</p>
<p>servidor RADIUS (Remote Authentication Dial-In User Service).</p>
<p>Fase 3: Invocando los protocolos de red</p>
<p>Una vez que las fases anteriores han sido completadas, PPP invoca</p>
<p>los protocolos de control que fueron seleccionados durante la fase 1 para</p>
<p>configurar los protocolos utilizados por el cliente remoto.</p>
<p>Por ejemplo, durante esta fase el IPCP (IP Control Protocol) puede</p>
<p>asignar una direccion dinamica al usuario remoto.</p>
<p>Una vez que estas fases han sido completadas, PPP comienza a</p>
<p>transmitir datos desde y hacia los dos puntos de la conexion. Cada paquete</p>
<p>transmitido es encapsulado en un encabezado PPP el cual es removido por</p>
<p>el receptor.</p>
<p>Si la compresion de datos fue seleccionada durante la fase 1, los</p>
<p>datos son comprimidos antes de transmitirlos. Tambien, si el cifrado fue</p>
<p>seleccionado durante la fase 1, entonces los datos son encriptados antes de</p>
<p>ser transmitidos.</p>
<p>En resumen, esto es lo que sucede desde el momento que nos</p>
<p>conectamos a nuestro ISP usando un modem y hasta que damos por</p>
<p>terminada la conexion .</p>
<p>2.3 Point-to-Point Tunneling Protocol (PPTP)</p>
<p>PPTP es un protocolo Layer 2 que encapsula cuadros PPP en</p>
<p>datagramas IP para ser transportados sobre una interred IP, como Internet.</p>
<p>Como ya mencione en lineas anteriores, PPTP es una mas de las</p>
<p>creaciones de Microsoft.</p>
<p>2.4 Layer 2 Forwarding (L2F)</p>
<p>L2F es un protocolo de transmision que permite a un servidor dial-</p>
<p>up encuadrar trafico dial-up en PPP y transmitirlo sobre vinculos WAN a</p>
<p>un servidor L2F. Este servidor desencapsula los paquetes y los inyecta a la</p>
<p>red. En contraste con PPTP y L2TP, L2F no tiene un cliente definido. L2F</p>
<p>es una tecnologia propuesta por Cisco.</p>
<p>2.5 Layer 2 Tunneling Protocol (L2TP)</p>
<p>L2TP es una combinacion de PPTP y L2F que encapsula cuadros</p>
<p>PPP para ser enviados sobre redes IP, X.25, Frame Relay o ATM. Cuando</p>
<p>se configura para usar IP, L2TP puede ser usado como protocolo de</p>
<p>tunneling sobre Internet, aunque tambien puede ser usado directamente</p>
<p>sobre una WAN (como Frame Relay) sin una capa IP de transporte. L2TP</p>
<p>sobre interredes IP hace uso de UDP para mantener el tunel.</p>
<p>En vista de que PPTP y L2TP son muy similares, debemos hacer</p>
<p>notar cuales son las diferencias entre ambos:</p>
<p>- PPTP requiere forzosamente de una interred IP. L2TP solamente</p>
<p>requiere que el medio de tunneling ofrezca conectividad punto-a-punto</p>
<p>basada en paquetes, tales como IP (usando UDP),</p>
<p>Frame Relay, X.25 o ATM.</p>
<p>- PPTP solo puede soportar un tunel entre ambos extremos. L2TP, por el</p>
<p>contrario, permite el uso de multiples tuneles entre los extremos.</p>
<p>- L2TP proporciona opcionalmente compresion de encabezados.</p>
<p>- L2TP ofrece autenticacion de tunel, mientras que PPTP no. Si</p>
<p>cualquiera de estos protocolos es usado sobre IPSec, la autenticacion de</p>
<p>tunel es proporcionada por IPSec, por lo cual la autenticacion de tunel</p>
<p>Layer 2 no es necesaria.</p>
<p>2.6 IPSec Tunnel Mode</p>
<p>IPSec es un protocolo Layer 3 que soporta la transferencia segura de</p>
<p>informacion a traves de una interred IP. IPSec define el formato de</p>
<p>paquetes para una modalidad de tunel IP-sobre-IP, llamada IPSec Túnel</p>
<p>Mode. Un tunel IPSec consiste en un cliente tunel y un servidor tunel,</p>
<p>los cuales estan configurados para usar tunneling IPSec y algun</p>
<p>mecanismo de cifrado.</p>
<p>IPSec Tunnel Mode utiliza un metodo de seguridad para encapsular</p>
<p>y encriptar paquetes IP para transmitirlos de forma segura a traves de</p>
<p>una interred IP privada o publica(Redes Internet).</p>
<p>Los datos encriptados son vueltos a encapsular en un encabezado IP</p>
<p>y enviados a la interred para ser entregados al otro extremo del tunel.</p>
<p>Una vez recibido el datagrama, el servidor tunel descarta el</p>
<p>encabezado IP y desencripta el contenido del paquete para recuperar el</p>
<p>paquete IP original. Este paquete, a su vez, es procesado</p>
<p>normalmente y enrutado a su destino final.</p>
<p>Pues el concepto es muy simple: solo se trata de paquetes IP cifrados</p>
<p>que viajan como datos de usuario dentro de paquetes IP convencionales.</p>
<p>Todo esto del IPSec suena bien, solo hay que mencionar que IPSec</p>
<p>soporta unicamente trafico IP.</p>
<p>Configuraciones practicas:</p>
<p>Aclaracion: En esta primera entrega, veremos una configuración sencilla para pptp.</p>
<p>El articulo original, estaba hecho para redhat 7.3, lo que no nos excluye de seguirla</p>
<p>Por ejemplo, para debian o Ubuntu. (De hecho, yo uso esas distros actualmente).</p>
<p>En nuestro caso, veremos PPTP:</p>
<p>Y analizaremos la configuración basica de PPTP:</p>
<p>Sistema operativo:</p>
<p>RedHat Linux 7.3</p>
<p>Bueno, como es de suponer, debemos tener al menos dos pcs, con ip</p>
<p>publicas. Vamos a centrarnos, en que la vpn esta entre Posadas y Buenos</p>
<p>Aires. EL servidor PPTP esta en Posadas, y en Buenos Aires, el cliente&#8230;.</p>
<p>para esto.. vamos a analizar cada configuración.</p>
<p>Configuración de Posadas:</p>
<p>(Configuración Servidor).</p>
<p>El servidor de Posadas, cuenta con el programa (Demonio)</p>
<p>pptpd. El mismo lo baje de http://poptop.lineo.com. (http://www.poptop.org).</p>
<p>Ahí instalamos el server pptpd&#8230; configurando como servidor de</p>
<p>conexiones entrantes.</p>
<p>Veremos caracteristicas fundamentales de este servicio:</p>
<p>*)</p>
<p>Se crea una relacion de doble ip (Peer to Peer), con ip de</p>
<p>destino, e ip local (esto veremos luego la configuración).</p>
<p>*)</p>
<p>Se debe tener soporte a PPP en el kernel.</p>
<p>*)</p>
<p>Soporta VPNS mixtas (Unix-Windows).</p>
<p>Los archivos fundamentals de configuracion del servidor, son estos.</p>
<p>Pptpd.conf &gt;&gt; Se ubica en /etc</p>
<p>Chap-secrets &gt;&gt; se ubica en /etc/ppp, y contiene las contraseñas</p>
<p>Options</p>
<p>&gt;&gt; opciones de configuración de PPP.</p>
<p>Ejemplos de configuración:</p>
<p>Veremos por empezar el archive chap-secrets</p>
<p># Secrets for authentication using CHAP</p>
<p># client</p>
<p>server secret IP addresse</p>
<p>mariano mail unix *</p>
<p>NOTA:</p>
<p>el asterisco que ponemos ahi, es para decir que en esa cuenta, podemos utilizar cualquier ip, del rango remoto. Si por ejemplo, queremos fijar hacia una ip determinada, ponemo</p>
<p>mail mariano unix (laipquequeremos)</p>
<p>mail mariano unix 10.1.1.156 por ejemplo.</p>
<p>aca veremos que configuramos una cuenta llamada mariano, en el servidor</p>
<p>mail (si el equipo se llama distinto, no hay problema ) con el password</p>
<p>unix. Recordar poner el par siempre,. Por que el ppp, lo exige. (por ser una</p>
<p>conexión peer to peer).</p>
<p>Archivo options.</p>
<p>proxyarp</p>
<p>name mail</p>
<p>auth</p>
<p>require-chap</p>
<p>debug</p>
<p>Vemos que dice, q la validación sera chap, que el nombre del servidor pptp</p>
<p>es mail (que puede o no ser el verdadero, sino un alias), que se muestre el</p>
<p>debug para posibles errores, que se realice proxyarp(esto es mas q nada</p>
<p>para nateo)</p>
<p>Archivo pptpd.conf</p>
<p>speed 115200</p>
<p>option /etc/ppp/options</p>
<p>debug</p>
<p>localip 10.0.0.1</p>
<p>remoteip 10.0.0.10-20</p>
<p>pidfile /var/run/pptpd.pid</p>
<p>aca, siguiendo la tradicion del demonio pppd, (que es la base del pptp),</p>
<p>configuramos la velocidad (obsolete), decimos que el archivo /</p>
<p>etc/ppp/options guarde la configuración relativa a las opciones del pppd.</p>
<p>El debug, es para que debuguee toda la transferencia, para ver si</p>
<p>encontramos errores.</p>
<p>Pool de Ips asignadas:</p>
<p>localip 10.0.0.1</p>
<p>remoteip 10.0.0.10-20</p>
<p>localip es la ip que tomara el Servidor PPTP, en el caso nuestro, seria</p>
<p>192.168.2.230</p>
<p>remoteip son las ips remotas, dependiendo de la cantidad de hosts a</p>
<p>conectar&#8230;.en nuestro caso serian 192.168.2.231-254.</p>
<p>Una vez echo esto, debemos correr el demonio en si mismo, que esto se</p>
<p>hace de la siguiente manera&#8230;.</p>
<p>[root@serverlinuxr root]#pptpd</p>
<p>y esto lanza automaticamente el demonio pptpd. Nos daremos cuenta, si</p>
<p>este esta corriendo, lanzando un nmap hacia el puerto 1723.</p>
<p>[root@serverlinuxr root]# nmap -p 1723 localhost</p>
<p>Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )</p>
<p>Interesting ports on localhost (127.0.0.1):</p>
<p>Port</p>
<p>State</p>
<p>Service</p>
<p>1723/tcp open</p>
<p>pptp</p>
<p>ahí tenemos el demonio del lado servidor corriendo.</p>
<p>Ahora veremos la configuración del cliente:</p>
<p>Buscamos en freshmeat el cliente pptp-linux, y lo instalamos. Lo que</p>
<p>debemos luego, es configurar los archivos /etc/ppp/chap-secrets, y /etc/</p>
<p>Options. El chap-secrets debe ser una replica exacta del otro, (por la</p>
<p>condicion de PPP).</p>
<p>El archivo options, cambia ligeramente, y veremos que es lo que cambia.</p>
<p>auth</p>
<p>name mariano</p>
<p>noipdefault</p>
<p>nodefaultroute</p>
<p>debug</p>
<p>-detach</p>
<p>vemos que name, ahora es mariano, que es la cuenta con que el cliente, va</p>
<p>a validar. Vemos que no tome un ip por defecto, y que no tome un gateway</p>
<p>por defecto, ya que si no , podria ser que este ocupado.</p>
<p>Una vez, que se establece la comunicación, podriamos ver el estado y las</p>
<p>ips asignadas.</p>
<p>Veremos ahora, que ip es la que nos asigno el servidor pptp.</p>
<p>[root@linuxfirewall root]# ifconfig ppp0</p>
<p>ppp0</p>
<p>Link encap:Point-to-Point Protocol</p>
<p>inet addr:192.168.2.231 P-t-P:192.168.2.230</p>
<p>Mask:255.255.255.255</p>
<p>UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500</p>
<p>Metric:1</p>
<p>RX packets:5926 errors:431 dropped:0 overruns:0 frame:0</p>
<p>TX packets:5334 errors:0 dropped:0 overruns:0 carrier:0</p>
<p>collisions:0 txqueuelen:3</p>
<p>RX bytes:1397456 (1.3 Mb) TX bytes:284267 (277.6 Kb)</p>
<p>[root@linuxfirewall root]#</p>
<p>Vemos que nuestra ip(virtual, por asi decirlo), es 192.168.2.231, que la del</p>
<p>otro punto es 192.168.2.230(que seria nuestro gateway). Entonces, si</p>
<p>levantaron las dos ips, la VPN ya esta andando!.</p>
<p>Rutando las redes privadas:</p>
<p>Y ahora el problema del millon!. Como hago para hacer pasar toda</p>
<p>mi red privada 192.168.1.x, hacia la 192.168.2.x?. Dijimos que la ip del</p>
<p>virtual seria mi gateway, considerandolo desde el cliente, lo que debemos</p>
<p>hacer es agregar una ruta, hacia la red 192.168.2.x en el cliente, utilizando</p>
<p>el siguiente comando.</p>
<p>[root@linuxfirewall root]#route add -net 192.168.2.0 netmask255.255.255.0 gw 192.168.2.231</p>
<p>Y santa solucion. Pero a veces el ip varia, y deberiamos generar algo</p>
<p>que nos calculara el ip. Vamos a armar un scripcito rapidamente.</p>
<p>#!/bin/bash</p>
<p># Marzo 2002</p>
<p>EH=`ifconfig eth0 | grep &#8220;inet addr&#8221; | awk &#8216;{print $2}&#8217; | awk -F: &#8216;{print</p>
<p>$2}&#8217;`</p>
<p>route add -net 192.168.6.0 netmask 255.255.255.0 gw $EH</p>
<p>Me mate con este script no?… Pero bueno, con este script podria calcular</p>
<p>la ip, y agregar la ruta a mano. y se podria hacer un script, que cuando el</p>
<p>equipo levante, llamara automáticamente.</p>
<p>Seria de esta forma el script!</p>
<p>NOTA: 200.200.200.200 es una ip ficticia.</p>
<p>Pptp 200.200.200.200 &amp;</p>
<p>EH=`ifconfig eth0 | grep &#8220;inet addr&#8221; | awk &#8216;{print $2}&#8217; | awk -F: &#8216;{print</p>
<p>$2}&#8217;`</p>
<p>route add -net 192.168.6.0 netmask 255.255.255.0 gw $EH</p>
<p>Que ovbiamente, lo podriamos poner en /etc/rc.d/rc.local.</p>
<p>Y esto levantaria automáticamente la conexión, siempre y cuando este el</p>
<p>servidor corriendo.</p>
<p>NOTA:</p>
<p>En un servidor debian, lo que cambiaria seria</p>
<p>que el software pptp, lo instalamos asi.</p>
<p>apt-get install pptpd</p>
<p>Como se ve, es algo re contra sencillo. A veces, para que estas vpns pasen por el router, habria que habilitar el pptp pass through. Tambien, se debe habilitar las reglas de filtrado via iptables, o si alguno usa shorewall, hay una macro especifica con el ppp+.</p>
<p>Cualquier consulta, no duden en mandarme un email<br />
mguazzardo76@gmail.com<br />
Marcelo Guazzardo</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mguazzardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mguazzardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mguazzardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mguazzardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mguazzardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mguazzardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mguazzardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mguazzardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mguazzardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mguazzardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mguazzardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mguazzardo.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mguazzardo.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mguazzardo.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=43&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mguazzardo.wordpress.com/2008/11/13/vpn-posadas-2002/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a9db058f4f4b1378c6998c804de8b72f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mguazzardo</media:title>
		</media:content>
	</item>
		<item>
		<title>Introduccion a Solaris Zona, Tutorial de Zonas Solaris</title>
		<link>http://mguazzardo.wordpress.com/2008/11/05/introduccion-a-solaris-zona-tutorial-de-zonas-solaris/</link>
		<comments>http://mguazzardo.wordpress.com/2008/11/05/introduccion-a-solaris-zona-tutorial-de-zonas-solaris/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 02:20:22 +0000</pubDate>
		<dc:creator>mguazzardo</dc:creator>
				<category><![CDATA[Solaris]]></category>
		<category><![CDATA[Introduccion a Zonas Solaris]]></category>
		<category><![CDATA[Jails BSD]]></category>
		<category><![CDATA[Seguridad en Solaris]]></category>
		<category><![CDATA[Tutorial de Zonas Solaris]]></category>
		<category><![CDATA[Virtualizacion]]></category>

		<guid isPermaLink="false">http://mguazzardo.wordpress.com/?p=41</guid>
		<description><![CDATA[Este tutorial a Zonas, o Introduccion a Zonas, nos mostrara la primera parte de la Virtualizacion Por sistema Operativo de Solaris. Es una buena practica usar zonas, en una segunda entrega mostraremos por que.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=41&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Introduccion a las Zonas:</p>
<p>	La tecnologia de Zonas (Incluida en Solaris a partir de Solaris 10), se propone a soportar diferentes Sistemas operativos.</p>
<p>Existen tres tipos de “Sistemas de Virtualizacion”.<br />
	1Ero) Dominios y Particiones: Estan basados en Soluciones Por Hardware. Estos incluyen Sun Fire Domains, y IBM Lpars (En el caso de IBM LPAR, un server tipo Regatta es manejado por una controladora HMC, que asignara los recursos a nivel dispositivos. Estos pueden ser, Fiber channels, Discos SSCi, Memoria, Placa de Red, etc).</p>
<p>	2Do) Virtual Machines: En estos casos, un software al estilo Vmware, da todo el soporte a virtualizacion. Existe una gran diferencia entre Vmware y Xen, pero esto excede el alcance de este documento.</p>
<p>	3ro) Particiones del Sistema operativo: Es una solucion a nivel sistema operativo, esto incluye, FreeBSD Jails, y Linux Virtual Servers. Tambien la tecnologia de Solaris Zonas esta incluida dentro de esta caracteristica.</p>
<p>	Comenzando.</p>
<p>Para comenzar, lo primero que hariamos, es ver si tenemos en el equipo alguna zona corriendo, para ello hacemos</p>
<p>bash-3.00# zoneadm list -vc<br />
ID NAME             STATUS     PATH                           BRAND    IP<br />
   0 global           running    /                              native   shared<br />
   1 mizona           running    /export/mizona                 native   shared</p>
<p>Con esto, podremos ver que tenemos nuestra zona global, y una zona tambien corriendo, llamado “mizona”.</p>
<p>Recordemos, que para las zonas, en solaris, tenemos fundamentalmente dos comandos, ellos son, zoneadm, y zonecfg.</p>
<p>Si bien esto sera un ejemplo introductorio, veremos rapidamente, como generar zonas en Solaris.</p>
<p>Lo primero que queremos hacer, es borrar la zona preexistente, para eso, nos fijamos que la zona esta en estado “running”. Lo primero que se debe hacer, cuando una zona esta en estado running, es entonces detenerla. Para eso, contamos con el comando zoneadm. </p>
<p>-bash-3.00# zoneadm -z mizona halt</p>
<p>y luego, vemos el estado de la zona.</p>
<p>bash-3.00# zoneadm list -vc<br />
  ID NAME             STATUS     PATH                           BRAND    IP<br />
   0 global           running    /                              native   shared<br />
mizona           installed  /export/mizona                 native   shared</p>
<p>Ahora vemos que la zona no esta en estado running, sino en installed. Finalmente, ahora podremos tranquilamente borrar la zona.</p>
<p>-bash-3.00# zonecfg -z mizona delete<br />
Desea suprimir la zona mizona (y/[n])? y<br />
La zona mizona no se encuentra en estado configured; delete no permitido.  Use -F para forzar delete.<br />
-bash-3.00# zonecfg -z mizona delete -F</p>
<p>Como no nos dejo borrar la zona de primera intencion, lo que haremos, es borrarla forzando la salida con -F.</p>
<p>Ahora, veremos finalmente el status de las zonas, con </p>
<p>-bash-3.00# zoneadm list -vc<br />
  ID NAME             STATUS     PATH                           BRAND    IP<br />
   0 global</p>
<p>Ahora, vamos nuevamente a generar la zona, para eso, lo que debemos hacer, es correr el comando zonecfg -z mizona</p>
<p>-bash-3.00# zonecfg -z mizona<br />
mizona: No se ha configurado esa zona<br />
Use &#8216;create&#8217; para comenzar a configurar una zona nueva.<br />
Al no encontrar la zona, nos dice que la creemos</p>
<p>zonecfg:mizona&gt; create<br />
zonecfg:mizona&gt; set zonepath=/export/mizona<br />
zonecfg:mizona&gt; set autoboot=true<br />
zonecfg:mizona&gt; add net<br />
zonecfg:mizona:net&gt; set address=192.168.254.210<br />
zonecfg:mizona:net&gt; set physical=pcn0<br />
zonecfg:mizona:net&gt; end<br />
zonecfg:mizona&gt; verify<br />
zonecfg:mizona&gt; exit</p>
<p>Bueno, como vemos aca, lo primero que hacemos es setear el zonepath, que es donde se setea la zona, y donde se copiaran los archivos que no se compartirar.<br />
Luego, setearemos el autoboot=true, para cuando el sistema se levante, automaticamente levante la zona. Le asignamos una direccion de red, en este caso como estoy usando el vmware, le asignaremos la ip 192.168.254.210. Cuando dice physical, es referente a la placa de red, como seria por ejemplo eth0 en Linux. Para eso, corremos el comando ifconfig -a, y luego, nos fijamos donde esta corriendo la placa de red.</p>
<p>Por ejemplo:</p>
<p>-bash-3.00# ifconfig -a<br />
lo0: flags=2001000849 mtu 8232 index                                                                                             1<br />
        inet 127.0.0.1 netmask ff000000<br />
pcn0: flags=1004843 mtu 1500 index 2<br />
        inet 192.168.254.132 netmask ffffff00 broadcast 192.168.254.255<br />
        ether 0:c:29:1c:da:9f<br />
ahi vemos que es pcn0. Una vez que terminanos la definicion de la parte de zona, ponemos end, luego verify para ver que todos los parametros esten ok, y luego, ponemos exit.</p>
<p>Ahora, debemos corroborar el estado de la zona.</p>
<p>-bash-3.00# zoneadm list -vc<br />
  ID NAME             STATUS     PATH                           BRAND    IP<br />
   0 global           running    /                              native   shared<br />
mizona           configured /export/mizona                 native   shared</p>
<p>NOTA: Se puede asignar una placa de red, para una zona especifica, o sea, que sea dedicada directa para esta placa de red. Solo para esto, se podria utilizar una placa de red, con la salida a internet.</p>
<p>Al ver esta salida, podremos ver que vamos por el buen camino, que ya tenemos la zona configurada.</p>
<p>Los posibles estado de una zona son:</p>
<p>z-Bottom of Form;z-Top of Form;HTML Markup;Comment;configured &#8211; our zone is configured, but it&#8217;s yet to have its initial boot</p>
<p>incomplete &#8211; zoneadm command sets a zone&#8217;s state to this value while installing and uninstalling a zone. When the operation is completed, zone&#8217;s status is changed.</p>
<p>installed &#8211; zone is fully configured, OS packages have been installed. It&#8217;s a ready-to-use zone, all you have to do is to boot it. The zone has no virtual platform associated yet.</p>
<p>ready &#8211; the zone is ready. It already has a virtual platform established, the kernel has created a zsched process, all the network interfaces are plumbed, devices are configured and file systems are mounted. No processes have been started yet, but since the zone is ready it already has a unique ID assigned to it. We normally don&#8217;t see a zone in this state, and it always moves one to the next one &#8211; running.</p>
<p>running &#8211; the zone is up and running. You can connect to the zone. It&#8217;s a fully working environment now</p>
<p>NOTA:</p>
<p>Ahora, lo que deberiamos hacer, es correr el comando para instalar la zona. Como pusimos en el zonepath=/export/mizona, debemos generar ese directorio.</p>
<p> mkdir /export/mizona</p>
<p>Pero veremos que al correr el comando de instalar la zona, nos devuelve el siguiente error.</p>
<p>bash-3.00# zoneadm -z mizona install<br />
/export/mizona no debe ser legible por grupo.<br />
/export/mizona no debe ser ejecutable por grupo.<br />
/export/mizona no debe ser legible por todos.<br />
/export/mizona no debe ser ejecutable por todos.<br />
no se ha podido verificar rutazona /export/mizona debido a los errores anteriores.<br />
zoneadm: la zona mizona no se ha podido verificar</p>
<p>Lo que pasa, que cuando se genera la zona, hay que pasarle los siguientes permisos.</p>
<p>chmod -R 700 /export/mizona</p>
<p>y luego, si podremos ejecutar el comando para la Instalacion de zonas.</p>
<p>bash-3.00# zoneadm -z mizona install</p>
<p>bash-3.00# zoneadm -z mizona install<br />
Preparing to install zone .<br />
Creating list of files to copy from the global zone.<br />
Copying  files to the zone.<br />
Initializing zone product registry.<br />
Determining zone package initialization order.<br />
Preparing to initialize  packages on the zone.<br />
Initializing package  of : percent complete: 20%</p>
<p>Esto deberia seguir hasta 100 %</p>
<p>cuando termina, queda asi</p>
<p>bash-3.00# zoneadm -z mizona install<br />
Preparing to install zone .<br />
Creating list of files to copy from the global zone.<br />
Copying  files to the zone.<br />
Initializing zone product registry.<br />
Determining zone package initialization order.<br />
Preparing to initialize  packages on the zone.<br />
Initialized  packages on zone.<br />
Zone  is initialized.</p>
<p>Una vez que la zona esta instalada, lo que nos queda hacer, es&#8230;.</p>
<p>bash-3.00#zoneadm -z mizona boot</p>
<p>bash-3.00#zlogin mizona</p>
<p>Si bien existen mas caracteristicas de las zonas, estas seran explicadas mas adelante, en un segundo articulo.</p>
<p>Saludos<br />
Marcelo</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mguazzardo.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mguazzardo.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mguazzardo.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mguazzardo.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mguazzardo.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mguazzardo.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mguazzardo.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mguazzardo.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mguazzardo.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mguazzardo.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mguazzardo.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mguazzardo.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mguazzardo.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mguazzardo.wordpress.com/41/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=41&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mguazzardo.wordpress.com/2008/11/05/introduccion-a-solaris-zona-tutorial-de-zonas-solaris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a9db058f4f4b1378c6998c804de8b72f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mguazzardo</media:title>
		</media:content>
	</item>
		<item>
		<title>Linux Volume Manager , LVM, Tutorial</title>
		<link>http://mguazzardo.wordpress.com/2008/10/28/linux-volume-manager-lvm-tutorial/</link>
		<comments>http://mguazzardo.wordpress.com/2008/10/28/linux-volume-manager-lvm-tutorial/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 04:02:10 +0000</pubDate>
		<dc:creator>mguazzardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Discos Raid Linux]]></category>
		<category><![CDATA[HACKING]]></category>
		<category><![CDATA[Introduccion]]></category>
		<category><![CDATA[LVM]]></category>
		<category><![CDATA[Redhat LVM]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://mguazzardo.wordpress.com/?p=16</guid>
		<description><![CDATA[Introduccion y tutorial al Linux Volume Manager<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=16&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Discos del Infierno</p>
<p><strong><br />
Introduccion a LVM.</strong></p>
<p>La mayoria de las instalaciones que realizamos, usando una Distro cualquiera sea, de ellas, como puede ser debian, redhat, Tuquito o Condorlinux(1), se realizan, por lo general utilizando discos communes.</p>
<p>Imaginemos esto, que hacemos una instalacion, donde particionamos de la siguiente manera.<br />
/ 10 Gb<br />
/boot 200 mb<br />
/var 1 Gb</p>
<p>Esta puede ser una tabla de particionado generico, no digo que sea la mas optima, es solo para ejemplos.</p>
<p>Supongamos, que nuestro directorio /var, esta lleno, por que estamos usando un servidor de correo sendmail(2), y nos quedamos sin espacio. Tambien supongamos, que tenemos todo este particionado en un disco Serial Ata , al que el sistema lo detecto como sda, y que para darle mas espacio a /var, deberia agregar un nuevo disco, y copiar todos los datos de /var/, al nuevo disco, crear la partición via fdisk, editar el /etc/fstab, y todas esas cosas que Uds, por supuesto que ya saben.</p>
<p>Podriamos haber evitado esto desde el principio, si en el diseño de la Instalacion Hubieramos optado por usar, LVM, o Linux Volume Manager.</p>
<p>Vamos a Dar una Definición de Lvm, pero para no rompernos la cabeza, voy a tomar una definición de Daniel Coletti, en su documento</p>
<p>“Logical Volume Manager (LVM) . Administrador de Volúmenes Lógicos”.</p>
<p><span style="color:#3366ff;">El LVM es un módulo que se le agrega al núcleo Linux y genera una abstracción entre los<br />
discos físicos y los dispositivos para accederlos. Con la ayuda de herramientas de administración, el administrador puede acceder a los beneficios de utilizar LVM.<br />
Básicamente lo que se logra es tener un nuevo dispositivo que apunta no a un disco o una<br />
partición, sino a un grupo de discos y particiones como un todo (manejar muchos espacios de disco como si fuera un único disco).</p>
<p></span>Es importante aclarar, que si bien se puede “migrar” un OS, a LVM, lo mas conveniente es el diseño del LVM, antes del Comenzar la instalacion.</p>
<p>Para la siguiente explicación, Utilizare una Instalacion en vmware, sobre debian etch.</p>
<p><strong>¿Por que es Importante LVM?<br />
</strong></p>
<p>Es importante entender LVM ya que otros sistemas de manejadores de discos, como puede ser el de Solaris, o el de productos como veritas, utilizan conceptos similares. De hecho, se deja de pensar en un disco aislado, sino en un File System.</p>
<p><strong>Conceptos a Definir.<br />
</strong><br />
(Tambien tomado del mismo texto, de Daniel Coletti).</p>
<p>Entrando en detalle vamos a encontrarnos inicialmente con tres nuevos conceptos que utiliza<br />
el LVM, Volumen Físico, Volumen Lógico y Grupo Volumen. Los Volúmenes Físicos (VF) son los discos o particiones de un disco, los Volúmenes Lógicos (VL) son dispositivos donde se pueden crear sistemas de archivos y por último, el Grupo Volumen (GV) es un área donde se juntan los VF y VL.</p>
<p><strong>Una aclaracion fundamental.<br />
</strong><br />
Para que el Sistema Operativo trabaje con LVM, debera esto estar soportado en el kernel. Si bien el Kernel que utiliza debian etch, ya trae por defecto el soporte a LVM y a Raid, esta aclaracion es valida por si estamos compilando nuestro propio Kernel.</p>
<p>Habilitando el Soporte a Raid y LVM en el Kernel:</p>
<p>Multi-device support (RAID and LVM). -&gt; .Logical volumen manager (LVM)<br />
support.</p>
<p>Luego, lo que debemos hacer, es instalar el soporte a LVM, para eso, lo que debemos hacer, es</p>
<p>debian:/#apt-get install lvm2</p>
<p>Vamos, a tomar una medicion de cuanto disco rigido tenemos ocupado en este momento.</p>
<p>debian:/# df -k<br />
S.ficheros Bloques de 1K Usado Dispon Uso% Montado en<br />
/dev/sda3 2877872 881244 1850440 33% /<br />
tmpfs 128484 0 128484 0% /lib/init/rw<br />
udev 10240 68 10172 1% /dev<br />
tmpfs 128484 0 128484 0% /dev/shm<br />
/dev/sda2 279999 28188 237353 11% /boot<br />
/dev/mapper/gv1-vl1 7845572 411752 7035280 6% /var</p>
<p>Y luego, en el vmware, agrego un disco virtual, para hacer el sistema Volume Manager.</p>
<p>Lo primero que debo hacer con este disco virtual, es formatearlo.</p>
<p>debian:~# fdisk /dev/sdc<br />
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel<br />
Building a new DOS disklabel. Changes will remain in memory only,<br />
until you decide to write them. After that, of course, the previous<br />
content won&#8217;t be recoverable.</p>
<p>The number of cylinders for this disk is set to 1044.<br />
There is nothing wrong with that, but this is larger than 1024,<br />
and could in certain setups cause problems with:<br />
1) software that runs at boot time (e.g., old versions of LILO)<br />
2) booting and partitioning software from other OSs<br />
(e.g., DOS FDISK, OS/2 FDISK)<br />
Warning: invalid flag 0&#215;0000 of partition table 4 will be corrected by w(rite)</p>
<p>Command (m for help): n<br />
Command action<br />
e extended<br />
p primary partition (1-4)<br />
p<br />
Partition number (1-4): 1<br />
First cylinder (1-1044, default 1):<br />
Using default value 1<br />
Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044):<br />
Using default value 1044</p>
<p>Command (m for help): t<br />
Selected partition 1<br />
Hex code (type L to list codes): 8e<br />
Changed system type of partition 1 to 8e (Linux LVM)</p>
<p>Command (m for help): w<br />
The partition table has been altered!</p>
<p>Calling ioctl() to re-read partition table.<br />
Syncing disks.</p>
<p>Lo que haremos sobre esta partición creada, es montar un Volumen Logico, y luego le asignaremos el directorio /var. Luego, una vez que el Volumen Logico este creado, le agregaremos otro disco mas, de 2 GB aproximadamente.</p>
<p>Lo primero que hacemos, es generar</p>
<p>pvcreate /dev/sdc1</p>
<p>Con esto generamos el disco fisico, para que sea veo por el grupo de volúmenes de discos.</p>
<p>Luego,</p>
<p>vgcreate gv1 /dev/sdc1</p>
<p>Con esto generamos el grupo de volumenes.</p>
<p>Luego,</p>
<p>lvcreate -L 7,6 GB -n vl1 gv1</p>
<p>Con esto, se genera el Volumen Logico, desde cual puede ser accedido desde el Sistema Operativo.</p>
<p>Luego,</p>
<p>mkfs.ext3 /dev/gv1/vl1</p>
<p>Montamos la particion del volumen, par aver que todo este marchando como esperamos</p>
<p>mount /dev/gv1/vl1 /mnt</p>
<p>Copiamos todo lo del /var/ actual, a lo que va a ser el nuevo /var, que ahora esta en /mnt</p>
<p>Nota:</p>
<p>Quizas tengas que hacer</p>
<p>debian:/#apt-get install rsync</p>
<p>Luego</p>
<p>debian:/#rsync -ax /var/. /mnt</p>
<p>Luego, movemos el actual /var, a /usr (Por ejemplo, por si algo falla). Por ultimo, debemos editar el /etc/fstab, para que tenga una apariencia parecida a esta. Nota: En tu equipo seguro sera distinto, es dependiente a la tabla de particionamiento.</p>
<p>debian:~# cat /etc/fstab<br />
# /etc/fstab: static file system information.<br />
#<br />
#<br />
proc /proc proc defaults 0 0<br />
/dev/sda3 / ext3 defaults,errors=remount-ro 0 1<br />
/dev/sda2 /boot ext3 defaults 0 2<br />
/dev/sda1 none swap sw 0 0<br />
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0<br />
/dev/gv1/vl1 /var ext3 defaults,errors=remount-ro 0 1<br />
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0</p>
<p>Una vez, que hacemos esto, booteamos el equipo. Si todo anda bien, al realizar un mount, veremos algo similar a esto.</p>
<p>debian:~# mount<br />
/dev/sda3 on / type ext3 (rw,errors=remount-ro)<br />
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)<br />
proc on /proc type proc (rw,noexec,nosuid,nodev)<br />
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)<br />
udev on /dev type tmpfs (rw,mode=0755)<br />
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)<br />
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)<br />
/dev/sda2 on /boot type ext3 (rw)<br />
/dev/mapper/gv1-vl1 on /var type ext3 (rw,errors=remount-ro)</p>
<p>Veamos la ultima linea,</p>
<p>/dev/mapper/gv1-vl1 on /var type ext3 (rw,errors=remount-ro)</p>
<p>Esto significa, que ya tenemos un volumen logico, y en el , montado el directorio /var.</p>
<p>Viendo las diferencias:</p>
<p>Realizando un df, vemos que el tamaño ocupado en /, disminuyo, y que se genero un volumen logico.</p>
<p>debian:/# df<br />
S.ficheros Bloques de 1K Usado Dispon Uso% Montado en<br />
/dev/sda3 2877872 618312 2113372 23% /<br />
tmpfs 128484 0 128484 0% /lib/init/rw<br />
udev 10240 68 10172 1% /dev<br />
tmpfs 128484 0 128484 0% /dev/shm<br />
/dev/sda2 279999 28188 237353 11% /boot<br />
/dev/mapper/gv1-vl1 7845572 411752 7035280 6% /var</p>
<p>Agregando Discos al volumen logico.</p>
<p>Supongamos, aunque este no es el caso, que necesitamos agregar un disco nuevo, a nuestro volumen logico. Para esto, conectamos un disco mas, que nuestro OS, lo va a detectar como sdb, y obviamente, lo formateamos.</p>
<p>debian:/# pvcreate /dev/sdb1<br />
Physical volume &#8220;/dev/sdb1&#8243; successfully created<br />
debian:/# vgextend gv1 /dev/sdb1<br />
Volume group &#8220;gv1&#8243; successfully extended</p>
<p>debian:/# vgdisplay -v<br />
Finding all volume groups<br />
Finding volume group &#8220;gv1&#8243;<br />
&#8212; Volume group &#8212;<br />
VG Name gv1<br />
System ID<br />
Format lvm2<br />
Metadata Areas 2<br />
Metadata Sequence No 3<br />
VG Access read/write<br />
VG Status resizable<br />
MAX LV 0<br />
Cur LV 1<br />
Open LV 1<br />
Max PV 0<br />
Cur PV 2<br />
Act PV 2<br />
VG Size 9,99 GB<br />
PE Size 4,00 MB<br />
Total PE 2558<br />
Alloc PE / Size 1946 / 7,60 GB<br />
Free PE / Size 612 / 2,39 GB<br />
VG UUID J3TtQI-wo2U-IQgp-DNvU-jsNz-lUo6-yPjYHW</p>
<p>&#8212; Logical volume &#8212;<br />
LV Name /dev/gv1/vl1<br />
VG Name gv1<br />
LV UUID cqX3IW-N1Gq-xo75-NQDJ-hFyZ-p6Ia-0nVah6<br />
LV Write Access read/write<br />
LV Status available<br />
# open 1<br />
LV Size 7,60 GB<br />
Current LE 1946<br />
Segments 1<br />
Allocation inherit<br />
Read ahead sectors 0<br />
Block device 253:0</p>
<p>&#8212; Physical volumes &#8212;<br />
PV Name /dev/sdc1<br />
PV UUID gMTq2t-H27D-7X1a-vRAR-BJfo-56KW-oCR02x<br />
PV Status allocatable<br />
Total PE / Free PE 2047 / 101</p>
<p>PV Name /dev/sdb1<br />
PV UUID Q4FSVy-IzHd-GZHx-bj0J-sW6j-7aJB-o1HW80<br />
PV Status allocatable<br />
Total PE / Free PE 511 / 511</p>
<p>debian:/# lvextend -L +1,6G /dev/gv1/vl1<br />
Rounding up size to full physical extent 1,60 GB<br />
Extending logical volume vl1 to 9,20 GB<br />
Logical volume vl1 successfully resized</p>
<p>debian:/# resize2fs -p /dev/gv1/vl1<br />
resize2fs 1.40-WIP (14-Nov-2006)<br />
Filesystem at /dev/gv1/vl1 is mounted on /var; on-line resizing required<br />
old desc_blocks = 1, new_desc_blocks = 1<br />
Performing an on-line resize of /dev/gv1/vl1 to 2412544 (4k) blocks.<br />
The filesystem on /dev/gv1/vl1 is now 2412544 blocks long.</p>
<p>Ahora, realizaremos un df –k, para ver la nueva asignacion de espacio.</p>
<p>debian:/# df<br />
S.ficheros Bloques de 1K Usado Dispon Uso% Montado en<br />
/dev/sda3 2877872 618316 2113368 23% /<br />
tmpfs 128484 0 128484 0% /lib/init/rw<br />
udev 10240 68 10172 1% /dev<br />
tmpfs 128484 0 128484 0% /dev/shm<br />
/dev/sda2 279999 28188 237353 11% /boot<br />
/dev/mapper/gv1-vl1 9498256 411756 8605240 5% /var</p>
<p>Y vemos, con en la ultima linea, disponemos de mayor espacio en var. Con esto, podemos imaginarnos un monton de utilidades.</p>
<p>Por ultimo, voy a dejar, un compendio de comandos que tambien voy a sacar del excelente apunte de Daniel Coletti,</p>
<p><span style="color:#3333ff;">Comandos de volúmenes físicos<br />
pvchange Cambia los atributos de un volumen físico<br />
pvcreate Crea un volumen físico<br />
pvdata Muestra información de depuración sobre un volumen físico<br />
pvdisplay Muestra información sobre un volumen físico<br />
pvmove Mueve extensiones físicas de un volumen físico a otro.<br />
pvscan Localiza y enumera todos los volúmenes físicos</p>
<p>Comandos de Grupo Volumen<br />
vgcfgbackup Hace una copia del área del descriptor de grupo volumen<br />
vgcfgrestore Recupera el área del descriptor de grupo volumen al disco<br />
vgchange Cambia los atributos de un grupo volumen<br />
vgck Comprueba la consistencia del área del descriptor de grupo volumen<br />
vgcreate Crea un grupo volumen a partir de volúmenes físicos<br />
vgdisplay Muestra los atributos de un grupo volumen<br />
vgexport Exporta un grupo volumen del sistema<br />
vgextend Añade volúmenes físicos a un grupo volumen<br />
vgimport Importa un grupo volumen al sistema<br />
vgmerge Combina dos grupos volumen<br />
vgmknodes Combina un directorio y los archivos especiales de un grupo volumen<br />
vgreduce Elimina volúmenes físicos de un grupo volumen<br />
vgremove Elimina un grupo volumen<br />
vgrename Renombra un grupo volumen<br />
vgscan Localiza y enumera todos los grupos volumen del sistema<br />
vgsplit Divide un grupo volumen</p>
<p>Comandos de Volumen Logico<br />
lvchange Cambia los atributos de un volumen lógico<br />
lvcreate Crea un volumen lógico<br />
lvdisplay Muestra los atributos de un volumen lógico<br />
lvextend Incrementa el tamaño de un volumen lógico<br />
lvreduce Reduce el tamaño de un volumen lógico<br />
lvremove Elimina un volumen lógico<br />
lvrename Renombra un volumen lógico<br />
lvscan Localiza y enumera todos los volúmenes lógicos, creando /etc/lvmtab y /etc/lvmtab.d/*</p>
<p>Comandos de Administración de Volúmenes Logicos</p>
<p>lvmchange Cambia los atributos del sistema LVM<br />
lvmdiskscan Localiza y enumera todos los discos disponibles, los dispositivos múltiples y las particiones<br />
lvmsadc Recoge información sobre la actividad de LVM<br />
lvmsar Muestra información sobre la actividad de LVM</p>
<p></span>Notas:</p>
<p>1) El sendmail utiliza por defecto /var/spool/mail para alojar esto<br />
2) ¿Pablo, para cuando?</p>
<p>Referencias:</p>
<p>Daniel Coletti: Administrador de Volúmenes Logicos en Linux.</p>
<p>Marcos Ruso: Ayuda para entender la “magia”.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mguazzardo.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mguazzardo.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mguazzardo.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mguazzardo.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mguazzardo.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mguazzardo.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mguazzardo.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mguazzardo.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mguazzardo.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mguazzardo.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mguazzardo.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mguazzardo.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mguazzardo.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mguazzardo.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=16&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mguazzardo.wordpress.com/2008/10/28/linux-volume-manager-lvm-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a9db058f4f4b1378c6998c804de8b72f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mguazzardo</media:title>
		</media:content>
	</item>
		<item>
		<title>Introduccion al Squid, Tutorial de Squid</title>
		<link>http://mguazzardo.wordpress.com/2008/10/28/introduccion-al-squid/</link>
		<comments>http://mguazzardo.wordpress.com/2008/10/28/introduccion-al-squid/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 03:44:57 +0000</pubDate>
		<dc:creator>mguazzardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Introduccion al Squid]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[Squid DELAY POOLS]]></category>
		<category><![CDATA[Squid LDAP]]></category>
		<category><![CDATA[Tutorial de Squid]]></category>

		<guid isPermaLink="false">http://mguazzardo.wordpress.com/?p=12</guid>
		<description><![CDATA[EN ESTE TUTORIAL DE SQUID SE DARA UNA INTRODUCCION AL PROXY SERVER SQUID. ESPERO QUE LO DISFRUTEN Y LES SIRVA. GRACIAS!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=12&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Octopusy</strong></p>
<p>Esta nota servira para mostrar una configuracion adecuada de squid, con cosas que probablemente no se ven en otros tutoriales.<br />
Introduccion.<br />
El squid es un proxy a nivel de aplicacion, que viene con la mayoria de las distros de linux. En particular, usare para la nota debian, por lo que lo que de<br />
beriamos hacer, en esta ocasion, es lo siguiente.</p>
<p><strong><em><span style="color:#3366ff;">debian:~# apt-get install squid<br />
Leyendo lista de paquetes&#8230; Hecho<br />
Creando Ã¡rbol de dependencias&#8230; Hecho<br />
Se instalarÃ¡n los siguientes paquetes extras:<br />
squid-common<br />
Paquetes sugeridos:<br />
squidclient squid-cgi logcheck-database resolvconf smbclient<br />
Se instalarÃ¡n los siguientes paquetes NUEVOS:<br />
squid squid-common<br />
</span></em></strong></p>
<p>Esto nos bajara el squid, en nuestra pc, y de aca, lo que deberemos hacer, es configurar el archivo /etc/squid/squid.conf.<br />
pero antes, deberemos tener en cuenta, que antes, el squid, genera archivos de logueo, en /var/log/squid/, y que estos seran muy importantes, para en el<br />
futuro poder ver la actividad del proxy.</p>
<p><span style="font-family:courier new;font-size:180%;"><strong>Empezando.</strong></span></p>
<p>Veremos los archivos de configuracion:<br />
<strong><span style="font-size:130%;">Directivas:</span></strong><br />
<strong><span style="font-size:130%;"><br />
</span></strong>Las directivas en el squid, son los parametros a pasar. Asi , por ejemplo, es normal, que el http_port (Puerto de Squid), este seteado en el port 3128,<br />
pero tambien, mucha gente lo usa en el 8080 (Como lo usaba el viejo Proxy de Microsoft).<br />
¿Como cambiar esto?.<br />
Sencillo, deberemos ubicar la directiva<br />
http_port 3128<br />
y la cambiamos a<br />
http_port 8080<br />
Visible Hostname<br />
Existe una clausula, llamada visible hostname, que es muy importante. En esta clausula, se define el nombre del proxy<br />
por ejemplo<br />
visible_hostname proxy.midominio.com.ar<br />
Es muy importante que este clausula este correctamente seteada, sino, no se podra iniciar el servicio de squid.</p>
<p><strong><span style="font-size:130%;">ACLS:<br />
</span></strong><br />
Bueno, aca empieza la parte fundamental del funcionamiento del squid. Todos sabemos que la funcion primordial del squid, es el filtrado de contenido. Las<br />
acls, lo que hacen, precisamente es ello.<br />
Por ejemplo, vamos a ver lo siguiente<br />
acl redlocal src 192.168.4.0/24<br />
Que significa todo esto?<br />
Se define una acl llamada red local, y se define como src (origen), todo lo que viene desde la red, 192.168.4.0/24, o sea toda la red con mascara 2<br />
255.255.255.0.<br />
Esta es una ACL mas bien sencilla, ya veremos mas adelante, como se complicara todo.<br />
Paso a paso:</p>
<p>Insertaremos la nueva acl, en el archivo de configuracion simplificado, le hemos sacado todos los comentarios a nuestro archivo, para una mejor compresion</p>
<p>http_port 3128<br />
visible_hostname proxy.midominio.com.ar<br />
acl redlocal src 192.168.4.0/24<br />
#Recommended minimum configuration:<br />
acl all src 0.0.0.0/0.0.0.0<br />
acl manager proto cache_object<br />
acl localhost src 127.0.0.1/255.255.255.255<br />
acl to_localhost dst 127.0.0.0/8<br />
acl SSL_ports port 443 563<br />
acl Safe_ports port 80 # http<br />
acl Safe_ports port 21 # ftp<br />
acl Safe_ports port 443 563 # https, snews<br />
acl Safe_ports port 70 # gopher<br />
acl Safe_ports port 210 # wais<br />
acl Safe_ports port 1025-65535 # unregistered ports<br />
acl Safe_ports port 280 # http-mgmt<br />
acl Safe_ports port 488 # gss-http<br />
acl Safe_ports port 591 # filemaker<br />
acl Safe_ports port 777 # multiling http<br />
acl CONNECT method CONNECT<br />
# Deny requests to unknown ports<br />
http_access deny !Safe_ports<br />
# Deny CONNECT to other than SSL ports<br />
http_access allow red_local<br />
http_access deny all</p>
<p>Digamos que con esta minima configuracion, tenemos acceso a toda la red, 192.168.4.0/24, sin ningun tipo de restricciones. Ahora bien, supongamos que por<br />
un enlace punto a punto, o tambien podria ser via vpn, o diversas configuraciones locales, tenemos una red, por ejemplo en Villa Dolores(Cba). Definiremos<br />
esa red<br />
acl villa_dolores 192.168.5.0/24<br />
donde es obvio, que estamos dejando pasar a toda la red 192.168.5.0/24</p>
<p><strong><span style="font-size:130%;">Complicando un poco mas, y entendiendo la sintaxis de las acls.</span></strong><br />
<strong></strong><br />
Veremos, en un primer momento, yo quisiera que toda la red de villa dolores, tenga acceso a internet, pero que no pueda descargarse archivos.<br />
esto ya se esta complicando aun un poco mas, por eso, deberemos primero generar una acl archivos, y ya veremos como.<br />
acl archivos urlpath_regex &#8220;/etc/squid/archivos&#8221;<br />
aca vemos, que usaremos una regex(Expresion regular), para ver que tipos de archivos estan envueltos en esta regla. Obviamente, como la mayoria habra<br />
supuesto, existira un archivo llamado /etc/squid/archivos. En caso de no existir este archivo, al restartear squid, seremos informados.<br />
en el archivo, /etc/squid/archivos, pongo lo siguiente</p>
<p><span style="color:#ff6600;">exe<br />
avi<br />
mp3<br />
mpeg<br />
mp4<br />
rad</span></p>
<p>Y con esto, agregamos estos tipos de archivos a la acl archivos. Ahora veremos como aplicar esta acl.<br />
Supongamos que a la red de villa dolores, le quisiera dar internet, pero no quisiera que se pudieran bajar de una pagina, los siguientes archivos, entonces,<br />
generaria una regla del siguiente tipo</p>
<p><em><strong>http_access allow villa_dolores !archivos<br />
</strong></em><br />
como vemos, el !archivos, funciona como un NOT. entonces, dejara pasar la acl definida en villa_dolores, que es que toda la red 192.168.5.0 pueda navegar,<br />
pero no dejare que bajen los archivos.</p>
<p><strong><em>Viendo otro ejemplo mas</em></strong></p>
<p>Supongamos ahora mismo, que queremos filtrar una gran cantidad de palabras obsenas, como puede ser, (vamos, las que uds. ya conocen!!).<br />
generamos una acl, que ahora, tenga como sentido el filtro de palabras.<br />
acl filtrar url_regex &#8220;/etc/squid/filtrar&#8221;<br />
con esto, el url_regex, filtrara las palabras que estaran en el archivo filtrar<br />
en el archivo filtrar por ejemplo ponemos<br />
pedofilia<br />
gays<br />
travestis<br />
Y si en la url destino, encontraramos esas palabras, se denegaria el acceso.</p>
<p><span style="font-size:130%;"><strong><em>filtro MSN:</em></strong><br />
</span><br />
Esto me costo bastante, y fue mas bien viendo por donde se metia el msn, en los logs del squid.<br />
acl filtro_msn dstdomain &#8220;/etc/squid/msn&#8221;<br />
aca vemos la directiva dstdomain. Se filtrara por el dominio de destino, que estara especificado en /etc/squid/msn<br />
en ese archivo, pondremos.</p>
<p><em><strong>gateway.messenger.hotmail.com<br />
login.live.com<br />
login.live.com:443<br />
messenger.hotmail.com<br />
messenger.msn.com<br />
messenger.microsoft.com<br />
echo-v1.msgr.hotmail.com<br />
echo-v2.msgr.hotmail.com<br />
echo-v3.msgr.hotmail.com<br />
echo-v4.msgr.hotmail.com<br />
echo-v5.msgr.hotmail.com<br />
echo-v6.msgr.hotmail.com<br />
echo-v7.msgr.hotmail.com<br />
echo-v8.msgr.hotmail.com<br />
echo-v9.msgr.hotmail.com<br />
echo-v10.msgr.hotmail.com<br />
g.msn.com<br />
rsi.hotmail.com<br />
config.messenger.msn.com</strong></em></p>
<p>y con esto, nos aseguramos que no se puedan conectar al msn. Si bien anteriormente al MSN Live, se podia hacer una regla por aplicacion, pero ahora ya no.<br />
entonces, simplificando, imaginemos que queremos que la red de villa dolores, no tenga ni msn, ni baje archivo, ni vea paginas con palabras prohibidas,<br />
generamos la siguiente acl.<br />
http_access allow villa_dolores !filtro_msn !archivos !filtrar<br />
con esto, demostramos que se puede filtrar, y usando la logica, podemos incluir muchisimas directivas.</p>
<p><strong><em>Configuracion final del /etc/squid/squid.conf</em></strong><br />
<strong><em></em></strong><br />
http_port 3128<br />
visible_hostname proxy.midominio.com.ar<br />
acl redlocal src 192.168.4.0/24<br />
acl villa_dolores src 192.168.5.0/24<br />
acl filtrar url_regex &#8220;/etc/squid/filtrar&#8221;<br />
acl filtro_msn dstdomain &#8220;/etc/squid/msn&#8221;<br />
acl archivos urlpath_regex &#8220;/etc/squid/archivos&#8221;</p>
<p>#Recommended minimum configuration:<br />
acl all src 0.0.0.0/0.0.0.0<br />
acl manager proto cache_object<br />
acl localhost src 127.0.0.1/255.255.255.255<br />
acl to_localhost dst 127.0.0.0/8<br />
acl SSL_ports port 443 563<br />
acl Safe_ports port 80 # http<br />
acl Safe_ports port 21 # ftp<br />
acl Safe_ports port 443 563 # https, snews<br />
acl Safe_ports port 70 # gopher<br />
acl Safe_ports port 210 # wais<br />
acl Safe_ports port 1025-65535 # unregistered ports<br />
acl Safe_ports port 280 # http-mgmt<br />
acl Safe_ports port 488 # gss-http<br />
acl Safe_ports port 591 # filemaker<br />
acl Safe_ports port 777 # multiling http<br />
acl CONNECT method CONNECT<br />
# Deny requests to unknown ports<br />
http_access deny !Safe_ports<br />
# Deny CONNECT to other than SSL ports<br />
http_access allow red_local<br />
http_access allow villa_dolores !filtro_msn !archivos !filtrar<br />
http_access deny all</p>
<p><strong><em><br />
Otros tipos de configuraciones y directivas:</em></strong></p>
<p>Existe la posibilidad de filtrar por horario de trabajo, por grupos y dominios (Para eso utilizaremos Winbind, si queremos unir el server a un dominio),<br />
o tambien, la posibilidad de conectar a un arbol de directorio LDAP, (OpenLdap, Novell eDirectory, y tambien hasta a Microsoft Active Directory).<br />
Tambien existe la validacion basica, usuario a usuario.</p>
<p><strong><em>Vamos por el log</em></strong><br />
<strong><em></em></strong><br />
Si nosotros quisieramos visualizar la actividad del squid, deberiamos buscar esto en el archivo de log del squid (/var/log/squid/squid.log)</p>
<p>Continuara.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mguazzardo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mguazzardo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mguazzardo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mguazzardo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mguazzardo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mguazzardo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mguazzardo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mguazzardo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mguazzardo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mguazzardo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mguazzardo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mguazzardo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mguazzardo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mguazzardo.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=12&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mguazzardo.wordpress.com/2008/10/28/introduccion-al-squid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a9db058f4f4b1378c6998c804de8b72f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mguazzardo</media:title>
		</media:content>
	</item>
		<item>
		<title>Un articulo de DNS viejo. Introduccion a BIND</title>
		<link>http://mguazzardo.wordpress.com/2008/10/28/un-articulo-de-dns-viejo-introduccion-a-bind/</link>
		<comments>http://mguazzardo.wordpress.com/2008/10/28/un-articulo-de-dns-viejo-introduccion-a-bind/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 03:34:56 +0000</pubDate>
		<dc:creator>mguazzardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Bind]]></category>
		<category><![CDATA[Exploit Bind]]></category>
		<category><![CDATA[HACKING]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://mguazzardo.wordpress.com/?p=7</guid>
		<description><![CDATA[Un  articulo sencillo de como usar bind, y como configurarlo en Linux<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=7&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><span style="font-family:courier new;font-size:130%;">Configurando un Servidor de DNS</span></strong></p>
<p>Gente, aca les dejo un articulo sobre dns que hice en el 2000!, hace ya 8 años!</p>
<p>Configurando un Servidor De DNS</p>
<p>Este articulo tiene como fin configurar un servidor de dns. Muchos se estaran<br />
preguntando que es un servidor de DNS. Primero, comenzaremos por la definicion<br />
del servidor de DNS. Domain Name Server,<br />
o sea Servidor de Nombres de<br />
Dominios.</p>
<p>En un principio, en internet todas las maquinas tenian asignados numeros ip, y<br />
al no haber tantas maquinas, se podrian llegar a ubicar estas facilmente por<br />
un numero. El ejemplo seria, la Universidad<br />
de Carolina tiene el ip<br />
25.234.23.21, y la Universidad de London, el 23.43.23.12. Las comunicaciones<br />
se establecian al principio entre los dos numeros, o sea que 25.234.23.21 se<br />
comunicaba con 23.43.23.12.</p>
<p>A medida que Internet crecia, estos numeros se anotaban en un archivo que se<br />
llamaba hosts.txt, y<br />
este se lo ponia en cada maquina.</p>
<p>Este archivo tenia el formato siguiente:</p>
<p>(ip) Fqdn</p>
<p>192.168.0.1 jak0.qqmelo.com.ar<br />
192.168.0.2 netg4s.qqmelo.com.ar<br />
192.168.0.3 ]-[eavy.qqmelo.com.ar</p>
<p>pero, imaginemosnos que mientras crecia internet, se tenian que copiar estos<br />
nombres a diario, y<br />
que cada Maquina con conexion a internet, se lo tendria<br />
que actualizar, cosa que seria por demas engorrosa.</p>
<p>Actualmente, este archivo se llama host, y se encuentra en los linux, dentro<br />
del directorio /etc.<br />
(Para redes Peque~as, este archivo sirve, cuando las redes crecen este archivo<br />
tiende a ser inutil, por<br />
lo cual se busco otra solucion, que es el sistema<br />
DNS).</p>
<p>Bind 8</p>
<p>La mayor parte de los sistemas DNS, utilizan el BIND ( Berkeley<br />
Internet Name Domain ),<br />
que podemos ver dos versiones tipicas, la version 4 y<br />
la version 8. En nuestro caso analizaremos la<br />
version 8, ya que es la que<br />
actualmente se esta usando. La nueva version es mas sencilla de configurar y<br />
trae ciertas mejoras en el aspecto de seguridad, a la vez que incorpora una<br />
nueva sintaxis.</p>
<p>Comenzando:</p>
<p>Se ha dicho que instalar y configurar un sistema DNS no es sencillo<br />
( Cuanta razon!!! ), pero<br />
el fin de este texto es demistificar eso.</p>
<p>Lo que vamos a hacer, es mostrar dns y como configurarlos, paso a paso,<br />
y tratando de<br />
encontrar los errores mas comunes.</p>
<p>Planteamiento:</p>
<p>Para esto, lo que vamos a hacer es mostrar ejemplos sencillos de<br />
configuracion.<br />
Definiremos zona, dando a entender por zona los dominios que querramos<br />
registrar.</p>
<p>Queremos que nuestro dns sirva para resolver a todas las pc que se encuentran<br />
en la zona lam0s.com.ar<br />
y que si queremos consultar una pc de esta zona, se<br />
devuelva una respuesta que pertenece a ella.</p>
<p>Ejemplo:</p>
<p>Segun el registro de la nic, la ip 203.203.203.203, esta asignada a la<br />
zona lam0s.com.ar.</p>
<p>Ahora, nosotros nos ocuparemos de setear el archivo para que se resuelva<br />
correctamente la ip.<br />
Veamos paso a paso como realizar esto.</p>
<p>1- Necesitaremos crear un archivo de configuracion, de zona, que desde el bind<br />
8, este se encuentra<br />
bajo el directorio /etc.</p>
<p>Este archivo es llamado named.conf, y tiene la siguiente estructura.<br />
zone &#8220;lam0s.com.ar&#8221; {<br />
type master;<br />
file &#8220;db.lam0s.com.ar&#8221;<br />
}</p>
<p>analizando este archivo veremos lo siguiente:</p>
<p>Primero, que se define la zona lam0s.com.ar, y alli se dice que<br />
va a ser una zona<br />
master ( o sea primaria ) y se indica que el file ( archivo<br />
de configuracion se encuentra en db.lam0s.com.ar ), ustedes se estaran<br />
preguntando, si, pero donde lo encuentro??, tranquilos amigos<br />
que<br />
anteriormente hay unas lineas en este mismo archivo que indican donde estaran<br />
alojadas las zonas.</p>
<p>options {</p>
<p>directory &#8220;/var/named&#8221;<br />
}</p>
<p>Con esto, le indico que todas las zonas estaran alojadas en el<br />
directorio var/named</p>
<p>Siguiendo, veremos en un caso practico, como configurar las zonas<br />
correctamente.<br />
Hemos dicho, que el archivo db.lam0s.com.ar, resuelve los hosts de esta<br />
zona, vamos a ver<br />
este archivito, y luego vamos a ir entendiendo como crear<br />
correctamente los otros archivos.</p>
<p>Este es el archivo db.lam0s.com.ar</p>
<p>lam0s.com.ar. IN SOA QQm310.lam0s.com.ar. lam0s.com.ar. (</p>
<p>2000121997; numero de serie<br />
28800 ; tiempo de refresco en minutos<br />
14000 ; caducidad de una peticion<br />
86400; minimo de tiempo vivo<br />
)</p>
<p>IN NS QQm310.lam0s.com.ar</p>
<p>QQm310.lam0s.com.ar. IN A 203.203.203.203<br />
netg4s.lam0s.com.ar. IN A 203.203.203.204<br />
velez.lam0s.com.ar. IN A 203.203.203.205</p>
<p>Analicemos un Poquito esto!</p>
<p>de entrada , en la primera linea, vemos lo siguiente lam0s.com.ar. , que<br />
es esto, Pues es nuestra<br />
Zona!!!, luego vemos IN, este registro significa<br />
Internet, significa que sera dada de alta en Internet,<br />
Luego seguimos viendo algo asi como SOA ( start of autority, o sea, comienzo<br />
de autoridad, y aqui<br />
nos daremos cuenta que la maquina donde esta alojando el<br />
servidor DNS es QQm310.com.ar )</p>
<p>Luego, las caracteristicas , tiempo de refresco, tiempo de peticion , etc, y<br />
luego comienza lo que<br />
a todos nos interesa, y donde nos detendremos!!!</p>
<p>Vemos nuevamente IN NS<br />
NS es el registro encargado de indicar cual va a ser el servidor de<br />
nombres , el cual debe coincidir con el de comienzo de autoridad, o sea<br />
QQm310.lam0s.com.ar.</p>
<p>Luego, vemos la siguiente linea.</p>
<p>QQm310.lam0s.com.ar. IN A 203.203.203.203</p>
<p>Y esto que significa??</p>
<p>Tranquilos!!!!!!!!!!!</p>
<p>veamos, esto es simple!!!</p>
<p>QQm310.lam0s.com.ar. es el nombre de la pc, IN es el registro de internet y A<br />
( de Address, significa<br />
que le va a transformar la direccion<br />
QQm310.lam0s.com.ar. a 203.203.203.203). simple no?</p>
<p>Bueno, asi seguiremos con los otros host de nuestra red!</p>
<p>Nombres Canonicos y alias</p>
<p>Pero, la pagina web lam0s.com.ar esta en el mismo ip que QQm310.lam0s.com.ar,<br />
como lo defino?<br />
repito la definicion???? NOOOOOOOO, pues esto podria lograr que el sistema<br />
termie funcionando mal,<br />
entonces una solucion es los nombres canonicos ( alias<br />
), veamos que es esto</p>
<p>Introducimos la linea</p>
<p>www.lam0s.com.ar. IN CNAME QQm310.lam0s.com.ar.</p>
<p>y aqui le indico que las peticiones a la pagina www.lam0s.com.ar. apunten a<br />
QQm310.lam0s.com.ar.<br />
que en realidad apunta a 203.203.203.203, que es el servidor de DNS.</p>
<p>o sea, que nuestra zona quedaria de la siguiente manera!!</p>
<p>lam0s.com.ar. IN SOA QQm310.lam0s.com.ar. lam0s.com.ar. (</p>
<p>2000121997; numero de serie<br />
28800 ; tiempo de refresco en minutos<br />
14000 ; caducidad de una peticion<br />
86400; minimo de tiempo vivo<br />
)</p>
<p>IN NS QQm310.lam0s.com.ar</p>
<p>QQm310.lam0s.com.ar. IN A 203.203.203.203<br />
netg4s.lam0s.com.ar. IN A 203.203.203.204<br />
velez.lam0s.com.ar. IN A 203.203.203.205<br />
QQm310.lam0s.com.ar. IN CNAME 203.203.203.203</p>
<p>Zonas Reversas!!!!</p>
<p>Listo, ya tenemos nuestro servidor de DNS andando correctamente para<br />
las zonas directas<br />
o &#8220;derechas en la jerga!&#8221;, pero aun no resolvimos el tema<br />
de las peticiones inversas, por ejemplo<br />
yo quisiera que al consultar<br />
203.203.203.203, me dijeran QQm310.lam0s.com.ar</p>
<p>Para lograr esto, deberia configurar la zona inversa!</p>
<p>Primero, haremos la entrada correspondiente en el /etc/named.conf</p>
<p>zone &#8220;203.203.203.in-addr.arpa&#8221; {<br />
type master;<br />
file &#8220;db.203.203.203.in-addr.arpa&#8221;<br />
}</p>
<p>Pero ustedes se preguntaran, ehh? y esto??, que es ese<br />
203.203.203.in-addr.arpa?</p>
<p>La respuesta es que las zonas inversas se escriben asi, y que esto<br />
resolvera las<br />
peticiones correspondientes a la 203.203.203.x, donde setearemos<br />
nosotros esos x.</p>
<p>Como supondran, tambien tendremos que configurar el archivo<br />
correspondiente, de la<br />
zona reversa, pero la repuesta es, ovbio, que<br />
inteligente que son mis lectores y/o alumnitos!<br />
(:-)) )</p>
<p>Configuraremos el archivo db.203.203.203.in-addr.arpa</p>
<p>203.203.203.in-addr.arpa IN SOA QQm310.lam0s.com.ar. lam0s.com.ar. (</p>
<p>2000121997; numero de serie<br />
28800 ; tiempo de refresco en minutos<br />
14000 ; caducidad de una peticion<br />
86400; minimo de tiempo vivo<br />
)</p>
<p>IN NS QQm310.lam0s.com.ar</p>
<p>203 IN PTR QQm310.lam0s.com.ar.<br />
204 IN PTR netg4s.lam0s.com.ar.<br />
205 IN PTR velez.lam0s.com.ar.</p>
<p>y vemos que sencillo que es !!!</p>
<p>Lo primero es declarar la zona a configurar, y luego, lo otro como lo venimos<br />
realizando de costumbre<br />
solo que tenemos que invertir los datos.<br />
Vemos que tenemos el registro PTR este significa puntero, y dice que la<br />
direccion 203<br />
de la zona 203.203.203. apunta a QQm310.lam0s.com.ar.</p>
<p>OJO!!!!!!!!!!!!!!!</p>
<p>mucha gente se equivoca aqui, y pone 203.203.203.203, y esto buscara el<br />
ip 203.203.203.203.203.203.230, cosa que no existe, por que recordemos que<br />
como he dicho<br />
anteriormente, la zona es 203.203.203.in-addr.arpa, y aca en<br />
in-addr.arpa, se reemplazaran las<br />
direcciones que seteemos, por ejemplo 203,<br />
204, 205, que seran reemplazadas por los x.</p>
<p>Reiniciando el Demonio</p>
<p>Para que los cambios tengan efecto, tendremos que reiniciar el demonio,<br />
el cual esta<br />
alojado en /etc/rc.d/init.d/</p>
<p>la orden seria la siguiente:</p>
<p>#/etc/rc.d/init.d/named stop<br />
#/etc/rc.d/init.d/named start</p>
<p>Configurando el cliente DNS</p>
<p>Para realizar estas pruebas, lo primero que debemos es indicarle a<br />
nuestra maquina<br />
donde encontrara el servidor DNS.<br />
El archivo de configuracion es el /etc/resolv.conf, y veremos como<br />
setearlo correctamente.</p>
<p>veamos: lo configuraremos para que sea nuestro servidor DNS 203.203.203.203.</p>
<p>entonces, ponemos lo siguiente</p>
<p>nameserver 203.203.203.203</p>
<p>Probando si las cosas andan bien:</p>
<p>Con el comando nslookup, podremos ver si nuestro servidor funciona joya</p>
<p>#nslookup www.lam0s.com.ar</p>
<p>Server: QQmelo.lam0s.com.ar<br />
Address: 203.203.203.203</p>
<p>Name: www.lam0s.com.ar<br />
Address:203.203.203.203</p>
<p>y esto significa que nuestro server anduvo de primera!!!!!!!!!!!!!!!!!</p>
<p>si tuvieramos un error, tendriamos que ver los archivos de configuracion, para<br />
que no haya errores,<br />
cuando la experiencia me dice que la mayoria de los<br />
errores que se presentan son de tipeado,<br />
y bueno, somos humanos !!!</p>
<p>Resumiendo!!</p>
<p>Mostrare como Quedarian los archivos que fui nombrando</p>
<p>el primer archivo, el /etc/named.conf</p>
<p>options {</p>
<p>directory &#8220;/var/named&#8221;<br />
}</p>
<p>zone &#8220;.&#8221; {</p>
<p>type hint;<br />
file &#8220;named.ca&#8221;;<br />
};</p>
<p>zone &#8220;0.0.127.in-addr.arpa&#8221; {</p>
<p>type master;<br />
file &#8220;named.local&#8221;</p>
<p>}</p>
<p>zone &#8220;lam0s.com.ar&#8221; {<br />
type master;<br />
file &#8220;db.lam0s.com.ar&#8221;<br />
}</p>
<p>zone &#8220;203.203.203.in-addr.arpa&#8221; {<br />
type master;<br />
file &#8220;db.203.203.203.in-addr.arpa&#8221;<br />
}</p>
<p>Bueno, ustedes diran, hay unas zonas que anteriormente no he nombrado, es<br />
cierto, son las zonas<br />
raices, donde tiene la mayoria de los dns de los<br />
servidores raices por paises, esa es la zona &#8220;.&#8221;<br />
y luego la zona de loopback.</p>
<p>Luego, veremos los archivos que pusimos en /var/named, ademas de lo que estan<br />
alli, named.local y<br />
named.root ( los que hablamos recien )</p>
<p>lam0s.com.ar. IN SOA QQm310.lam0s.com.ar. lam0s.com.ar. (</p>
<p>2000121997; numero de serie<br />
28800 ; tiempo de refresco en minutos<br />
14000 ; caducidad de una peticion<br />
86400; minimo de tiempo vivo<br />
)</p>
<p>IN NS QQm310.lam0s.com.ar</p>
<p>QQm310.lam0s.com.ar. IN A 203.203.203.203<br />
netg4s.lam0s.com.ar. IN A 203.203.203.204<br />
velez.lam0s.com.ar. IN</p>
<p>y ahora la reversa</p>
<p>203.203.203.in-addr.arpa IN SOA QQm310.lam0s.com.ar. lam0s.com.ar. (</p>
<p>2000121997; numero de serie<br />
28800 ; tiempo de refresco en minutos<br />
14000 ; caducidad de una peticion<br />
86400; minimo de tiempo vivo<br />
)</p>
<p>IN NS QQm310.lam0s.com.ar</p>
<p>203 IN PTR QQm310.lam0s.com.ar.<br />
204 IN PTR netg4s.lam0s.com.ar.<br />
205 IN PTR velez.lam0s.com.ar.</p>
<p>luego, no se olviden de Poner el cliente DNS</p>
<p>/etc/resolv.conf</p>
<p>nameserver 203.203.203.203</p>
<p>Configurando Virtual Domains</p>
<p>Pero Bueno, ustedes estaran preguntandose, eh, yo tengo varias zonas, y tan<br />
solo un ip, este Qqm310 nos esta chamuyando <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )))</p>
<p>Entonces, nada mas simple que armar virtual domains. Como lo hacemos??</p>
<p>Lo primero es declarar la zona virtual en el /etc/named.conf.</p>
<p>Una vez declarado aqu¡, lo que sigue es mas bien simple, definir la zona en<br />
/var/named&#8230;. mmmm pasaremos a la practica de lo anteriormente dicho.</p>
<p>Supongamos que queremos una zona virtual llamada velezito.com.ar</p>
<p>entonces, lo que debemos hacer, es crear esta zona en el /etc/ named.conf</p>
<p>Hagamoslo!!!</p>
<p>zone &#8220;velezito.com.ar&#8221; {<br />
type master;<br />
file &#8220;db.velezito.com.ar&#8221;<br />
}</p>
<p>Con esto, lo hemos declarado en el /etc/named.conf, y esto lo que hara es<br />
buscarlo en<br />
el archivo db.velezito.com.ar, del /var/named.</p>
<p>Definiendo la zona:</p>
<p>velezito.com.ar. IN SOA QQm310.lam0s.com.ar. lam0s.com.ar. (</p>
<p>2000121997; numero de serie<br />
28800 ; tiempo de refresco en minutos<br />
14000 ; caducidad de una peticion<br />
86400; minimo de tiempo vivo<br />
)</p>
<p>IN NS QQm310.lam0s.com.ar<br />
www.velezito.com.ar. IN A 203.203.203.203</p>
<p>Y como vemos, el domain velezito.com.ar apunta a nuestro ip publico,<br />
viendo que no tenemos nada mas que hacer, podremos hacer los dns que<br />
querramos.</p>
<p>Apendice:</p>
<p>Como el txt este lo hice a las chapas, me saltee un par de vocablos<br />
tecnicos.</p>
<p>Tipos de regustros:</p>
<p>SOA: Comienzo de Autoridad</p>
<p>NS: Servidor de Nombres</p>
<p>A: Registro de direccion.</p>
<p>PTR: Registro Puntero.</p>
<p>MX: Intercambiador de Correo.</p>
<p>CNAME: Nombre canonico o Aceptado.</p>
<p>RP y TXT: Entradas de documentacion.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mguazzardo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mguazzardo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mguazzardo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mguazzardo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mguazzardo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mguazzardo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mguazzardo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mguazzardo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mguazzardo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mguazzardo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mguazzardo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mguazzardo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mguazzardo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mguazzardo.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=7&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mguazzardo.wordpress.com/2008/10/28/un-articulo-de-dns-viejo-introduccion-a-bind/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a9db058f4f4b1378c6998c804de8b72f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mguazzardo</media:title>
		</media:content>
	</item>
		<item>
		<title>POSTFIX LDAP , DEMISTIFICANDO POSTFIX</title>
		<link>http://mguazzardo.wordpress.com/2008/10/28/postfix-ldap-demistificando-postfix/</link>
		<comments>http://mguazzardo.wordpress.com/2008/10/28/postfix-ldap-demistificando-postfix/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 03:32:16 +0000</pubDate>
		<dc:creator>mguazzardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[antispam]]></category>
		<category><![CDATA[Correo]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[HACKING]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[postgrey]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[webmail]]></category>

		<guid isPermaLink="false">http://mguazzardo.wordpress.com/?p=3</guid>
		<description><![CDATA[Demistificando Postfix En este tutorial, se tratara de instalar postfix con courier imap, y un repositorio ldap, para las consultas. Se generara un repositorio LDAP, con contenedores para usuarios, y agenda de direcciones, para ser usado con el squirrelmail. Puntualmente, yo usare una version de squirrelmail modificada, llamada squirrelmail outlook, que le da una vision [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=3&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="post-body entry-content"><span style="font-weight:bold;">Demistificando Postfix</span></div>
<p>En este tutorial, se tratara de instalar postfix con courier imap, y un repositorio ldap, para las consultas. Se generara un repositorio LDAP, con contenedores para usuarios, y agenda de direcciones, para ser usado con el squirrelmail. Puntualmente, yo usare una version de squirrelmail modificada, llamada squirrelmail outlook, que le da una vision muy parecida a la del Outlook Web Access (OWA).</p>
<p>Lo primero es lo primero, lo primero que haremos, es instalar el postfix.</p>
<p>root@marcelo:/home/marcelo# apt-get install postfix</p>
<p>smtpd_banner = Mailserver de Ejemplo</p>
<p>biff = no</p>
<p>home_mailbox=Maildir/</p>
<p>#[1] esto no va, pero es mostrar que escogemos maildir</p>
<p>append_dot_mydomain = no</p>
<p>myhostname = webmail.ejemplo.com.ar</p>
<p>alias_maps = hash:/etc/aliases</p>
<p>alias_database = hash:/etc/aliases</p>
<p>myorigin = /etc/mailname</p>
<p>mydestination = webmail.ejemplo.com.ar,ejemplo.com.ar</p>
<p>relayhost =</p>
<p>mynetworks = 127.0.0.0/8, 192.168.1.0/24</p>
<p>mailbox_command =</p>
<p>mailbox_size_limit = 0</p>
<p>recipient_delimiter = +</p>
<p>inet_interfaces = all</p>
<p>Luego, lo configuraremos, para que el tipo de buzon que reciba, sea Maildir, para que nuestro hostname, sea ejemplo.com, y para que las redes que permita relay, sean las 192.168.0.1/24, y la red de la placa loca, 127.0.0.1/8</p>
<p>Le pondremos el banner , de Mailserver de Ejemplo, esto es lo que mostrara cuando se conecte.</p>
<p>Cuando decimos mailbox_size_limit, decimos que no tenemos tamanio maximo.</p>
<p>Ahora, necesitaremos configurar el servidor IMAP, y el servidor pop. Para las primeras practicas, al servidor IMAP, y al pop, lo haremos validar por PAM. Luego, lo haremos validar por OpenLDAP.</p>
<p>root@marcelo:/home/marcelo# apt-get install courier-imap</p>
<p>Leyendo lista de paquetes&#8230; Hecho</p>
<p>Creando árbol de dependencias</p>
<p>Leyendo información de estado&#8230; Hecho</p>
<p>Se instalarán los siguientes paquetes extras:</p>
<p>courier-authdaemon courier-authlib courier-authlib-userdb courier-base</p>
<p>libfam0 libltdl3</p>
<p>Paquetes sugeridos:</p>
<p>courier-doc courier-imap-ssl</p>
<p>Paquetes recomendados</p>
<p>fam</p>
<p>Se instalarán los siguientes paquetes NUEVOS:</p>
<p>courier-authdaemon courier-authlib courier-authlib-userdb courier-base</p>
<p>courier-imap libfam0 libltdl3</p>
<p>0 actualizados, 7 se instalarán, 0 para eliminar y 186 no actualizados.</p>
<p>A este punto, vale aclarar, que courier solo acepta leer mails en formato Maildir. Por eso, vale destacar en el archivo main.cf , de la configuracion de postfix , la importancia de [1], donde definimos que el formato de buzon, sea Maildir.</p>
<p>en alguna parte , nos va a preguntar, si queremos crear la consola de administracion web, a lo que contestamos que no.</p>
<p>Luego, realizamos lo mismo con el courier-pop.</p>
<p>Creando árbol de dependencias</p>
<p>Leyendo información de estado&#8230; Hecho</p>
<p>Paquetes sugeridos:</p>
<p>courier-doc courier-pop-ssl</p>
<p>Se instalarán los siguientes paquetes NUEVOS:</p>
<p>courier-pop</p>
<p>Ya digamos, que tenemos basicamente, todo lo que se necesitaria para enviar y recibir correos, servidor pop, imap, y servidor de correo smtp. Ahora , vamos por mas, lo vamos a configurar, con antivirus, antispam, OpenLDAP, y libretas de direcciones compartidas con el squirrelmail!.</p>
<p>Vamos con lo complicado primero.</p>
<p>Sin exponer demasiado, que es LDAP, y su implementacion de OpenLDAP, voy a decir que es un servicio que sirve para la validacion centralizada de diferentes servicios. Asi como para validar los usuarios del sistema, existe PAM, que este utiliza los usuarios del /etc/passwd, para validar el login, y demas, tambien podriamos validar los servicios via LDAP. Los invito a que revisen su directorio /etc/pam.d, y veran alli los diferentes servicios que se estan validando via pam (Que es por defecto como se validan). Podria usarse tambien para validar, MySQL, pero este tutorial escapa la validacion por mysql, ya que usaremos la integracion con openldap, para las libretas de direcciones compartidas.</p>
<p>root@marcelo:/mnt/lost+found# apt-get install slapd</p>
<p>Leyendo lista de paquetes&#8230; Hecho</p>
<p>Creando árbol de dependencias</p>
<p>Leyendo información de estado&#8230; Hecho</p>
<p>Se instalarán los siguientes paquetes extras:</p>
<p>libdb4.2 libiodbc2 libldap-2.2-7</p>
<p>Paquetes sugeridos:</p>
<p>ldap-utils</p>
<p>Paquetes recomendados</p>
<p>db4.2-util</p>
<p>Se instalarán los siguientes paquetes NUEVOS:</p>
<p>libdb4.2 libiodbc2 libldap-2.2-7 slapd</p>
<p>En la instalacion, nos preguntara passwords de admin, y eso, a este punto lo saltearemos, pues tenemos una configuracion especial para nuestro servidor.</p>
<p>como veremos, se instalaran varios programas. SLAPD es el servidor que corre LDAP, y despues, son librerias que se usan. se necesitaran, y vamos a instalar, las utilidades clientes de ldap (ldap utils), y las utilidades de berkley db, (db4.2-util).</p>
<p>root@marcelo:/mnt/lost+found# apt-get install ldap-utils db4.2-util</p>
<p>Leyendo lista de paquetes&#8230; Hecho</p>
<p>Creando árbol de dependencias</p>
<p>Leyendo información de estado&#8230; Hecho</p>
<p>Se instalarán los siguientes paquetes NUEVOS:</p>
<p>db4.2-util ldap-utils</p>
<p>Para borrar los datos de LDAP que ha generado el debconf, hacemos lo siguiente</p>
<p>rm -fr /var/lib/ldap/*</p>
<p>copiamos nuestra configuracion personalizada, donde destacaremos varios puntos.</p>
<p># Allow LDAPv2 binds</p>
<p>allow bind_v2</p>
<p># This is the main slapd configuration file. See slapd.conf(5) for more</p>
<p># info on the configuration options.</p>
<p>#######################################################################</p>
<p># Global Directives:</p>
<p># Features to permit</p>
<p>#allow bind_v2</p>
<p># Schema and objectClass definitions</p>
<p>include /etc/ldap/schema/core.schema</p>
<p>include /etc/ldap/schema/cosine.schema</p>
<p>include /etc/ldap/schema/nis.schema</p>
<p>include /etc/ldap/schema/inetorgperson.schema</p>
<p># Schema check allows for forcing entries to</p>
<p># match schemas for their objectClasses&#8217;s</p>
<p>schemacheck on</p>
<p># Where the pid file is put. The init.d script</p>
<p># will not stop the server if you change this.</p>
<p>pidfile /var/run/slapd/slapd.pid</p>
<p># List of arguments that were passed to the server</p>
<p>argsfile /var/run/slapd.args</p>
<p># Read slapd.conf(5) for possible values</p>
<p>loglevel 0</p>
<p># Where the dynamically loaded modules are stored</p>
<p>modulepath /usr/lib/ldap</p>
<p>moduleload back_bdb</p>
<p>#######################################################################</p>
<p># SSL:</p>
<p># Uncomment the following lines to enable SSL and use the default</p>
<p># snakeoil certificates.</p>
<p>#TLSCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem</p>
<p>#TLSCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key</p>
<p>#######################################################################</p>
<p># Specific Backend Directives for bdb:</p>
<p># Backend specific directives apply to this backend until another</p>
<p># &#8216;backend&#8217; directive occurs</p>
<p>backend bdb</p>
<p>checkpoint 512 30</p>
<p>#######################################################################</p>
<p># Specific Backend Directives for &#8216;other&#8217;:</p>
<p># Backend specific directives apply to this backend until another</p>
<p># &#8216;backend&#8217; directive occurs</p>
<p>#backend</p>
<p>#######################################################################</p>
<p># Specific Directives for database #1, of type bdb:</p>
<p># Database specific directives apply to this databasse until another</p>
<p># &#8216;database&#8217; directive occurs</p>
<p>database bdb</p>
<p># The base of your directory in database #1</p>
<p>suffix &#8220;dc=ejemplo,dc=com,dc=ar&#8221;</p>
<p>rootdn &#8220;cn=admin,dc=ejemplo,dc=com,dc=ar&#8221;</p>
<p>rootpw nada</p>
<p># Where the database file are physically stored for database #1</p>
<p>directory &#8220;/var/lib/ldap&#8221;</p>
<p># Indexing options for database #1</p>
<p>index objectClass eq</p>
<p># Save the time that the entry gets modified, for database #1</p>
<p>lastmod on</p>
<p># Where to store the replica logs for database #1</p>
<p># replogfile /var/lib/ldap/replog</p>
<p># The userPassword by default can be changed</p>
<p># by the entry owning it if they are authenticated.</p>
<p># Others should not be able to see it, except the</p>
<p># admin entry below</p>
<p># These access lines apply to database #1 only</p>
<p>access to attrs=userPassword</p>
<p>by dn=&#8221;cn=admin,dc=ejemplo,dc=com,dc=ar&#8221; write</p>
<p>by anonymous auth</p>
<p>by self write</p>
<p>by * none</p>
<p># Ensure read access to the base for things like</p>
<p># supportedSASLMechanisms. Without this you may</p>
<p># have problems with SASL not knowing what</p>
<p># mechanisms are available and the like.</p>
<p># Note that this is covered by the &#8216;access to *&#8217;</p>
<p># ACL below too but if you change that as people</p>
<p># are wont to do you&#8217;ll still need this if you</p>
<p># want SASL (and possible other things) to work</p>
<p># happily.</p>
<p>access to dn.base=&#8221;" by * read</p>
<p># The admin dn has full write access, everyone else</p>
<p># can read everything.</p>
<p>access to *</p>
<p>by dn=&#8221;cn=admin,dc=ejemplo,dc=com,dc=ar&#8221; write</p>
<p>by * read</p>
<p>Destaquemos las siguientes lineas.</p>
<p>suffix &#8220;dc=ejemplo,dc=com,dc=ar&#8221;</p>
<p>rootdn &#8220;cn=admin,dc=ejemplo,dc=com,dc=ar&#8221;</p>
<p>rootpw nada</p>
<p>en estas lineas, lo que estamos declarando es.</p>
<p>suffix, seria el dominio del servidor de ldap. Si nuestro dominio es misol.org.ar, el suffix seria</p>
<p>dc=misol,dc=org,dc=ar</p>
<p>rootdn, es el administrador de el servidor ldap. en este caso, seria el usuario admin, declarado en</p>
<p>cn=admin,dc=ejemplo,dc=com,dc=ar</p>
<p>rootpw, es el password. Por comodidad a este ejemplo, lo deje en texto claro. el password es nada.</p>
<p>y luego, agregamos un archivo donde tenemos las definiciones basicas de los atributos que necesitamos para LDAP.</p>
<p>Lo agregaremos en formato off-line, con el servidor sin validar, con el comando slapadd</p>
<p>El archivo a agregar, se llama data-agenda.ldif . NOTA: la extension ldif, es la extension por defecto de los archivos que tienen datos a integrar en el servidor LDAP.</p>
<p>dn: dc=ejemplo,dc=com,dc=ar</p>
<p>objectClass: top</p>
<p>objectClass: dcObject</p>
<p>objectClass: organization</p>
<p>o: ejemplo</p>
<p>dc: ejemplo</p>
<p>structuralObjectClass: organization</p>
<p>entryUUID: 8b568d00-a010-102b-8267-c41632270fd5</p>
<p>creatorsName: cn=anonymous</p>
<p>modifiersName: cn=anonymous</p>
<p>createTimestamp: 20070526200759Z</p>
<p>modifyTimestamp: 20070526200759Z</p>
<p>entryCSN: 20070526200759Z#000001#00#000000</p>
<p>dn: cn=admin,dc=ejemplo,dc=com,dc=ar</p>
<p>objectClass: simpleSecurityObject</p>
<p>objectClass: organizationalRole</p>
<p>cn: admin</p>
<p>description: LDAP administrator</p>
<p>userPassword:: e2NyeXB0fXBJYU1jbnBHUU8xbEE=</p>
<p>structuralObjectClass: organizationalRole</p>
<p>entryUUID: 8b628eac-a010-102b-8268-c41632270fd5</p>
<p>creatorsName: cn=anonymous</p>
<p>modifiersName: cn=anonymous</p>
<p>createTimestamp: 20070526200759Z</p>
<p>modifyTimestamp: 20070526200759Z</p>
<p>entryCSN: 20070526200759Z#000002#00#000000</p>
<p>dn: ou=People,dc=ejemplo,dc=com,dc=ar</p>
<p>ou: People</p>
<p>objectClass: organizationalUnit</p>
<p>objectClass: top</p>
<p>structuralObjectClass: organizationalUnit</p>
<p>dn: ou=Libreta,dc=ejemplo,dc=com,dc=ar</p>
<p>ou: Libreta</p>
<p>objectClass: organizationalUnit</p>
<p>objectClass: top</p>
<p>structuralObjectClass: organizationalUnit</p>
<p>Sin extenderme en explicar LDAP, pues no es la intencion de este tutorial, hemos creado dos Unidades Organizacionales que serian los contenedores LDAP. Una unidad People, donde contendra todos los usuarios de el servidor, y otra agenda, que es fundamentalmente para que pueda el squirrelmail consultar los usuarios de el sistema.</p>
<p>ahora, viene el comando de insercion, y luego, el de comprobacion que todo ha salido como queriamos!.</p>
<p>root@marcelo:~#slapadd -l data-agenda.ldif</p>
<p>root@marcelo:~#slapcat</p>
<p>dn: dc=ejemplo,dc=com,dc=ar</p>
<p>objectClass: top</p>
<p>objectClass: dcObject</p>
<p>objectClass: organization</p>
<p>o: ejemplo</p>
<p>dc: ejemplo</p>
<p>structuralObjectClass: organization</p>
<p>entryUUID: 8b568d00-a010-102b-8267-c41632270fd5</p>
<p>creatorsName: cn=anonymous</p>
<p>modifiersName: cn=anonymous</p>
<p>createTimestamp: 20070526200759Z</p>
<p>modifyTimestamp: 20070526200759Z</p>
<p>entryCSN: 20070526200759Z#000001#00#000000</p>
<p>dn: cn=admin,dc=ejemplo,dc=com,dc=ar</p>
<p>objectClass: simpleSecurityObject</p>
<p>objectClass: organizationalRole</p>
<p>cn: admin</p>
<p>description: LDAP administrator</p>
<p>userPassword:: e2NyeXB0fXBJYU1jbnBHUU8xbEE=</p>
<p>structuralObjectClass: organizationalRole</p>
<p>entryUUID: 8b628eac-a010-102b-8268-c41632270fd5</p>
<p>creatorsName: cn=anonymous</p>
<p>modifiersName: cn=anonymous</p>
<p>createTimestamp: 20070526200759Z</p>
<p>modifyTimestamp: 20070526200759Z</p>
<p>entryCSN: 20070526200759Z#000002#00#000000</p>
<p>dn: ou=People,dc=ejemplo,dc=com,dc=ar</p>
<p>ou: People</p>
<p>objectClass: organizationalUnit</p>
<p>objectClass: top</p>
<p>structuralObjectClass: organizationalUnit</p>
<p>entryUUID: 6651dcde-b5a1-102b-97f4-93491f4cf66c</p>
<p>creatorsName: cn=admin,dc=ejemplo,dc=com,dc=ar</p>
<p>modifiersName: cn=admin,dc=ejemplo,dc=com,dc=ar</p>
<p>createTimestamp: 20070623064748Z</p>
<p>modifyTimestamp: 20070623064748Z</p>
<p>entryCSN: 20070623064748Z#000003#00#000000</p>
<p>dn: ou=Libreta,dc=ejemplo,dc=com,dc=ar</p>
<p>ou: Libreta</p>
<p>objectClass: organizationalUnit</p>
<p>objectClass: top</p>
<p>structuralObjectClass: organizationalUnit</p>
<p>entryUUID: 6653b9be-b5a1-102b-97f5-93491f4cf66c</p>
<p>creatorsName: cn=admin,dc=ejemplo,dc=com,dc=ar</p>
<p>modifiersName: cn=admin,dc=ejemplo,dc=com,dc=ar</p>
<p>createTimestamp: 20070623064748Z</p>
<p>modifyTimestamp: 20070623064748Z</p>
<p>Luego de esto, y fundamental, debemos reiniciar el servidor slapd</p>
<p>/etc/init.d/slapd restart</p>
<p>Si hasta aca anduvimos igual, deberia funcionar todo bien, la insercion de los esquemas estaria bien. Ahora vamos a agregar un usuario, y para eso, he desarrollado un script, que agregara el usuario a nuestra base de ldap, en las estructuras contenedoras correspondientes, de people, y de agenda. Veamos como es el script, y luego, como ejecutarlo.</p>
<p>#!/bin/bash</p>
<p>#Script de generacion de Usuarios, basado en el de OpenXchange</p>
<p>#&#8212;- Configuraciones de Sistema</p>
<p>LDAPSEARCH_BIN=/usr/bin/ldapsearch</p>
<p>LDAPHOST=&#8221;127.0.0.1&#8243;</p>
<p>BINDDN=&#8221;cn=admin,dc=ejemplo,dc=com,dc=ar&#8221;</p>
<p>BINDPW=nada</p>
<p>USER_BASEDN=&#8221;ou=People,dc=ejemplo,dc=com,dc=ar&#8221;</p>
<p>LIBRETA_BASEDN=&#8221;ou=Libreta,dc=ejemplo,dc=com,dc=ar&#8221;</p>
<p>GREP_BIN=/bin/grep</p>
<p>SED_BIN=/bin/sed</p>
<p>SORT_BIN=/usr/bin/sort</p>
<p>HEAD_BIN=/usr/bin/head</p>
<p>AWK_BIN=/usr/bin/awk</p>
<p>TMPDIF=/tmp/usuario.ldif</p>
<p>MIN_UID=2001</p>
<p>EXPR_BIN=/usr/bin/expr</p>
<p>#&#8212;- Fin</p>
<p>CURRENT_UID=`$LDAPSEARCH_BIN -h $LDAPHOST -D $BINDDN -w $BINDPW -x -b $USER_BASEDN &#8220;(uid=*)&#8221; uidNumber | $GREP_BIN uidNumber | $SED_BIN -e &#8216;s/^uidNumber://&#8217; | $SORT_BIN -nr | $HEAD_BIN -n 1 | $AWK_BIN {&#8216;print $1&#8242;}`</p>
<p>if [ "$CURRENT_UID" = "#" ]</p>
<p>then</p>
<p>CURRENT_UID=$MIN_UID</p>
<p>else</p>
<p>CURRENT_UID=`$EXPR_BIN $CURRENT_UID + 1`</p>
<p>fi</p>
<p>#&#8212; Parametros de entrada</p>
<p>#$1 uid</p>
<p>#$2 Nombre</p>
<p>#$3 Apellido</p>
<p>#$4 Password</p>
<p>if [ "$1" = "" ]</p>
<p>then</p>
<p>echo &#8220;Debe especificar un UID, ejemplo mguazzardo&#8221;</p>
<p>error=&#8221;y&#8221;</p>
<p>fi</p>
<p>if [ "$2" = "" ]</p>
<p>then</p>
<p>echo &#8220;Debe especificar un Nombre, ejemplo Marcelo&#8221;</p>
<p>error=&#8221;y&#8221;</p>
<p>fi</p>
<p>if [ "$3" = "" ]</p>
<p>then</p>
<p>echo &#8220;Debe especificar un Apellido, ejemplo Guazzardo&#8221;</p>
<p>error=&#8221;y&#8221;</p>
<p>fi</p>
<p>if [ "$4" = "" ]</p>
<p>then</p>
<p>echo &#8220;Debe especificar un Password&#8221;</p>
<p>error=&#8221;y&#8221;</p>
<p>fi</p>
<p>if [ "$error" = "y" ]</p>
<p>then</p>
<p>echo &#8220;Por favor, corrija los errores&#8221;</p>
<p>exit 0</p>
<p>fi</p>
<p>#Password</p>
<p>CRYPTPASS=`slappasswd -h {crypt} -s $4`</p>
<p>PROXIMO=`expr $CURRENT_UID + 1`</p>
<p>#empezamos a escribir el file</p>
<p>echo &#8220;dn: uid=$1,$USER_BASEDN&#8221; &gt; $TMPDIF</p>
<p>echo &#8220;uid: $1&#8243; &gt;&gt; $TMPDIF</p>
<p>echo &#8220;cn: $2 $3&#8243; &gt;&gt; $TMPDIF</p>
<p>echo &#8220;sn: $3&#8243;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;objectClass: person&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;objectClass: organizationalPerson&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;objectClass: inetOrgPerson&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;objectClass: posixAccount&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;objectClass: top&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;objectClass: shadowAccount&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;shadowLastChange: 11627&#8243;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;shadowMax: 99999&#8243;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;shadowWarning: 7&#8243;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;loginShell: /bin/false&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;uidNumber: $PROXIMO&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;gidNumber: 2001&#8243;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;homeDirectory: /home/$1&#8243;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;userPassword: $CRYPTPASS&#8221;&gt;&gt;$TMPDIF</p>
<p>ldapadd -x -v -D &#8220;cn=admin,dc=ejemplo,dc=com,dc=ar&#8221; -w $BINDPW -f $TMPDIF</p>
<p>rm -fr $TMPDIF</p>
<p>echo &#8220;dn: cn=$2 $3,$LIBRETA_BASEDN&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;givenName: $2&#8243;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;sn: $3&#8243;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;cn: $2 $3&#8243;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;mail: $1@ejemplo.com.ar&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;objectClass: inetOrgPerson&#8221;&gt;&gt;$TMPDIF</p>
<p>echo &#8220;objectClass: top&#8221;&gt;&gt;$TMPDIF</p>
<p>ldapadd -x -v -D &#8220;cn=admin,dc=ejemplo,dc=com,dc=ar&#8221; -w $BINDPW -f $TMPDIF</p>
<p>rm -fr $TMPDIF</p>
<p>#Fin</p>
<p>#Genero el Maildir del Usuario</p>
<p>mkdir /home/$1</p>
<p>maildirmake /home/$1/Maildir</p>
<p>chown -R $1 /home/$1</p>
<p>Veamos, la ultima parte&#8230; dara un error, que por ahora no nos importara, que nos dira, que mguazzardo no es un usuario valido. Aun no le hemos dicho que valide a los usuarios de ldap, como usuarios de sistema, ya llegara esa parte, lo importante, que si todo ha salido bien, ahora llega la parte mas importante, que es integrar todo.</p>
<p>Validando PAM con OPENLDAP.</p>
<p>para validar pam con openldap, no es algo trivial, es algo, que me costo muchisimo!. Mas, que en debian, como en ubuntu existe un flor de bug con una libreria, ahora discutiremos de eso!.</p>
<p>root@marcelo:~# apt-get install libpam-ldap</p>
<p>a la configuracion, contestaremos cualquier cosa, total, tenemos nuestro archivo de configuracion propio.</p>
<p>root@marcelo:~# wget http://www.porcheron.info/libnss-ldap_251-7_i386.deb</p>
<p>root@marcelo:~# dpkg -i libnss-ldap_251-7_i386.deb</p>
<p>y luego, copiamos los archivos de configuracion, que crean estos dos archivos.</p>
<p>el primero, el /etc/pam_ldap.conf</p>
<p>host 127.0.0.1</p>
<p>base dc=ejemplo,dc=com,dc=ar</p>
<p>ldap_version 3</p>
<p>rootbinddn cn=admin,dc=ejemplo,dc=com,dc=ar</p>
<p>pam_password crypt</p>
<p>el segundo, el /etc/libnss-ldap.conf</p>
<p>host 127.0.0.1</p>
<p>base dc=ejemplo,dc=com,dc=ar</p>
<p>ldap_version 3</p>
<p>rootbinddn cn=admin,dc=ejemplo,dc=com,dc=ar</p>
<p>pam_password crypt</p>
<p>y tambien, hay que tocar un archivo mas, que no es generado por estos dos que hemos bajado, sino, por otro, el archivo es el /etc/nsswitch.conf</p>
<p># /etc/nsswitch.conf</p>
<p>#</p>
<p># Example configuration of GNU Name Service Switch functionality.</p>
<p># If you have the `glibc-doc&#8217; and `info&#8217; packages installed, try:</p>
<p># `info libc &#8220;Name Service Switch&#8221;&#8216; for information about this file.</p>
<p>passwd: files ldap</p>
<p>group: files ldap</p>
<p>shadow: files ldap</p>
<p>hosts: files dns</p>
<p>networks: files</p>
<p>protocols: db files</p>
<p>services: db files</p>
<p>ethers: db files</p>
<p>rpc: db files</p>
<p>netgroup: nis</p>
<p>Con esto, le decimos al sistema, que cuando se trate de usuarios, primero se fije en los archivos de sistema , y luego, valide mediante ldap.</p>
<p>Probando que todo este configurado correctamente.</p>
<p>para realizar la prueba, de que todo hasta aca, esta funcionando correctamente, haremos lo siguiente.</p>
<p>getent passwd, y me deberia traer los usuarios de sistema, mas los usuarios creados recientemente por LDAP.</p>
<p>Ahora vamos por la integracion con courier-imap!.</p>
<p>Lo primero que debemos hacer, es instalar el soporte de courier para ldap.</p>
<p>root@marcelo:~#apt-get install courier-ldap</p>
<p>Leyendo lista de paquetes&#8230; Hecho</p>
<p>Creando árbol de dependencias</p>
<p>Leyendo información de estado&#8230; Hecho</p>
<p>Se instalarán los siguientes paquetes extras:</p>
<p>courier-authlib-ldap</p>
<p>Paquetes sugeridos:</p>
<p>courier-doc</p>
<p>Se instalarán los siguientes paquetes NUEVOS:</p>
<p>courier-authlib-ldap courier-ldap</p>
<p>Luego, configuraremos , en /etc/pam.d/imap, para que el imap use validacion ldap.</p>
<p>auth required pam_ldap.so</p>
<p>account required pam_ldap.so</p>
<p>password required pam_ldap.so</p>
<p>session required pam_ldap.so</p>
<p>Luego de esto, ya estamos en condiciones de hacer la primer prueba, basica, de validacion del usuario que hemos generado!.</p>
<p>para eso, hacemos lo siguiente.</p>
<p>root@marcelo:~# telnet localhost 143</p>
<p>Trying 127.0.0.1&#8230;</p>
<p>Connected to localhost.</p>
<p>Escape character is &#8216;^]&#8217;.</p>
<p>* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information.</p>
<p>1 login mguazzardo ejemplo</p>
<p>* BYE [ALERT] Fatal error: Maildir: Permission denied</p>
<p>Connection closed by foreign host.</p>
<p>como vemos aca, nos da un error!. Que es eso de Maildir?&#8230; es como les comente antes, para que courier funcione, necesita tener un maildir. Al generar un usuario, se debe generar su maildir, es la parte del script de generacion de usuarios que dio la falla, por que no estaba seteado el pam y el ldap, ahora ese script no daria la falla, y es lo que necesitariamos para que esto funcione!. veamos la ultima linea del script, uid.sh.</p>
<p>chown -R $1 /home/$1</p>
<p>Esto hace que se le ceda la autoria del home, al usuario que se pasa por parametro, en este caso, mguazzardo.</p>
<p>si yo ejecuto&#8230;</p>
<p>chown -R mguazzardo /home/mguazzardo</p>
<p>Solucionamos el problema que nos daba anteriormente!.</p>
<p>veamos&#8230;</p>
<p>root@marcelo:~# telnet localhost 143</p>
<p>Trying 127.0.0.1&#8230;</p>
<p>Connected to localhost.</p>
<p>Escape character is &#8216;^]&#8217;.</p>
<p>* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information.</p>
<p>1 login mguazzardo ejemplo</p>
<p>1 OK LOGIN Ok.</p>
<p>bueno, ya vimos que hemos solucionado un problema, que ya nuestros usuarios se loguean via imap a nuestro servidor, ahora nos falta, lo mas divertido. Integracion con Webmail, con antivirus, y antispam&#8230; y ahi terminariamos la primera etapa!.</p>
<p>Llego la hora de instalar apache2, php5, php5-ldap, phpldapadmin!</p>
<p>root@marcelo:~# apt-get install apache2 php5 php5-ldap</p>
<p>Leyendo lista de paquetes&#8230; Hecho</p>
<p>Creando árbol de dependencias</p>
<p>Leyendo información de estado&#8230; Hecho</p>
<p>Se instalarán los siguientes paquetes extras:</p>
<p>apache2-common apache2-mpm-prefork apache2-utils libapache2-mod-php5 libapr0 php5-common</p>
<p>Paquetes sugeridos:</p>
<p>apache2-doc php-pear</p>
<p>Se instalarán los siguientes paquetes NUEVOS:</p>
<p>apache2 apache2-common apache2-mpm-prefork apache2-utils libapache2-mod-php5 libapr0 php5 php5-common php5-ldap</p>
<p>nos falta instalar el squirrelmail, junto a su paquete de idiomas.</p>
<p>root@marcelo:~# apt-get install squirrelmail squirrelmail-locales</p>
<p>NOTA:</p>
<p>para setear que el squirrelmail este en castellano, y esto es un truco que encontre por la internet, en ubuntu, hay que generar las locales.</p>
<p>locale-gen es_ES</p>
<p>luego,</p>
<p>squirrelmail-configure</p>
<p>vamos a el punto 10, donde dice lenguaje, cambiamos, lenguaje, y charset.</p>
<p>NOTA: abajo dejo mi config.php, del squirrelmail.</p>
<p>LDAP!!!!!!!!!!!!</p>
<p>SquirrelMail Configuration : Read: config.php (1.4.0)</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Main Menu &#8211;</p>
<p>1. Organization Preferences</p>
<p>2. Server Settings</p>
<p>3. Folder Defaults</p>
<p>4. General Options</p>
<p>5. Themes</p>
<p>6. Address Books</p>
<p>7. Message of the Day (MOTD)</p>
<p>8. Plugins</p>
<p>9. Database</p>
<p>10. Languages</p>
<p>D. Set pre-defined settings for specific IMAP servers</p>
<p>C Turn color on</p>
<p>S Save data</p>
<p>Q Quit</p>
<p>Command &gt;&gt;</p>
<p>ponemos 6</p>
<p>SquirrelMail Configuration : Read: config.php (1.4.0)</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Address Books</p>
<p>1. Change LDAP Servers</p>
<p>2. Use Javascript Address Book Search : false</p>
<p>3. Global file address book :</p>
<p>4. Allow writing into global file address book : false</p>
<p>R Return to Main Menu</p>
<p>C Turn color on</p>
<p>S Save data</p>
<p>Q Quit</p>
<p>Command &gt;&gt; 1</p>
<p>You can now define different LDAP servers.</p>
<p>Please ensure proper permissions for config.php when including</p>
<p>sensitive passwords.</p>
<p>[ldap] command (?=help) &gt; +</p>
<p>First, we need to have the hostname or the IP address where</p>
<p>this LDAP server resides. Example: ldap.bigfoot.com</p>
<p>hostname: 127.0.0.1</p>
<p>Next, we need the server root (base dn). For this, an empty</p>
<p>string is allowed.</p>
<p>Example: ou=member_directory,o=netcenter.com</p>
<p>base: ou=Libreta,dc=ejemplo,dc=com,dc=ar</p>
<p>This is the TCP/IP port number for the LDAP server. Default</p>
<p>port is 389. This is optional. Press ENTER for default.</p>
<p>port:</p>
<p>/**</p>
<p>* SquirrelMail Configuration File</p>
<p>* Created using the configure script, conf.pl</p>
<p>*/</p>
<p>global $version;</p>
<p>$config_version = &#8217;1.4.0&#8242;;</p>
<p>$config_use_color = 2;</p>
<p>$org_name = &#8220;Ejemplo&#8221;;</p>
<p>$org_logo = &#8216;/images/ejemplo.png&#8217;;</p>
<p>$org_logo_width = &#8217;308&#8242;;</p>
<p>$org_logo_height = &#8217;111&#8242;;</p>
<p>$org_title = &#8220;Mail Server de EJEMPLO&#8221;;</p>
<p>$signout_page = &#8221;;</p>
<p>$frame_top = &#8216;_top&#8217;;</p>
<p>$provider_uri = &#8216;http://www.misol.org.ar&#8217;;</p>
<p>$provider_name = &#8216;EJEMPLO&#8217;;</p>
<p>$motd = &#8220;&#8221;;</p>
<p>$squirrelmail_default_language = &#8216;es_ES&#8217;;</p>
<p>$default_charset = &#8216;iso-8859-15&#8242;;</p>
<p>$lossy_encoding = false;</p>
<p>$domain = &#8216;ejemplo.com.ar&#8217;;</p>
<p>$imapServerAddress = &#8216;localhost&#8217;;</p>
<p>$imapPort = 143;</p>
<p>$useSendmail = true;</p>
<p>$smtpServerAddress = &#8216;localhost&#8217;;</p>
<p>$smtpPort = 25;</p>
<p>$sendmail_path = &#8216;/usr/sbin/sendmail&#8217;;</p>
<p>$sendmail_args = &#8216;-i -t&#8217;;</p>
<p>$pop_before_smtp = false;</p>
<p>$imap_server_type = &#8216;other&#8217;;</p>
<p>$invert_time = false;</p>
<p>$optional_delimiter = &#8216;detect&#8217;;</p>
<p>$encode_header_key = &#8221;;</p>
<p>$default_folder_prefix = &#8221;;</p>
<p>$trash_folder = &#8216;INBOX.Trash&#8217;;</p>
<p>$sent_folder = &#8216;INBOX.Sent&#8217;;</p>
<p>$draft_folder = &#8216;INBOX.Drafts&#8217;;</p>
<p>$default_move_to_trash = true;</p>
<p>$default_move_to_sent = true;</p>
<p>$default_save_as_draft = true;</p>
<p>$show_prefix_option = false;</p>
<p>$list_special_folders_first = true;</p>
<p>$use_special_folder_color = true;</p>
<p>$auto_expunge = true;</p>
<p>$default_sub_of_inbox = true;</p>
<p>$show_contain_subfolders_option = false;</p>
<p>$default_unseen_notify = 2;</p>
<p>$default_unseen_type = 1;</p>
<p>$auto_create_special = true;</p>
<p>$delete_folder = false;</p>
<p>$noselect_fix_enable = false;</p>
<p>$data_dir = SM_PATH . &#8216;data/&#8217;;</p>
<p>$attachment_dir = $data_dir;</p>
<p>$dir_hash_level = 0;</p>
<p>$default_left_size = &#8217;150&#8242;;</p>
<p>$force_username_lowercase = false;</p>
<p>$default_use_priority = true;</p>
<p>$hide_sm_attributions = false;</p>
<p>$default_use_mdn = true;</p>
<p>$edit_identity = true;</p>
<p>$edit_name = true;</p>
<p>$hide_auth_header = false;</p>
<p>$allow_thread_sort = false;</p>
<p>$allow_server_sort = false;</p>
<p>$allow_charset_search = true;</p>
<p>$uid_support = true;</p>
<p>$plugins[0] = &#8216;calendar&#8217;;</p>
<p>$plugins[1] = &#8216;message_details&#8217;;</p>
<p>$plugins[2] = &#8216;compatibility&#8217;;</p>
<p>$plugins[3] = &#8216;html_mail&#8217;;</p>
<p>$plugins[4] = &#8216;newmail&#8217;;</p>
<p>$plugins[5] = &#8216;mail_fetch&#8217;;</p>
<p>$plugins[6] = &#8216;preview_pane&#8217;;</p>
<p>$plugins[7] = &#8216;translate&#8217;;</p>
<p>$theme_css = SM_PATH . &#8216;config/themes/css/outlook-08.css&#8217;;</p>
<p>$theme_default = 0;</p>
<p>$theme[0]['PATH'] = SM_PATH . &#8216;themes/outlook.php&#8217;;</p>
<p>$theme[0]['NAME'] = &#8216;Default&#8217;;</p>
<p>$theme[1]['PATH'] = SM_PATH . &#8216;themes/plain_blue_theme.php&#8217;;</p>
<p>$theme[1]['NAME'] = &#8216;Plain Blue&#8217;;</p>
<p>$theme[2]['PATH'] = SM_PATH . &#8216;themes/sandstorm_theme.php&#8217;;</p>
<p>$theme[2]['NAME'] = &#8216;Sand Storm&#8217;;</p>
<p>$theme[3]['PATH'] = SM_PATH . &#8216;themes/deepocean_theme.php&#8217;;</p>
<p>$theme[3]['NAME'] = &#8216;Deep Ocean&#8217;;</p>
<p>$theme[4]['PATH'] = SM_PATH . &#8216;themes/slashdot_theme.php&#8217;;</p>
<p>$theme[4]['NAME'] = &#8216;Slashdot&#8217;;</p>
<p>$theme[5]['PATH'] = SM_PATH . &#8216;themes/purple_theme.php&#8217;;</p>
<p>$theme[5]['NAME'] = &#8216;Purple&#8217;;</p>
<p>$theme[6]['PATH'] = SM_PATH . &#8216;themes/forest_theme.php&#8217;;</p>
<p>$theme[6]['NAME'] = &#8216;Forest&#8217;;</p>
<p>$theme[7]['PATH'] = SM_PATH . &#8216;themes/ice_theme.php&#8217;;</p>
<p>$theme[7]['NAME'] = &#8216;Ice&#8217;;</p>
<p>$theme[8]['PATH'] = SM_PATH . &#8216;themes/seaspray_theme.php&#8217;;</p>
<p>$theme[8]['NAME'] = &#8216;Sea Spray&#8217;;</p>
<p>$theme[9]['PATH'] = SM_PATH . &#8216;themes/bluesteel_theme.php&#8217;;</p>
<p>$theme[9]['NAME'] = &#8216;Blue Steel&#8217;;</p>
<p>$theme[10]['PATH'] = SM_PATH . &#8216;themes/dark_grey_theme.php&#8217;;</p>
<p>$theme[10]['NAME'] = &#8216;Dark Grey&#8217;;</p>
<p>$theme[11]['PATH'] = SM_PATH . &#8216;themes/high_contrast_theme.php&#8217;;</p>
<p>$theme[11]['NAME'] = &#8216;High Contrast&#8217;;</p>
<p>$theme[12]['PATH'] = SM_PATH . &#8216;themes/black_bean_burrito_theme.php&#8217;;</p>
<p>$theme[12]['NAME'] = &#8216;Black Bean Burrito&#8217;;</p>
<p>$theme[13]['PATH'] = SM_PATH . &#8216;themes/servery_theme.php&#8217;;</p>
<p>$theme[13]['NAME'] = &#8216;Servery&#8217;;</p>
<p>$theme[14]['PATH'] = SM_PATH . &#8216;themes/maize_theme.php&#8217;;</p>
<p>$theme[14]['NAME'] = &#8216;Maize&#8217;;</p>
<p>$theme[15]['PATH'] = SM_PATH . &#8216;themes/bluesnews_theme.php&#8217;;</p>
<p>$theme[15]['NAME'] = &#8216;BluesNews&#8217;;</p>
<p>$theme[16]['PATH'] = SM_PATH . &#8216;themes/deepocean2_theme.php&#8217;;</p>
<p>$theme[16]['NAME'] = &#8216;Deep Ocean 2&#8242;;</p>
<p>$theme[17]['PATH'] = SM_PATH . &#8216;themes/blue_grey_theme.php&#8217;;</p>
<p>$theme[17]['NAME'] = &#8216;Blue Grey&#8217;;</p>
<p>$theme[18]['PATH'] = SM_PATH . &#8216;themes/dompie_theme.php&#8217;;</p>
<p>$theme[18]['NAME'] = &#8216;Dompie&#8217;;</p>
<p>$theme[19]['PATH'] = SM_PATH . &#8216;themes/methodical_theme.php&#8217;;</p>
<p>$theme[19]['NAME'] = &#8216;Methodical&#8217;;</p>
<p>$theme[20]['PATH'] = SM_PATH . &#8216;themes/greenhouse_effect.php&#8217;;</p>
<p>$theme[20]['NAME'] = &#8216;Greenhouse Effect (Changes)&#8217;;</p>
<p>$theme[21]['PATH'] = SM_PATH . &#8216;themes/in_the_pink.php&#8217;;</p>
<p>$theme[21]['NAME'] = &#8216;In The Pink (Changes)&#8217;;</p>
<p>$theme[22]['PATH'] = SM_PATH . &#8216;themes/kind_of_blue.php&#8217;;</p>
<p>$theme[22]['NAME'] = &#8216;Kind of Blue (Changes)&#8217;;</p>
<p>$theme[23]['PATH'] = SM_PATH . &#8216;themes/monostochastic.php&#8217;;</p>
<p>$theme[23]['NAME'] = &#8216;Monostochastic (Changes)&#8217;;</p>
<p>$theme[24]['PATH'] = SM_PATH . &#8216;themes/shades_of_grey.php&#8217;;</p>
<p>$theme[24]['NAME'] = &#8216;Shades of Grey (Changes)&#8217;;</p>
<p>$theme[25]['PATH'] = SM_PATH . &#8216;themes/spice_of_life.php&#8217;;</p>
<p>$theme[25]['NAME'] = &#8216;Spice of Life (Changes)&#8217;;</p>
<p>$theme[26]['PATH'] = SM_PATH . &#8216;themes/spice_of_life_lite.php&#8217;;</p>
<p>$theme[26]['NAME'] = &#8216;Spice of Life &#8211; Lite (Changes)&#8217;;</p>
<p>$theme[27]['PATH'] = SM_PATH . &#8216;themes/spice_of_life_dark.php&#8217;;</p>
<p>$theme[27]['NAME'] = &#8216;Spice of Life &#8211; Dark (Changes)&#8217;;</p>
<p>$theme[28]['PATH'] = SM_PATH . &#8216;themes/christmas.php&#8217;;</p>
<p>$theme[28]['NAME'] = &#8216;Holiday &#8211; Christmas&#8217;;</p>
<p>$theme[29]['PATH'] = SM_PATH . &#8216;themes/darkness.php&#8217;;</p>
<p>$theme[29]['NAME'] = &#8216;Darkness (Changes)&#8217;;</p>
<p>$theme[30]['PATH'] = SM_PATH . &#8216;themes/random.php&#8217;;</p>
<p>$theme[30]['NAME'] = &#8216;Random (Changes every login)&#8217;;</p>
<p>$theme[31]['PATH'] = SM_PATH . &#8216;themes/midnight.php&#8217;;</p>
<p>$theme[31]['NAME'] = &#8216;Midnight&#8217;;</p>
<p>$theme[32]['PATH'] = SM_PATH . &#8216;themes/alien_glow.php&#8217;;</p>
<p>$theme[32]['NAME'] = &#8216;Alien Glow&#8217;;</p>
<p>$theme[33]['PATH'] = SM_PATH . &#8216;themes/dark_green.php&#8217;;</p>
<p>$theme[33]['NAME'] = &#8216;Dark Green&#8217;;</p>
<p>$theme[34]['PATH'] = SM_PATH . &#8216;themes/penguin.php&#8217;;</p>
<p>$theme[34]['NAME'] = &#8216;Penguin&#8217;;</p>
<p>$theme[35]['PATH'] = SM_PATH . &#8216;themes/minimal_bw.php&#8217;;</p>
<p>$theme[35]['NAME'] = &#8216;Minimal BW&#8217;;</p>
<p>$theme[36]['PATH'] = SM_PATH . &#8216;themes/redmond.php&#8217;;</p>
<p>$theme[36]['NAME'] = &#8216;Redmond&#8217;;</p>
<p>$theme[37]['PATH'] = SM_PATH . &#8216;themes/netstyle_theme.php&#8217;;</p>
<p>$theme[37]['NAME'] = &#8216;Net Style&#8217;;</p>
<p>$theme[38]['PATH'] = SM_PATH . &#8216;themes/silver_steel_theme.php&#8217;;</p>
<p>$theme[38]['NAME'] = &#8216;Silver Steel&#8217;;</p>
<p>$theme[39]['PATH'] = SM_PATH . &#8216;themes/simple_green_theme.php&#8217;;</p>
<p>$theme[39]['NAME'] = &#8216;Simple Green&#8217;;</p>
<p>$theme[40]['PATH'] = SM_PATH . &#8216;themes/wood_theme.php&#8217;;</p>
<p>$theme[40]['NAME'] = &#8216;Wood&#8217;;</p>
<p>$theme[41]['PATH'] = SM_PATH . &#8216;themes/bluesome.php&#8217;;</p>
<p>$theme[41]['NAME'] = &#8216;Bluesome&#8217;;</p>
<p>$theme[42]['PATH'] = SM_PATH . &#8216;themes/simple_green2.php&#8217;;</p>
<p>$theme[42]['NAME'] = &#8216;Simple Green 2&#8242;;</p>
<p>$theme[43]['PATH'] = SM_PATH . &#8216;themes/simple_purple.php&#8217;;</p>
<p>$theme[43]['NAME'] = &#8216;Simple Purple&#8217;;</p>
<p>$theme[44]['PATH'] = SM_PATH . &#8216;themes/autumn.php&#8217;;</p>
<p>$theme[44]['NAME'] = &#8216;Autumn&#8217;;</p>
<p>$theme[45]['PATH'] = SM_PATH . &#8216;themes/autumn2.php&#8217;;</p>
<p>$theme[45]['NAME'] = &#8216;Autumn 2&#8242;;</p>
<p>$theme[46]['PATH'] = SM_PATH . &#8216;themes/blue_on_blue.php&#8217;;</p>
<p>$theme[46]['NAME'] = &#8216;Blue on Blue&#8217;;</p>
<p>$theme[47]['PATH'] = SM_PATH . &#8216;themes/classic_blue.php&#8217;;</p>
<p>$theme[47]['NAME'] = &#8216;Classic Blue&#8217;;</p>
<p>$theme[48]['PATH'] = SM_PATH . &#8216;themes/classic_blue2.php&#8217;;</p>
<p>$theme[48]['NAME'] = &#8216;Classic Blue 2&#8242;;</p>
<p>$theme[49]['PATH'] = SM_PATH . &#8216;themes/powder_blue.php&#8217;;</p>
<p>$theme[49]['NAME'] = &#8216;Powder Blue&#8217;;</p>
<p>$theme[50]['PATH'] = SM_PATH . &#8216;themes/techno_blue.php&#8217;;</p>
<p>$theme[50]['NAME'] = &#8216;Techno Blue&#8217;;</p>
<p>$theme[51]['PATH'] = SM_PATH . &#8216;themes/turquoise.php&#8217;;</p>
<p>$theme[51]['NAME'] = &#8216;Turquoise&#8217;;</p>
<p>$default_use_javascript_addr_book = false;</p>
<p>$ldap_server[0] = array(</p>
<p>&#8216;host&#8217; =&gt; &#8217;127.0.0.1&#8242;,</p>
<p>&#8216;base&#8217; =&gt; &#8216;ou=Libreta,dc=ejemplo,dc=com,dc=ar&#8217;</p>
<p>);</p>
<p>$abook_global_file = &#8221;;</p>
<p>$abook_global_file_writeable = false;</p>
<p>$addrbook_dsn = &#8221;;</p>
<p>$addrbook_table = &#8216;address&#8217;;</p>
<p>$prefs_dsn = &#8221;;</p>
<p>$prefs_table = &#8216;userprefs&#8217;;</p>
<p>$prefs_user_field = &#8216;user&#8217;;</p>
<p>$prefs_key_field = &#8216;prefkey&#8217;;</p>
<p>$prefs_val_field = &#8216;prefval&#8217;;</p>
<p>$addrbook_global_dsn = &#8221;;</p>
<p>$addrbook_global_table = &#8216;global_abook&#8217;;</p>
<p>$addrbook_global_writeable = false;</p>
<p>$addrbook_global_listing = false;</p>
<p>$no_list_for_subscribe = false;</p>
<p>$smtp_auth_mech = &#8216;none&#8217;;</p>
<p>$imap_auth_mech = &#8216;login&#8217;;</p>
<p>$use_imap_tls = false;</p>
<p>$use_smtp_tls = false;</p>
<p>$session_name = &#8216;SQMSESSID&#8217;;</p>
<p>$config_location_base = &#8221;;</p>
<p>@include SM_PATH . &#8216;config/config_local.php&#8217;;</p>
<p>/**</p>
<p>* Make sure there are no characters after the PHP closing</p>
<p>* tag below (including newline characters and whitespace).</p>
<p>* Otherwise, that character will cause the headers to be</p>
<p>* sent and regular output to begin, which will majorly screw</p>
<p>* things up when we try to send more headers later.</p>
<p>*/</p>
<p>?&gt;</p>
<p>PHPLDAPADMIN:</p>
<p>podriamos administrar correctamente todo lo que sigue, mediante el phpldapadmin.</p>
<p>Controlando el spam.</p>
<p>Si bien, no es un antispam, por definicion, para el control de spam, yo estoy utilizando un sistema de control, basado en listas grises. Y un producto, que funciona para postfix, que se llama, postgrey. Este producto, se basa en el rfc, de envio de correo, que cuando un correo ingresa, la primera vez, dara un error temporal, y se informara de este al SMTP de origen. Este SMTP de origen, si es un SMTP verdadero, y no un SMTP Zombie, lo que hara, es devolvernos el EMAIL. Cuando se devuelve este email, se detectara que es un mail verdadero, y se creara en memoria una tabla que validara el Mail este, y se dara paso a este mail.</p>
<p>para la instalacion, lo que haremos es lo siguiente</p>
<p>apt-get install postgrey.</p>
<p>y pondremos, en el archivo /etc/postfix/main.cf</p>
<p>que el content-filter sea el port 60000</p>
<p>le agregamos las siguientes lineas</p>
<p>smtpd_recipient_restrictions = permit_mynetworks,</p>
<p>permit_sasl_authenticated,</p>
<p>reject_unauth_destination,</p>
<p>check_policy_service inet:127.0.0.1:60000</p>
<p>Y con esto, ya estaria todo andando joya!</p>
<div class="post-footer">
<div class="post-footer-line post-footer-line-1"><span class="post-author vcard">Posted by <span class="fn">Marcelo Guazzardo</span> </span><span class="post-timestamp">at <a class="timestamp-link" title="permanent link" rel="bookmark" href="http://mguazzardo.blogspot.com/2008/10/postfixldap.html"><abbr class="published" title="00" />7:09 PM</a> </span><span class="post-comment-link"><a class="comment-link" href="https://www.blogger.com/comment.g?blogID=9006180157035808005&amp;postID=807419474314816379">0 comments</a> </span><span class="post-icons"><span class="item-control blog-admin pid-1845185808"><a title="Edit Post" href="http://www.blogger.com/post-edit.g?blogID=9006180157035808005&amp;postID=807419474314816379"><img class="icon-action" src="http://www.blogger.com/img/icon18_edit_allbkg.gif" alt="" width="18" height="18" /> </a></span></span></div>
</div>
<p><a name="4421110869916598498"></a></p>
<h3 class="post-title entry-title"><a href="http://mguazzardo.blogspot.com/2008/10/golpeando-las-puertas-del-cielo.html">Golpeando las puertas del cielo PortKnocking</a></h3>
<p><span style="font-weight:bold;">Golpeando Las puertas del infierno (o del cielo)<br />
Introduccion simple al Port Knocking</span></p>
<p>Vamos a tomar una definicion de PortKnocking, que esta en la wikipedia</p>
<p>El golpeo de puertos (del inglés port knocking) es un mecanismo para<br />
abrir puertos externamente en un firewall mediante una secuencia<br />
preestablecida de intentos de conexión a puertos que se encuentran<br />
cerrados. Una vez que el firewall recibe una secuencia de conexión<br />
correcta, sus reglas son modificadas para permitir al host que realizó<br />
los intentos conectarse a un puerto específico.<br />
El propósito principal del PK es prevenir un escanéo de puertos por<br />
parte de un atacante que busca posibles servicios vulnerables. Como<br />
los los mismos solo se abren ante un pk correcto, los puertos donde se<br />
brindan los servicios se muestran aparentemente cerrados.<br />
Por lo general este mecanismo se implementa configurando un demonio<br />
para que revise la bitácora o log del firewall para detectar esta<br />
secuencia de intentos de conexión. Otra forma es tener un proceso<br />
examinando paquetes con alguna interfaz de captura de paquetes, pero<br />
esto tiene que hacerse en puertos TCP que se encuentren &#8220;abiertos&#8221;.<br />
El mayor uso del PK es para determinar acceso al puerto 22, el puerto<br />
del Secure Shell (SSH). El golpeo en cuestión es similar a un<br />
handshake secreto. La complejidad del mismo puede variar desde una<br />
simple lista ordenada de intentos de conexión a puertos TCP, UDP, ICMP<br />
u otro protocolo; hasta un hash basado en la dirección origen, tiempo<br />
y otros factores, el cual determinará cuáles serán los puertos a<br />
golpear.<br />
Para la implementación, la idea es que el cliente tenga una aplicación<br />
que ejecute el golpeo antes de acceder al servidor de manera normal.<br />
Un demonio se encuentra escuchando en la máquina donde está el<br />
firewall los paquetes que llegan a la misma. El utilitario del<br />
cliente, responsable de realizar el golpeo de los puertos puede ser<br />
desde un sencillo programa que ejecute comandos de ping, hasta un<br />
complejo programa generador de un hash.<br />
Generalmente no hay ninguna indicación cuando un usuario ejecuta una<br />
secuencia errónea de PK. Simplemente el puerto que se esperaba<br />
estuviese abierto al final de la secuencia, no lo está. Ningún paquete<br />
es enviado al usuario en ningún momento.<br />
A pesar de que esta técnica no ha sido ampliamente adoptada por la<br />
comunidad, ha sido integrada en los rootkits más recientes.</p>
<p>Cuando habla de los rootkits, como el suckit, permiten abrir una<br />
puerta trasera, mediante el envio de mensajes icmp.</p>
<p>Todos sabemos que cuando debemos proteger un puerto de los ataques de<br />
internet, tenemos la opcion de filtrarlos, via iptables. Algunos<br />
puertos pueden ser filtrados, para un grupo de ips, pero otros<br />
como smtp, web, se complica aun mas.</p>
<p>Mas alla que con la web, podamos validar a ciertas direcciones ips<br />
para entrar, podamos validar con usuarios/contraseñas, lo mas comun es<br />
que un servidor web este publicando para todo el mundo. Pero<br />
que un servidor ssh, este escuchando para todo el mundo, es algo muy<br />
peligroso. Yo habia comentado, que uno puede utilizar reglas de<br />
validaciones mediante ips. por ejemplo</p>
<p><span style="font-weight:bold;"><br />
iptables -t filter -A INPUT -s localhost -d localhost -p icmp -j ACCEPT<br />
iptables -t filter -A INPUT -s localhost -d localhost -p udp -j ACCEPT<br />
iptables -t filter -A INPUT -s localhost -d localhost -p tcp -j ACCEPT<br />
iptables -t filter -A INPUT -p tcp -s 200.200.200.200 &#8211;dport 22 -j ACCEPT<br />
iptables -t filter -A INPUT -j DROP</span></p>
<p>Con esto estariamos aceptando a 200.200.200.200 a nuestro ssh, pero<br />
que pasa si tenemos una ip dinamica, o una notebook que pueda intentar<br />
ingresar al puerto de ssh, desde una ip dinamica, u otra ip,<br />
que no necesariamente sea conocida?.</p>
<p>Podriamos utilizar un servicio de dns dinamicos, como dyndns,<br />
loguearnos, y luego tener algo asi como</p>
<p><span style="font-weight:bold;">iptables -t filter -A INPUT -p tcp -s mguazzardo.dyndns.org &#8211;dport 22<br />
-j ACCEPT<br />
</span><br />
Para ingresar con la direccion asociada a mguazzardo.dyndns.org.</p>
<p>Lo otro, es utilizar Port Knocking. Si bien esta nota esta basada en<br />
portKnocking, existen varios programas e implementaciones, algunas<br />
mejor que otras. Voy a hablar de Knockd, por la sencillez de este.</p>
<p>Para los que no lo conocen, les comento el programa<br />
knockd, es basicamente, port knocking, hay que golpear antes de entrar<br />
El programa, se activa por capa de aplicacion, y mediante mensajes<br />
icmp modificados.<br />
Se instala en el server, donde por ejemplo, podriamos tener cerrados<br />
para todos, el ssh.<br />
En el cliente, tambien se instala el paquete</p>
<p><span style="font-weight:bold;">debian:~# apt-get install knockd<br />
Leyendo lista de paquetes&#8230; Hecho<br />
Creando Ã¡rbol de dependencias&#8230; Hecho<br />
Se instalarÃ¡n los siguientes paquetes NUEVOS:<br />
knockd<br />
0 actualizados, 1 se instalarÃ¡n, 0 para eliminar y 9 no actualizados.<br />
Se necesita descargar 0B/26,4kB de archivos.<br />
Se utilizarÃ¡n 115kB de espacio de disco adicional despuÃ(c)s de desempaquetar.<br />
Seleccionando el paquete knockd previamente no seleccionado.<br />
(Leyendo la base de datos &#8230;<br />
52952 ficheros y directorios instalados actualmente.)<br />
Desempaquetando knockd (de &#8230;/knockd_0.5-1.1_i386.deb) &#8230;<br />
Configurando knockd (0.5-1.1) &#8230;<br />
Not starting knockd. To enable it edit /etc/default/knockd</span></p>
<p>Ahora supongamos, que tenemos cerrado, mediante una regla como esta.</p>
<p>iptables -t filter -A INPUT -j DROP</p>
<p>y yo quisiera entrar, entonces, deberia a mi ip, cuando ejecuto el<br />
cliente, dejarme entrar via ssh</p>
<p>entonces&#8230;</p>
<p>una vez instalado en el servidor, debemos configurar el archivo /etc/knockd.conf</p>
<p>por defecto, este viene con esta configuracion</p>
<p>[options]<br />
logfile = /var/log/knockd.log</p>
<p>[openSSH]<br />
sequence = 7000,8000,9000<br />
seq_timeout = 5<br />
command = /sbin/iptables -D INPUT -s %IP% -p tcp &#8211;dport 22 -j ACCEP<br />
T<br />
tcpflags = syn</p>
<p>[closeSSH]<br />
sequence = 9000,8000,7000<br />
seq_timeout = 5<br />
command = /sbin/iptables -D INPUT -s %IP% -p tcp &#8211;dport 22 -j ACCEP<br />
T<br />
tcpflags = syn</p>
<p>Lo que dice, que para abrir el ssh, hay que mandar la secuencia de<br />
ports 7000 8000 9000<br />
(Esta secuencia puede ser cambiada).</p>
<p>****************** en el cliente, ejecutamos ***************</p>
<p>pepe:~# knock 192.168.19.129 7000 8000 9000<br />
pepe:~# ssh 192.168.19.129<br />
root@192.168.19.129&#8242;s password:<br />
Linux debian 2.6.18-6-686 #1 SMP Sun Feb 10 22:11:31 UTC 2008 i686<br />
The programs included with the Debian GNU/Linux system are free software;<br />
the exact distribution terms for each program are described in the<br />
individual files in /usr/share/doc/*/copyright.<br />
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent<br />
permitted by applicable law.<br />
debian:~# exit<br />
logout<br />
Connection to 192.168.19.129 closed.<br />
pepe:~# knock 192.168.19.129 9000 8000 7000</p>
<p>**************************************************************************************************</p>
<p>Para cerrarlo, como dice ahi, habria que mandar 9000 8000 7000</p>
<p>Yo voy a poner , en mi reglas de iptables, la siguiente, para abrir</p>
<p>command = /sbin/iptables -I INPUT -s %IP% -p tcp &#8211;dport 22 -j ACCEPT</p>
<p>Para no tener problemas con el Orden de Matcheo.</p>
<p>Recomendaciones Adicionales al ssh.</p>
<p>Una recomendacion adicional que realizo yo, es cambiar el puerto de<br />
ssh por default. Esto se cambia en el archivo /etc/ssh/sshd_config</p>
<p>para cambiar el puerto, hacemos lo siguiente</p>
<p># What ports, IPs and protocols we listen for<br />
#Port 22<br />
Port 22222</p>
<p>Por ejemplo, para ponerlo en el 22222</p>
<p>Despues, existen otras clausulas interesantes. Algo muy piola, seria<br />
que los usuarios tuvieran que loguearse pero no como root, o sea,<br />
denegar el acceso de root via ssh.</p>
<p>#PermitRootLogin yes<br />
PermitRootLogin no</p>
<p>Tambien, podria pedir que solo dos usuarios ingresaran. marcelo, y ariel</p>
<p>AllowUsers marcelo, ariel</p>
<p>Luego, para que todo funcione como debe ser, recordemos que tenemos<br />
que reiniciar el demonio, para hacerlo, lo hacemos</p>
<p>debian:~# /etc/init.d/sshd restart<br />
Y ahi todos los cambios seran tomados!.</p>
<p>Conclusion:</p>
<p>Si bien se puede encontrar mucha mas informacion de port Knocking en<br />
la web, esta ha sido solo una introduccion a esta interesante tecnica.<br />
Saludos</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mguazzardo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mguazzardo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mguazzardo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mguazzardo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mguazzardo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mguazzardo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mguazzardo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mguazzardo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mguazzardo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mguazzardo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mguazzardo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mguazzardo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mguazzardo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mguazzardo.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=3&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mguazzardo.wordpress.com/2008/10/28/postfix-ldap-demistificando-postfix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a9db058f4f4b1378c6998c804de8b72f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mguazzardo</media:title>
		</media:content>

		<media:content url="http://www.blogger.com/img/icon18_edit_allbkg.gif" medium="image" />
	</item>
		<item>
		<title>Introduccion a los servicios de directorios</title>
		<link>http://mguazzardo.wordpress.com/2008/10/28/introduccion-a-los-servicios-de-directorios/</link>
		<comments>http://mguazzardo.wordpress.com/2008/10/28/introduccion-a-los-servicios-de-directorios/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 03:29:56 +0000</pubDate>
		<dc:creator>mguazzardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[AIX]]></category>
		<category><![CDATA[HACKING]]></category>
		<category><![CDATA[Nis]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Solaris]]></category>

		<guid isPermaLink="false">http://mguazzardo.wordpress.com/?p=4</guid>
		<description><![CDATA[Servicios de directorios Introduccion<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=4&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:180%;"><span style="font-family:courier new;font-weight:bold;">Configurando un NIS en debian</span></span></p>
<p><span style="font-size:100%;">Esta es la primera parte de una serie de notas, sobre como seria la correcta configuracion de servicios de Directorios en debian.<br />
Comenzaremos con NIS, para luego dirigirnos hacia OPENLDAP.<br />
</span><br />
Nis nos provee un sistema de passwords centralizados, al estilo, dentro de una red.</p>
<p>El esquema de esto, funciona asi.</p>
<p>Debian: Servidor<br />
Marcelo y pepe : clientes</p>
<p>Existiria un Servidor de Cuentas, donde se alojan todas las cuentas, y los clientes.</p>
<p>En el servidor , deberiamos instalar el software nis (Que es el mismo para cliente y Servidores)</p>
<p>debian:~# apt-get install nis<br />
Leyendo lista de paquetes&#8230; Hecho<br />
Creando árbol de dependencias&#8230; Hecho<br />
Se instalarán los siguientes paquetes extras:<br />
libdbus-1-3 libdbus-glib-1-2 libslp1 make portmap<br />
Paquetes sugeridos:<br />
slpd openslp-doc make-doc-non-dfsg<br />
Paquetes recomendados<br />
dbus<br />
Se instalarán los siguientes paquetes NUEVOS:<br />
libdbus-1-3 libdbus-glib-1-2 libslp1 make nis portmap<br />
0 actualizados, 6 se instalarán, 0 para eliminar y 50 no actualizados.<br />
Necesito descargar 1095kB de archivos.<br />
Se utilizarán 3437kB de espacio de disco adicional después de desempaquetar.<br />
¿Desea continuar [S/n]? s</p>
<p>Definimos el domainanme</p>
<p>para eso, ponemos</p>
<p>debian:/var/yp# domainname qqmelo.com.ar</p>
<p>para ver que todo marcha bien, podremos hacer</p>
<p>debian:/var/yp# cat /etc/defaultdomain<br />
qqmelo.com.ar</p>
<p>Una vez que llegamos aca, debemos setear el archivo /etc/default/nis</p>
<p>Cambiamos estas lineas</p>
<p>NISSERVER=false<br />
por<br />
NISSERVER=true</p>
<p>NISCLIENT=true<br />
por<br />
NISCLIENT=false</p>
<p>Y PONEMOS</p>
<p>NISMASTER=true</p>
<p>Ya esta!.<br />
Ahora, probaremos con un usuario, para que este despues pueda entrar en cualquier cliente</p>
<p>generamos el usuario demo, con password demo</p>
<p>debian:/var/yp# useradd -m prueba<br />
debian:/var/yp# passwd prueba<br />
Enter new UNIX password:<br />
Retype new UNIX password:<br />
passwd: contraseÃ±a actualizada correctamente</p>
<p>Por alli, habia leido yo, que habia que hacer algo en el shadow, y en el passwd, pero la verdad, que a mi<br />
me funciono de una.</p>
<p>Lo que realizamos ahora, es, generar los servicios, y las capas nis.</p>
<p>Para levantar los servicios, hacemos lo siguiente</p>
<p>Obviamente en el server, (debian)</p>
<p>/usr/sbin/ypserv start</p>
<p>/usr/sbin/rpc.yppasswd</p>
<p>/usr/sbin/rpc.ypxfrd</p>
<p>Y luego, creamos el mapa NIS</p>
<p>para esto tipeamos,</p>
<p>debian:/var/yp# /usr/lib/yp/ypinit -m</p>
<p>At this point, we have to construct a list of the hosts which will run NIS<br />
servers. debian.nada.com.ar is in the list of NIS server hosts. Please continue to add<br />
the names for the other hosts, one per line. When you are done with the<br />
list, type a .<br />
next host to add: debian.nada.com.ar<br />
next host to add:<br />
The current list of NIS servers looks like this:</p>
<p>debian.nada.com.ar</p>
<p>Is this correct? [y/n: y] y<br />
We need a few minutes to build the databases&#8230;<br />
Building /var/yp/qqmelo.com.ar/ypservers&#8230;<br />
Running /var/yp/Makefile&#8230;<br />
make[1]: se ingresa al directorio `/var/yp/qqmelo.com.ar&#8217;<br />
Updating passwd.byname&#8230;<br />
Updating passwd.byuid&#8230;<br />
Updating group.byname&#8230;<br />
Updating group.bygid&#8230;<br />
Updating hosts.byname&#8230;<br />
Updating hosts.byaddr&#8230;<br />
Updating rpc.byname&#8230;<br />
Updating rpc.bynumber&#8230;<br />
Updating services.byname&#8230;<br />
Updating services.byservicename&#8230;<br />
Updating netid.byname&#8230;<br />
Updating protocols.bynumber&#8230;<br />
Updating protocols.byname&#8230;<br />
Updating netgroup&#8230;<br />
Updating netgroup.byhost&#8230;<br />
Updating netgroup.byuser&#8230;<br />
Updating shadow.byname&#8230;<br />
make[1]: se sale del directorio `/var/yp/qqmelo.com.ar&#8217;</p>
<p>Con esto, se actualiza la informacion de los dominios.</p>
<p>vamos nuevamente a generar otro usuario</p>
<p>debian:/var/yp# useradd pain<br />
debian:/var/yp# passwd pain<br />
Enter new UNIX password:<br />
Retype new UNIX password:<br />
passwd: contraseÃ±a actualizada correctamente</p>
<p>Ahora, veamos, nosotros nos encontramos bajo el directorio /var/yp</p>
<p>lo que vamos a hacer, es actualizar la informacion de este usuario, a las paginas amarillas,<br />
para eso hacemos</p>
<p>debian:/var/yp# make<br />
make[1]: se ingresa al directorio `/var/yp/qqmelo.com.ar&#8217;<br />
Updating passwd.byname&#8230;<br />
Updating passwd.byuid&#8230;<br />
Updating group.byname&#8230;<br />
Updating group.bygid&#8230;<br />
Updating netid.byname&#8230;<br />
Updating shadow.byname&#8230;<br />
make[1]: se sale del directorio `/var/yp/qqmelo.com.ar&#8217;</p>
<p>Y este usuario ha sido agregado correctamente al dominio.</p>
<p>Ahora veremos si estan todos los servicios corriendo, para eso hacemos rpcinfo -p</p>
<p>debian:/var/yp# rpcinfo -p<br />
programa vers proto puerto<br />
100000 2 tcp 111 portmapper<br />
100000 2 udp 111 portmapper<br />
100004 2 udp 935 ypserv<br />
100004 1 udp 935 ypserv<br />
100004 2 tcp 938 ypserv<br />
100004 1 tcp 938 ypserv<br />
100009 1 udp 945 yppasswdd<br />
600100069 1 udp 948 fypxfrd<br />
600100069 1 tcp 950 fypxfrd</p>
<p>Y esta todo corriendo!</p>
<p>Configuracion de los clientes NIS!</p>
<p>para esto, lo que debemos hacer, es instalar en cada cliente NIS, el paquete nis, como ya lo habiamos configurado</p>
<p>Luego, corremos</p>
<p>domainname qqmelo.com.ar</p>
<p>Luego, en /etc/yp.conf, debemos poner</p>
<p>ypserver qqmelo.com.ar</p>
<p>Para que sepa a que dominio debera bindearse, esto buscara por broadcast el domino qqmelo.com.ar<br />
lo hara el demonio ypbind).</p>
<p>Por ultimo, hay que configurar el archivo /etc/nsswitch.conf, y agregar en cada campo al final la palabra nis<br />
deberia quedar como este</p>
<p>marcelo:~# cat /etc/nsswitch.conf<br />
# /etc/nsswitch.conf<br />
#<br />
# Example configuration of GNU Name Service Switch functionality.<br />
# If you have the `glibc-doc-reference&#8217; and `info&#8217; packages installed, try:<br />
# `info libc &#8220;Name Service Switch&#8221;&#8216; for information about this file.</p>
<p>passwd: compat nis<br />
group: compat nis<br />
shadow: compat nis</p>
<p>hosts: files dns nis<br />
networks: files nis</p>
<p>protocols: db files nis<br />
services: db files nis<br />
ethers: db files nis<br />
rpc: db files nis</p>
<p>netgroup: nis</p>
<p>al final del archivo /etc/passwd se agrega la siguiente linea</p>
<p>+::::::</p>
<p>y finalmente, lanzamos el demonio</p>
<p>ypbind</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mguazzardo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mguazzardo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mguazzardo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mguazzardo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mguazzardo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mguazzardo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mguazzardo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mguazzardo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mguazzardo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mguazzardo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mguazzardo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mguazzardo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mguazzardo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mguazzardo.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mguazzardo.wordpress.com&amp;blog=5322177&amp;post=4&amp;subd=mguazzardo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mguazzardo.wordpress.com/2008/10/28/introduccion-a-los-servicios-de-directorios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a9db058f4f4b1378c6998c804de8b72f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mguazzardo</media:title>
		</media:content>
	</item>
	</channel>
</rss>
