<?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/"
	>

<channel>
	<title>Blog de Javier Smaldone &#187; Redes</title>
	<atom:link href="http://blog.smaldone.com.ar/category/redes/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.smaldone.com.ar</link>
	<description>Todos los días se aprende algo viejo</description>
	<lastBuildDate>Sat, 05 Nov 2011 07:32:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Ataque de denegación de servicio en servidores web (Apache vulnerable)</title>
		<link>http://blog.smaldone.com.ar/2009/06/19/ataque-de-denegacion-de-servicio-en-servidores-web-apache-vulnerable/</link>
		<comments>http://blog.smaldone.com.ar/2009/06/19/ataque-de-denegacion-de-servicio-en-servidores-web-apache-vulnerable/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 17:32:50 +0000</pubDate>
		<dc:creator>Javier</dc:creator>
				<category><![CDATA[Redes]]></category>
		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://blog.smaldone.com.ar/?p=271</guid>
		<description><![CDATA[Acabo de enterarme (y de probar con todo éxito) de un nuevo ataque de denegación de servicio (DoS) para servidores web. Lamentablemente, hasta este momento, todas las versiones de Apache son vulnerables Realmente, es un ataque muy simple y que prácticamente no consume ancho de banda en el atacante, por lo que en este momento [...]]]></description>
			<content:encoded><![CDATA[<p>Acabo de enterarme (y de probar con todo éxito) de un <a href="http://ha.ckers.org/slowloris/">nuevo ataque de denegación de servicio</a> (<strong>DoS</strong>) para servidores web. Lamentablemente, hasta este momento, todas las versiones de Apache son vulnerables</p>
<p>Realmente, es un ataque muy simple y que prácticamente no consume ancho de banda en el atacante, por lo que en este momento cualquiera puede (con un mínimo esfuerzo) dejar <strong>totalmente inaccesible</strong> cualquier sitio web que esté alojado en un servidor vulnerable.</p>
<p><span id="more-271"></span></p>
<h3>Para probar la vulnerabilidad</h3>
<p><a href="http://ha.ckers.org/slowloris/slowloris.pl">slowloris.pl</a></p>
<p><strong>Requerimientos:</strong></p>
<ul>
<li>perl</li>
<li>IO::Socket::INET (<code>perl -MCPAN -e 'install IO::Socket::INET'</code>)</li>
<li>IO::Socket::SSL (<code>perl -MCPAN -e 'install IO::Socket::SSL'</code>)</li>
<li>GetOpt::Long (<code>perl -MCPAN -e 'install GetOpt::Long'</code>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.smaldone.com.ar/2009/06/19/ataque-de-denegacion-de-servicio-en-servidores-web-apache-vulnerable/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Si me &#8220;robara&#8221; riocuarto.gov.ar&#8230;</title>
		<link>http://blog.smaldone.com.ar/2009/05/26/si-me-robara-riocuartogovar/</link>
		<comments>http://blog.smaldone.com.ar/2009/05/26/si-me-robara-riocuartogovar/#comments</comments>
		<pubDate>Tue, 26 May 2009 19:47:41 +0000</pubDate>
		<dc:creator>Javier</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://blog.smaldone.com.ar/?p=230</guid>
		<description><![CDATA[Con relación al artículo anterior, en donde relaté el problema acontecido con el dominio riocuarto.gov.ar, me quedó dando vueltas en la cabeza la estúpida idea de alguien que afirmó que yo había sido el autor de tal ataque. Cuestiones éticas aparte, si hubiera tomado control de riocuarto.gov.ar no se me hubiera ocurrido hacer algo tan [...]]]></description>
			<content:encoded><![CDATA[<p>Con relación al <a href="http://blog.smaldone.com.ar/2009/05/26/rio-cuarto-se-retira-de-internet/">artículo anterior</a>, en donde relaté el problema acontecido con el dominio <strong>riocuarto.gov.ar</strong>, me quedó dando vueltas en la cabeza la estúpida idea de alguien que afirmó que yo había sido el autor de tal ataque.</p>
<p>Cuestiones éticas aparte, si hubiera tomado control de <strong>riocuarto.gov.ar</strong> no se me hubiera ocurrido hacer algo tan tonto como simplemente eliminar los datos de delegación. Por eso me quedé pensando (y dejo este artículo abierto a ideas y sugerencias): &#8220;¿Qué haría si tomara el control del dominio de la Municipalidad?&#8221;.</p>
<p><span id="more-230"></span></p>
<h3>Disclaimer</h3>
<p>Como está visto que hace falta, aclaro: No estoy proponiendo a nadie que ataque nada (ni el DNS de la Municipalidad, ni ninguna otra cosa). Este es un artículo <strong>humorístico</strong>.</p>
<h3>Algunas ideas&#8230;.</h3>
<h4>Cambiar el MX</h4>
<p>Apuntar el registro MX a un servidor controlado por mí, derivando hacia él todo el tráfico de correo electrónico (SMTP). Luego, posiblemente, volver a inyectarlo hacia el servidor real. Si en 5 días no se dieron cuenta de que el dominio no estaba funcionando, imagino que en 1 año tampoco notarían esto.</p>
<p>¡Ah, por cierto! También estaría bueno tomar los mensajes más interesantes y publicarlos en un blog, justo en época de elecciones. <strong>:)</strong></p>
<h4>Agregar una entrada TXT</h4>
<p>Agregar una entrada TXT en el DNS, usando <a href="http://es.wikipedia.org/wiki/Sender_Policy_Framework">SPF</a>, para indicar que el único servidor SMTP válido del dominio <strong>riocuarto.gov.ar</strong> es W.X.Y.Z (alguna IP arbitraria de por ahí&#8230;). Apuesto que se hubieran pasado meses preguntándose por qué cuernos todo el correo enviado desde cuentas de <strong>riocuarto.gov.ar</strong> es tachado como spam por todos los servidores de Internet.</p>
<h4>Cambiar el host www</h4>
<p>Apuntarlo a <a href="http://www.cordobesitas.com.ar/">www.cordobesitas.com.ar</a> o algún sitio por el estilo (desconcertado va a quedar aquel que busque una foto del Intendente municipal&#8230;).</p>
<p>Otra muy buena sería redirigirlo a un servidor proxy que haga algunas modificaciones sobre el contenido original, como por ejemplo reemplazar todas las ocurrencias de <strong>&#8220;Jure&#8221;</strong> por <strong>&#8220;Jure en falso&#8221;</strong>, &#8220;<strong>Juez</strong>&#8221; o algo por el estilo. También se podría hacer algo más gracioso (e inofensivo) como <a href="http://ex-parrot.com/~pete/upside-down-ternet.html">dar vuelta todas las imágenes</a>.</p>
<h4>Definir hosts nuevos</h4>
<p>Cosas como, por ejemplo, <strong>quienlevantalabasuraen.riocuarto.gov.ar</strong>, <strong>deremate.riocuarto.gov.ar</strong> o <strong>lasgaritasmascarasdelmundo.riocuarto.gov.ar</strong>. Algo más divertido podría ser darle algo de contenido a estos sitios&#8230;</strong></p>
<h4>¿Ideas?</h4>
<p>Escucho ocurrencias&#8230; <strong>:)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.smaldone.com.ar/2009/05/26/si-me-robara-riocuartogovar/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Río Cuarto se retira de Internet</title>
		<link>http://blog.smaldone.com.ar/2009/05/26/rio-cuarto-se-retira-de-internet/</link>
		<comments>http://blog.smaldone.com.ar/2009/05/26/rio-cuarto-se-retira-de-internet/#comments</comments>
		<pubDate>Tue, 26 May 2009 12:15:30 +0000</pubDate>
		<dc:creator>Javier</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Política]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://blog.smaldone.com.ar/?p=214</guid>
		<description><![CDATA[Por alguna misteriosa razón, desde el día 21 de mayo del 2009, el dominio riocuarto.gov.ar ha desaparecido. ¿Qué significa esto? Que tanto los sitios web de los distintos organismos de la Municipalidad de Río Cuarto, como así también las direcciones de correo electrónico @riocuarto.gov.ar han dejado de existir. ¿Esto fue hecho adrede por los administradores [...]]]></description>
			<content:encoded><![CDATA[<p>Por alguna misteriosa razón, desde el día 21 de mayo del 2009, el dominio <strong>riocuarto.gov.ar</strong> ha desaparecido. ¿Qué significa esto? Que tanto los sitios web de los distintos organismos de la Municipalidad de Río Cuarto, como así también las direcciones de correo electrónico <strong>@riocuarto.gov.ar</strong>  han dejado de existir.</p>
<p>¿Esto fue hecho adrede por los administradores informáticos de la Municipalidad? ¿Fue un error involuntario? ¿Se trata acaso de <a href="http://blog.smaldone.com.ar/2009/04/20/atacan-el-sitio-web-de-la-municipalidad-de-rio-cuarto/">un nuevo ataque</a> conducido contra los sistemas de la Municipalidad de Río Cuarto? Es difícil determinar la causa, lo que más llama la atención es el absoluto silencio de los medios locales con respecto al tema.</p>
<p><span id="more-214"></span></p>
<h3>Delegación de dominio dada de baja</h3>
<p>En el sitio del <a href="http://www.nic.ar/">NIC Argentina</a> (el organismo oficial que administra los dominios <strong>.ar</strong>), puede verse (en la opción <strong>&#8220;Trámites vía web&#8221;</strong> -&gt;  <strong>&#8220;Trámites por nombre de dominio&#8221;</strong>) que la delegación del dominio <strong>riocuarto.gov.ar</strong> ha sido dada de baja:</p>
<div class="centerpic"><a href="/files/riocuarto.gov.ar/dns.png" target="_blank"><img src="/files/riocuarto.gov.ar/dns-small.png" alt="riocuarto.gov.ar en el NIC Argentina"></a></div>
<p>La situación es clara: El día 21 de mayo de 2009 a las 13:11 horas, mediante el trámite administrativo <strong>DEL3743701</strong> la delegación de DNS del dominio <strong>riocuarto.gov.ar</strong> fue dada de baja. Esto significa que fueron eliminados los datos de los servidores de nombres encargados de la resolución de dicho dominio. A partir de ese momento dejaron de funcionar, por ejemplo, tanto los sitios web de la Municipalidad y del Consejo deliberante como las direcciones de correo de los funcionarios y dependencias municipales.</p>
<h3>Posibles causas</h3>
<p>La misteriosa desaparición del dominio puede deberse a alguna de las siguientes causas:</p>
<ul>
<li><strong>Error de NIC Argentina:</strong> Algún administrador desprevenido, o alguna falla en el sistema del NIC ocasionaron la baja de la delegación. Esto es muy poco probable, ya que existe un trámite identificado mediante el cual se realizó la baja (<strong>DEL3743701</strong>).</li>
<li><strong>Error de un administrador de la Municipalidad de Río Cuarto:</strong> Algún administrador desprevenido realizó el trámite de baja de la delegación. Esto requiere la realización de un trámite vía web más la confirmación a través del correo electrónico. Cuesta creer que alguien pudiera cometer un error tan grosero (pero bueno, todo es posible&#8230;).</li>
<li><strong>Ataque a la Municipalidad:</strong> Alguien deliberadamente realizó el trámite de baja de la delegación. Esto requeriría de, al menos, acceso a la cuenta de correo electrónico utilizada ante NIC Argentina para la realización de trámites administrativos del dominio <strong>riocuarto.gov.ar</strong>. Si este fuera el caso, significa que alguien tomó control de dicha cuenta (o del servidor de correo), lo que implica un incidente bastante más grave aún.</li>
</ul>
<h3>Silencio de radio</h3>
<p>A la fecha de publicación de este artículo ya han transcurrido cinco días. Seguramente cualquier ciudadano que haya querido acceder a un sitio de la Municipalidad de Río Cuarto, o comunicarse por email con alguna autoridad, habrá notado la existencia del problema (ni hablar de quienes trabajan en el ámbito municipal). Sin embargo, no ha habido (hasta donde sé) ninguna comunicación oficial, ni medio de prensa que se haya hecho eco del incidente.</p>
<p>Cinco días sin sitios web, sin email (y vaya a saber con qué otros inconvenientes) no constituyen un incidente menor; máxime teniendo en cuenta <a href="http://blog.smaldone.com.ar/2008/11/27/rio-cuarto-e-ibm-el-romance-continua/">el abultado presupuesto</a> que nuestra Municipalidad destina al área informática (prometiéndonos &#8220;ciudades digitales&#8221; y &#8220;conectadas&#8221; cuando en este momento ni siquiera pueden recibir un mensaje de correo electrónico).</p>
<p>Una vez más, el resultado es lamentable.</p>
<h3>Actualización 1: (para los &#8220;técnicos&#8221;)</h3>
<p>Para comprobar que <strong>riocuarto.gov.ar</strong> en la práctica no existe como dominio en Internet, podemos hacer la siguiente prueba (en <strong>GNU/Linux</strong>):</p>
<blockquote><p><code>dig @ns1.retina.ar ns riocuarto.gov.ar</code></p></blockquote>
<p>Con esto, le estamos preguntando al servidor DNS <strong>ns1.retina.ar</strong>  (una de las autoridades de la zona <strong>gov.ar</strong>) cuál es el servidor de nombres del dominio <strong>riocuarto.gov.ar</strong>. La respuesta es nula. (Puede reemplazarse <strong>ns1.retina.ar</strong> por cualquiera de los otros NS de la zona <strong>gov.ar</strong>, que pueden a su vez obtenerse con el comando &#8220;<strong><code>dig ns gov.ar</code></strong>&#8220;.)</p>
<h3>Actualización 2: (26 de mayo de 2009, 11 hs)</h3>
<p>Según me comenta un amigo, los administradores acaban de enterarse del problema (porque alguien les avisó). Parece increible que hayan pasado 5 días sin siquiera notar el &#8220;inconveniente&#8221;. Veremos cuánto más tardan ahora en solucionarlo&#8230;</p>
<h3>Actualización 3: (fui yo)</h3>
<p>Ahora, según dice gente de la Municipalidad, parece ser que el culpable del incidente fui yo. Según afirman, media hora después de dado de baja el dominio yo ya lo sabía (¿cómo lo sabrán, si ellos se enteraron recién hoy?). ¿Cómo lo hice? Supuestamente accedí a una de las cuentas de correo habilitadas para las gestiones ante el NIC.</p>
<p>No se si se habrá notado, pero en todo el artículo traté de utilizar terminología bastante neutra, sin calificativos que pudieran resultar ofensivos para los responsables del problema. Como todavía me queda media vuelta de rosca, antes de que se me zafe la tuerca del todo, voy a esperar los acontecimientos de las próximas horas (a ver si siguen echándome la culpa de su incompetencia), antes de despacharme con el arsenal de adjetivos que tengo en la punta de los dedos.</p>
<p>Por ahora, agradecido, señores. Si se enteraron de este problema fue por mi artículo (como ya antes se enteraron de varios problemas de seguridad en reuniones personales y sin que les haya cobrado un centavo). Denle nomás, échenme la culpa, trátenme de &#8220;bobo&#8221;, vienen bárbaro&#8230;</p>
<h3>Actualización 4: (en vía de solución)</h3>
<p>Hace unos momentos uno de los administradores de la Municipalidad (a quien conozco, y que como suponía no fue el <a href="http://www.sinonimos.org/tonto">babieca</a> al que se le ocurrió matar al cartero) me comunicó que ya fue iniciado el trámite en el NIC Argentina para restablecer el funcionamiento de <strong>riocuarto.gov.ar</strong>.</p>
<p>Por mi parte (como ciudadano riocuartense), espero que se solucione a la brevedad, se aclare qué y cómo ocurrió, y no vuelva a suceder.</p>
<h3>Actualización 5: (la prensa se hace eco)</h3>
<p>Finalmente, a las 20 horas del día 26 de mayo, el diario <strong>Puntal</strong> publica <a href="http://www.puntal.com.ar/notiPortal.php?id=24611">una nota sobre el incidente</a>. Claro que, como lamentablemente era de esperarse, se trata de minimizar el problema. Según declara un responsable técnico al diario:</p>
<blockquote><p><em>“Esto provoca que al cargar la dirección www.riocuarto.gov.ar en el navegador no se encuentre el servidor, hasta tanto se realice el trámite que vuelve a relacionar el nombre con nuestro IP, que ya fue iniciado”.</em></p>
</blockquote>
<p>Claro, provoca eso&#8230; y varias cosas más. Entre ellas, que otros dominios como <strong>emos.gov.ar</strong> y <strong>concejoriocuarto.gov.ar</strong> tampoco funcionaran (ni para acceder a los sitios web, ni para el envío de correo electrónico, &#8220;pequeño detalle&#8221; que omiten). Por supuesto, tampoco dicen que el problema se produjo un jueves y fue detectado recién el martes siguiente.</p>
<p>Y luego, para colocar la guinda sobre la torta, dicen que:</p>
<blockquote><p><em>&#8220;se encuentran investigando &#8230; para intentar dilucidar si alguna persona ingresó con la contraseña intencionalmente o si se trata de algún error en los sistemas de NIC ARGENTINA&#8221;</em></p>
</blockquote>
<p>Claro, si, seguro. NIC Argentina tiene registrados más de un millón de dominios. Y tiene un error que permite a alguien modificar un dominio a su antojo. Y solamente le ocurre a la Municipalidad de Río Cuarto. Perfectamente probable, cómo no. (Me cerraba más la hipótesis de que había sido yo que accedí a la cuenta de correo.)</p>
<h3>Actualización 6: (¿final?)</h3>
<p>En este momento (27 de mayo de 2009) el dominio <strong>riocuarto.gov.ar</strong> está funcionando nuevamente.</p>
<p>El diario <strong>La Voz del Interior</strong> también <a href="http://www.lavoz.com.ar/Nota.asp?nota_id=520038">publicó la noticia</a> (de forma mucho más detallada y cercana a la realidad que <strong>Puntal</strong>). Nobleza obliga, tengo que agradecer a <strong>Nicolás Llamosas</strong> por haberme librado de los rumores difamatorios que circularon ayer por la Municipalidad (y, Nicolás, no era necesario el reconocimiento público por algún aporte previo, pero se agradece doblemente).</p>
<p>Ojalá NIC Argentina coopere brindando la información necesaria para intentar descubrir el origen de este incidente y ojalá se tomen las medidas para que este (u otro) ataque no pueda tener éxito en el futuro.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.smaldone.com.ar/2009/05/26/rio-cuarto-se-retira-de-internet/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Más sobre los ataques a sitios de Río Cuarto</title>
		<link>http://blog.smaldone.com.ar/2009/04/28/mas-sobre-los-ataques-a-sitios-de-rio-cuarto/</link>
		<comments>http://blog.smaldone.com.ar/2009/04/28/mas-sobre-los-ataques-a-sitios-de-rio-cuarto/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 15:04:44 +0000</pubDate>
		<dc:creator>Javier</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://blog.smaldone.com.ar/?p=204</guid>
		<description><![CDATA[Luego de los ataques a LV16.com.ar y a riocuarto.gov.ar, parece que sigue la muela doliendo. Para terminar de dejar en claro de que se trata de un problema de ignorancia, se suma el diario Puntal con una nota periodística en la cual aparece la voz de supuestos expertos en seguridad. Un &#8220;hacker&#8221; riocuartense El primer [...]]]></description>
			<content:encoded><![CDATA[<p>Luego de los ataques a <a href="http://blog.smaldone.com.ar/2009/03/11/lv16-com-censura-o-ignorancia/">LV16.com.ar</a> y a <a href="http://blog.smaldone.com.ar/2009/04/20/atacan-el-sitio-web-de-la-municipalidad-de-rio-cuarto/">riocuarto.gov.ar</a>, parece que sigue la muela doliendo. Para terminar de dejar en claro de que se trata de un problema de <strong>ignorancia</strong>, se suma el diario Puntal con <a href="http://www.puntal.com.ar/notiPortal.php?id=22886"><strong>una nota periodística</strong></a> en la cual aparece la voz de supuestos <em>expertos en seguridad</em>.</p>
<p><span id="more-204"></span></p>
<h3>Un &#8220;hacker&#8221; riocuartense</h3>
<p>El primer entrevistado es un autoproclamado &#8220;<em>hacker</em>&#8221; que dice dedicarse a la seguridad informática (sería todo un hallazgo encontrar a un experto en la materia en la ciudad de Río Cuarto), quien hace afirmaciones como la siguiente:</p>
<blockquote><p>&#8220;Se­ría me­jor si no hu­bie­ra hac­kers. Por­que los hac­kers son la con­se­cuen­cia de la so­cie­dad.&#8221;</p>
</blockquote>
<p>Tal sinsentido se contradice con lo expresado por él mismo en otra parte de la entrevista, donde explica que:</p>
<blockquote><p>&#8220;Ser hac­ker sig­ni­fi­ca for­zar los sis­te­mas a lo má­xi­mo, eso im­pli­ca co­no­ci­mien­tos y ver si hay fa­llas de se­gu­ri­dad y có­mo es­tá he­cho, sim­ple­men­te eso. No ha­cer da­ño, ni nin­gu­na ac­ti­vi­dad ile­gal.&#8221;</p>
<p>&#8220;Una de las mo­ti­va­cio­nes de un hac­ker es el de­sa­fío mis­mo de ha­cer es­to y la bús­que­da de co­no­ci­mien­tos. Hay mu­chos hac­kers que vi­ven de eso, de la se­gu­ri­dad, con los co­no­ci­mien­tos que se van ad­qui­rien­do. Otro mo­ti­vo es el pen­sa­mien­to de que las co­sas de­ben es­tar bien he­chas. Y, cuan­do es­tán mal, se tra­ta de de­rri­bar­las pa­ra que se vuel­van a ha­cer bien.&#8221;</p></blockquote>
<p>Queda de manifiesto que el tal &#8220;Zar&#8221; (así es como se hace llamar) ni siquiera tiene bien en claro qué es ser un hacker. Si bien es cierta su definición, no se entiende por qué para él sería mejor que no hubiera personas con esa disposición, ni por qué son una consecuencia supuestamente indeseable de la sociedad (y menos se entiende cuando compara el &#8220;<em>hackeo</em>&#8221; con vender marihuana).</p>
<p>Para finalizar, con respecto al <a href="http://blog.smaldone.com.ar/2009/03/11/lv16-com-censura-o-ignorancia/">ataque al sitio de LV16</a> este personaje se despacha diciendo que:</p>
<blockquote><p>&#8220;Yo ubi­qué a es­te hac­ker, a par­tir de in­di­cios. Cru­zan­do da­tos se con­si­gue. Es un chi­co de 17 años, que vi­ve en Mar del Pla­ta, que per­te­ne­ce a un gru­po que se co­no­cen por Fa­ce­book y Mes­sen­ger, que con­si­guie­ron una re­ce­ta pa­ra hac­kear una pá­gi­na y que­rían ver si ser­vía. Fue ca­sual. Uno de ellos es de Ve­na­do Tuer­to. Pe­ro, al chi­co no le va a pa­sar na­da.&#8221;</p>
</blockquote>
<p>No se que datos habrá cruzado el tal &#8220;Zar&#8221;, pero el autor de dicho ataque dejó <a href="http://blog.smaldone.com.ar/2009/03/11/lv16-com-censura-o-ignorancia/#comment-55236">un comentario en mi artículo sobre el tema</a> invitando a cualquiera a agregarlo a MSN. En breve publicaré una entrevista que le realicé, y donde queda de manifiesto lo errado de las especulaciones de este supuesto experto en seguridad.</p>
<h3>La guinda sobre la torta (y el helado en la frente)</h3>
<p>Más allá de lo anecdótico de las contradictorias y hasta simpáticas afirmaciones del supuesto hacker &#8220;Zar&#8221;, realmente preocupa ver que el Dr. <strong>Oscar Taurian</strong> (Director del Centro de Cómputos de la Universidad Nacional de Río Cuarto) haga afirmaciones como esta:</p>
<blockquote><p>&#8220;Por ejem­plo, Cien­cias Eco­nó­mi­cas tie­ne el ser­vi­dor de­sac­tua­li­za­do y se lo pue­de usar pa­ra ata­car a las otras má­qui­nas.&#8221;</p>
</blockquote>
<p>El Dr. Taurian (que no es doctor en informática, sino en alguna otra cosa) parece desconocer una norma básica de la seguridad informática. Utilizando un medio público acaba de dar una excelente pista a cualquiera que desee atacar la red de la UNRC, apuntando con el dedo al servidor de la Facultad de Ciencias Económicas. Imagine el lector a un comisario declarando en un periódico que el Banco X tiene un pésimo sistema de seguridad. Totalmente ridículo.</p>
<h3>Fuentes confiables&#8230;</h3>
<p>Así cubre uno de los principales medios periodísticos de Río Cuarto el problema de la seguridad informática. Lo hace consultando a supuestos expertos que no son tales y publicando sus afirmaciones como hechos. ¿Se conducirán de la misma manera en otras áreas como la economía y la salud? Da que pensar.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.smaldone.com.ar/2009/04/28/mas-sobre-los-ataques-a-sitios-de-rio-cuarto/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Mi charla en las 8vas. JRSL</title>
		<link>http://blog.smaldone.com.ar/2008/09/02/mi-charla-en-las-8vas-jrsl/</link>
		<comments>http://blog.smaldone.com.ar/2008/09/02/mi-charla-en-las-8vas-jrsl/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 01:07:34 +0000</pubDate>
		<dc:creator>Javier</dc:creator>
				<category><![CDATA[Charlas]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Software libre]]></category>

		<guid isPermaLink="false">http://blog.smaldone.com.ar/?p=120</guid>
		<description><![CDATA[Tal como comenté en el artículo anterior, tuve la gran satisfacción de dar una charla en las 8vas. Jornadas Regionales de Software Libre, realizadas del 20 al 22 de agosto pasado en la Universidad de Belgrano. Aunque en algún momento estará disponible en el sitio del evento (junto con el video de la charla), no [...]]]></description>
			<content:encoded><![CDATA[<p>Tal como comenté en el <a href="http://blog.smaldone.com.ar/2008/08/02/8vas-jornadas-regionales-de-software-libre/">artículo anterior</a>, tuve la gran satisfacción de dar una charla en las <a href="http://jornadas.cafelug.org.ar/">8vas. Jornadas Regionales de Software Libre</a>, realizadas del 20 al 22 de agosto pasado en la Universidad de Belgrano.</p>
<p>Aunque en algún momento estará disponible en el sitio del evento (junto con el video de la charla), no resití la tentación de publicar la presentación que utilicé.</p>
<h3>Experiencias en la implementación de un ISP con software libre</h3>
<ul>
<li><a href="/files/8jrsl/isp_software_libre.pdf">Presentación en formato PDF</a></li>
<li><a href="/files/8jrsl/isp_software_libre.odp">Presentación en formato ODP</a> (<a href="http://www.openoffice.org/">OpenOffice.org</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.smaldone.com.ar/2008/09/02/mi-charla-en-las-8vas-jrsl/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Cómo funciona el DNS</title>
		<link>http://blog.smaldone.com.ar/2006/12/05/como-funciona-el-dns/</link>
		<comments>http://blog.smaldone.com.ar/2006/12/05/como-funciona-el-dns/#comments</comments>
		<pubDate>Tue, 05 Dec 2006 18:23:23 +0000</pubDate>
		<dc:creator>Javier</dc:creator>
				<category><![CDATA[Redes]]></category>

		<guid isPermaLink="false">http://blog.smaldone.com.ar/2006/12/05/como-funciona-el-dns/</guid>
		<description><![CDATA[Siguiendo con la serie de artículos sobre redes y TCP/IP hoy realizaremos una breve introducción al &#8220;Sistema de Nombres de Dominio&#8221; (DNS, por &#8220;Domain Name System&#8220;). El DNS se utiliza principalmente para la resolución de nombres, esto es, decidir qué dirección IP pertenece a determinado nombre completo de host. También puede descargar este tutorial en [...]]]></description>
			<content:encoded><![CDATA[<p>Siguiendo con la <a href="http://blog.smaldone.com.ar/2006/11/21/tutorial-sobre-tcpip/">serie de artículos</a> sobre redes y <strong>TCP/IP</strong> hoy realizaremos una breve introducción al &#8220;<a href="http://es.wikipedia.org/wiki/Domain_Name_System"><em>Sistema de Nombres de Dominio</em></a>&#8221; (<strong>DNS</strong>, por &#8220;<a href="http://en.wikipedia.org/wiki/Domain_name_system"><em>Domain Name System</em></a>&#8220;).</p>
<p>El <strong>DNS</strong> se utiliza principalmente para la <em>resolución de nombres</em>, esto es, decidir qué <em>dirección <strong>IP</strong></em> pertenece a determinado nombre completo de <em>host</em>.</p>
<p><span id="more-84"></span></p>
<p><em>También puede <a href="http://blog.smaldone.com.ar/files/dns/introduccion_dns.tgz">descargar este tutorial en otros formatos</a> (HTML sin decoraciones y PDF).</em></p>
<h3>Usos del DNS</h3>
<p>El <strong>DNS</strong> se utiliza para distintos propósitos. Los más comunes son:</p>
<ul>
<li><strong>Resolución de nombres</strong>: Dado el nombre completo de un <em>host</em> (por ejemplo <em>blog.smaldone.com.ar</em>), obtener su <em>dirección <strong>IP</strong></em> (en este caso, <em>208.97.175.41</em>).</li>
<li><strong>Resolución inversa de direcciones</strong>: Es el mecanismo inverso al anterior. Consiste en, dada una <em>dirección <strong>IP</strong></em>, obtener el nombre asociado a la misma.</li>
<li><strong>Resolución de servidores de correo</strong>: Dado un <em>nombre de dominio</em> (por ejemplo <em>gmail.com</em>) obtener el servidor a través del cual debe realizarse la entrega del correo electrónico (en este caso, <em>gmail-smtp-in.l.google.com</em>).</li>
</ul>
<p>Por tratarse de un sistema muy flexible, es utilizado también para muchas otras funciones, tales como la obtención de claves públicas de <a href="http://es.wikipedia.org/wiki/Clave_p%C3%BAblica">cifrado asimétrico</a> y la validación de envío de e-mails (a través de mecanismos como <a href="http://es.wikipedia.org/wiki/SPF">SPF</a>).</p>
<h3>Terminología básica</h3>
<p>Antes de proseguir, es necesario introducir algunos términos básicos para evitar confusiones y ambigüedades. Otros términos más complejos serán tratados más adelante.</p>
<ul>
<li><strong>Host Name</strong>: El nombre de un <em>host</em> es una sola &#8220;<em>palabra</em>&#8221; (formada por letras, números y guiones). Ejemplos de nombres de <em>host</em> son &#8220;<em>www</em>&#8220;, &#8220;<em>blog</em>&#8221; y &#8220;<em>obelix</em>&#8220;.</li>
<li><strong>Fully Qualified Host Name</strong> (<strong>FQHN</strong>): Es el &#8220;<em>nombre completo</em>&#8221; de un <em>host</em>. Está formado por el <em>hostname</em>, seguido de un punto y su correspondiente <em>nombre de dominio</em>. Por ejemplo, &#8220;<em>blog.smaldone.com.ar</em>&#8220;</li>
<li><strong>Domain Name</strong>: El <a href="http://es.wikipedia.org/wiki/Nombre_de_dominio"><em>nombre de dominio</em></a> es una sucesión de nombres concatenados por puntos. Algunos ejemplos son &#8220;<em>smaldone.com.ar</em>&#8220;, &#8220;<em>com.ar</em>&#8221; y &#8220;<em>ar</em>&#8220;.</li>
<li><strong>Top Level Domains</strong> (<strong>TLD</strong>): Los <a href="http://es.wikipedia.org/wiki/Dominio_de_nivel_superior"><em>dominios de nivel superior</em></a> son aquellos que no pertenecen a otro dominio. Ejemplos de este tipo son &#8220;<em>com</em>&#8220;, &#8220;<em>org</em>&#8220;, &#8220;<em>ar</em>&#8221; y &#8220;<em>es</em>&#8220;.</li>
</ul>
<h3>Arquitectura del DNS</h3>
<p>El sistema DNS funciona principalmente en base al <a href="http://es.wikipedia.org/wiki/Udp">protocolo <strong>UDP</strong></a>. Los requerimientos se realizan a través del <em>puerto</em> <strong>53</strong>.</p>
<p>El sistema está estructurado en forma de &#8220;<em>árbol</em>&#8220;. Cada <em>nodo</em> del árbol está compuesto por un grupo de servidores que se encargan de resolver un conjunto de dominios (<em>zona de autoridad</em>). Un servidor puede delegar en otro (u otros) la autoridad sobre alguna de sus sub-zonas (esto es, algún <em>subdominio</em> de la zona sobre la que él tiene autoridad). Un subdominio puede verse como una <em>especialización</em> de un dominio de nivel anterior. Por ejemplo, &#8220;<em>smaldone.com.ar</em>&#8221; es un subdominio de &#8220;<em>com.ar</em>&#8220;, que a su vez lo es del <strong>TLD</strong> &#8220;<em>ar</em>&#8220;.</p>
<p>El siguiente diagrama ilustra esto a través de un ejemplo:</p>
<div class="centerpic"><img src="http://blog.smaldone.com.ar/files/dns/zonas.png" alt="Zonas y delegación" /></div>
<p>Los servidores con autoridad sobre los <strong>TLD</strong> son los llamados &#8220;<em>root servers</em>&#8221; (o &#8220;<em>servidores raíz</em>&#8220;) del sistema. Estos son fijos, ya que rara vez cambian, <a href="http://en.wikipedia.org/wiki/Root_nameserver">siendo actualmente 13</a>.</p>
<p>Tomemos como ejemplo el dominio &#8220;<em>com.ar</em>&#8220;. Este dominio pertenece al <strong>TLD</strong> &#8220;<em>ar</em>&#8220;.</p>
<p>Los servidores con autoridad sobre el dominio &#8220;<em>ar</em>&#8221; son:</p>
<p><code>ns-ar.ripe.net<br />
merapi.switch.ch<br />
uucp-gw-1.pa.dec.com<br />
uucp-gw-2.pa.dec.com<br />
ns.uu.net<br />
ns1.retina.ar<br />
athea.ar<br />
ctina.ar</code></p>
<p>En tanto que los servidores con autoridad sobre &#8220;<em>com.ar</em>&#8221; son:</p>
<p><code>merapi.switch.ch<br />
relay1.mecon.gov.ar<br />
ns.uu.net<br />
ns1.retina.ar<br />
athea.ar<br />
ctina.ar</code></p>
<p>Podemos ver que <em>ns.uu.net</em>, <em>ns1.retina.ar</em>, <em>athea.ar</em> y <em>ctina.ar</em> tienen autoridad tanto sobre &#8220;<em>com.ar</em>&#8221; como sobre &#8220;<em>ar</em>&#8220;.</p>
<h3>El proceso de resolución de nombres</h3>
<p>Cuando una aplicación (cliente) necesita resolver un <strong>FQHN</strong> envía un requerimiento al <em>servidor de nombres</em> configurado en el sistema (normalmente, el provisto por el <strong>ISP</strong>). A partir de entonces se desencadena el proceso de resolución del nombre:</p>
<ol>
<li>El servidor de nombres inicial consulta a uno de los <em>servidores raíz</em> (cuya <em>dirección <strong>IP</strong></em> debe conocer previamente).</li>
<li>Este devuelve el nombre del servidor a quien se le ha delegado la sub-zona.</li>
<li>El servidor inicial interroga al nuevo servidor.</li>
<li>El proceso se repite nuevamente a partir del punto 2 si es que se trata de una sub-zona delegada.</li>
<li>Al obtener el nombre del servidor con autoridad sobre la zona en cuestión, el servidor inicial lo interroga.</li>
<li>El servidor resuelve el nombre correspondiente, si este existe.</li>
<li>El servidor inicial informa al cliente el nombre resuelto.</li>
</ol>
<p>Ilustremos esto con un ejemplo concreto. Supongamos que el navegador necesita resolver el nombre &#8220;<em>blog.smaldone.com.ar</em>&#8220;.</p>
<ol>
<li>El sistema tiene configurado el servidor de nombres <em>200.49.156.3</em> (perteneciente al proveedor argentino <em>Fibertel</em>). Por lo tanto envía a éste el requerimiento de resolver &#8220;<em>blog.smaldone.com.ar</em>&#8220;.</li>
<li>El servidor de <em>200.49.156.3</em> envía la consulta <em>root server</em> <em>198.41.0.4</em>.</li>
<li>198.41.0.4 le informa que el servidor con autoridad sobre &#8220;<em>ar</em>&#8221; es <em>athea.ar</em>, cuya <em>dirección <strong>IP</strong></em> es <em>200.16.98.2</em>. (En realidad, informa la lista de todos los servidores con tal autoridad, pero para simplificar el ejemplo tomaremos solamente uno.)</li>
<li><em>200.49.156.3</em> envía nuevamente el requerimiento a <em>athea.ar</em> (el cual, recordemos, también tiene autoridad sobre &#8220;<em>com.ar</em>&#8220;).</li>
<li><em>athea.ar</em> responde que la autoridad sobre <em>smaldone.com.ar</em> la tiene <em>ns1.mydomain.com</em> cuya <em>dirección <strong>IP</strong></em> es <em>64.94.117.213</em>.</li>
<li><em>200.49.156.3</em> envía ahora la consulta a <em>ns1.mydomain.com</em>.</li>
<li><em>ns1.mydomain.com</em> informa que la <em>dirección <strong>IP</strong></em> de &#8220;<em>blog.smaldone.com.ar</em>&#8221; es <em>208.97.175.41</em>.</li>
<li>Finalmente, <em>200.49.156.3</em> devuelve este resultado a la aplicación que originó la consulta.</li>
</ol>
<h3>Mecanismos de caché</h3>
<p>Cada vez que un servidor de nombres envía una respuesta, lo hace adjuntando el tiempo de validez de la misma (<strong>TTL</strong> o &#8220;<em>tiempo de vida</em>&#8220;). Esto posibilita que el receptor, antes la necesidad de volver a resolver la misma consulta, pueda utilizar la información previamente obtenida en vez de realizar un nuevo requerimiento.</p>
<p>Esta es la razón por la cual los cambios realizados en el <strong>DNS</strong> no se propagan instantáneamente a través del sistema. Dependiendo de la naturaleza de los mismos (y de la configuración de cada servidor), la propagación puede tardar desde algunos minutos hasta varios días.</p>
<h3>Correo electrónico y resolución de nombres</h3>
<p>Normalmente los usuarios de correo electrónico redactan su mensajes usando un cliente de correo y enviándolo a través de un servidor <a href="http://es.wikipedia.org/wiki/SMTP"><strong>SMTP</strong></a> provisto por su <strong>ISP</strong> o a través de un sistema de <em>correo vía web</em> (<em>webmail</em>). En cualquier caso, una vez que el mensaje es recibido por el servidor, debe ser entregado al destinatario.  Aquí interviene el sistema <strong>DNS</strong>:</p>
<ol>
<li>El servidor del emisor solicita al <strong>DNS</strong> (de acuerdo al mecanismo analizado anteriormente), la entrada <strong>MX</strong> del dominio del receptor del mensaje. <strong>MX</strong> significa &#8220;<em>mail exchanger</em>&#8220;, esto es, el nombre del servidor (o los servidores) encargado de recibir los mensajes destinados a determinado dominio.</li>
<li>El <strong>DNS</strong> devuelve el <strong>FQHN</strong> y la <em>dirección <strong>IP</strong></em> del <em>mail exchanger</em>.</li>
<li>El servidor del emisor se conecta al puerto 25, mediante <strong>TCP</strong>, del servidor del destinatario y entrega el mensaje según el protocolo <strong>SMTP</strong>.</li>
<li>El proceso podrá continuar si el servidor receptor del mensaje no es el último de la cadena. Existen servidores que actúan como &#8220;<em>puertas de enlace</em>&#8221; o &#8220;<em>gateways</em>&#8221; de correo electrónico, y que se encargan de recibir los mensajes de determinados dominios para luego enviarlos a otros servidores.</li>
</ol>
<h3>Tipos de registro en un servidor de nombres</h3>
<p>Un servidor de nombres puede almacenar distinta información. Para ello, en cada zona de autoridad dispondrá de entradas de distinto tipo. Entre los más importantes se encuentran:</p>
<ul>
<li><strong>A (Address)</strong>: Este registro se utiliza para traducir nombres de <em>hosts</em> del dominio en cuestión a direcciones IP.</li>
<li><strong>CNAME (Canonical Name)</strong>: El <em>nombre canónico</em> es un alias para un <em>host</em> determinado. (No define una <em>dirección <strong>IP</strong></em>, sino un nuevo nombre.)</li>
<li><strong>NS (Name Server)</strong>: Especifica el servidor (o servidores) de nombres para un dominio.</li>
<li><strong>MX (Mail Exchange)</strong>: Define el servidor encargado de recibir el correo electrónico para el dominio.</li>
<li><strong>PTR (Pointer)</strong>: Especifica un &#8220;<em>registro inverso</em>&#8220;, a la inversa del registro <strong>A</strong>, permitiendo la traducción de <em>direcciones <strong>IP</strong></em> a nombres.</li>
<li><strong>TXT (Text)</strong>: Permite asociar información adicional a un dominio. Esto se utiliza para otros fines, como el almacenamiento de claves de cifrado, &#8220;<a href="http://en.wikipedia.org/wiki/DomainKeys"><em>DomainKeys</em></a>&#8221; o &#8220;<a href="http://es.wikipedia.org/wiki/SPF"><em>Sender Policy Framework</em></a>&#8220;.</li>
</ul>
<h3>Bind, &#8220;el&#8221; servidor de nombres</h3>
<p>Prácticamente el único software utilizado en los servidores de nombres de <em>Internet</em> es <a href="http://es.wikipedia.org/wiki/BIND"><strong>bind</strong></a> (&#8220;<em>Berkeley Internet Name Domain</em>&#8220;), creado originalmente en la <em>Universidad de California</em>, y actualmente propiedad del <em>Internet Systems Consortium</em>.</p>
<p>Este programa, distribuido bajo una licencia libre, es utilizado en prácticamente todos los sistemas <em>Unix</em> del mundo. Esto ha sido considerado un problema de seguridad, al punto que se ha propuesto la migración de algunos <em>root servers</em> a otro sistema, ya que la aparición de algún problema de seguridad en <strong>bind</strong> podría implicar la caída de todo el <strong>DNS</strong> de <em>Internet</em>.</p>
<h3>Uso del DNS en una red local</h3>
<p>Ya en redes de tamaño medio (quizás más de 5 equipos) es conveniente la utilización de <strong>DNS</strong>. Esto nada tiene que ver con el <strong>DNS</strong> de <em>Internet</em> (aunque el servidor local puede estar vinculado a este sistema).</p>
<p>Básicamente, es conveniente montar un servidor local de <strong>DNS</strong> por los siguientes motivos:</p>
<ul>
<li><strong>Agilizar el acceso a Internet</strong>: Al tener un <em>servidor de nombres</em> en nuestra propia red local (que acceda al <strong>DNS</strong> de nuestro proveedor o directamente a los <em>root servers</em>) se agiliza el mecanismo de resolución de nombres, manteniendo en <em>caché</em> los nombres recientemente usados en la red y disminuyendo el tráfico hacia/desde <em>Internet</em>.</li>
<li><strong>Simplificar la administración de la red local</strong>: Al contar con un <strong>DNS</strong> propio (ya sea uno o varios servidores de nombres) es posible definir <em>zonas locales</em> (no válidas ni accesibles desde <em>Internet</em>) para asignar nombres a cada uno de los <em>hosts</em> de la <strong>LAN</strong>. De esta forma es posible, por ejemplo, referirnos a la impresora de red como &#8220;<em>hplaser.mired.local</em>&#8221; en vez de &#8220;<em>192.168.0.2</em>&#8221; y a nuestro servidor de correo interno como &#8220;<em>smtp.mired.local</em>&#8221; en vez de &#8220;<em>192.168.0.3</em>&#8220;. (Pensemos, por ejemplo, que ocurriría con las configuraciones de las aplicaciones si un día decidimos cambiar el esquema de <em>direcciones <strong>IP</strong></em> de nuestra red.)</li>
</ul>
<h3>Problemas del DNS</h3>
<p>El principal problema que presenta el <strong>DNS</strong> es que, al estar basado en <strong>UDP</strong> (protocolo de transporte que no garantiza la recepción de la información enviada), tanto las consultas como las respuestas pueden &#8220;<em>perderse</em>&#8221; (por ejemplo, a causa de congestionamiento en algún enlace de la red). Es común apreciar cómo, en el caso de servidores y redes no muy bien configuradas, la resolución de nombres se resiente sensiblemente ante cualquier anomalía (saturación de tráfico o del servidor de nombres local).</p>
<p>Otro inconveniente, que ya hemos hecho notar, es la lentitud de la propagación de las modificaciones en el sistema, producto de la propia arquitectura del mismo.</p>
<p>Pero quizás el mayor problema no sea inherente al sistema mismo, sino a la pésima configuración de los servidores de muchos <strong>ISP</strong>. <em>Fibertel</em>, el proveedor que utilizo, es un notable ejemplo de esta falencia. Una buena solución a esta situación es ejecutar un <em>servidor de nombres</em> en alguna PC de la red local, de forma tal que se comunique directamente con los <strong>root servers</strong> (evitando de esta forma pasar a través de los  servidores de nombres de nuestro proveedor).</p>
<h3>Herramientas para aprender más</h3>
<p>En sistemas <strong>Unix</strong> el comando <strong>dig</strong> (ver &#8220;<strong>man dig</strong>&#8220;) permite realizar requerimientos &#8220;<em>a mano</em>&#8221; para poder investigar un poco más sobre el funcionamiento del <strong>DNS</strong> y, cómo no, también para detectar y solucionar problemas en la red.</p>
<p>Los usuarios de sistemas <strong>Windows</strong> disponen del comando <strong>nslookup</strong> (aunque no tan potente como <strong>dig</strong>), para el mismo propósito.</p>
<h3>Lectura adicional</h3>
<ul>
<li>La <a href="http://es.wikipedia.org/wiki/Domain_Name_System">página de Wikipedia sobre <strong>DNS</strong></a> contiene bastante información y buenos enlaces sobre este tema.</li>
<li>El &#8220;<a href="http://www.insflug.org/COMOs/DNS-Como/DNS-Como.html"><em>DNS Cómo</em></a>&#8221; explica la configuración de <strong>bind</strong> en <strong>GNU/Linux</strong>.</li>
<li>El <a href="http://www.rfc-es.org/rfc/rfc1591-es.txt"><strong>RFC</strong> 1591</a> explica detalladamente la estructura del <strong>DNS</strong>.</li>
<li>Los <strong>RFC</strong> <a href="ftp://ftp.rfc-editor.org/in-notes/rfc1034.txt">1034</a> y <a href="ftp://ftp.rfc-editor.org/in-notes/rfc1035.txt">1035</a> (ambos en inglés), describen completamente el <strong>DNS</strong>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.smaldone.com.ar/2006/12/05/como-funciona-el-dns/feed/</wfw:commentRss>
		<slash:comments>108</slash:comments>
		</item>
		<item>
		<title>Tutorial sobre TCP/IP</title>
		<link>http://blog.smaldone.com.ar/2006/11/21/tutorial-sobre-tcpip/</link>
		<comments>http://blog.smaldone.com.ar/2006/11/21/tutorial-sobre-tcpip/#comments</comments>
		<pubDate>Tue, 21 Nov 2006 08:00:29 +0000</pubDate>
		<dc:creator>Javier</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Redes]]></category>

		<guid isPermaLink="false">http://blog.smaldone.com.ar/2006/11/21/tutorial-sobre-tcpip/</guid>
		<description><![CDATA[En este tutorial realizaremos la &#8220;disección&#8221; de una comunicación TCP/IP muy simple, con el fin de analizar qué ocurre a cada nivel. A través de este sencillo experimento, podremos recorrer los conceptos fundamentales de las redes TCP/IP, para reafirmar la idea de que este protocolo es muy simple. El objetivo es lograr, sin demasiados conocimientos [...]]]></description>
			<content:encoded><![CDATA[<p>En este tutorial realizaremos la &#8220;<em>disección</em>&#8221; de una comunicación <strong>TCP/IP</strong> muy simple, con el fin de analizar qué ocurre a cada nivel.</p>
<p>A través de este sencillo experimento, podremos recorrer los conceptos fundamentales de las redes <strong>TCP/IP</strong>, para reafirmar la idea de que este protocolo <a href="http://blog.smaldone.com.ar/2006/11/02/tcpip-es-simple/">es muy simple</a>. El objetivo es lograr, sin demasiados conocimientos previos, una comprensión profunda de sus mecanismos.</p>
<p><span id="more-69"></span></p>
<p><em>También puede <a href="http://blog.smaldone.com.ar/files/tcpip/tutorial_tcpip.tgz">descargar este tutorial en otros formatos</a>  (HTML sin decoraciones y PDF).</em></p>
<h4>Requisitos previos</h4>
<p>No se requieren conocimientos de programación, aunque sí una base de conocimientos informáticos en general. Para continuar experimentando más allá de los expuesto aquí, se recomienda la utilización del programa <a href="http://www.wireshark.org/"><strong>Wireshark</strong></a> (antes conocido como <strong>Ethereal</strong>), disponible para <strong>GNU/Linux</strong>, <strong>Microsoft Windows</strong>, <strong>Mac OS/X</strong> y <strong>Solaris</strong> .</p>
<p>Quizás el requisito más importante sean las ganas de aprender, investigar, jugar y divertirse con redes <strong>TCP/IP</strong>.</p>
<h4>Referencias</h4>
<p>Cada vez que se introduzca un término relevante, el mismo contendrá un enlace a una página con mayor información, por lo general de la <a href="http://es.wikipedia.org/"><strong>Wikipedia</strong></a> y, de ser posible, en español (aunque se recomienda ampliamente visitar su equivalente en inglés).</p>
<p>Un libro muy recomendable y claro (en inglés) es &#8220;<a href="http://www.kohala.com/start/tcpipiv1.html"><em>TCP/IP Illustrated Volume 1</em></a>&#8221; de W. Richard Stevens.  Finalmente, la fuente de consulta definitiva, para conocer tanto los aspectos técnicos como la evolución historica de cada uno de los protocolos y normas, son los <a href="http://www.rfc-editor.org/rfc.html"><strong>Request for Comments</strong></a> (<strong>RFC</strong>), algunos de los cuales han sido <a href="http://www.rfc-es.org/">traducidos al español</a>.</p>
<h3>Nuestro experimento</h3>
<p>Estableceremos una conexión <a href="http://es.wikipedia.org/wiki/TCP/IP"><strong>TCP/IP</strong></a> entre un cliente y un servidor que intercambiarán información. Para ello, utilizaremos el servidor desarrollado en el <a href="http://blog.smaldone.com.ar/2006/11/06/programacion-para-redes-y-concurrencia-i/">tutorial sobre programación en redes</a> (no es necesario que lo lea completamente, si no le interesa la programación, pero sería conveniente que revise los conceptos introductorios y el protocolo definido).</p>
<p>Ejecutamos entonces el servidor en el <a href="http://es.wikipedia.org/wiki/Host"><em>host</em></a> <strong>100.0.0.1</strong>, utilizando el puerto <strong>2222</strong> (cualquiera de las versiones desarrolladas en el tutorial anterior sirve, ya que el protocolo es idéntico) y usamos el comando <strong>telnet</strong> para actuar como cliente desde el <em>host</em> <strong>200.0.0.1</strong> (el texto en <em>cursiva</em> es introducido por nosotros y el texto en <strong>negrita</strong> es la respuesta del servidor):</p>
<p><code>javier@200.0.0.1:~$ <em>telnet 100.0.0.1 2222</em><br />
Trying 100.0.0.1...<br />
Connected to 100.0.0.1.<br />
Escape character is '^]'.<br />
<strong>Bienvenido.</strong><br />
<em>salir</em><br />
<strong>Adios.</strong><br />
Connection closed by foreign host.<br />
javier@200.0.0.1:~$</code></p>
<p>Esto es todo. Ahora procederemos a analizar cómo se ha llevado a cabo esta comunicación  a distintos niveles de abstracción.</p>
<h3>Nivel de aplicación</h3>
<p>A &#8220;<a href="http://es.wikipedia.org/wiki/Nivel_de_aplicaci%C3%B3n"><em>nivel de aplicación</em></a>&#8221; (lo que &#8220;<em>ven</em>&#8221; los programas), la comunicación se ha desarrollado de la siguiente manera:</p>
<ol>
<li>El cliente se conecta al servidor.</li>
<li>El servidor envía el mensaje &#8220;<strong>Bienvenido.</strong>&#8220;.</li>
<li>El cliente envía el comando &#8220;<strong>salir</strong>&#8220;.</li>
<li>El servidor responde con el mensaje &#8220;<strong>Adios.</strong>&#8220;.</li>
<li>El servidor cierra la conexión.</li>
<li>El cliente cierra la conexión.</li>
</ol>
<p>Esto es prácticamente lo mismo que podemos observar de la salida del comando <strong>telnet</strong> utilizado, lo cual no es casual; intencionalmente a este nivel se ocultan todos los detalles de implementación, que aparecerán cuando analicemos los niveles inferiores.</p>
<h3>Nivel de transporte</h3>
<p>El protocolo utilizado a &#8220;<a href="http://es.wikipedia.org/wiki/Nivel_de_transporte"><em>nivel de transporte</em></a>&#8221; es <strong>TCP</strong>. Este protocolo es el encargado de establecer la conexión y dividir la información en <em>paquetes</em>, garantizando que los mismos son entregados correctamente (sin pérdidas y en el orden apropiado).</p>
<p>Cabe resaltar aquí que el otro protocolo de transporte de <strong>TCP/IP</strong>, <a href="http://es.wikipedia.org/wiki/User_Datagram_Protocol"><strong>UDP</strong></a> no garantiza ni el arribo de todos los paquetes enviados, ni el orden en que estos llegan a destino. Por esto es mucho más simple, no incluyendo algunas de las características de <strong>TCP</strong> como números de secuencia y asentimientos.</p>
<p>A continuación analizaremos algunos aspectos del protocolo <a href="http://es.wikipedia.org/wiki/Transmission_Control_Protocol"><strong>TCP</strong></a>.</p>
<h4>Puertos y direcciones</h4>
<p>El protocolo <strong>TCP</strong> se basa en <a href="http://es.wikipedia.org/wiki/Direcci%C3%B3n_IP"><strong>direcciones IP</strong></a> para identificar los equipos (<em>hosts</em>) desde donde provienen y hacia donde se envían los paquetes.</p>
<p>Los <a href="http://es.wikipedia.org/wiki/TCP#Puertos_TCP"><strong>puertos</strong></a> (<em>ports</em>) son valores numéricos (entre 0 y 65535) que se utilizan para identificar a los procesos que se están comunicando. En cada extremo, cada proceso interviniente en la comunicación utiliza un puerto único para enviar y recibir datos.</p>
<p>En conjunción, dos pares de puertos y direcciones IP identifican univocamente a dos procesos en una red <strong>TCP/IP</strong>.</p>
<h4>Números de secuencia</h4>
<p><strong>TCP</strong> garantiza que la información es recibida en orden. Para ello, cada paquete enviado tiene un <em>número de secuencia</em>. Cada uno de los dos procesos involucrados mantiene su propia secuencia, que se inicia con un valor aleatorio y luego va incrementándose según la cantidad de bytes enviados.</p>
<p>Por ejemplo, si un paquete tiene número de secuencia <em>x</em> y contiene <em>k</em> bytes de datos, el número de secuencia del siguiente paquete emitido será <em>x</em> + <em>k</em>. (<em>Sí, el número de secuencia va contando la cantidad de bytes enviados por cada host</em>.)</p>
<h4>Paquetes y acuses de recibo</h4>
<p><strong>TCP</strong> también asegura que toda la información emitida es recibida. Para ello, por cada paquete emitido, debe recibirse un <a href="http://es.wikipedia.org/wiki/ACK">asentimiento</a> (en inglés &#8220;<em>acknowledgement</em>&#8220;, abreviado <strong>ACK</strong>). Si pasado determinado tiempo no se recibe el <strong>ACK</strong> correspondiente, la información será retransmitida.</p>
<p>El <strong>ACK</strong> hace referencia al número de secuencia (que ha su vez involucra la cantidad de bytes enviados). Por ejemplo, para comunicar que se ha recibido correctamente el paquete cuyo número de secuencia es <em>x</em>, que contiene <em>k</em> bytes, se enviará un <strong>ACK</strong> con el valor <em>x</em> + <em>k</em> (que coincide con el próximo número de secuencia a utilizar por parte del emisor del paquete en cuestión). Si el número de secuencia inicial es <em>x</em>, un valor de <strong>ACK</strong> <em>t</em> significa que el receptor ha recibido correctamente los primeros <em>t</em>-<em>x</em> bytes (en este sentido, el <strong>ACK</strong> es acumulativo).  </p>
<p>El <strong>ACK</strong> no es un paquete especial, sino un campo dentro de un paquete <strong>TCP</strong> normal. Por esto, puede ocurrir que se envíe un paquete a solo efecto de asentir una determinada cantidad de bytes, o como parte de un paquete de otro tipo (por ejemplo, aprovechando el envío de nuevos datos, para comunicar la recepción de datos anteriores). De hecho, aunque ya se haya enviado un paquete exclusivamente de <strong>ACK</strong> con un valor <em>t</em>, si luego se envía un paquete de datos, puede repetirse en él el <strong>ACK</strong> con el mismo valor <em>t</em>, sin que esto confunda al emisor de los datos que se están asintiendo. (Por simplicidad, en nuestro ejemplo hemos eliminado esta información redundante).</p>
<h4>Otros campos de un paquete TCP</h4>
<p>El protocolo <strong>TCP</strong> incorpora mecanismos tales como control de integridad de los datos (<em>checksum</em>), prevención de congestiones, entre otros, que no serán mencionados aquí por la simplicidad de este tutorial.</p>
<h4>Inicio y fin de la conexión</h4>
<p>Para dar comienzo a la conexión, el cliente envía un paquete <a href="http://es.wikipedia.org/wiki/SYN"><strong>SYN</strong></a> al puerto e <strong>IP</strong> en donde &#8220;<em>escucha</em>&#8221; el servidor, con un número de secuencia inicial aleatorio. Este último, responde con otro paquete <strong>SYN</strong>, con un número de secuencia inicial aleatorio y un <strong>ACK</strong> con el número de secuencia del paquete <strong>SYN</strong> recibido, más uno. El cliente  envía un paquete con el <strong>ACK</strong> del <strong>SYN</strong> recibido, y una vez hecho esto la conexión se encuentra establecida y puede darse comienzo a la transmisión de datos (iniciada por cualquiera de las partes, según el protocolo de aplicación que utilicen).</p>
<p>La razón por la cual se intercambian números de secuencia aleatorios es para evitar que se confunda el inicio de dos conexiones diferentes y algunos ataques que se basan en falsear el comienzo de una conexión (<a href="http://es.wikipedia.org/wiki/Spoofing"><em>spoofing</em></a>).</p>
<p>La siguiente figura ilustra el establecimiento de una conexión <strong>TCP</strong>, llamada &#8220;<em>negociación de tres pasos</em>&#8221; o &#8220;<em>3-way handshake</em>&#8220;:</p>
<div class="centerpic"><img src="http://blog.smaldone.com.ar/files/tcpip/inicio.png" alt="Inicio de una conexión TCP" /></div>
<p>Para finalizar la conexión, uno de los dos procesos envía un paquete <strong>FIN</strong>, a lo que el otro responderá con un <strong>ACK</strong>. A su vez, el otro proceso puede enviar un paquete <strong>FIN</strong> (recibiendo también un <strong>ACK</strong>) y la conexión quedará cerrada definitivamente.</p>
<p>Nótese que el segundo proceso puede no enviar el paquete <strong>FIN</strong>. Esto significa que ese extremo de la conexión no se cerrará, pudiendo aún enviar datos a través de la misma. De lo contrario, en caso de desear terminar la conexión, puede combinar el <strong>ACK</strong> y el <strong>FIN</strong> en un solo paquete (esta es la situación más común).</p>
<p>La siguiente figura ilustra la forma general de terminación de una conexión <strong>TCP</strong>:</p>
<div class="centerpic"><img src="http://blog.smaldone.com.ar/files/tcpip/fin.png" alt="Fin de una conexión TCP" /></div>
<h4>Análisis a nivel de transporte</h4>
<p>Habiendo revisado los conceptos más relevantes, analizaremos ahora la conexión realizada desde el punto de vista del <a href="http://es.wikipedia.org/wiki/TCP">protocolo <strong>TCP</strong></a>. Supondremos que el puerto utilizado por el cliente es <strong>4683</strong> (el del servidor, recordemos, es <strong>2222</strong>).</p>
<p>La siguiente figura muestra una visión simplificada de esta conexión:</p>
<div class="centerpic"><img src="http://blog.smaldone.com.ar/files/tcpip/sesion.png" alt="Sesión TCP" /></div>
<p><a href="http://blog.smaldone.com.ar/files/tcpip/sesion_big.png">(Ver imagen ampliada)</a></p>
<p>Veamos qué función cumple cada paquete:</p>
<ol>
<li>El cliente envía un <strong>SYN</strong> al servidor, con número de secuencia <em>x<sub>0</sub></em>.</li>
<li>El servidor responde con un paquete <strong>SYN</strong>, con número de secuencia <em>y<sub>0</sub></em> y un <strong>ACK</strong> con <em>x<sub>0</sub>+1</em> (en adelante, <em>x<sub>1</sub></em>).</li>
<li>El cliente envía un paquete <strong>ACK</strong> del <strong>SYN</strong> que acaba de recibir, con valor <em>y<sub>0</sub>+1</em> (en adelante, <em>y<sub>1</sub></em>). (A partir de este momento la conexión se encuentra establecida y puede comenzar el intercambio de datos entre las aplicaciones.)</li>
<li>El servidor envía un paquete <strong>PSH</strong> (&#8220;<em>push</em>&#8220;) conteniendo la cadena &#8220;<strong>Bienvenido.\n</strong>&#8221; (12 bytes), con número se secuencia <em>y<sub>1</sub></em>. (El caracter &#8220;<strong>\n</strong>&#8220;, <em>newline</em>, representa el fin de línea.)</li>
<li>El cliente envía un <strong>ACK</strong> por la correcta recepción del paquete anterior. El número de <strong>ACK</strong> es <em>y<sub>1</sub>+12</em> (que llamaremos <em>y<sub>2</sub></em> y será el próximo número de secuencia utilizado por el servidor).</li>
<li>El cliente envía la cadena &#8220;<strong>salir\r\n</strong>&#8220;, con número de secuencia <em>x<sub>1</sub></em>. (Los caracteres &#8220;<strong>\r\n</strong>&#8221; representan el fin de línea. Ver nota al final de la sección.)</li>
<li>El servidor envía el <strong>ACK</strong> correspondiente, con el valor <em>x<sub>1</sub></em> más la longitud de &#8220;<strong>salir\r\n</strong>&#8221; (<em>7</em>), que llamaremos <em>x<sub>3</sub></em>.</li>
<li>El servidor envía la cadena &#8220;<strong>Adios.\n</strong>&#8221; (7 bytes), con número de secuencia <em>y<sub>2</sub></em>.</li>
<li>El cliente envía el <strong>ACK</strong> con el valor <em>y<sub>2</sub>+7</em> (en adelante, <em>y<sub>3</sub></em>).</li>
<li>El servidor cierra su lado de la conexión enviando un paquete <strong>FIN</strong>, con secuencia <em>y<sub>3</sub></em>.</li>
<li>El cliente, que también cierra su conexión, envía un paquete <strong>FIN</strong> con secuencia <em>x<sub>3</sub></em>, con el <strong>ACK</strong> del paquete anterior (<em>y<sub>3</sub>+1</em>).</li>
<li>El servidor envía el <strong>ACK</strong> del anterior paquete <strong>FIN</strong> (con valor <em>x<sub>3</sub>+1</em>), con lo cual la conexión finaliza.</li>
</ol>
<p><em><strong>Nota:</strong> En este ejemplo podemos ver un error en el diseño del protocolo de aplicación, ya que el servidor representa los fines de línea con el caracter &#8220;<strong>\n</strong>&#8221; (&#8220;newline&#8221;, código ASCII 10), en tanto que el cliente está usando los caracteres &#8220;<strong>\r\n</strong>&#8221; (&#8220;newline&#8221; y &#8220;carriage return&#8221;, códigos ASCII 10 y 13, respectivamente). Esta última es la forma de representación más utilizada en aplicaciones <strong>TCP/IP</strong>.</em></p>
<h3>Nivel de red</h3>
<p>Antes de realizar el análisis a &#8220;<a href="http://es.wikipedia.org/wiki/Nivel_de_red"><em>nivel de red</em></a>&#8221; (<a href="http://es.wikipedia.org/wiki/Protocolo_de_Internet">protocolo <strong>IP</strong></a>) vamos a suponer que tenemos la siguiente topología:</p>
<div class="centerpic"><img src="http://blog.smaldone.com.ar/files/tcpip/red_ip.png" alt="Red IP" /></div>
<p>El cliente se ejecuta en el <em>host</em> cuya dirección IP es <strong>200.0.0.1</strong>. El mismo está conectado a la red local <strong>200.0.0.0/24</strong> y su <a href="http://es.wikipedia.org/wiki/Router"><em>gateway</em></a> (&#8220;<em>router</em>&#8220;, &#8220;<em>enrutador</em>&#8221; o &#8220;<em>puerta de enlace</em>&#8220;) es el <em>host</em> <strong>200.0.0.21</strong>.</p>
<p>La dirección de red local está compuesta por la <em>dirección de red</em> propiamente dicha, <strong>200.0.0.0</strong>, y la <a href="http://es.wikipedia.org/wiki/M%C3%A1scara_de_red"><em>máscara de red</em></a>, <strong>24</strong> (que también puede ser representada como <strong>255.255.255.0</strong>). Esto significa que los primeros <strong>24</strong> bits de cualquier dirección serán interpretados como identificador de la red, en tanto que los últimos <strong>8</strong> identificarán a cada <em>host</em> (recordemos que, aunque la notación usual es escribir las direcciones IP como cuatro números decimales separados por puntos, en realidad se componen de 32 bits).</p>
<p>Por ejemplo, en el contexto de esta red, la dirección <strong>200.0.0.45</strong> será considerada una dirección local (por coincidir los primeros <strong>24</strong> bits con los de la dirección de red). Esto significa que cualquier paquete destinado a dicha dirección IP, será entregado &#8220;<em>localmente</em>&#8221; (o sea, directamente a través del <em>protocolo de enlace</em>, como veremos más adelante).</p>
<p>En el caso de una dirección de destino &#8220;no-local&#8221;, los paquetes serán entregados al <em>gateway</em> <strong>200.0.0.21</strong> (usando el <em>protocolo de enlace</em>), quien será luego el encargado de entregar el paquete al <em>host</em> de destino (si este perteneciera a alguna red local a la que dicho <em>gateway</em> esté conectado), o reenviarlo a través de otro <em>gateway</em> (en caso contrario).</p>
<p>De la misma manera el servidor, cuya <strong>dirección IP</strong> es <strong>100.0.0.1</strong>, pertenece a la red <strong>100.0.0.0/24</strong>, cuyo <em>gateway</em> es <strong>100.0.0.35</strong>.</p>
<h4>Análisis a nivel de red</h4>
<p>A nivel IP no hay demasiado que agregar. Aquí se realiza el &#8220;<em>ruteo</em>&#8221; (o &#8220;<em>encaminamiento</em>&#8220;) de los paquetes provenientes de la capa de transporte (que en este nivel se denominan &#8220;<em>datagramas</em>&#8220;) desde la dirección IP de origen hasta la de destino (alternando estos roles <strong>100.0.0.1</strong> y <strong>200.0.0.1</strong> según sea el emisor el servidor o el cliente, respectivamente).</p>
<p>Un campo interesante que se añade es el <a href="http://es.wikipedia.org/wiki/Tiempo_de_Vida"><strong>TTL</strong></a> (&#8220;<em>tiempo de vida</em>&#8221; o &#8220;<em>time to live</em>&#8220;), que tiene un valor inicial en el <em>host</em> que produce el paquete (generalmente <strong>64</strong>) y luego es decrementado por cada <em>gateway</em> por el que pasa. Si un <em>gateway</em> recibe un paquete con el campo <strong>TTL</strong> en <strong>cero</strong>, el mismo es descartado y se genera un paquete del protocolo <a href="http://es.wikipedia.org/wiki/Internet_Control_Message_Protocol"><strong>ICMP</strong></a> (usado para control y mensajes de error) dirigido a su emisor, indicando que dicho paquete ha excedido la cantidad máxima de saltos. Esta medida es implementada para evitar que, quizás por un error de ruteo, un paquete quede indefinidamente &#8220;dando vueltas&#8221; por la red.</p>
<p>En este ejemplo supondremos que el enrutamiento de paquetes es simple (estático), para facilitar las explicaciones. Existen casos complejos en donde se utiliza enrutamiento dinámico, en los cuales paquetes pertenecientes a la misma comunicación pueden enviarse por caminos distintos, alterando inclusive el orden en que llegan al destino (y hasta pudiendo producirse pérdidas).</p>
<p>Debemos tener en cuenta que estamos usando el llamado <a href="http://es.wikipedia.org/wiki/IPv4"><strong>IPv4</strong></a> (IP versión 4), ya que también existe el <a href="http://es.wikipedia.org/wiki/IPv6"><strong>IPv6</strong></a> (IP versión 6), cuya aplicación se está difundiendo rápidamente en Internet y que soluciona muchos inconvenientes que presenta el anterior.</p>
<h3>Nivel de enlace</h3>
<p>El &#8220;<a href="http://es.wikipedia.org/wiki/Nivel_de_enlace_de_datos"><em>nivel de enlace</em></a>&#8221; es el nivel más cercano al &#8220;<a href="http://es.wikipedia.org/wiki/Nivel_f%C3%ADsico"><em>nivel físico</em></a>&#8221; y es totalmente independiente del protocolo <strong>TCP/IP</strong>. Existen gran variedad de tecnologías de este tipo; siendo las más comunes <a href="http://es.wikipedia.org/wiki/Ethernet"><strong>Ethernet</strong></a>, <a href="http://es.wikipedia.org/wiki/Wi-Fi"><strong>WiFi</strong></a>, <a href="http://es.wikipedia.org/wiki/Point-to-Point_Protocol"><strong>PPP</strong></a>, <a href="http://es.wikipedia.org/wiki/Frame_Relay"><strong>Frame Relay</strong></a>, <a href="http://es.wikipedia.org/wiki/Asynchronous_Transfer_Mode"><strong>ATM</strong></a>, entre otras.</p>
<p>Supondremos el caso más común: una red <a href="http://es.wikipedia.org/wiki/Ethernet">Ethernet</a>. Este protocolo se basa en el uso de direcciones de 6 bytes (48 bits), que no son &#8220;<em>ruteables</em>&#8221; (aquí no existen <em>gateways</em>), por lo cual se utiliza en <a href="http://es.wikipedia.org/wiki/LAN">redes de área local</a> (<strong>LANs</strong>). Cada dispositivo <strong>Ethernet</strong> tiene asociada una dirección única (asignada por el fabricante del mismo), la que usualmente se denomina <a href="http://es.wikipedia.org/wiki/MAC_address"><strong>MAC Address</strong></a>.</p>
<h4>Resolución de direcciones</h4>
<p>Supongamos que el <em>host</em> <strong>200.0.0.1</strong> quiere enviar un paquete IP al <em>host</em> <strong>200.0.0.33</strong>. Como ambos están en la misma red local (los primeros 24 bits de sus direcciones coinciden), lo único que debe hacer es averiguar cuál es la dirección <strong>Ethernet</strong> de este último. Para ello, se utiliza el protocolo <a href="http://es.wikipedia.org/wiki/Protocolo_de_resoluci%C3%B3n_de_direcciones"><strong>ARP</strong></a> (&#8220;<em>Address Resolution Protocol</em>&#8220;).</p>
<p>El funcionamiento es muy simple. El host <strong>200.0.0.1</strong> envía un paquete (en terminología de <strong>Ethernet</strong> se denomina &#8220;<em>frame</em>&#8220;) a la dirección <strong>ff:ff:ff:ff:ff:ff</strong> (las direcciones <strong>Ethernet</strong> se denotan con seis bytes en <a href="http://es.wikipedia.org/wiki/Hexadecimal">hexadecimal</a> separados por dos puntos), que es la dirección de <em>broadcast</em> (que llega a todos los <em>hosts</em> de la red) preguntando quién tiene la dirección IP <strong>200.0.0.33</strong>. Dicha solicitud <strong>ARP</strong> tiene como origen la dirección <strong>Ethernet</strong> del emisor (supongamos, <strong>00:30:b8:80:dd:11</strong>). </p>
<p>El poseedor de esa dirección IP le responderá con otro <em>frame</em> con su dirección <strong>Ethernet</strong> como origen (supongamos, <strong>01:4e:bb:a1:01:8b</strong>). De ahora en más, cada vez que el <em>host</em> <strong>200.0.0.1</strong> quiera enviar un paquete IP al <em>host</em> <strong>200.0.0.33</strong>, enviará un <em>frame</em> <strong>Ethernet</strong> proveniente de la dirección <strong>00:30:b8:80:dd:11</strong> a la dirección  <strong>01:4e:bb:a1:01:8b</strong>, conteniendo el paquete original. (La información sobre las direcciones <strong>ARP</strong> se almacenan en cada <em>host</em> en una tabla que tiene una duración de algunos minutos.)</p>
<h4>Fragmentación</h4>
<p>Puede ocurrir que el tamaño de los paquetes producidos por la capa de red (<strong>IP</strong>, en nuestro caso) sean de un tamaño mayor al máximo que puede transmitir el medio físico utilizado (<a href="http://es.wikipedia.org/wiki/MTU"><strong>MTU</strong></a> o &#8220;<em>unidad máxima de transferencia</em>&#8220;. Por esto, puede ocurrir que los paquetes se <em>fragmenten</em>, para acomodarse a esta limitación.</p>
<p>Esta situación puede volver a presentarse a lo largo del camino &#8220;físico&#8221; que recorra la información, siendo responsabilidad de cada <em>gateway</em> el fragmentar y reensamblar los paquetes para preservar los datos.</p>
<h4>Análisis a nivel de enlace</h4>
<p>Volviendo ahora a nuestro experimento, el <em>host</em> donde se ejecuta la aplicación cliente (<strong>200.0.0.1</strong>) debe enviar paquetes IP al <em>host</em> en donde se ejecuta el servidor (<strong>100.0.0.1</strong>). Claramente, éste último no pertenece a su red local, por lo cual deberá enviarlo a través del <em>gateway</em>.</p>
<p>Para ello, usando el protocolo <strong>ARP</strong> averigua la dirección <strong>Ethernet</strong> del <em>gateway</em> (cuya dirección IP, recordemos, es <strong>200.0.0.21</strong>), que supondremos es <strong>00:01:02:ed:41:61</strong>. Una vez hecho esto, envía un frame <strong>Ethernet</strong> (con origen<br />
<strong>00:30:b8:80:dd:11</strong> y destino <strong>00:01:02:ed:41:61</strong>), conteniendo el paquete IP cuyo origen es <strong>200.0.0.1</strong> y con destino a <strong>100.0.0.1</strong>.</p>
<p>El <em>gateway</em> recibirá el <em>frame</em> (puesto que la dirección <strong>Ethernet</strong> de destino es la suya) y dentro de él encontrará un paquete IP dirigido a <strong>100.0.0.1</strong>. Decrementará el campo <strong>TTL</strong> y, en base a las reglas definidas en su &#8220;<em>tabla de <a href="http://es.wikipedia.org/wiki/Enrutamiento">enrutamiento</a></em>&#8221; (o &#8220;<em>tabla de ruteo</em>&#8220;), lo reenviará hacia el <em>gateway</em> correspondiente (usando el protocolo asociado al medio físico mediante el cual esté conectado con éste).</p>
<p>Una situación similar se presenta considerando los paquetes emitidos por el <em>host</em> <strong>100.0.0.1</strong> hacia <strong>200.0.0.1</strong>.</p>
<p>De esta manera, el mismo paquete IP va atravesando distintos <em>gateways</em> a través de distintos medios físicos (que involucran diferentes protocolos de enlace), hasta llegar al <em>host</em> de destino. Por ejemplo, el paquete original puede llegar al primer <em>gateway</em> a través de un <em>frame</em> <strong>Ethernet</strong>, ser enviado por este al <em>gateway</em> del proveedor de Internet a través de un paquete <strong>PPP</strong>, atravesar una red <strong>ATM</strong> en Internet, luego llegar por un enlace <strong>Frame Relay</strong> al <em>gateway</em> de la red de destino, y ser entregado en otro <em>frame</em> <strong>Ethernet</strong> al <em>host</em> de destino.</p>
<h3>El camino de la información a través de las distintos niveles</h3>
<p>La siguiente figura ilustra un ejemplo del camino que sigue la información desde la aplicación que la produce, a través de los distintos niveles o capas de cada protocolo.</p>
<div class="centerpic"><img src="http://blog.smaldone.com.ar/files/tcpip/pila.png" alt="Las distintas capas" /></div>
<p><a href="http://blog.smaldone.com.ar/files/tcpip/pila_big.png">(Ver imagen ampliada)</a></p>
<p><em><strong>Nota:</strong> Este ejemplo es una simplificación de la realidad. Se han omitido muchos otros datos que forman parte de cada protocolo (controles de error, delimitadores, indicadores de longitud, etc.), que no son relevantes en el contexto de este tutorial.</em></p>
<ol>
<li><strong>Nivel de aplicación</strong>: La aplicación (en este caso, el programa cliente), escribe la cadena &#8220;<strong>salir\n</strong>&#8220;.</li>
<li><strong>Nivel de transporte</strong>: En la capa <strong>TCP</strong> forma un paquete agregando el número de secuencia (<strong>20</strong>), puerto de origen (<strong>4781</strong>) y puerto de destino (<strong>2222</strong>).</li>
<li><strong>Nivel de red</strong>: En la capa <strong>IP</strong> se forma un paquete (<em>datagrama</em>) añadiendo la dirección IP origen (<strong>200.0.0.1</strong>), destino (<strong>100.0.0.1</strong>), el <strong>TTL</strong> (<strong>64</strong>) y un valor que identifica el protocolo del paquete encapsulado (<strong>0&#215;06</strong>, valor hexadecimal que representa al protocolo <strong>TCP</strong>).</li>
<li><strong>Nivel de enlace</strong>: En la capa <strong>Ethernet</strong> se forma un nuevo paquete (<em>frame</em>) agregando las direcciones <strong>Ethernet</strong> de origen (<strong>00:30:b8:80:dd:11</strong>) y destino (<strong>00:01:02:ed:41:61</strong>, la dirección del gateway, cuya IP es <strong>200.0.0.21</strong>). Se añade además el identificador del tipo de protocolo del paquete contenido (el valor <strong>0&#215;800</strong> corresponde al protocolo <strong>IP</strong>).</li>
<li><strong>Nivel físico</strong>: El <em>frame</em> formado es enviado a través del medio físico que vincula los <em>hosts</em> de la red local (típicamente, <a href="http://es.wikipedia.org/wiki/Cable_de_par_trenzado">cable de par trenzado</a>).</li>
</ol>
<p>Como puede apreciarse, tanto el protocolo <strong>IP</strong> como <strong>Ethernet</strong> &#8220;<em>encapsulan</em>&#8221; a otros protocolos. Esto permite realizar distintas combinaciones, creando &#8220;<em>túneles</em>&#8221; (como en el caso del ampliamente difundido y utilizado <a href="http://es.wikipedia.org/wiki/PPPoE"><strong>PPPoE</strong></a>).</p>
<h3>Software, modelo conceptual y hardware</h3>
<p>El siguiente diagrama muestra la relación entre cada uno de los componentes lógicos analizados, su implementación y la división entre <em>hardware</em> y <em>software</em>.</p>
<div class="centerpic"><img src="http://blog.smaldone.com.ar/files/tcpip/capas.png" alt="Relación entre los componentes" /></div>
<h3>Para finalizar</h3>
<p>En este tutorial hemos recorrido cada uno de los principales componentes del protocolo <strong>TCP/IP</strong> y analizado su función a través de un ejemplo concreto (aunque simple).</p>
<p>Deliberadamente, hemos omitido algunos puntos importantes, como el sistema <a href="http://es.wikipedia.org/wiki/Domain_Name_System">DNS</a> (que posibilita la utilización de nombres en vez de direcciones IP), la asignación automática de direcciones IP (a través del protocolo <a href="http://es.wikipedia.org/wiki/DHCP">DHCP</a>), y algunos detalles sobre <a href="http://es.wikipedia.org/wiki/Protocolo_de_Internet#Direccionamiento_IP_y_enrutamiento">direccionamiento y enrutamiento</a> IP. (Quizás algunos de ellos sean motivo de próximos tutoriales.)</p>
<p>Es el deseo del autor que a través de la lectura del presente tutorial se haya podido lograr un panorama general acerca del funcionamiento de las redes <strong>TCP/IP</strong>, posibilitando al lector su avance hacia temas (y, por qué no, experimentos) más complejos e interesantes.</p>
<p>Las críticas, sugerencias y comentarios son bienvenidos y agradecidos.</p>
<p><em>(Recuerde que puede <a href="http://blog.smaldone.com.ar/files/tcpip/tutorial_tcpip.tgz">descargar este tutorial en otros formatos</a>  (HTML sin decoraciones y PDF).)</em></p>
<p><em><strong>Actualización del 5 de diciembre de 2006</strong>: He publicado un artículo sobre <a href="http://blog.smaldone.com.ar/2006/12/05/como-funciona-el-dns/">el funcionamiento del <strong>DNS</strong></a>, uno de los temas no cubiertos por el presente tutorial.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.smaldone.com.ar/2006/11/21/tutorial-sobre-tcpip/feed/</wfw:commentRss>
		<slash:comments>54</slash:comments>
		</item>
		<item>
		<title>TCP/IP es simple</title>
		<link>http://blog.smaldone.com.ar/2006/11/02/tcpip-es-simple/</link>
		<comments>http://blog.smaldone.com.ar/2006/11/02/tcpip-es-simple/#comments</comments>
		<pubDate>Thu, 02 Nov 2006 13:04:19 +0000</pubDate>
		<dc:creator>Javier</dc:creator>
				<category><![CDATA[Educación]]></category>
		<category><![CDATA[Redes]]></category>

		<guid isPermaLink="false">http://blog.smaldone.com.ar/2006/11/02/tcpip-es-simple/</guid>
		<description><![CDATA[Parece increible, pero la realidad nos muestra que muchos informáticos desconocen totalmente los principios del funcionamiento de Internet y las redes IP en general (aún muchos que trabajan en áreas relacionadas). En muchos casos, no ayudan ni el pésimo nivel de muchas materias universitarias (algunos analistas son formados sin siquiera una introducción a las redes), [...]]]></description>
			<content:encoded><![CDATA[<p>Parece increible, pero la realidad nos muestra que muchos informáticos desconocen totalmente los principios del funcionamiento de Internet y las redes IP en general (aún muchos que trabajan en áreas relacionadas).</p>
<p>En muchos casos, no ayudan ni el pésimo nivel de muchas materias universitarias (algunos analistas son formados sin siquiera una introducción a las redes), ni el afán de ocultar la realidad de muchos libros de texto. No me ocuparé del primer caso (al menos por ahora), pero sí quiero hacer hincapié en el segundo.</p>
<p><span id="more-57"></span></p>
<p>Muchos textos nos presentan algunas definiciones, en términos demasiado amplios y poco técnicos, para luego guiarnos por distintas configuraciones (típicamente usando ejemplos sobre la plataforma <strong>Windows</strong>, plagados de capturas de pantallas y cuadros de diálogo). Parecen querer esquivar, a toda costa, los detalles &#8220;<em>duros</em>&#8221; detrás de todo esto: el conjunto de protocolos <strong>TCP/IP</strong>. Apenas se detienen en lo indispensable:  direccionamiento <strong>IP</strong> y algo (lo menos posible) sobre enrutamiento de paquetes (o ruteo).</p>
<p>Así es que luego aparecen informáticos que creen que un &#8220;<em>puerto</em>&#8221; abierto es algo peligroso y poco recomendable, que son incapaces de detectar la causa del menor problema en la red (&#8220;<em>se cayó la red</em>&#8220;, es todo lo que pueden decir) y gente que habla de &#8220;<em>puertas de enlace</em>&#8221; y &#8220;<em>conectividad limitada o nula</em>&#8221; sin tener la menor sospecha de qué significan estas cosas.</p>
<p>Es notable el caso de la bibliografía producida por empresas como <strong>Microsoft</strong> y <strong>Cisco</strong> que, con la promesa de introducir al lector al campo de las redes informáticas, lo único que hacen es tratar de &#8220;<em>capturarlo</em>&#8221; en el mundo de sus productos. Esto se logra, por ejemplo, redefiniendo todas las palabras que les sea posible a su terminología propia, impidiendo al desafortunado lector el poder relacionar los conocimientos adquiridos con otros textos. De esta forma se forman &#8220;<em>especialistas</em>&#8221; que desconocen los fundamentos y las cuestiones más generales.</p>
<p>Más allá del por qué de este enfoque poco útil (aunque tan usual), lo importante es destacar que el protocolo <strong>TCP/IP</strong> es <em>extremadamente simple</em>.</p>
<p><strong>TCP/IP</strong> fue diseñado a principios de la década de los &#8217;70 con el objetivo de interconectar redes de gran tamaño. Si nos detenemos a pensar en las capacidades de las computadoras de la época, sumando el hecho de que no podía desperdiciarse equipamiento en las funciones de la red, resulta claro que el protocolo a diseñar debía ser <em>simple</em> y no requerir de gran poder de cómputo para su implementación.</p>
<p>La simpleza de <strong>TCP/IP</strong> ha sido la clave del éxito de <strong>Internet</strong> y es la razón por la cual ésta está dejando obsoleta a otras redes <em>complejas</em> como el sistema de telefonía. (Un excelente artículo, &#8220;<a href="http://www.hyperorg.com/misc/stupidnet.html">The rise of the stupid network</a>&#8220;, analiza esto de forma muy clara.)</p>
<p>Desde un punto de vista &#8220;<em>no técnico</em>&#8221; la simpleza de Internet está claramente explicada en el artículo &#8220;<a href="http://www.worldofends.com/">World of Ends</a>&#8221; (traducido al castellano como &#8220;<a href="http://www.smaldone.com.ar/documentos/docs/mundodeextremos.html">Mundo de Extremos</a>&#8220;).</p>
<p>Para aquellos con una base de conocimientos técnicos, he aquí una serie de sugerencias:</p>
<ul>
<li>En <strong>Wikipedia</strong> hay una página dedicada a los <a href="http://es.wikipedia.org/wiki/Familia_de_protocolos_de_Internet">protocolos de Internet</a> con abundante información sobre cada uno de ellos y con enlaces muy recomendables.</li>
<li>El mejor libro que he leído sobre <strong>TCP/IP</strong> es &#8220;<a href="http://www.kohala.com/start/tcpipiv1.html">TCP/IP Illustrated Volume 1</a>&#8221; de W. Richard Stevens.</li>
<li>Existen herramientas muy útiles, como <a href="http://www.wireshark.org/">WireShark</a> (antes llamado <em>Ethereal</em>), que permiten capturar tráfico de la red y analizarlo. Así es posible &#8220;<em>ver</em>&#8221; cómo funcionan los protocolos. Un experimento muy simple, por ejemplo, es capturar el tráfico mientras uno abre una página web en su navegador.</li>
<li>Ejercitar el pensamiento crítico. Buscar, indagar y experimentar acerca del funcionamiento de las redes.</li>
<li>Para profundizar tanto como se desee, no es necesario comprar ningún libro. Toda la documentación de los protocolos de Internet y su evolución está disponible a través de los &#8220;<a href="http://www.rfc-editor.org/rfc.html">Request For Comments</a>&#8220;, o <strong>RFC</strong> (gran cantidad de ellos <a href="http://www.rfc-es.org/">traducidos al castellano</a>).</li>
</ul>
<p>Es penoso ver a programadores que no saben en dónde ni cómo se ejecutan sus aplicaciones. Por más que posean una herramienta de desarrollo que, con hacer un clic, les genere un sistema cliente/servidor muy complejo; sin comprender lo que hay &#8220;<em>detrás</em>&#8221; jamás serán capaces de descubrir el origen de ciertos errores (&#8220;<em>en mi PC corria bien, pero cuando lo subo al servidor no anda</em>&#8220;).</p>
<p>También es triste ver a informáticos recomendando la compra de dispositivos de red (switches, routers, etc.) para solucionar problemas que podrían resolverse con un direccionamiento IP apropiado.</p>
<p>Lo más lamentable de esto es que la solución es muy simple, y está al alcance de cualquiera. Realmente&#8230; ¿quién no quiere comprender <strong>cómo funciona Internet</strong>?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.smaldone.com.ar/2006/11/02/tcpip-es-simple/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>OpenVPN: estabilidad, economía y simpleza en VPNs</title>
		<link>http://blog.smaldone.com.ar/2006/10/21/openvpn-estabilidad-economia-y-simpleza-en-vpns/</link>
		<comments>http://blog.smaldone.com.ar/2006/10/21/openvpn-estabilidad-economia-y-simpleza-en-vpns/#comments</comments>
		<pubDate>Sat, 21 Oct 2006 09:04:49 +0000</pubDate>
		<dc:creator>Javier</dc:creator>
				<category><![CDATA[Redes]]></category>

		<guid isPermaLink="false">http://blog.smaldone.com.ar/2006/10/21/openvpn-estabilidad-economia-y-simpleza-en-vpns/</guid>
		<description><![CDATA[A la hora de montar redes privadas virtuales (VPNs) muchos consultores aconsejan a sus clientes la utilización de hardware específico (dedicado). Tipicamente se instala un router (enrutador) Linksys BEFVP41 (u$s 180) como servidor y routers Linksys BEFSX41 (u$s 120) en cada red a conectar, todo esto utilizando el protocolo IPSec. En caso de querer conectar [...]]]></description>
			<content:encoded><![CDATA[<p>A la hora de montar <a href="http://es.wikipedia.org/wiki/Red_privada_virtual">redes privadas virtuales</a> (<strong>VPNs</strong>) muchos consultores aconsejan a sus clientes la utilización de hardware específico (dedicado). Tipicamente se instala un <em>router</em> (enrutador) <strong>Linksys BEFVP41</strong> (u$s 180) como servidor y <em>routers</em> <strong>Linksys  BEFSX41</strong>  (u$s 120) en cada red a conectar, todo esto utilizando el protocolo <strong>IPSec</strong>. En caso de querer conectar PCs o Notebooks individuales (por lo general con <em>Windows XP/2000</em>) se suele configurar un tunel <strong>IPSec</strong> o utilizar el <strong>cliente de VPN Microsoft</strong> (que utiliza el poco recomendable protocolo <strong>PPTP</strong>).</p>
<p>Esta solución tiene varios puntos en contra:</p>
<p><span id="more-49"></span></p>
<ul>
<li><strong>Costo elevado</strong>: La adquisición de hardware dedicado para el establecimiento de la <strong>VPN</strong> supone un gasto de al menos u$s 300, en el caso más simple.</li>
<li><strong>Dificultad de configuración</strong>: La correcta configuración del protocolo <strong>IPSec</strong> puede presentar varias dificultades, lo cual va en detrimento de la seguridad.</li>
<li><strong>Poca flexibilidad</strong>: La configuración de <strong>IPSec</strong> se dificulta aún más (hasta llegar a ser imposible en algunos casos) en presencia de direcciones IP dinámicas, NAT (<em>masquerading</em>) y <em>firewalls</em>. Esto es particularmente importante en el caso de clientes móviles (<em>road warriors</em>) que accederán a Internet desde cybercafés, hoteles, etc.</li>
</ul>
<h3>OpenVPN: VPNs por software</h3>
<p><a href="http://openvpn.net/">OpenVPN</a> es un software libre para la implementación de <strong>VPNs</strong> usando el protocolo <strong>SSL</strong>. Sus principales características son:</p>
<ul>
<li><strong>Multiplataforma</strong>: Tanto el servidor como el cliente pueden ejecutarse bajo <strong>GNU/Linux</strong>, <strong>Windows XP/2000</strong> o superior, <strong>Mac OS/X</strong>, derivados de <strong>BSD</strong>, entre otros sistemas operativos. También existe un cliente para <strong>Pocket PC</strong>.</li>
<li><strong>Gratuito</strong>: Puede obtenerse y utilizarse gratuitamente en <strong>VPNs</strong> de cualquier tamaño.</li>
<li><strong>Facilidad de configuración</strong>: Su <a href="http://openvpn.net/howto.html">excelente documentación</a> simplifica el proceso de instalación y configuración.</li>
<li><strong>Flexibilidad</strong>: Puede ser utilizado en redes complejas sin mayor impacto en su configuración. Soporta adecuadamente el uso de direcciones IP dinámicas, NAT, <em>firewalls</em> y hasta permite el establecimiento de las conexiones a través de <em>proxys HTTP</em>.</li>
</ul>
<p>A continuación puede verse la <a href="http://openvpn.se/">interfaz gráfica</a> del cliente de <a href="http://openvpn.net/">OpenVPN</a> corriendo bajo <strong>Windows XP</strong>:</p>
<div class="centerpic"><img src="/files/openvpn/openvpn.png" alt="Cliente de OpenVPN para Windows" /></div>
<p>Aquí podemos ver que el usuario tiene dos conexiones de <strong>VPN</strong> configuradas: <em>Office</em>, conectada, y <em>Home</em>, desconectada. En cada caso, tiene las opciones de conectar/desconectar, ver el estado, cambiar la configuración y la contraseña. También puede observarse la opción de configurar un servidor <em>proxy</em> para establecer la conexión (muy útil en caso de conectarse desde redes con <em>firewalls</em> o de acceso a Internet restringido).</p>
<p>Con respecto a la estabilidad, <a href="http://openvpn.net/">OpenVPN</a> es un programa muy robusto y ofrece la posibilidad de implementar esquemas de servidores redundantes y con balance de carga.</p>
<h3>Conclusión</h3>
<p><a href="http://openvpn.net/">OpenVPN</a> vuelve innecesaria la adquisición de hardware dedicado, resultando en una solución más económica, simple, flexible y escalable. Ante la necesidad de implementar  una <strong>VPN</strong> debería considerarse seriamente su utilización.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.smaldone.com.ar/2006/10/21/openvpn-estabilidad-economia-y-simpleza-en-vpns/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

