<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Asterisk México</title>
	
	<link>http://asteriskmx.com</link>
	<description>Cursos, asesoría y ayuda sobre Asterisk</description>
	<lastBuildDate>Thu, 26 Apr 2012 16:30:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/asteriskmx" /><feedburner:info uri="asteriskmx" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Permitiendo llamadas no autenticadas del exterior (con restricciones)</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/o2p8mbVbR1k/</link>
		<comments>http://asteriskmx.com/2012/04/permitiendo-llamadas-no-autenticadas-del-exterior-con-restricciones/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 16:30:27 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[freepbx]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=518</guid>
		<description><![CDATA[En este blog y en muchos otros se ha discutido el uso de aplicaciones como fail2ban para impedir ataques de fuerza bruta combinado junto con iptables para denegar el acceso a fuentes no autorizadas. Existe un caso especial que es cuando tenemos que aceptar las llamadas anónimas del exterior sin importar desde donde se originen, [...]]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_522" class="wp-caption alignright" style="width: 234px"><a href="http://asteriskmx.com/wp-content/uploads/2012/04/stop1.jpg#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-full wp-image-522" title="stop[1]" src="http://asteriskmx.com/wp-content/uploads/2012/04/stop1.jpg" alt="" width="224" height="225" /></a><p class="wp-caption-text">Fuente: http://www.datacenta.com/Pictures/stop.jpg</p></div>En este blog y en muchos otros se ha discutido el uso de aplicaciones como <a title="Protege tu Asterisk de ataques usando fail2ban" href="http://asteriskmx.com/2011/07/protege-tu-asterisk-de-ataques-usando-fail2ban/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">fail2ban</a> para impedir ataques de fuerza bruta combinado junto con <a title="Modelo de seguridad en Asterisk (parte 1 de 3)" href="http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-1-de-3/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">iptables</a> para denegar el acceso a fuentes no autorizadas. Existe un caso especial que es cuando tenemos que aceptar las llamadas anónimas del exterior sin importar desde donde se originen, y ese es el caso del que voy a comentar a continuación.</p>
<p>Recibir llamadas anónimas no es malo, pero hay que saber lo que se hace y tomar las precauciones necesarias. Al permitir las llamadas entrantes desde cualquier fuente estamos permitiendo que cualquiera nos contacte via IP, para que así el interesado no tenga que paga costos de LD, ni tampoco tenga que hacer algún setup muy elaborado en su conmutador. Ofrecer un peer de autenticación a cada usuario sería un poco difícil, ya que lo que se espera de estos escenarios es que la comunicación sea en un solo sentido (de afuera nos marcan a nosotros hacia adentro) y también, buscas hacerla lo más fácil de marcar para el usuario final.</p>
<p>En nuestro caso, nosotros permitimos llamadas provenientes del exterior pero solo hacia nuestras extensiones internas. De esta manera, no hay costos relacionados con ataques porque las llamadas <em>nunca</em> vuelven a salir hacia la PSTN. Solo pueden comunicarse a nuestras extensiones internas y DIDs. El único problema, es que a veces los equipos que atacan piensan que al no negar las llamadas, vamos a permitirlas salir, así que nos mandan intentos de ataques de unas 40 llamadas simultáneas, lo que hace que nuestros teléfonos comiencen a sonar una y otra vez.</p>
<p>Para evitar que nuestro conmutador se atiborre de llamadas que no deseamos, pero que al mismo paso permita las llamadas que si queremos, debemos permitir lo siguiente desde nuestro GUI:</p>
<ul>
<li>Permitir llamadas anónimas: <strong>si</strong></li>
</ul>
<p>Y luego hacemos esta combicación de plan de llamadas personalizado y fail2ban (estamos usando FreePBX). Dentro del archivo <strong>extensions_custom.conf </strong>ponemos:</p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Código</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="br0">&#91;</span>ext-did-post-custom<span class="br0">&#93;</span>
exten =<span class="sy0">&gt;</span> _X.,<span class="nu0">1</span>,Macro<span class="br0">&#40;</span>contador,<span class="co1">${SIPCHANINFO(peerip)}</span>,<span class="nu0">3</span><span class="br0">&#41;</span>
exten =<span class="sy0">&gt;</span> _X.,n,Goto<span class="br0">&#40;</span>ext-did-catchall,<span class="co1">${EXTEN}</span>,<span class="nu0">1</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#91;</span>macro-contador<span class="br0">&#93;</span>
exten =<span class="sy0">&gt;</span> s,<span class="nu0">1</span>,GotoIf<span class="br0">&#40;</span>$<span class="br0">&#91;</span><span class="co1">${GROUP_COUNT(${ARG1}</span><span class="br0">&#41;</span><span class="br0">&#125;</span><span class="sy0">&lt;</span>=<span class="co1">${ARG2}</span><span class="br0">&#93;</span>?Permite<span class="br0">&#41;</span>
exten =<span class="sy0">&gt;</span> s,n,Noop<span class="br0">&#40;</span>LLAMADAS EXCEDIDAS POR <span class="co1">${ARG1}</span>. BLOQUEANDO<span class="br0">&#41;</span>
exten =<span class="sy0">&gt;</span> s,n,Congestion<span class="br0">&#40;</span><span class="br0">&#41;</span>
exten =<span class="sy0">&gt;</span> s,n<span class="br0">&#40;</span>Permite<span class="br0">&#41;</span>,Set<span class="br0">&#40;</span>GROUP<span class="br0">&#40;</span><span class="co1">${CDR(uniqueid)}</span><span class="br0">&#41;</span>=<span class="co1">${ARG1}</span><span class="br0">&#41;</span></pre></div></div>
<p>Lo que estoy haciendo aquí es que siempre que reciba una llamada en mi FreePBX que <em>no</em> esté especificada hacia una extensión y/o DID que tenga dado de alta, el contexto [ext-did-post-custom] lo procesará y hará un análisis del número máximo de llamadas simultáneas que debe permitir.</p>
<ul>
<li>Si se exceden 3 llamadas de acuerdo al ejemplo, debo cortar el paso y enviar un mensaje a consola que diga &#8220;LLAMADAS EXCEDIDAS&#8221;</li>
<li>Si no se excede, permito el paso enviando la llamada hacia la cláusula default [ext-did-catchall]</li>
<li>Si recibo llamadas desde una fuente &#8220;no autorizada&#8221; hacia un número que si existe en mi sistema, el contexto [ext-did] lo procesará de manera normal</li>
<li>Si el origen ya fuera autorizado, caerá en el contexto que sea que yo le haya especificado y hará caso omiso de esta configuración</li>
</ul>
<p>Tras hacer la modificación correspondiente y recargar, el mensaje de &#8220;LLAMADAS EXCEDIDAS&#8221; ya aparece en mis logs. Ahora debo modificar mi fail2ban para que tome en cuenta este texto y bloquee a nivel de firewall a aquellos que nos manden llamadas en bruto.</p>
<p>Basándome en el artículo de fail2ban anterior que publicamos hace unos meses, modifico el /etc/fail2ban/filter.d/asterisk.conf para que quede así:</p>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Código</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;">failregex = Registration from <span class="st_h">'.*'</span> failed <span class="kw1">for</span> <span class="st_h">'(:[0-9]{1,5})?'</span> - Wrong password
Registration from <span class="st_h">'.*'</span> failed <span class="kw1">for</span> <span class="st_h">'(:[0-9]{1,5})?'</span> - No matching peer found
Registration from <span class="st_h">'.*'</span> failed <span class="kw1">for</span> <span class="st_h">'(:[0-9]{1,5})?'</span> - Device does not match ACL
Registration from <span class="st_h">'.*'</span> failed <span class="kw1">for</span> <span class="st_h">'(:[0-9]{1,5})?'</span> - Username<span class="sy0">/</span>auth name mismatch
Registration from <span class="st_h">'.*'</span> failed <span class="kw1">for</span> <span class="st_h">'(:[0-9]{1,5})?'</span> - Peer is not supposed to register
LLAMADAS EXCEDIDAS DESDE <span class="br0">&#40;</span>:<span class="br0">&#91;</span>0-9<span class="br0">&#93;</span><span class="br0">&#123;</span>1,5<span class="br0">&#125;</span><span class="br0">&#41;</span>?
NOTICE.<span class="sy0">*</span> failed to authenticate <span class="kw2">as</span> <span class="st_h">'.*'</span>$
NOTICE.<span class="sy0">*</span> .<span class="sy0">*</span>: No registration <span class="kw1">for</span> peer <span class="st_h">'.*'</span> <span class="br0">&#40;</span>from <span class="br0">&#41;</span>
NOTICE.<span class="sy0">*</span> .<span class="sy0">*</span>: Host failed MD5 authentication <span class="kw1">for</span> <span class="st_h">'.*'</span> <span class="br0">&#40;</span>.<span class="sy0">*</span><span class="br0">&#41;</span>
VERBOSE.<span class="sy0">*</span> logger.c: <span class="re5">--</span> .<span class="sy0">*</span>IP<span class="sy0">/</span>-.<span class="sy0">*</span> Playing <span class="st_h">'ss-noservice'</span> <span class="br0">&#40;</span>language <span class="st_h">'.*'</span><span class="br0">&#41;</span>
LLAMADAS EXCEDIDAS POR</pre></div></div>
<p>Si el fail2ban atrapa estas líneas, bloqueará al host por el tiempo que le hayamos especificado en el archivo jail.conf.</p>
<p>Debo destacar que este es un caso muy especial que pocos querrán utilizar, pero es bueno saber que se puede ser precavido y a la vez, flexible con el uso de tu conmutador. Dado que permitir llamadas anónimas expone tu conmutador, la responsabilidad de este código recae en quien lo usa, por lo que no debes aplicarlo si no estas seguro de que es lo que hará.</p>
<p>¡Suerte!</p>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/o2p8mbVbR1k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/04/permitiendo-llamadas-no-autenticadas-del-exterior-con-restricciones/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/04/permitiendo-llamadas-no-autenticadas-del-exterior-con-restricciones/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
		<item>
		<title>Explotando vulnerabilidades en teléfonos autenticados: Yealink</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/_jthzItnD68/</link>
		<comments>http://asteriskmx.com/2012/04/explotando-vulnerabilidades-en-telefonos-autenticados-yealink/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 16:30:05 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=506</guid>
		<description><![CDATA[Hace unos días recibí una llamada de uno de mis clientes. La historia comienza con una de las frases que menos me gusta escuchar en mi medio: - Christian, ¿puedes venir? Nos hackearon el conmutador de la oficina&#8230; Acudí en menos de una hora al sitio (yo no tenía acceso remoto y ni siquiera tenía conocimiento [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_507" class="wp-caption alignright" style="width: 250px"><a href="http://asteriskmx.com/wp-content/uploads/2012/04/ResizedImage500450-T20P1.jpg#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class=" wp-image-507 " style="float: right;" title="Yealink T20P" src="http://asteriskmx.com/wp-content/uploads/2012/04/ResizedImage500450-T20P1-300x270.jpg" alt="" width="240" height="216" /></a><p class="wp-caption-text">Yealink T20P: teléfono básico</p></div>
<p>Hace unos días recibí una llamada de uno de mis clientes. La historia comienza con una de las frases que menos me gusta escuchar en mi medio:</p>
<p><em>- Christian, ¿puedes venir? Nos hackearon el conmutador de la oficina&#8230;</em></p>
<p>Acudí en menos de una hora al sitio (yo no tenía acceso remoto y ni siquiera tenía conocimiento de este equipo) y me dí a la labor de revisar los logs para tratar de reconstruir el caso. Sin embargo, me encontré con lo siguiente:</p>
<ul>
<li>El equipo tenía servicios de iptables y fail2ban protegiéndolo</li>
<li>Las contraseñas de SIP eran seguras</li>
<li>No se recibían conexiones ni por SIP ni por HTTPS del exterior</li>
<li>Todas las llamadas habían sido originadas desde una extensión</li>
<li>Apache no tenía registros de IPs externas, tampoco Asterisk.</li>
</ul>
<p>Todo parecía indicar que hubiera sido un <em>inside job</em>, y en efecto (al menos parcialmente), así fue.</p>
<p>Por más que busqué no encontré señales de como había logrado entrar, pero las llamadas estaban en el CDR y en el gateway SIP que terminaba la comunicación. ¿Qué ocurrió entonces?</p>
<p>De pronto, el empleado al que pertenece el teléfono cuya cuenta SIP ocasionó todas las llamadas, exclamó lo siguiente:</p>
<blockquote><p>- Mi teléfono ha estado <em>raro</em>. Varias veces en la mañana estuvo &#8220;marcando solo&#8221; y yo solamente escuchaba una grabación a veces de que la llamada no había podido ser completada</p></blockquote>
<p>Momento&#8230; ¿marcando <em>solo</em>? ¿Desde cuando los teléfonos se marcan <em>solos</em>? Se trataba de un Yealink T20, el cual es un modelo extremadamente sencillo y económico. ¿Qué funcionalidad podría tener que hiciera que marcara solo?</p>
<p>La respuesta es: <strong>los Yealink ofrecen la posibilidad de marcación automática a través de una simple y sencilla petición HTTP</strong> que requiere autenticación, pero si nunca cambian la contraseña de usuario y administrador del teléfono (lo cual casi nadie hace), <strong>cualquiera puede hacer que el teléfono marque solo hacia cualquier destino</strong>.</p>
<p>Si tienen un teléfono Yealink consigo (cualquier modelo), prueben hacer esto en su casa/oficina:</p>
<p>Supongamos que la IP de nuestro Yealink sea <strong>192.168.1.101</strong>. Asumimos que en nuestro Asterisk existe un plan de marcación que nos permite marcar larga distancia. Imaginemos el número <strong>018881234567. </strong>Ahora bien, abran el siguiente URL en su navegador favorito (recuerden cambiar los valores según corresponda):</p>
<p>http://user:user@<strong><span style="color: #ff0000;">192.168.1.101</span></strong>/cgi-bin/ConfigManApp.com?Id=34&amp;Command=1&amp;Number=<strong><span style="color: #ff0000;">018881234567</span></strong>&amp;Account=0</p>
<p>¿Y qué ocurre? Simple y sencillamente, su teléfono marcará por ustedes hacia el número indicado usando la primer cuenta que tengan configurado en él. Si Asterisk no los autentica a nivel de usuario, ustedes tienen un severo problema de seguridad ya que cualquier persona podría manipular su teléfono para marcar hacia donde le viniera en gana.</p>
<p>Y bien, ¿qué pasa si abren el URL repetidas ocasiones? Fácil. El teléfono marcará una y otra vez a ese número <strong>sin colgar las otras llamadas</strong>. De manera que un solo teléfono podría hacer 100 llamadas a Afghanistan, Sierra Leona o cualquier otro destino caro del mundo. Esto es muy fácil de lograr con un script en Linux que invoque al wget. Lo demostré en laboratorio y creanme, los resultados asustan.</p>
<p>Imaginen por un momento que alguien tuviera acceso a su red interna, pero no conoce las contraseñas de los teléfonos. Con este truco no es necesario saberlas, ya que el teléfono se encuentra ya autenticado en su red interna y por lo tanto, las llamadas saldrán aún si ustedes confían en que su firewall no recibirá conexiones del exterior.</p>
<p>Por tal motivo, si ustedes deciden abrir erróneamente los puertos en su firewall y exponen la configuración del teléfono, le están abriendo la puerta a alguien a que haga cientos de llamadas sin autorización. En la historia que les acabo de contar, alguien aprovechó esta vulnerabilidad e hizo más de 40,000 minutos de llamadas a los destinos más caros del mundo en tan solo 12 horas, y sin tener que usar su ancho de banda para generar esas llamadas.</p>
<p>Piénsenlo muy bien antes de que expongan equipos al internet. Hay un mundo peligroso allá afuera, y si no se protegen, más temprano que tarde acabarán siendo víctimas de la cyber delincuencia.</p>
<p>¡Suerte!</p>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/_jthzItnD68" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/04/explotando-vulnerabilidades-en-telefonos-autenticados-yealink/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/04/explotando-vulnerabilidades-en-telefonos-autenticados-yealink/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
		<item>
		<title>La importancia de una línea de código: como hacer debug a tu configuración de Asterisk</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/9bRg0or2VvY/</link>
		<comments>http://asteriskmx.com/2012/03/la-importancia-de-una-linea-de-codigo-como-hacer-debug-a-tu-configuracion-de-asterisk/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 17:00:18 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=477</guid>
		<description><![CDATA[El fin de semana por la noche recibí una llamada de un cliente nuestro solicitando apoyo para revisar el estado de su E1. Al parecer habían estado con el servicio de telefonía caido todo ese día, y tras horas de conferencia con su carrier no habían podido encontrar la razón por la cual el servicio [...]]]></description>
			<content:encoded><![CDATA[<p>El fin de semana por la noche recibí una llamada de un cliente nuestro solicitando apoyo para revisar el estado de su E1. Al parecer habían estado con el servicio de telefonía caido todo ese día, y tras horas de conferencia con su carrier no habían podido encontrar la razón por la cual el servicio del E1 no levantaba. Asterisk podía hacer llamadas entre extensiones, pero no tenían comunicación con el exterior.</p>
<p>Por experiencia, mi primer acercamiento fue revisar el archivo chan_dahdi.conf, que es el responsable del E1. Lo abrí pero no noté nada fuera de lo normal, así que desde la consola de Asterisk procedí a descargarlo de memoria y cargarlo nuevamente, esperando que arrojara algo de información. El resultado fue algo como lo siguiente:<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_3"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#codesyntax_3"  onClick="javascript:wpsh_toggleBlock(3)" title="Click to show/hide code block">Asterisk CLI</a></td><td align="right"><a href="#codesyntax_3" onClick="javascript:wpsh_code(3)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_print(3)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;">server1<span class="sy0">*</span>CLI<span class="sy0">&gt;</span> module load chan_dahdi.so
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Registered application <span class="st_h">'DAHDISendKeypadFacility'</span>
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Registered application <span class="st_h">'ZapSendKeypadFacility'</span>
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Parsing <span class="st_h">'/etc/asterisk/chan_dahdi.conf'</span>: <span class="br0">&#91;</span>Mar 20 02:03:52<span class="br0">&#93;</span> Found
<span class="br0">&#91;</span>Mar 20 02:03:52<span class="br0">&#93;</span> WARNING<span class="br0">&#91;</span>9583<span class="br0">&#93;</span>: config.c:778 process_text_line: parse error: No category context <span class="kw1">for</span> line 6 of <span class="sy0">/</span>etc<span class="sy0">/</span>asterisk<span class="sy0">/</span>chan_dahdi.conf
<span class="br0">&#91;</span>Mar 20 02:03:52<span class="br0">&#93;</span> ERROR<span class="br0">&#91;</span>9583<span class="br0">&#93;</span>: chan_dahdi.c:12728 setup_dahdi: Unable to load chan_dahdi.conf
<span class="br0">&#91;</span>Mar 20 02:03:52<span class="br0">&#93;</span>   == Registered channel <span class="kw3">type</span> <span class="st_h">'DAHDI'</span> <span class="br0">&#40;</span>DAHDI Telephony Driver w<span class="sy0">/</span>PRI<span class="br0">&#41;</span>
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action DAHDITransfer
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action ZapTransfer
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action DAHDIHangup
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action ZapHangup
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action DAHDIDialOffHook
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action ZapDialOffHook
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action DAHDIDNDon
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action ZapDNDon
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action DAHDIDNDoff
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action ZapDNDoff
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action DAHDIShowChannels
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action ZapShowChannels
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action DAHDIRestart
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>   == Manager registered action ZapRestart
<span class="br0">&#91;</span>Mar <span class="nu0">20</span> 02:03:<span class="nu0">52</span><span class="br0">&#93;</span>  Loaded chan_dahdi.so =<span class="sy0">&gt;</span> <span class="br0">&#40;</span>DAHDI Telephony w<span class="sy0">/</span>PRI<span class="br0">&#41;</span></pre></div></div></p>
<p>De aquí lo que importa es la línea que nos da el error:</p>
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">Asterisk CLI</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="br0">&#91;</span>Mar 20 02:03:52<span class="br0">&#93;</span> WARNING<span class="br0">&#91;</span>9583<span class="br0">&#93;</span>: config.c:778 process_text_line: parse error: No category context <span class="kw1">for</span> line <span class="nu0">6</span> of <span class="sy0">/</span>etc<span class="sy0">/</span>asterisk<span class="sy0">/</span>chan_dahdi.conf</pre></div></div>
<p>Tras abrir el archivo chan_dahdi.conf nuevamente y prestar un poco más de atención, las primeras líneas indican lo siguiente:</p>
<div id="wpshdo_5" class="wp-synhighlighter-outer"><div id="wpshdt_5" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_5"></a><a id="wpshat_5" class="wp-synhighlighter-title" href="#codesyntax_5"  onClick="javascript:wpsh_toggleBlock(5)" title="Click to show/hide code block">Código</a></td><td align="right"><a href="#codesyntax_5" onClick="javascript:wpsh_code(5)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_5" onClick="javascript:wpsh_print(5)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_5" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="sy0">;</span>autogenerated by <span class="sy0">/</span>usr<span class="sy0">/</span>sbin<span class="sy0">/</span>wancfg_dahdi <span class="kw1">do</span> not hand edit</div></li><li class="li1"><div class="de1"><span class="sy0">;</span>autogenrated on 2011<span class="sy0">-</span>10<span class="sy0">-</span>11</div></li><li class="li1"><div class="de1"><span class="sy0">;</span>Dahdi Channels Configurations</div></li><li class="li1"><div class="de1"><span class="sy0">;</span>For detailed Dahdi options<span class="sy0">,</span> view <span class="sy0">/</span>etc<span class="sy0">/</span>asterisk<span class="sy0">/</span>chan_dahdi<span class="sy0">.</span>conf<span class="sy0">.</span>bak</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">language<span class="sy0">=</span>es</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="br0">&#91;</span>trunkgroups<span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="br0">&#91;</span>channels<span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">context<span class="sy0">=</span><span class="kw1">default</span></div></li><li class="li1"><div class="de1">usecallerid<span class="sy0">=</span>yes</div></li><li class="li1"><div class="de1">hidecallerid<span class="sy0">=</span>no</div></li><li class="li1"><div class="de1">callwaiting<span class="sy0">=</span>yes</div></li><li class="li1"><div class="de1">usecallingpres<span class="sy0">=</span>yes</div></li><li class="li1"><div class="de1">callwaitingcallerid<span class="sy0">=</span>yes</div></li></ol></pre></div></div>
<p>Y aquí es donde tras poner atención, notamos que el error proviene de una sola línea de código, el <strong>language=es </strong>está fuera de cualquier contexto, y esto provoca un error de parsing al momento de cargar el módulo, lo que impide que el canal se cargue correctamente y por lo tanto, el E1 nunca levante.</p>
<p>Entonces, <strong>¿Cuales son los pasos para hacer un debug correcto de la configuración de Asterisk?</strong></p>
<p>Los sistemas informáticos, a diferencia de los seres vivos, <strong>no cambian por si solos. </strong>Si nuestro sistema estaba bien de principio y de pronto algo dejó de funcionar es porque <em>algo</em> cambió. Una manera sencilla de ver los archivos de configuración en el orden en que fueron recientemente modificados es usar el comando <strong>ls:</strong></p>
<div id="wpshdo_6" class="wp-synhighlighter-outer"><div id="wpshdt_6" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_6"></a><a id="wpshat_6" class="wp-synhighlighter-title" href="#codesyntax_6"  onClick="javascript:wpsh_toggleBlock(6)" title="Click to show/hide code block">Código</a></td><td align="right"><a href="#codesyntax_6" onClick="javascript:wpsh_code(6)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_6" onClick="javascript:wpsh_print(6)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_6" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="kw2">ls</span> <span class="re5">-lSt</span> <span class="sy0">/</span>etc<span class="sy0">/</span>asterisk <span class="sy0">|</span> <span class="kw2">head</span> <span class="re5">-n</span> <span class="nu0">20</span></pre></div></div>
<p>Con este comando ordenaremos los archivos de configuración de más reciente a menos reciente, mostrando solo los últimos 20 modificados. De ahí, podemos ir retrocediendo en nuestros pasos hasta que demos con la línea de código que alteramos y el sistema se restituya tras recargar el módulo o reiniciar Asterisk.</p>
<p>Si tenemos localizado el archivo con el problema, pero no sabemos exactamente en que línea está, el CLI de Asterisk puede resultar muy útil. Solo debemos asegurarnos que el log de eventos se arroja a consola editando el archivo /etc/asterisk/logger.conf</p>
<div id="wpshdo_7" class="wp-synhighlighter-outer"><div id="wpshdt_7" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_7"></a><a id="wpshat_7" class="wp-synhighlighter-title" href="#codesyntax_7"  onClick="javascript:wpsh_toggleBlock(7)" title="Click to show/hide code block">/etc/asterisk/logger.conf</a></td><td align="right"><a href="#codesyntax_7" onClick="javascript:wpsh_code(7)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_7" onClick="javascript:wpsh_print(7)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_7" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="br0">&#91;</span>general<span class="br0">&#93;</span>
&nbsp;
<span class="br0">&#91;</span>logfiles<span class="br0">&#93;</span>
console =<span class="sy0">&gt;</span> warning,error,notice,debug
full =<span class="sy0">&gt;</span> notice,warning,error,verbose</pre></div></div>
<p>Como se aprecia en el archivo, estamos diciéndole a Asterisk que envie a consola toda la información relacionada con eventos warning, error, notice y debug (<strong>nota: </strong>el debug arroja MUCHA información, si hemos resuelto el problema lo recomendable es retirarlo del archivo hasta la siguiente vez que lo ocupemos). Recuerden que después de modificarlo deben recargar el logger dentro del Asterisk CLI</p>
<div id="wpshdo_8" class="wp-synhighlighter-outer"><div id="wpshdt_8" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_8"></a><a id="wpshat_8" class="wp-synhighlighter-title" href="#codesyntax_8"  onClick="javascript:wpsh_toggleBlock(8)" title="Click to show/hide code block">Asterisk CLI</a></td><td align="right"><a href="#codesyntax_8" onClick="javascript:wpsh_code(8)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_8" onClick="javascript:wpsh_print(8)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_8" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="sy0">*</span>CLI<span class="sy0">&gt;</span> logger reload</pre></div></div>
<p>Y por último pueden descargar/cargar el módulo que da problemas en memoria. Este es un ejemplo del módulo de SIP:</p>
<div id="wpshdo_9" class="wp-synhighlighter-outer"><div id="wpshdt_9" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_9"></a><a id="wpshat_9" class="wp-synhighlighter-title" href="#codesyntax_9"  onClick="javascript:wpsh_toggleBlock(9)" title="Click to show/hide code block">Asterisk CLI</a></td><td align="right"><a href="#codesyntax_9" onClick="javascript:wpsh_code(9)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_9" onClick="javascript:wpsh_print(9)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_9" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;">amx<span class="sy0">*</span>CLI<span class="sy0">&gt;</span> module unload chan_sip.so
Unloaded chan_sip.so
== Unregistered channel <span class="kw3">type</span> <span class="st_h">'SIP'</span>
== Unregistered custom <span class="kw1">function</span> SIPCHANINFO
== Unregistered custom <span class="kw1">function</span> SIPPEER
== Unregistered custom <span class="kw1">function</span> SIP_HEADER
== Unregistered custom <span class="kw1">function</span> CHECKSIPDOMAIN
== Unregistered application <span class="st_h">'SIPDtmfMode'</span>
== Unregistered application <span class="st_h">'SIPAddHeader'</span>
== Unregistered application <span class="st_h">'SIPRemoveHeader'</span>
== Unregistered RTP glue <span class="st_h">'SIP'</span>
== Manager unregistered action SIPpeers
== Manager unregistered action SIPshowpeer
== Manager unregistered action SIPqualifypeer
== Manager unregistered action SIPshowregistry
== Manager unregistered action SIPnotify
amx<span class="sy0">*</span>CLI<span class="sy0">&gt;</span> module load chan_sip.so
Loaded chan_sip.so
SIP channel loading...
== Parsing <span class="st_h">'/etc/asterisk/sip.conf'</span>: == Found
== Parsing <span class="st_h">'/etc/asterisk/sip_general_additional.conf'</span>: == Found
== Parsing <span class="st_h">'/etc/asterisk/sip_general_custom.conf'</span>: == Found
== Parsing <span class="st_h">'/etc/asterisk/sip_nat.conf'</span>: == Found
== Parsing <span class="st_h">'/etc/asterisk/sip_registrations_custom.conf'</span>: == Found
== Parsing <span class="st_h">'/etc/asterisk/sip_registrations.conf'</span>: == Found
== Parsing <span class="st_h">'/etc/asterisk/sip_custom.conf'</span>: == Found
== Parsing <span class="st_h">'/etc/asterisk/sip_additional.conf'</span>: == Found
== Parsing <span class="st_h">'/etc/asterisk/sip_custom_post.conf'</span>: == Found
== Parsing <span class="st_h">'/etc/asterisk/users.conf'</span>: == Found
<span class="br0">&#91;</span><span class="nu0">2012</span>-03-<span class="nu0">20</span> 01:<span class="nu0">48</span>:<span class="nu0">54</span><span class="br0">&#93;</span> WARNING<span class="br0">&#91;</span><span class="nu0">4896</span><span class="br0">&#93;</span>: chan_sip.c:<span class="nu0">28479</span> reload_config: No valid transports available, falling back to <span class="st_h">'udp
'</span>.
== SIP Listening on 0.0.0.0:<span class="nu0">5060</span>
== Using SIP TOS bits <span class="nu0">96</span>
== Using SIP CoS mark <span class="nu0">4</span></pre></div></div>
<p>En este otro ejemplo puede notarse como el módulo SIP arroja un WARNING. Eso es un típico caso de que algo en mi configuración no está 100% bien, por lo que conviene revisarlo.</p>
<p>Este paso de quitar/cargar el módulo en memoria resulta muy adecuado porque la información que arroja ese módulo no se pierde entre toda la demás al momento de hacer un reload. Fíjense en los detalles y pregúntense que quiso decir el CLI cuando les dió un warning o error. Los mensajes suelen ser bastante explícitos, solo depende de ustedes interpretarlos.</p>
<p>¡Suerte!</p>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/9bRg0or2VvY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/03/la-importancia-de-una-linea-de-codigo-como-hacer-debug-a-tu-configuracion-de-asterisk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/03/la-importancia-de-una-linea-de-codigo-como-hacer-debug-a-tu-configuracion-de-asterisk/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
		<item>
		<title>Modelo de seguridad en Asterisk (parte 3 de 3)</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/v969usyVkAQ/</link>
		<comments>http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-3-de-3/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 17:00:07 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=466</guid>
		<description><![CDATA[Llegamos al final de nuestras entregas discutiendo el modelo de seguridad de Asterisk. En la primera parte discutimos sobre la seguridad antes de llegar al conmutador, normalmente a cargo del firewall de nuestro acceso a internet. En la segunda partehablamos sobre como autenticar a los usuarios para permitirles acceder a nuestro sistema. En esta tercera entrega [...]]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_467" class="wp-caption alignright" style="width: 310px"><a href="http://asteriskmx.com/wp-content/uploads/2012/03/manjail1.jpg#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-467 " title="manjail[1]" src="http://asteriskmx.com/wp-content/uploads/2012/03/manjail1-300x199.jpg" alt="" width="300" height="199" /></a><p class="wp-caption-text">Fuente: http://static.internetblog.org.uk/files/manjail.jpg</p></div><br />
Llegamos al final de nuestras entregas discutiendo el modelo de seguridad de Asterisk. En la <a title="Modelo de seguridad en Asterisk (parte 1 de 3)" href="http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-1-de-3/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">primera parte</a> discutimos sobre la seguridad <em>antes</em> de llegar al conmutador, normalmente a cargo del firewall de nuestro acceso a internet. En la <a title="Modelo de seguridad en Asterisk (parte 2 de 3)" href="http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-2-de-3/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">segunda parte</a>hablamos sobre como autenticar a los usuarios para permitirles acceder a nuestro sistema. En esta tercera entrega hablaremos sobre como limitar las características de los usuarios que ya se encuentran autenticados dentro de Asterisk.</p>
<h3>Seguridad de operación</h3>
<p>Existen errores en versiones anteriores de algunas interfases gráficas (léase: Elastix) que nos permitían leer la lista completa de extensiones del conmutador y sus contraseñas aún si el usuario no pasaba la autenticación de administrador. Esto quiere decir que a pesar de cerrar nuestra interfaz administrativa y que nadie pueda modificarla, al tener los usuario/contraseñas podría tomar un teléfono, registrarlo con estos datos y empezar a hacer llamadas. Peor aún: podría <em>vender</em> estos datos para que algún tercero haga llamadas ilegalmente desde nuestro equipo. Asumiendo que ya cometimos los errores de las otras 2 etapas, ¿cómo podemos evitar (o al menos reducir) el daño inminente?</p>
<p>El primer paso, es limitar los accesos de las extensiones de acuerdo a lo que deban hacer. Por ejemplo, es probable que la recepcionista necesite poder llamara a locales, LD y celulares. Sin embargo, ¿por qué la extensión que está en la cafetería tendría la necesidad de marcar hacia afuera? Limitar esto es muy sencillo haciendo uso de <strong>contextos:</strong></p>
<div id="wpshdo_10" class="wp-synhighlighter-outer"><div id="wpshdt_10" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_10"></a><a id="wpshat_10" class="wp-synhighlighter-title" href="#codesyntax_10"  onClick="javascript:wpsh_toggleBlock(10)" title="Click to show/hide code block">extensions.conf</a></td><td align="right"><a href="#codesyntax_10" onClick="javascript:wpsh_code(10)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_10" onClick="javascript:wpsh_print(10)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_10" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="br0">&#91;</span>internas<span class="br0">&#93;</span>
exten =<span class="sy0">&gt;</span> _XXXX,<span class="nu0">1</span>,Dial<span class="br0">&#40;</span>SIP<span class="sy0">/</span><span class="co1">${EXTEN}</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#91;</span>locales<span class="br0">&#93;</span>
include =<span class="sy0">&gt;</span> internas
exten =<span class="sy0">&gt;</span> _ZXXXXXXX,<span class="nu0">1</span>,Dial<span class="br0">&#40;</span>DAHDI<span class="sy0">/</span>g0<span class="sy0">/</span><span class="co1">${EXTEN}</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#91;</span>largadistancia<span class="br0">&#93;</span>
include =<span class="sy0">&gt;</span> locales
exten =<span class="sy0">&gt;</span> _01NXXXXXXXXX,<span class="nu0">1</span>,Dial<span class="br0">&#40;</span>DAHDI<span class="sy0">/</span>g0<span class="sy0">/</span><span class="co1">${EXTEN}</span><span class="br0">&#41;</span></pre></div></div>
<p>En este ejemplo, tenemos 3 contextos: [internas], [locales] y [largadistancia]. Cada uno incluye al anterior y además, agrega un grado más de permisos. La idea es que al configurar cada usuario SIP/IAX de nuestro sistema, limitemos los accesos que cada uno tenga, sabiendo que cada uno solo puede marcar estrictamente a lo que nosotros le permitimos, además de tener la facilidad de que al conceder un permiso superior, daremos acceso a lo anterior.</p>
<p>Es altamente recomendable que si no hacemos llamadas internacionales, entonces&#8230; <strong>¡no las habilitemos! </strong>Si sabemos que nuestros negocios se centran en territorio nacional y quizá llamadas a EUA/Canadá, limitemos agregando el _001NXXXXXXXXX, pero no agreguemos algo tan general como permitir _00., que estaríamos dándole la oportunidad al atacante de que use el mundo entero. Recuerden que limitar las posibilidades improbables reduce el probable riesgo.</p>
<p>Una manera mucho más elegante sería hacer uso de Realtime para que al marcar, se consulte la BD para determinar si tenemos permisos de marcar a ese destino o no, y en base a eso reaccionar. Dado que Realtime es un poco más avanzado, lo veremos más adelante en otro artículo.</p>
<p>El segundo paso consistiría en poner limitantes no al <em>teléfono</em> sino a la <em>persona</em>. La manera de hacer esto sería obligar a quien marca a proporcionarnos un código que le autorice a marcar a ese destino. Si alguien puede marcar por nuestro sistema, al menos obliguemoslo a que se sepa las contraseñas de los usuarios. Usando el mismo ejemplo anterior, lo podríamos hacer así:</p>
<div id="wpshdo_11" class="wp-synhighlighter-outer"><div id="wpshdt_11" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_11"></a><a id="wpshat_11" class="wp-synhighlighter-title" href="#codesyntax_11"  onClick="javascript:wpsh_toggleBlock(11)" title="Click to show/hide code block">extensions.conf</a></td><td align="right"><a href="#codesyntax_11" onClick="javascript:wpsh_code(11)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_11" onClick="javascript:wpsh_print(11)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_11" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="br0">&#91;</span>internas<span class="br0">&#93;</span>
exten <span class="sy0">=&gt;</span> _XXXX<span class="sy0">,</span>1<span class="sy0">,</span>Dial<span class="br0">&#40;</span>SIP<span class="sy0">/</span>$<span class="br0">&#123;</span>EXTEN<span class="br0">&#125;</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#91;</span>locales<span class="br0">&#93;</span>
<span class="kw1">include</span> <span class="sy0">=&gt;</span> internas
exten <span class="sy0">=&gt;</span> _ZXXXXXXX<span class="sy0">,</span>1<span class="sy0">,</span>Macro<span class="br0">&#40;</span>salida<span class="sy0">,</span>DAHDI<span class="sy0">/</span>g0<span class="sy0">/</span>$<span class="br0">&#123;</span>EXTEN<span class="br0">&#125;</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#91;</span>largadistancia<span class="br0">&#93;</span>
<span class="kw1">include</span> <span class="sy0">=&gt;</span> locales
exten <span class="sy0">=&gt;</span> _01NXXXXXXXXX<span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span>Macro<span class="br0">&#40;</span>salida<span class="sy0">,</span>DAHDI<span class="sy0">/</span>g0<span class="sy0">/</span>$<span class="br0">&#123;</span>EXTEN<span class="br0">&#125;</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#91;</span>macro<span class="sy0">-</span>salida<span class="br0">&#93;</span>
exten <span class="sy0">=&gt;</span> s<span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span>Authenticate<span class="br0">&#40;</span><span class="sy0">/</span>etc<span class="sy0">/</span>asterisk<span class="sy0">/</span>pinset<span class="br0">&#41;</span>
exten <span class="sy0">=&gt;</span> s<span class="sy0">,</span>n<span class="sy0">,</span>Dial<span class="br0">&#40;</span>$<span class="br0">&#123;</span>ARG1<span class="br0">&#125;</span> <span class="br0">&#41;</span>
exten <span class="sy0">=&gt;</span> s<span class="sy0">,</span>n<span class="sy0">,</span>Hangup</pre></div></div>
<p>En el ejemplo de arriba estamos introduciendo un nuevo elemento, un <strong>macro</strong> que nos permitirá hacer 2 pasos en uno solo: la autenticación y luego la marcación. De acuerdo al ejemplo, cualquiera podria marcar extensiones locales sin restriccion (al final de cuentas, son gratis). Sin embargo, si trata de marcar a llamadas locales o larga distancia se le pedirá al usuario que ingrese un código (el cual estaría escrito dentro del archivo /etc/asterisk/pinset). Si el usuario no proporciona la contraseña correcta, la llamada termina.</p>
<p>Los 2 esquemas que hemos mencionado (contextos y contraseñas) deberían impedir que algo malo pase. Sin embargo, si en el peor de los casos<em> alguien </em>logra penetrar todo lo anterior, limitemos la cantidad de daño recibido. ¿Cómo? Limitando la cantidad de llamadas simultáneas que puede hacer. Este paso es sumamente importante ya que, para empezar, nadie tiene por que poder hacer 20 llamadas simultáneas, ¿o si?</p>
<p>Para hacer esto, reaprovechemos el ejemplo anterior:</p>
<div id="wpshdo_12" class="wp-synhighlighter-outer"><div id="wpshdt_12" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_12"></a><a id="wpshat_12" class="wp-synhighlighter-title" href="#codesyntax_12"  onClick="javascript:wpsh_toggleBlock(12)" title="Click to show/hide code block">extensions.conf</a></td><td align="right"><a href="#codesyntax_12" onClick="javascript:wpsh_code(12)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_12" onClick="javascript:wpsh_print(12)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_12" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="br0">&#91;</span>internas<span class="br0">&#93;</span>
exten <span class="sy0">=&gt;</span> _XXXX<span class="sy0">,</span>1<span class="sy0">,</span>Dial<span class="br0">&#40;</span>SIP<span class="sy0">/</span>$<span class="br0">&#123;</span>EXTEN<span class="br0">&#125;</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#91;</span>locales<span class="br0">&#93;</span>
<span class="kw1">include</span> <span class="sy0">=&gt;</span> internas
exten <span class="sy0">=&gt;</span> _ZXXXXXXX<span class="sy0">,</span>1<span class="sy0">,</span>Macro<span class="br0">&#40;</span>salida<span class="sy0">,</span>DAHDI<span class="sy0">/</span>g0<span class="sy0">/</span>$<span class="br0">&#123;</span>EXTEN<span class="br0">&#125;</span><span class="sy0">,</span>2<span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#91;</span>largadistancia<span class="br0">&#93;</span>
<span class="kw1">include</span> <span class="sy0">=&gt;</span> locales
exten <span class="sy0">=&gt;</span> _01NXXXXXXXXX<span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span>Macro<span class="br0">&#40;</span>salida<span class="sy0">,</span>DAHDI<span class="sy0">/</span>g0<span class="sy0">/</span>$<span class="br0">&#123;</span>EXTEN<span class="br0">&#125;</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span>
&nbsp;
<span class="br0">&#91;</span>macro<span class="sy0">-</span>salida<span class="br0">&#93;</span>
exten <span class="sy0">=&gt;</span> s<span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span>GotoIf<span class="br0">&#40;</span>$<span class="br0">&#91;</span>$<span class="br0">&#123;</span>GROUP_COUNT<span class="br0">&#40;</span>$<span class="br0">&#123;</span>CALLERID<span class="br0">&#40;</span>num<span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#125;</span><span class="sy0">&gt;=</span>$<span class="br0">&#123;</span>ARG2<span class="br0">&#125;</span><span class="br0">&#93;</span>?Permite<span class="br0">&#41;</span>
exten <span class="sy0">=&gt;</span> s<span class="sy0">,</span>n<span class="sy0">,</span>Congestion<span class="br0">&#40;</span><span class="br0">&#41;</span>
exten <span class="sy0">=&gt;</span> s<span class="sy0">,</span>n<span class="br0">&#40;</span>Permite<span class="br0">&#41;</span><span class="sy0">,</span>Set<span class="br0">&#40;</span>GROUP<span class="br0">&#40;</span>$<span class="br0">&#123;</span>CDR<span class="br0">&#40;</span>uniqueid<span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">=</span>$<span class="br0">&#123;</span>CALLERID<span class="br0">&#40;</span>num<span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>
exten <span class="sy0">=&gt;</span> s<span class="sy0">,</span>n<span class="sy0">,</span>Authenticate<span class="br0">&#40;</span><span class="sy0">/</span>etc<span class="sy0">/</span>asterisk<span class="sy0">/</span>pinset<span class="br0">&#41;</span>
exten <span class="sy0">=&gt;</span> s<span class="sy0">,</span>n<span class="sy0">,</span>Dial<span class="br0">&#40;</span>$<span class="br0">&#123;</span>ARG1<span class="br0">&#125;</span> <span class="br0">&#41;</span>
exten <span class="sy0">=&gt;</span> s<span class="sy0">,</span>n<span class="sy0">,</span>Hangup</pre></div></div>
<p>Notarán que el macro se ha hecho bastante más complejo. Hay una buena razón para esto:</p>
<p>Hemos agregado al Macro la posibilidad de determinar cuantas llamadas simultáneas activas tiene un usuario en un momento dado, y si se excede de esta cantidad, corta la llamada.</p>
<p>Observen esta línea:</p>
<div id="wpshdo_13" class="wp-synhighlighter-outer"><div id="wpshdt_13" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_13"></a><a id="wpshat_13" class="wp-synhighlighter-title" href="#codesyntax_13"  onClick="javascript:wpsh_toggleBlock(13)" title="Click to show/hide code block">Código</a></td><td align="right"><a href="#codesyntax_13" onClick="javascript:wpsh_code(13)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_13" onClick="javascript:wpsh_print(13)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_13" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;">exten <span class="sy0">=&gt;</span> _ZXXXXXXX<span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span>Macro<span class="br0">&#40;</span>salida<span class="sy0">,</span>DAHDI<span class="sy0">/</span>g0<span class="sy0">/</span>$<span class="br0">&#123;</span>EXTEN<span class="br0">&#125;</span><span class="sy0">,</span><span class="nu0">2</span><span class="br0">&#41;</span></pre></div></div>
<p>El <strong>2</strong> que está al final de la línea es la cantidad máxima de llamadas a ese tipo de destino que estamos permitiendo. En el ejemplo anterior, permitimos que alguien marque hasta 2 llamadas locales al mismo tiempo, pero solo puede marcar a una LD. No sería muy difícil seguir este patrón para limitar el acceso internacional, pero eso se los dejo a ustedes para que practiquen.</p>
<p>&nbsp;</p>
<h3>Conclusiones</h3>
<p>Si sumamos todas las barreras que hemos puesto con estos 3 niveles de seguridad, al final obtenemos:</p>
<ul>
<li>Cerrar el acceso por firewall externo a nuestro conmutador</li>
<li>Detener el acceso al conmutador por firewall interno (iptables)</li>
<li>Acortar el rango de IPs desde las que pueden registrarse los usuarios SIP/IAX</li>
<li>Bloquear a aquellos usuarios que intenten fuerza bruta contra nosotros</li>
<li>Activar solo el plan de llamadas  necesario</li>
<li>Restringir  al usuario dependiendo de si sabe la contraseña correcta para el destino o no</li>
<li>Reducir la cantidad de llamadas simultáneas que el usuario puede hacer</li>
</ul>
<p>Lo mejor de estas reglas es que son acumulables. Mientras más de ellas usemos lograremos un conmutador más y más seguro. Inclusive si consideramos que llevar a cabo todas resulta difícil, aplicar tantas como se pueda nos garantizará que estaremos restringiendo la posibilidad de que algo salga mal.</p>
<p>Créanme: vale más invertir tiempo en tomar en cuenta estos pasos en lugar de tener que pagar la cuenta final.</p>
<p>¡Suerte!</p>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/v969usyVkAQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-3-de-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-3-de-3/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
		<item>
		<title>Evaluación del Grandstream GXV3175</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/LjJjiIv8ftw/</link>
		<comments>http://asteriskmx.com/2012/03/evaluacion-del-grandstream-gxv3175/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 17:00:20 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=440</guid>
		<description><![CDATA[El día de ayer recibimos un producto que había querido evaluar desde hace algunos días, y se trata del teléfono estrella de la gama alta de teléfonos que promueve Grandstream: el GXV3175 que ofrece soporte para videollamadas y una amplia pantalla touchscreen. La primera impresión tras recibir la caja es que se trata de un producto [...]]]></description>
			<content:encoded><![CDATA[<p>El día de ayer recibimos un producto que había querido evaluar desde hace algunos días, y se trata del teléfono estrella de la gama alta de teléfonos que promueve Grandstream: el <a href="http://www.grandstream.com/products/ip-video-telephony/gxv3175">GXV3175</a> que ofrece soporte para videollamadas y una amplia pantalla touchscreen.</p>
<div id="attachment_444" class="wp-caption alignright" style="width: 310px"><a href="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-caja.jpg#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-444" title="GXV3175 caja" src="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-caja-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">El teléfono aún en su caja</p></div>
<p>La primera impresión tras recibir la caja es que se trata de un producto orientado no al profesional, sino al consumidor. Las descripciones, imágenes e inclusive el tipo de empaque deja en claro que lo que el teléfono promueve son toda la gama de funcionalidades <em>extras</em> de un teléfono que está orientado al mercado de alto nivel adquisitivo.</p>
<p>El precio de venta público de este teléfono en México es elevado, siendo de alrededor de $480 USD + IVA (unos $6,240 pesos mexicanos). Por un precio así, lo que uno está esperando es <em>prácticamente </em>todo: video, audio, alta calidad de fabricación, funcionalidades extra, expandibilidad, aplicaciones y cualquier medio de interconexión que pueda haber. Por tal motivo, haremos mención de los pros y los contras que $480 USD te pueden comprar.</p>
<p>&nbsp;</p>
<h3><strong>Contenidos</strong></h3>
<p>El teléfono trae consigo todos los componentes necesarios para funcionar <em>out-of-the-box</em>, que son:</p>
<div id="attachment_441" class="wp-caption alignright" style="width: 310px"><a href="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-componentes.jpg#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-441" title="GXV3175 componentes" src="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-componentes-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Contenido de la caja</p></div>
<ul>
<li>Auricular</li>
<li>Cable de red</li>
<li>Eliminador de corriente (12 V)</li>
<li>Base de escritorio</li>
<li>Soporte para pared</li>
<li>Cable de A/V para conectarlo a una televisión</li>
<li>Manuales</li>
<li>Toalla de limpieza</li>
</ul>
<div>El teléfono soporta PoE, por lo que tener un eliminador de corriente es un buen extra aunque claro está, para el precio <em>debería</em> traer su propio eliminador. Los cables de A/V también son un plus al no tener que adquirirlos como un extra.</div>
<p>&nbsp;</p>
<h3><strong>Fabricación</strong></h3>
<p>El GXV3175 está hecho totalmente de plástico, salvo el espacio de la pantalla LCD que actúa como touchscreen. Debo ser honesto: el plástico con el que está hecho la unidad es un plástico negro mate que se siente ligeramente poroso, casi como si fuera pasta. Este sentimiento al tacto es compartido por los otros teléfonos de gama inferior de Grandstream, por lo que en esta ocasión esperábamos que fuera un poco diferente. Buscábamos sentir un material de mayor calidad para un teléfono de este precio. (nota: no pensamos someter la unidad a pruebas de resistencia física, por lo que la sensación de tener un material <em>barato</em> es solo nuestra percepción, no indicamos que el proceso de manufactura sea, efectivamente, malo)</p>
<p>La base del teléfono se siente pesada, sinónimo inequívoco de toda la circuitería que se necesita para darle vida a la pantalla LCD (la cual se lleva todo el show). Al ser totalmente touchscreen el teléfono <strong>no</strong> posee botones físicos, y cuenta con un único botón de &#8220;Home&#8221; situado en la parte inferior central de la base, justo debajo del LCD. La forma y diseño de este botón no hacen sino hacernos sentir que es un diseño copiado del iPhone/iPad de Apple.</p>
<p>El auricular, por otro lado, es bastante ligero. Carece del peso que muchas personas buscan al momento de comprar un teléfono de gama alta. Dado que es la única parte física del teléfono que puede sostenerse (no hay botones, solo superficie <em>touch</em>), nos deja con la sensación de que algo le faltó al aparato, algo que nos hiciera sentir que al menos compramos su peso.</p>
<p>Un punto a favor del teléfono son los puertos de expansión. En uno de los costados ofrece posibilidad de conectar 2 USBs, 1 tarjeta SD, 1 puerto para audífonos/manos libres (jack 2.5 mm) y 1 puerto para A/V (para poder proyectar hacia la televisión).</p>
<div id="attachment_446" class="wp-caption aligncenter" style="width: 235px"><a href="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-puertos.jpg#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-446 " title="GXV3175 puertos" src="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-puertos-225x300.jpg" alt="" width="225" height="300" /></a><p class="wp-caption-text">Puertos de expansión</p></div>
<p>En la parte posterior el teléfono cuenta con lo habitual: 2 puertos de red (hacia el ruteador y como puente hacia la PC) y el puerto del handset.</p>
<div id="attachment_445" class="wp-caption aligncenter" style="width: 310px"><a href="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-posterior.jpg#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-445 " title="GXV3175 posterior" src="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-posterior-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Parte trasera del teléfono</p></div>
<p>Dependiendo de donde se coloque la base, el teléfono ofrece dos niveles de altura, lo que permite ajustar el ángulo de la pantalla para mayor comodidad.</p>
<p>Dado que la pantalla es una touch screen resistiva, el teléfono viene con un <em>stylus </em>(que se almacena dentro de la unidad en la esquina superior derecha, viéndolo de frente)  que nos hace sentir de vuelta en los tiempos de la Palm. Si bien no es necesaria en la mayoría de los casos, acceder a ciertos botones en algunos momentos resulta más cómoda con la pluma. Sin embargo, tener que usar un aditamento adicional para utilizar nuestro teléfono no es lo más cómodo del mundo.</p>
<p>Por último, en la parte frontal superior el teléfono cuenta con un pequeño switch que nos permite ajustar el ángulo de la video cámara integrada al teléfono.</p>
<p>&nbsp;</p>
<h3>Características</h3>
<p>La más obvia de todas es la pantalla LCD de 800&#215;480, la cual actua como teclado y es el único medio para introducir información al teléfono sin usar la interfaz web. La pantalla viene de la mano de la cámara de video integrada, la cual es configurable tanto en codecs como en resolución y FPS que deseamos enviar. Los puertos de expansión ya mencionados le permiten conectar un manos libres tipo celular, por lo que aquellas diademas con conector RJ9 quedan fuera de consideración.</p>
<p>El teléfono soporta Wifi (802.11b/g/n) lo cual es una buena característica, pero que se anula inmediatamente si queremos hacer uso del PoE (¿qué sentido conectar por WiFi si necesitamos un cable de red para la corriente?). Otro punto en contra es que el teléfono carece de Bluetooth, por lo que no es posible hacer pairing de tu manos libres BT como otros teléfonos de gama alta (tales como el Aastra 6739i o el Cisco SPA525G).</p>
<p>Otra característica importante y que hasta el momento solo he visto en los teléfonos Yealink es el soporte para Open VPN. Para quien no lo sabe, OpenVPN es una solución gratuita en software que te permite crear VPNs en capa SSL. La gran ventaja de hacer esto en un teléfono, es que puedes encriptar el tráfico VoIP (tanto el SIP como el RTP) y con eso tener comunicación <strong>segura</strong> por todo el medio de la VPN. Otra ventaja es que al encriptar el tráfico, es imposible para los ruteadores intermedios saber que contiene, así que contra aquellos proveedores de internet que bloquean el tráfico VoIP, esta funcionalidad puede ser muy útil.</p>
<p>El punto fuerte del teléfono son las aplicaciones: es casi como si tuviéramos una tablet con handset integrado. La gama de servicios de redes sociales o consultas web es relativamente amplia, y superior a las que vienen de fábrica con otros teléfonos. Una aplicación muy importante que echamos de menos y que otros teléfonos de Grandstream tienen, es la integración con Skype. Si este teléfono pudiera hacer uso de esa red y enviar video a través de ella, tendríamos definitivamente un ganador aquí. Es una sorpresa que teléfonos inferiores tengan esta característica mientras que este no.</p>
<h3></h3>
<h3>Uso del sistema</h3>
<p>Al conectar el teléfono al PoE inmediatamente este arrancará con la pantalla de bienvenida de Grandstream y empezará a cargar su sistema. A nuestro parecer el re-arranque del teléfono es bastante lento (2 minutos aproximadamente), pero en parte resulta entendible porque la interfaz gráfica no es tan sencilla. Tras encender el teléfono por primera vez nos guiará por un <em>wizard</em> de configuración de primera ocasión, con lo que podremos guiar al teléfono para configurar la hora por NTP y configurar también nuestra primer cuenta SIP.</p>
<div id="attachment_443" class="wp-caption aligncenter" style="width: 310px"><a href="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-pantalla-inicial.jpg#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-443" title="GXV3175 pantalla inicial" src="http://asteriskmx.com/wp-content/uploads/2012/03/GXV3175-pantalla-inicial-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Configuración inicial de la primer cuenta SIP</p></div>
<p>Tras configurar la primer cuenta, el teléfono cargará y estará listo para hacer llamadas.</p>
<p>El GUI del teléfono está bastante bien hecho. En apariencia se asemeja a una interfaz modificada de Android 3.0 (para tablets), ya que ofrece la posibilidad de colocar <em>widgets</em>, tener múltiples escritorios para guardar y desplegar información en ellos y claro está, acceder a aplicaciones como Facebook, Twitter, Google Voice, feeds RSS y hasta Youtube. Con todas estas características se nos puede olvidar que el teléfono también hace llamadas.</p>
<p>La interfaz aunque se asemeja  a otras, tiene su estilo propio. Para empezar a hacer una llamada tienes una de dos opciones: presionar el botón de &#8220;Phone&#8221; en la parte inferior derecha o presionar el widget que contiene el nombre de la cuenta que configuraste. Tener que presionar algo <em>antes</em> de empezar a marcar resulta un tanto frustrante, pero es un sacrificio necesario para poder aprovechar la pantalla LCD para desplegar información de otros temas mientras que el teléfono no se está usando.</p>
<p>El sistema posee varias aplicaciones instaladas (en este momento desconozco si es posible agregarle más). Entre las que están disponibles vienen la integración con Google Calendar, Google Voice, Twitter, Facebook, feeds RSS, tipos de cambio, indicadores de la bolsa de valores, clima y algunas otras. Aunque al principio parecen muy llamativas, interactuar con muchas de ellas resulta complicado por el teclado de la pantalla touchscreen. Es bueno para ingresar texto corto, pero a veces hasta escribir un pequeño tweet de 140 caracteres resulta complicado usando el teléfono.</p>
<p>La estabilidad del sistema diría que está a un 80%. La respuesta de ingreso de órdenes del usuario no es inmediata (se siente a veces un tanto lenta la interfaz) y en ocasiones, el sistema se congeló al acceder a la aplicación de FB (la pantalla literalmente se congeló, aunque fue posible reiniciar el teléfono desde la interfaz web)</p>
<p>&nbsp;</p>
<h3>Configuración del teléfono</h3>
<p>Como ya es costumbre, la configuración principal se hace mediante una interfaz web, la cual debo agregar esta muy por encima de las anteriores interfaces de Grandstream.</p>
<p>Podemos configurar hasta 3 cuentas SIP diferentes (algo bajo para este tipo de teléfonos), y en cada cuenta podemos ajustar parámetros individuales como codecs, ringtones, direcciones de proxy y otras. Aparte de las 3 cuentas podemos configurar detalles de las aplicaciones individuales, además de poder hacer uso de la red por WiFi (algo inútil a mi gusto si es que queremos aprovechar el PoE).</p>
<p>Todo cambio requiere de un reinicio del teléfono para poder aplicarlo, aunque al menos tienes la opción de decidir en que momento quieres reiniciar (no es tan severo como Polycom). Dado el largo tiempo de carga del teléfono (2+ minutos), es preferible hacer todos los cambios de una vez antes de enviar reiniciar el equipo.</p>
<p>Casi todas las opciones del teléfono son configurables mediante el GUI del touchscreen, pero ingresar valores en el teclado virtual no es tan sencillo como se cree. Hay que recordar que la pantalla es resistiva, por lo que es necesario hacer cierta presión al momento de teclear algo, además de que los sensores no son tan exactos como los de una pantalla capacitiva (como la de la mayoría de los celulares con touchscreen).</p>
<p>&nbsp;</p>
<h3>Operación</h3>
<p>Dado que el estado estándar del teléfono es mostrar los widgets del escritorio, necesitas presionar el botón de <em>phone</em> antes de que puedas hacer una llamada. Dentro del panel de marcación debes escoger que línea (cuenta SIP) quieres usar, además de que al momento de enviar la marcación debes decir si es una llamada con o sin video (aunque puedes solicitar el video estando ya a mitad de la llamada).</p>
<p>La interacción con el teléfono puede requerir un poco de paciencia. Al no tener botones físicos debemos esperar a que el sistema procese nuestros comandos por touchscreen. Si a esto le agregamos errores de detección, tenemos un sistema que aunque muy bonito, nos obliga a ir lento para que detecte correctamente lo que estamos tratando de decirle.</p>
<p>La calidad del video es buena, pero sin llegar a lo expectacular. Quizá el mayor problema sea el tipo de pantalla, ya que al ser resistiva necesita no tener un recubrimiento de vidrio, lo cual le habría dado mejor apariencia a la pantalla y por consecuente, una mejor apreciación del video.</p>
<p>El manos libres (speaker) se escucha bastante bien, aunque la cancelación de ruido del teléfono es, para lo que cuesta, pobre. En nuestras pruebas el altavoz de un Yealink T38G resultó muy superior en términos de no retroalimentar el audio nuevamente por el micrófono, de manera que este teléfono se escucha muy bien, pero a quien le llamemos por el manos libres no opinará lo mismo.</p>
<p>&nbsp;</p>
<h3>Conclusiones</h3>
<p>El GXV3175 es un buen teléfono, pero no para su precio. Por $480 USD esperamos lo mejor de lo mejor, y aunque la idea de las aplicaciones en el teléfono y el tamaño de la pantalla son puntos muy buenos de entrada, la operabilidad con la interfaz gráfica deja mucho que desear. La falta de Skype y Bluetooth con características básicas para este rango, y nos resulta inadmisible que Grandstream (teniendo ya teléfonos con soporte de Skype), decida dejar este fuera del juego. Esperemos y esto se corrija con una actualización del firmware futura, pero por este momento, no tenemos el soporte para el mismo.</p>
<p>La fabricación definitivamente no está al nivel de la de teléfonos como Cisco o Polycom e inclusive, nos atrevemos a decir que está aún por debajo de la de Yealink. El hecho de tener siquiera que <em>incluir</em> un stylus nos hace pensar que el fabricante pensó en posibles problemas con el touchscreen y decidió incorporarlo. Parece una solución rápida a un problema inevitable, pero prefirieron optar por ese camino.</p>
<p>Al final, el teléfono se siente como una <em>tablet</em> más que como un teléfono. Su potencial de aplicaciones es muy bueno, pero la a veces lentitud de respuesta puede desesperar al momento de hacer cualquier otra cosa que no sean llamadas. Creo que el procesador les quedó corto para lo que al final desearon que hiciera.</p>
<p>Definitivamente, este es un teléfono orientado para el entusiaste, más alla que para el alto ejecutivo. Características más conservadoras (pero mayor calidad) de otros fabricantes serán preferidas por encima de este equipo. La participación de Grandstream en el alto mercado es buena, pero se quedó a varios metros de hacer un home run con este producto. Esperamos que con el continuo avance al firmware que ha puesto la compañía en los últimos años, logren pulir los detalles que este teléfono tiene, para así acercarlo un paso más a la gloria.</p>
<blockquote><p>Esta es la primera de varias futuras reseñas que planeamos publicar en nuestro blog. La idea es ofrecerle a nuestros visitantes una percepción objetiva de los equipos que evaluamos para ayudarlos a saber si el producto cumple con sus expectativas antes de comprar. Como siempre, los invitamos a compartir sus opiniones dejándonos comentarios al término del artículo</p></blockquote>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/LjJjiIv8ftw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/03/evaluacion-del-grandstream-gxv3175/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/03/evaluacion-del-grandstream-gxv3175/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
		<item>
		<title>Modelo de seguridad en Asterisk (parte 2 de 3)</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/gf5DbkLQ48U/</link>
		<comments>http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-2-de-3/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 17:00:55 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=427</guid>
		<description><![CDATA[El día de ayer publicamos la primera de esta serie de entregas que buscan concientizar sobre los 3 diferentes niveldes de seguridad en un conmutador IP como lo es Asterisk. Discutimos sobre la seguridad de acceso al sistema, que es la primer barrera contra la quenos anfrentamos al acceder al equipo. Para esta entrega hablaremos [...]]]></description>
			<content:encoded><![CDATA[<p>El día de ayer publicamos <a title="Modelo de seguridad en Asterisk (parte 1 de 3)" href="http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-1-de-3/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">la primera de esta serie de entregas</a> que buscan concientizar sobre los 3 diferentes niveldes de seguridad en un conmutador IP como lo es Asterisk. Discutimos sobre la seguridad de acceso al sistema, que es la primer barrera contra la quenos anfrentamos al acceder al equipo. Para esta entrega hablaremos del segundo nivel de seguridad, es decir: los atacantes ya pueden llegar hasta el equipo, ¿cómo podemos defendernos de lo que nos pueden hacer?</p>
<h3>Seguridad de autenticación</h3>
<p>Como mencioné en el párrafo anterior, esta es la segunda capa de protección contra atacantes externos: ya penetraron nuestra red, ya pueden &#8220;ver&#8221; nuestro conmutador. ¿Quiere eso decir que estamos a su merced? Obviamente no, pero debemos tener algunos aspectos muy importantes en cuenta para que esto no nos pase. De entre los puntos a mencionar, resaltemos estos:</p>
<ul>
<li>Listas de acceso para usuarios SIP/IAX</li>
<li>Contraseñas SIP/IAX seguras</li>
<li>Defensa contra fuerza bruta</li>
</ul>
<h3></h3>
<h3>Listas de acceso</h3>
<p>Esta es, sin duda, la característica mas evitada en seguridad de Asterisk: configurar listas de acceso que hagan una coincidencia con los dispositivos que deben/pueden registrarse en nuestro sistema, limitando el acceso a ciertas extensiones desde ciertas IPs.</p>
<p>Por ejemplo: si nuestra red interna está en el segmento 192.168.1.0/24, ¿por qué razón habríamos de permitir que la extensión que pertenece a la sala de juntas se registre desde la IP 189.200.45.13? Las listas de acceso nos permiten restringir desde que IP puede un dispositivo registrarse o hacer llamadas con nosotros. Esta es la única manera que tienen de hacer que solo ciertas extensiones puedan ser usadas desde afuera de nuestra red (usuarios móviles), mientras que el resto no (usuarios locales)</p>
<p>Las listas de acceso en Asterisk se configuran usando los campos de <strong>permit</strong> y<strong> deny</strong> dentro ya sea de la sección [general] o bien dentro de la configuración de cada usuario (esto aplica para sip.conf y para iax.conf). Tomen en cuenta que el orden si importa y que la metodología default es un <strong>permit any</strong>. Esto quiere decir que si no negamos la autenticación, se le permite el paso a todo. Observen el siguiente ejemplo:</p>
<div id="wpshdo_14" class="wp-synhighlighter-outer"><div id="wpshdt_14" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_14"></a><a id="wpshat_14" class="wp-synhighlighter-title" href="#codesyntax_14"  onClick="javascript:wpsh_toggleBlock(14)" title="Click to show/hide code block">Código</a></td><td align="right"><a href="#codesyntax_14" onClick="javascript:wpsh_code(14)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_14" onClick="javascript:wpsh_print(14)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_14" class="wp-synhighlighter-inner" style="display: block;"><pre class="ini" style="font-family:monospace;"><span class="re0"><span class="br0">&#91;</span><span class="nu0">100</span><span class="br0">&#93;</span></span>
<span class="re1">username</span><span class="sy0">=</span><span class="re2">100</span>
<span class="re1">type</span><span class="sy0">=</span><span class="re2">friend</span>
<span class="re1">context</span><span class="sy0">=</span><span class="re2">default</span>
<span class="re1">secret</span><span class="sy0">=</span><span class="re2">aBcDeF12345!</span>
<span class="re1">deny</span><span class="sy0">=</span><span class="re2">0.0.0.0/0.0.0.0</span>
<span class="re1">permit</span><span class="sy0">=</span><span class="re2">192.168.1.1/255.255.255.0</span></pre></div></div>
<p>&nbsp;</p>
<p>En este ejemplo, la regla de <strong>deny=0.0.0.0/0.0.0.0</strong> está negando el paso a todo, ya continuación el <strong>permit=192.168.1.1/255.255.255.0</strong> está permitiendo el paso solamente a aquellos dispositivos que se encuentren dentro de la red 192.168.1.x. Tengan mucho cuidado ya que si invertimos el orden de declaración:</p>
<div id="wpshdo_15" class="wp-synhighlighter-outer"><div id="wpshdt_15" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_15"></a><a id="wpshat_15" class="wp-synhighlighter-title" href="#codesyntax_15"  onClick="javascript:wpsh_toggleBlock(15)" title="Click to show/hide code block">Código</a></td><td align="right"><a href="#codesyntax_15" onClick="javascript:wpsh_code(15)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_15" onClick="javascript:wpsh_print(15)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_15" class="wp-synhighlighter-inner" style="display: block;"><pre class="ini" style="font-family:monospace;"><span class="re0"><span class="br0">&#91;</span><span class="nu0">100</span><span class="br0">&#93;</span></span>
<span class="re1">username</span><span class="sy0">=</span><span class="re2">100</span>
<span class="re1">type</span><span class="sy0">=</span><span class="re2">friend</span>
<span class="re1">context</span><span class="sy0">=</span><span class="re2">default</span>
<span class="re1">secret</span><span class="sy0">=</span><span class="re2">aBcDeF12345!</span>
<span class="re1">permit</span><span class="sy0">=</span><span class="re2">192.168.1.1/255.255.255.0</span>
<span class="re1">deny</span><span class="sy0">=</span><span class="re2">0.0.0.0/0.0.0.0</span></pre></div></div></pre>
<p>Al final, el deny (que es lo último declarado) prevalecerá, y dado que 0.0.0.0/0.0.0.0 hace match con todo, estamos negando el paso a todos (haciendo que la extensión no sirva).</p>
<p>También pueden usar la notación CIDR, por lo que pueden declarar un rango de red como 192.168.1.1/24 y es igual que 192.168.1.1/255.255.255.0.</p>
<p>Recuerden que al declarar el permit/deny dentro de [general] están habilitando esa regla para todos, pero si solo colocan reglas de permit individuales dentro de cada usuario, abrirán ese usuario solamente. <strong>Esta es la única manera que tendrán de permitir el acceso remoto a usuarios SIP/IAX específicos, negando la posibilidad a todos los demás</strong>. Esto resulta muy conveniente porque no exponen todas sus extensiones, sino solo las estrictamente necesarias.</p>
<p>Al tener que <em>descuidar</em> y permitir el paso a ciertos usuarios, deben asegurarse de que las contraseñas de aquellos usuarios a los que les permiten acceder desde el exterior son suficientemente seguras, y de ahí viene el siguiente punto.</p>
<p>&nbsp;</p>
<h3>Contraseñas SIP/IAX seguras</h3>
<p>Un motivo que muchos administradores tienen para dejar contraseñas inseguras es por facilitarse la labor al momento de configurar sus dispositivos SIP. Lo que muchas personas desconocen es que las contraseñas SIP/IAX se hicieron para tener que teclearlas una única vez, y esto es cuando configuramos el dispositivo (de hecho, si hacemos la configuración por provisionamiento TFTP nunca tendremos que teclearlas, pero ese es material para otro artículo). Si la contraseña solo deble escribirse o copiarse una única vez, entonces no existe razón para aprovechar y echarle un poco más de tiempo en usar contraseñas que sean tan seguras que un sistema de fuerza bruta no pueda romper.</p>
<p>Existen muchos mecanismos sencillos para generar contraseñas aleatorias. Quizá uno disponible que cualquier sistema con Linux tendría (con el paquete de openssl instalado):</p>
<div id="wpshdo_16" class="wp-synhighlighter-outer"><div id="wpshdt_16" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_16"></a><a id="wpshat_16" class="wp-synhighlighter-title" href="#codesyntax_16"  onClick="javascript:wpsh_toggleBlock(16)" title="Click to show/hide code block">Desde el Linux CLI:</a></td><td align="right"><a href="#codesyntax_16" onClick="javascript:wpsh_code(16)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_16" onClick="javascript:wpsh_print(16)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_16" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="co0"># Esto generará 20 contraseñas aleatorias de 12 caracteres</span>
<span class="kw1">for</span> i <span class="kw1">in</span> <span class="br0">&#123;</span>1..20<span class="br0">&#125;</span>; <span class="kw1">do</span> openssl rand <span class="re5">-base64</span> <span class="nu0">12</span>; <span class="kw1">done</span></pre></div></div>
<p>Podemos fácilmente cambiar el 20 por cualquier otro número y generar un <em>pool</em> de contraseñas aleatorias que podemos ocupar para nuestras extensiones, asegurándonos con esto de que nuestras contraseñas sean totalmente seguras.</p>
<p>También tomemos en cuenta peores casos: si no colocamos una contraseña en una cuenta IAX estaremos abriendo la posibilidad de que <strong>cualquier entidad que llegue a nuestro equipo aún y si no proporciona contraseña sea autenticado inmediatamente</strong>. Esto es por la propiedad de IAX que se basa totalmente en la contraseña para realizar la autenticación de un dispositivo. Si no llenamos este campo, cualquiera se podrá autenticar como tal, aún y sin proporcionar ningún dato.</p>
<p>El hecho de tener contraseñas seguras impedirá que los atacantes entren a nuestro sistema. Sin embargo, no impedirá que lo <em>intenten. </em>Aquí está la última parte de este rompecabezas:</p>
<p>&nbsp;</p>
<h3>Defensa contra fuerza bruta</h3>
<p>Es un hecho: si nuestro equipo <em>debe </em>estar expuesto porque nuestros usuarios así lo requieren, entonces tarde o temprano <em>será </em>atacado. El ataque puede verse en la forma de cientos de intentos de registro que intentarán adivinar nuestra contraseña segura definida en el punto anterior. A pesar de que sabemos que nunca la encontrarán, tantos cientos (o miles) de intentos pueden generar un ataque DoS en nuestro conmutador. ¿Cómo defendernos ante esto?</p>
<p>La respuesta es un sencillo (pero eficiente) programa llamado <em>fail2ban. </em>El fail2ban es una herramienta que analiza logs de intentos de ataque y bloquea selectivamente por iptables a la IP que origina estos ataques. Es como traer la seguridad de acceso cuando alguien ya entró a nuestro equipo pero se delató proporcionando contraseñas equivocadas. Veanlo como el personal de seguridad que te saca del lugar por comportarte mal, permitiéndote bloquearlo a nivel de firewall por unos minutos, horas o de manera permanente, todo depende de como lo configures.</p>
<p>Si estás interesado en ver como puedes <a href="http://asteriskmx.com/2011/07/protege-tu-asterisk-de-ataques-usando-fail2ban/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">configurar fail2ban</a> y los filtros que puedes aplicar, puedes <a href="http://asteriskmx.com/2011/07/protege-tu-asterisk-de-ataques-usando-fail2ban/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">consultar el artículo</a> que escribí hace unos meses.</p>
<p>&nbsp;</p>
<p>Con esto cubrimos el segundo nivel en esta serie de entregas. En la siguiente discutiremos sobre la manera en como autenticar no a los dispositivos, sino a los usuarios, que son los últimos elementos en la cadena de seguridad de nuestro sistema.</p>
<p>¡Suerte!</p>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/gf5DbkLQ48U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-2-de-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-2-de-3/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
		<item>
		<title>Modelo de seguridad en Asterisk (parte 1 de 3)</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/mw3rv7ig7NY/</link>
		<comments>http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-1-de-3/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 17:00:26 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=412</guid>
		<description><![CDATA[Desafortunadamente y como hemos comentado en otros posts, la seguridad en Asterisk es algo que se ha visto sobrevalorado por la sencillez y rapidez que trae el dejar un sistema que funciona en unas cuantas horas a partir de una distribución todo integrado, pero que es inseguro por descuidos del administrador. ¿Cómo puede alcanzarse la [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_423" class="wp-caption alignright" style="width: 310px"><a href="http://asteriskmx.com/wp-content/uploads/2012/05/Firewall1.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-423" title="Firewall" src="http://asteriskmx.com/wp-content/uploads/2012/05/Firewall1-300x164.png" alt="" width="300" height="164" /></a><p class="wp-caption-text">Fuente: http://upload.wikimedia.org/wikipedia/commons/5/5b/Firewall.png</p></div>
<p>Desafortunadamente y como hemos comentado en otros posts, la seguridad en Asterisk es algo que se ha visto sobrevalorado por la sencillez y rapidez que trae el dejar un sistema que funciona en unas cuantas horas a partir de una distribución todo integrado, pero que es inseguro por descuidos del administrador.</p>
<p>¿Cómo puede alcanzarse la seguridad al 100% del conmutador? La respuesta es <strong>no se puede</strong>. Sin embargo, lo que si podemos hacer es llevar nuestro sistema a un nivel de seguridad que haga que aquel que intente penetrarlo sin autorización tenga que invertir más tiempo del que está dispuesto a ceder.</p>
<p>Para explicar mejor esto, definiremos el modelo de seguridad de Asterisk en 3 niveles:</p>
<ol>
<li>Seguridad externa (acceso al sistema)</li>
<li>Seguridad de autenticación</li>
<li>Seguridad de operación</li>
</ol>
<div></div>
<h3>Seguridad externa</h3>
<p>Todo acceso al sistema desde fuentes externas (WAN) debe estar restringido a través de un firewall. Idealmente, usaríamos un firewall en hardware, pero si nuestro proveedor nos entrega una IP directa y la configuramos en nuestro equipo, podemos hacer uso de iptables.</p>
<p>Cuando decidimos que puertos abrir en nuestro firewall, debemos hacernos las siguientes preguntas:</p>
<ul>
<li>¿Habrá extensiones externas?</li>
<li>¿Habrá alguna administración externa del conmutador?</li>
<li>¿Existe algún proceso externo que controle el conmutador (manager interface)?</li>
</ul>
<p>El tema de las extensiones externas es delicado, ya que es una parte fundamental de las ventajas de Asterisk pero al mismo tiempo es lo que permite el mal uso del conmutador. Si <strong>no</strong> pensamos tener extensiones externas, los puertos UDP 5060 y 4569 (SIP e IAX) deben estar <strong>cerrados</strong>. Si no abrimos los puertos, nadie ajeno al sistema, aún sabiendo las contraseñas de las extensiones podrá hacer llamadas. Al cerrar los puertos, cortamos el cable de acceso, y nada puede pasar. Es por eso que <strong>esta es la parte más importante de seguridad del sistema</strong>.</p>
<p>Si nos encontramos bajo el escenario que <strong>debemos tener extensiones externas</strong>, tenemos que asegurarnos que el nivel de seguridad secundario sea bueno, ya que al conceder acceso a entidades externas, debemos dejar la responsabilidad de la seguridad a las capas interiores. De esto nos encargaremos en la parte 2 de este artículo.</p>
<blockquote><p><strong>Nota: </strong>Al momento de hacer un <em>register</em> hacia una entidad SIP/IAX2 externa estaremos abriendo una sesión a través del firewall, lo que permitiría a esta entidad <em>enviarnos</em> llamadas a pesar de que el firewall esté cerrado. Hay que tomar esto en cuenta pues si alguien tuviera acceso administrativo a nuestro equipo <em>podria generar un register</em> hacia su propio conmutador y con ello, enviarnos llamadas en sentido inverso. El caso es muy raro, pero puede ocurrir. Ténganlo en cuenta.</p></blockquote>
<p>Si necesitamos contar con administración remota del equipo debemos decidir correctamente que tipo de seguridad proveer. Si utilizamos alguna interfaz gráfica como FreePBX <strong>nunca, pero nunca debemos abrir el puerto HTTPS (TCP 443)</strong>. Abrir el puerto 443 permitiria que cualquier vulnerabilidad de nuestra web, ya sea por FreePBX, Webmin, phpMyAdmin o cualquier otra interfaz que nos exponga contra atacantes externos.</p>
<p>Sobre este punto debo decir que dadas múltiples vulnerabilidades que han sido encontradas en interfaces gráficas, ningún administrador que considere su trabajo digno dejaría expuesto el puerto de HTTPS. Si acaso se necesita (para la administración), lo correcto es usar un túnel SSH o mejor aún, una conexión por VPN (sobre este último punto, si creamos una VPN podríamos no tener que abrir ni un solo puerto entrante en el firewall, por lo que este resultaría el caso más seguro de todos).</p>
<p>Por último, si tuviéramos necesidad de controlar Asterisk a través del Manager Interface (AMI), es necesario saber que toda la comunicación por este puerto siempre viaja sin encriptación, por lo que si alguien intercepta los paquetes del AMI podría fácilmente controlar completamente nuestro conmutador, creando extensiones o solicitando llamadas de la nada. El puerto que se ocupa para esta comunicación es el <strong>5038 TCP </strong>y por lo tanto, nunca deberíamos dejarlo expuesto en nuestro firewall.</p>
<p>&nbsp;</p>
<p>Este es el final de la primera de tres entregas sobre el modelo de seguridad de Asterisk. En las siguientes 2 partes haremos mención de como configurar ACLs dentro de Asterisk para asegurar el acceso, así como las opciones que debemos tomar en cuenta al momento de generar contraseñas seguras para acceso a nuestros usuarios SIP/IAX.</p>
<p>Recuerden que también pueden dejarnos sus comentarios a través de <a href="http://twitter.com/asteriskmx">Twitter</a> o <a href="http://fb.com/asteriskmx">Facebook</a>.</p>
<p>¡Suerte!</p>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/mw3rv7ig7NY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-1-de-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/03/modelo-de-seguridad-en-asterisk-parte-1-de-3/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
		<item>
		<title>El carrier no siempre tiene la razón</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/quGV30kLcZs/</link>
		<comments>http://asteriskmx.com/2012/03/el-carrier-no-siempre-tiene-la-razon/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 17:00:55 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[experiencias]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=406</guid>
		<description><![CDATA[(por cuestiones de confidencialidad no puedo revelar nombres, pero esta historia aplica en general) Desde el pasado noviembre recibí una llamada de uno de mis clientes indicándome que su equipo Elastix muy frecuentemente le daba el ya conocido mensaje &#8220;todos los circuitos se encuentran ocupados&#8220;. Su enlace con la PSTN era a través de un [...]]]></description>
			<content:encoded><![CDATA[<p>(por cuestiones de confidencialidad no puedo revelar nombres, pero esta historia aplica en general)</p>
<p>Desde el pasado noviembre recibí una llamada de uno de mis clientes indicándome que su equipo Elastix muy frecuentemente le daba el ya conocido mensaje &#8220;<a title="Versión mejorada del mensaje “all circuits are busy” de Elastix (v3)" href="http://asteriskmx.com/2011/05/mejorar-el-mensaje-all-circuits-are-busy-de-elastix/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">todos los circuitos se encuentran ocupados</a>&#8220;. Su enlace con la PSTN era a través de un enlace digital E1 ISDN.  Pensé que algo estaría mal con la configuración del equipo, así que decidí acceder a la consola para ver que era lo que lo ocasionaba.</p>
<p>Intentó varias llamadas a un mismo número: todas fallaron. Mi creencia fue pensar que Elastix estaba mal interpretando el código Q.931 que el carrier entregaba de vuelta tras el resultado de la llamada. Para quienes no saben, el Q.931 es el protocolo estándar de la ITU para la señalización de control de conexión en ISDN (en otras palabras, es el responsable de indicar el estado de una llamada generada a través de un E1 ISDN). Por default, Elastix interpreta prácticamente todo con la misma respuesta de <em>&#8220;todos los circuitos se encuentran ocupados&#8221;</em>, por lo que a pesar de que la razón de terminado de la llamada sea una congestión del carrier o bien que el número marcado no existe, siempre obtenemos la misma respuesta.</p>
<p>Implementé la solución de uno de mis <a title="Versión mejorada del mensaje “all circuits are busy” de Elastix (v3)" href="http://asteriskmx.com/2011/05/mejorar-el-mensaje-all-circuits-are-busy-de-elastix/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">post</a> anteriores esperando que eso resolviera el problema y el cliente se enterara de cual era la verdadera razón para la desconexión. Poco tiempo paso cuando mi cliente me indicó que no hubo cambio, sino que todo continuó exactamente igual que al principio (mismo mensaje para todos los casos). Esto me extrañó dado que esta solución ha sido exitosa en muchos casos e inclusive, <a href="http://www.voipsolutions.mx/files/Parche_para_obtener_Mensajes_numero_no_existe_o_en_reparacion.pdf">otras empresas lo han sugerido a sus clientes</a> para resolver problemas con el servicio recibido por otros carriers, por lo que tuve que indagar más para encontrar la causa del problema.</p>
<p>Tras analizar los logs, encontré cientos de registros como este:</p>
<div id="wpshdo_17" class="wp-synhighlighter-outer"><div id="wpshdt_17" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_17"></a><a id="wpshat_17" class="wp-synhighlighter-title" href="#codesyntax_17"  onClick="javascript:wpsh_toggleBlock(17)" title="Click to show/hide code block">Código</a></td><td align="right"><a href="#codesyntax_17" onClick="javascript:wpsh_code(17)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_17" onClick="javascript:wpsh_print(17)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_17" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="br0">&#91;</span>Feb 9 08<span class="sy0">:</span>34<span class="sy0">:</span>03<span class="br0">&#93;</span> VERBOSE<span class="br0">&#91;</span>10458<span class="br0">&#93;</span> pbx<span class="sy0">.</span>c<span class="sy0">:</span>     <span class="sy0">--</span> Executing <span class="br0">&#91;</span><span class="kw1">continue</span><span class="sy0">@</span>macro<span class="sy0">-</span>dialout<span class="sy0">-</span>trunk<span class="sy0">:</span><span class="nu0">3</span><span class="br0">&#93;</span> NoOp<span class="br0">&#40;</span><span class="st0">&quot;SIP/31163-00002883&quot;</span><span class="sy0">,</span> <span class="st0">&quot;TRUNK Dial failed due to CONGESTION HANGUPCAUSE: 31 - failing through to other trunks&quot;</span><span class="br0">&#41;</span> in <span class="kw2">new</span> stack
<span class="br0">&#91;</span>Feb 9 08<span class="sy0">:</span>36<span class="sy0">:</span>42<span class="br0">&#93;</span> VERBOSE<span class="br0">&#91;</span>10472<span class="br0">&#93;</span> pbx<span class="sy0">.</span>c<span class="sy0">:</span>     <span class="sy0">--</span> Executing <span class="br0">&#91;</span><span class="kw1">continue</span><span class="sy0">@</span>macro<span class="sy0">-</span>dialout<span class="sy0">-</span>trunk<span class="sy0">:</span><span class="nu0">3</span><span class="br0">&#93;</span> NoOp<span class="br0">&#40;</span><span class="st0">&quot;SIP/31142-0000288d&quot;</span><span class="sy0">,</span> <span class="st0">&quot;TRUNK Dial failed due to CONGESTION HANGUPCAUSE: 31 - failing through to other trunks&quot;</span><span class="br0">&#41;</span> in <span class="kw2">new</span> stack
<span class="br0">&#91;</span>Feb 9 08<span class="sy0">:</span>42<span class="sy0">:</span>10<span class="br0">&#93;</span> VERBOSE<span class="br0">&#91;</span>10499<span class="br0">&#93;</span> pbx<span class="sy0">.</span>c<span class="sy0">:</span>     <span class="sy0">--</span> Executing <span class="br0">&#91;</span><span class="kw1">continue</span><span class="sy0">@</span>macro<span class="sy0">-</span>dialout<span class="sy0">-</span>trunk<span class="sy0">:</span><span class="nu0">3</span><span class="br0">&#93;</span> NoOp<span class="br0">&#40;</span><span class="st0">&quot;SIP/31161-00002897&quot;</span><span class="sy0">,</span> <span class="st0">&quot;TRUNK Dial failed due to CONGESTION HANGUPCAUSE: 31 - failing through to other trunks&quot;</span><span class="br0">&#41;</span> in <span class="kw2">new</span> stack
<span class="br0">&#91;</span>Feb 9 08<span class="sy0">:</span>44<span class="sy0">:</span>45<span class="br0">&#93;</span> VERBOSE<span class="br0">&#91;</span>10512<span class="br0">&#93;</span> pbx<span class="sy0">.</span>c<span class="sy0">:</span>     <span class="sy0">--</span> Executing <span class="br0">&#91;</span><span class="kw1">continue</span><span class="sy0">@</span>macro<span class="sy0">-</span>dialout<span class="sy0">-</span>trunk<span class="sy0">:</span><span class="nu0">3</span><span class="br0">&#93;</span> NoOp<span class="br0">&#40;</span><span class="st0">&quot;SIP/31131-0000289c&quot;</span><span class="sy0">,</span> <span class="st0">&quot;TRUNK Dial failed due to CONGESTION HANGUPCAUSE: 31 - failing through to other trunks&quot;</span><span class="br0">&#41;</span> in <span class="kw2">new</span> stack
<span class="br0">&#91;</span>Feb 9 08<span class="sy0">:</span>49<span class="sy0">:</span>55<span class="br0">&#93;</span> VERBOSE<span class="br0">&#91;</span>10523<span class="br0">&#93;</span> pbx<span class="sy0">.</span>c<span class="sy0">:</span>     <span class="sy0">--</span> Executing <span class="br0">&#91;</span><span class="kw1">continue</span><span class="sy0">@</span>macro<span class="sy0">-</span>dialout<span class="sy0">-</span>trunk<span class="sy0">:</span><span class="nu0">3</span><span class="br0">&#93;</span> NoOp<span class="br0">&#40;</span><span class="st0">&quot;SIP/31112-0000289f&quot;</span><span class="sy0">,</span> <span class="st0">&quot;TRUNK Dial failed due to CONGESTION HANGUPCAUSE: 31 - failing through to other trunks&quot;</span><span class="br0">&#41;</span> in <span class="kw2">new</span> stack</pre></div></div>
<p>Aquí se aprecia que el código de terminación de la llamada fue el 31. Si <a href="http://en.wikipedia.org/wiki/Q.931">buscamos en Google</a> encontraremos que el código 31 dice &#8220;Normal, unspecified&#8221;, significando que la llamada terminó por causas normales que no fueron especificadas. Esto es normal de vez en cuando, pero tener tantos intentos fallidos en el mismo intervalo de tiempo me hizo investigar más.</p>
<p>Encontré los números que se marcaban y tomé mi línea analógica convencional y marqué a ellos. Los resultados fueron diferentes para los diferentes números:</p>
<ul>
<li>&#8220;El número que marcó está fuera de servicio&#8221;</li>
<li>&#8220;El número que marcó está suspendido&#8221;</li>
<li>&#8220;El número que marcó no existe&#8221;</li>
<li>&#8220;El número celular que usted marcó no está disponible o se encuentra fuera del área de servicio&#8221;</li>
</ul>
<p>Entonces no era problema que todos los canales estuvieran ocupados, sino que el carrier <em>NO</em> estaba regresándonos la causa correcta de terminación de la llamada para cada caso específico. <strong>Esto es sumamente importante, ya que en base al código de error obtenido sabes como debes retroalimentar a los usuarios para que reintenten pasados unos minutos o bien, que dejen de intentar llamar a un número imposible de localizar. </strong></p>
<p><strong></strong>A pesar que trates de explicarle esto a los clientes, muchos no entienden que las líneas digitales se basan en códigos de error y no en grabaciones que escuchan en su línea al momento de marcar. Decir que todos los circuitos están ocupados normalmente es asociado con problemas de capacidad (piensan que hacen demasiadas llamadas simultáneas) o con un problema del conmutador, y acaban echándote la culpa a ti como proveedor del mismo.</p>
<p>Como el problema escalaba de lo que éramos capaces de ofrecer (ya que el enlace es provisto por el carrier, no por nosotros) no nos quedó de otra que levantar la incidencia. Esto fue desde noviembre 2011. Múltiples pruebas se tuvieron que hacer para <span style="text-decoration: underline;">demostrar</span> a los ingenieros de soporte del carrier que el problema no venía del conmutador, sino de su enlace (o bien, de la interconexión de ellos con el destino al que se estaba marcando).</p>
<p>Tras 3 meses de idas y vueltas, reportes enviados y pruebas fallidas, antier me reportaron que por fin pudieron cumplirse pruebas exitosas del proyecto. <span style="text-decoration: underline;">El problema radicó en la interconexión entre carriers, no en la conexión de Asterisk</span>.</p>
<p>Los ingenieros de soporte nos hicieron notar que gracias a la insistencia de nuestra parte el problema pudo detectarse e inclusive, se corrigió para todos los usuarios del mismo tipo de servicio. Inclusive la retroalimentación fue que muchos proveedores de conmutadores de telefonía convencional <em>disfrazan</em> los códigos de error recibidos para otorgarle al usuario respuestas aceptables en los problemas de los enlaces digitales. Sin embargo, Asterisk es de los pocos conmutadores con acceso total a la información (sin restricciones), por lo que pudimos meternos a hacer un debug intensivo del medio y pudimos refutar al carrier que el problema no venía de nuestro lado.</p>
<p>Sin acceso a la información que Asterisk entrega, nunca hubiéramos tenido las pruebas para acusar a quien tuvo la verdadera culpa del problema y hoy, seguiríamos igual que al principio.</p>
<p>Creo que la moraleja de esta historia es: <strong>nunca asuman que el proveedor grande siempre tiene la razón. </strong>Consigan pruebas, experimenten y evalúen sus resultados. Es muy probable que ustedes sean quienes puedan salir victoriosos de la contienda, solo infórmense bien de lo que ustedes saben que deberían estar recibiendo.</p>
<p>¡Suerte!</p>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/quGV30kLcZs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/03/el-carrier-no-siempre-tiene-la-razon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/03/el-carrier-no-siempre-tiene-la-razon/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
		<item>
		<title>Como exportar el AstDB (Asterisk Database)</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/IUEopBpHhJY/</link>
		<comments>http://asteriskmx.com/2012/01/como-exportar-el-astdb-asterisk-database/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 16:30:47 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=395</guid>
		<description><![CDATA[En algunas ocasiones nos hemos topado con clientes cuyo sistema empieza a hacer cosas&#8230; raras. Resulta que el call forward deja de funcionar correctamente, o que las llamadas se ciclan después de entrar al IVR y apuntar hacia alguna dirección. Esto lo hemos visto en casos con FreePBX/Elastix donde el equipo por alguna error (a [...]]]></description>
			<content:encoded><![CDATA[<p>En algunas ocasiones nos hemos topado con clientes cuyo sistema empieza a hacer cosas&#8230; <em>raras</em>. Resulta que el call forward deja de funcionar correctamente, o que las llamadas se ciclan después de entrar al IVR y apuntar hacia alguna dirección. Esto lo hemos visto en casos con FreePBX/Elastix donde el equipo por alguna error (a veces falla de hardware) se traba y es necesario reiniciarlo físicamente, haciendo que archivos como el astdb se corrompan y queden incompletos. Esto ocasione que nuevos valores no puedan ser guardados en el astdb, o que valores viejos no puedan ser modificados.</p>
<p>Un síntoma típico de estos problemas es cambiar algún valor desde el GUI que ocasione que el AstDB cambie. Ejemplo: un nuevo speeddial del addressbook o activar/desactivar el call-waiting de alguna extensión. Si nos hemos preguntado: ¿por qué Asterisk no está guardando los valores que le doy? Esta es una probabilidad&#8230;</p>
<p>La solución más radical es la siguiente:</p>
<ol>
<li>Detener Asterisk</li>
<li>Eliminar el archivo <strong>/var/lib/asterisk/astdb</strong></li>
<li>Reiniciar Asterisk</li>
</ol>
<p>Con esto, Asterisk creará una nueva astdb desde cero, pero habremos perdido cualquier valor que ya existiera allí. Cualquier campo personalizado se perdió tras este paso.</p>
<p>¿Cómo podemos <em>exportar</em> los valores del astdb, a manera que podamos restaurarla en una nueva recién creada que no tiene estos errores?</p>
<p>Una respuesta a este problema fue crear un script que se conecte por el AMI y haga un <em>dump</em> en código bash que después se pueda usar para aplicarlo en cualquier otro momento. Este dump seria una serie de comandos que harían una conexión a Asterisk indicándole recrear los valores. El código es el siguiente:</p>
<div id="wpshdo_18" class="wp-synhighlighter-outer"><div id="wpshdt_18" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_18"></a><a id="wpshat_18" class="wp-synhighlighter-title" href="#codesyntax_18"  onClick="javascript:wpsh_toggleBlock(18)" title="Click to show/hide code block">/var/lib/asterisk/agi-bin/astdb.php</a></td><td align="right"><a href="#codesyntax_18" onClick="javascript:wpsh_code(18)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_18" onClick="javascript:wpsh_print(18)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_18" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;">#!/usr/bin/php -q
<span class="kw2">&lt;?php</span>
<span class="kw1">include</span> <span class="st0">&quot;phpagi-asmanager.php&quot;</span><span class="sy0">;</span>
<span class="re0">$user</span> <span class="sy0">=</span> <span class="st_h">'admin'</span><span class="sy0">;</span>
<span class="re0">$pass</span> <span class="sy0">=</span> <span class="st_h">'elastix456'</span><span class="sy0">;</span>
<span class="re0">$agi</span> <span class="sy0">=</span> <span class="kw2">new</span> AGI_AsteriskManager<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$agi</span><span class="sy0">-&gt;</span><span class="me1">connect</span><span class="br0">&#40;</span><span class="st_h">'127.0.0.1'</span><span class="sy0">,</span><span class="re0">$user</span><span class="sy0">,</span><span class="re0">$pass</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$r</span> <span class="sy0">=</span> <span class="re0">$agi</span><span class="sy0">-&gt;</span><span class="me1">database_show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$x</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="st0">&quot;#!/bin/bash<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$r</span> <span class="kw1">as</span> <span class="re0">$k</span> <span class="sy0">=&gt;</span> <span class="re0">$v</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">echo</span> <span class="st0">&quot;asterisk -rx 'database put &quot;</span><span class="sy0">.</span><a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$k</span><span class="sy0">,</span>1<span class="sy0">,</span><a href="http://www.php.net/strpos"><span class="kw3">strpos</span></a><span class="br0">&#40;</span><span class="re0">$k</span><span class="sy0">,</span><span class="st_h">'/'</span><span class="sy0">,</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">' '</span> <span class="sy0">.</span>
<a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$k</span><span class="sy0">,</span><a href="http://www.php.net/strpos"><span class="kw3">strpos</span></a><span class="br0">&#40;</span><span class="re0">$k</span><span class="sy0">,</span><span class="st_h">'/'</span><span class="sy0">,</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">+</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">' '</span><span class="sy0">.</span>
<span class="st0">&quot;<span class="es1">\&quot;</span><span class="es4">$v</span><span class="es1">\&quot;</span>'&quot;</span><span class="sy0">.</span>
<span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="sy1">?&gt;</span>
Hay que notar que en el código estoy incluyendo al archivo phpagi-asmanager.php el cual es un componente de la clase PHPAGI que existe en todas las distribuciones de FreePBX (y eso incluye a Elastix/Trixbox). Yo recomiendo colocar este código en un archivo como /var/lib/asterisk/agi-bin/astdb.php, ya que esa carpeta ya contiene la librería arriba mencionada.
Invocarlo es muy sencillo. Lo hacemos ejecutale y lo corremos:&quot;
[codesyntax lang=&quot;bash&quot;]
chmod 755 /var/lib/asterisk/agi-bin/astdb.php
/var/lib/asterisk/agi-bin/astdb.php &gt; /tmp/astdb.sh</pre></div></div>
<p>Tras ejectutar el comando anterior, tendremos un archivo astdb.sh dentro de la carpeta /tmp. Este archivo tendrá un contenido parecido al que sigue:</p>
<div id="wpshdo_19" class="wp-synhighlighter-outer"><div id="wpshdt_19" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_19"></a><a id="wpshat_19" class="wp-synhighlighter-title" href="#codesyntax_19"  onClick="javascript:wpsh_toggleBlock(19)" title="Click to show/hide code block">/tmp/astdb.sh</a></td><td align="right"><a href="#codesyntax_19" onClick="javascript:wpsh_code(19)" title="Show code only"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_19" onClick="javascript:wpsh_print(19)" title="Print code"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://asteriskmx.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_19" class="wp-synhighlighter-inner" style="display: block;"><pre class="bash" style="font-family:monospace;"><span class="co0">#!/bin/bash</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/cidname &quot;Juan Perez&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/cidnum &quot;100&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/device &quot;100&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/followme/changecid &quot;default&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/followme/ddial &quot;DIRECT&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/followme/fixedcid &quot;&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/followme/grpconf &quot;DISABLED&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/followme/grplist &quot;815#&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/followme/grptime &quot;20&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/followme/prering &quot;15&quot;'</span>
asterisk <span class="re5">-rx</span> <span class="st_h">'database put AMPUSER 100/language &quot;es&quot;'</span></pre></div></div>
<p>Estos son una serie de comandos que podemos ejecutar para hacer que el nuevo Asterisk importe el contenido del AstDB anterior para tener acceso a la misma información que el anterior. ¿Por que no simplemente respaldamos el archivo /var/lib/asterisk/astdb? Porque al reemplazar el nuevo archivo sobreescribiríamos todo, y perderiamos cualquier personalización que hubiera en el viejo sistema. Además, si respaldamos un archivo <em>dañado</em>, lo único que conseguiríamos seria copiar el daño de nuevo.</p>
<p>Espero esto les sirva. A nosotros nos resolvió el problema de un cliente que no le permitía guardar nueva información (sus speeddials no podían ser editados ni podiamos agregar nuevos).</p>
<p>¡Suerte!</p>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/IUEopBpHhJY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/01/como-exportar-el-astdb-asterisk-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/01/como-exportar-el-astdb-asterisk-database/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
		<item>
		<title>Nueva imagen para nuestro sitio</title>
		<link>http://feedproxy.google.com/~r/asteriskmx/~3/VXiZJ50Ij1U/</link>
		<comments>http://asteriskmx.com/2012/01/nueva-imagen-para-nuestro-sitio/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 16:00:32 +0000</pubDate>
		<dc:creator>Christian Cabrera</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://asteriskmx.com/?p=390</guid>
		<description><![CDATA[Para quien entró al sitio desde temprano habrá notado algo diferente, y es que por fin actualizamos nuestra página principal para que coincidiera con nuestros foros de discusión. Durante los siguientes días estaremos haciendo algunos ajustes de apariencia, pero el contenido sigue siendo el mismo. Esperamos que a todos nuestros visitantes les agrade el cambio [...]]]></description>
			<content:encoded><![CDATA[<p>Para quien entró al sitio desde temprano habrá notado algo diferente, y es que por fin actualizamos nuestra página principal para que coincidiera con nuestros <a href="http://asteriskmx.com/foros#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">foros de discusión</a>.</p>
<p>Durante los siguientes días estaremos haciendo algunos ajustes de apariencia, pero el contenido sigue siendo el mismo. Esperamos que a todos nuestros visitantes les agrade el cambio para tener ahora una imagen más <em>personalizada.</em></p>
<p>¡Suerte!</p>
<img src="http://feeds.feedburner.com/~r/asteriskmx/~4/VXiZJ50Ij1U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://asteriskmx.com/2012/01/nueva-imagen-para-nuestro-sitio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://asteriskmx.com/2012/01/nueva-imagen-para-nuestro-sitio/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</feedburner:origLink></item>
	</channel>
</rss>

