tag:blogger.com,1999:blog-6668331290746806722024-03-13T13:16:08.659-05:00Apuntes de FLOSSApuntes, Notas, Tutoriales y más; acerca del mundo FLOSS! ;)
Flxhttp://www.blogger.com/profile/12805913784917363146noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-666833129074680672.post-64129936683281811522016-10-18T17:02:00.000-05:002016-10-18T17:06:02.784-05:00OpenSwan: Conectando contra un Cisco ASA de la Serie 5500 con IPSec<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/01/10/blog/iknaxio/openswan_conectando_contra_un_cisco_asa_de_la_serie_5500_con_ipsec" target="_blank">Publicado originalmente el 2012-01-10 17:34, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
<cite><b>Nota de Descargo:</b>
<i>La siguiente entrada está basada en unas Notas que tomé durante una Implementación VPN con IPSec, por lo que el nombre de Tutorial sería demasiado ostentoso :P </i></cite></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Las configuraciones son realizadas en un CentOS 5.7, usando el paquete OpenSwan 2.6 con Claves Pre-Compartidas (PSK).</div>
<br />
<a name='more'></a><div style="text-align: justify;">
<b>Escenario:</b></div>
<div style="text-align: justify;">
Un partner de Filadelfia solicita establecer una VPN con nosotros por lo que me envia una hoja de configuración que contiene la siguiente información:
</div>
<pre>Gateway: Cisco ASA 5510, IOS 8.2
IP Address: 66.x.y.45
Propiedades del Tunel
Fase 1:
Authentication: Pre-Shared key
Key: GYEFiladelfia2012
Encryption Protocol: IPSEC
Diffie-Hellman Group: Group 2
Encryption Algorithm: 3DES
Hashing Algorithm: SHA1
Mode (Main o Aggressive): Main Mode
Lifetime: 86400
Fase 2:
Encapsulation (ESP o AH): ESP
Encryption Algorithm: 3DES
Authentication Algorithm: SHA1
Perfect Forward Secrecy (PFS) or DH: Disabled
Lifetime: 3600 seconds
</pre>
<div style="text-align: justify;">
Tenía experiencia previa en establecer VPN pero usando OpenVPN, por lo que me tocó documentarme primeramente como trabajar con IPSec bajo Linux, descubrí que necesitaba usar OpenSwan, busqué tutoriales en internet, pero también caí en cuenta de que para implementar cualquier cosa se tiene primero que tener en claro los conceptos de la tecnología a usar, de nada sirven los tutoriales sino se conoce como funcionan las cosas, así que tocó leer ;)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Una vez que ya estaba mejor informado diagramé mi esquema de red:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-w5f4gP3A-8c/WAaaugJv0TI/AAAAAAAAAHE/RPDlUR5vUsQ7iwTZla_zVpw5p1LwNlh-QCLcB/s1600/Esquema-red-openswan.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="255" src="https://2.bp.blogspot.com/-w5f4gP3A-8c/WAaaugJv0TI/AAAAAAAAAHE/RPDlUR5vUsQ7iwTZla_zVpw5p1LwNlh-QCLcB/s400/Esquema-red-openswan.png" width="400" /></a></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
De donde se detalla:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Guayaquil:
</div>
<ul style="text-align: justify;">
<li>10.10.56.16: Cliente desde donde se va acceder a Filadelfia.</li>
<li>10.10.56.1: IP de la Interfaz del FW a la Red de Producción</li>
<li>10.10.36.1: IP de la Interfaz del FW a la DMZ</li>
<li>10.10.36.10: Servidor VPN con CentOS 5.7 que se encuentra dentro de una DMZ y cuya IP pública es 200.x.y.10</li>
</ul>
<div style="text-align: justify;">
Philadelphia:
</div>
<ul>
<li style="text-align: justify;">66.x.y.45: Servidor VPN implementado en un equipo Cisco ASA 5510</li>
<li style="text-align: justify;">192.168.1.23: Servidor de Aplicaciones</li>
</ul>
<b>Y me puse manos a la obra:</b><br />
Instalación del paquete
<br />
<pre>yum install openswan
</pre>
Cambiamos algunos parámetros del kernel, entre ellos activamos el bit forward.
<br />
<pre>nano /etc/sysctl.conf
</pre>
<pre>net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
</pre>
Aplicamos los cambios en el kernel:
<br />
<pre>sysctl -p
</pre>
Editamos el archivo de configuración de IPSec:
<br />
<pre>nano /etc/ipsec.conf
</pre>
<div style="text-align: justify;">
Y aparte de la configuración general, agregamos la sección respectiva del tunel que en este caso hemos denominado <i>net-filadelfia</i>:
</div>
<pre>config setup
protostack=netkey
nat_traversal=no
virtual_private=
oe=off
nhelpers=0
conn net-filadelfia
left=10.10.36.10
leftsubnet=10.10.56.16/32
leftnexthop=%defaultroute
right=66.x.y.45
rightsubnet=192.168.1.23/32
rightnexthop=%defaultroute
authby=secret
rekey=yes
keyingtries=5
keyexchange=ike
ike=3des-sha1
ikelifetime=86400s
phase2=esp
phase2alg=3des-sha1;modp1024
keylife=3600s
pfs=no
auto=start
</pre>
<div style="text-align: justify;">
<i><b>Nota:</b> todas la líneas referentes a una conexión necesitan un tabulado.</i> </div>
<br />
<div style="text-align: justify;">
El detalle de cada parámetro puede ser revisado, ingresando a la página de manual respectiva:
</div>
<pre>man ipsec.conf
</pre>
<div style="text-align: justify;">
Editamos el archivo que almacena los 'claves' para la comunicación entre los servidores VPN:
</div>
<pre>nano /etc/ipsec.d/net-filadelfia.secrets
</pre>
<div style="text-align: justify;">
Y colocamos el host origen, el host destino y la clave pre-compartida que utilizarán para comunicarse.
</div>
<pre>10.10.36.10 66.x.y.45 : PSK "GYEFiladelfia2012"
</pre>
<ul>
<li><b>Configuración en Firewall</b><br /><div style="text-align: justify;">
Para permitir el flujo de tráfico a través del FW de Guayaquil, tuve que realizar la siguiente configuración adicional:
</div>
<ul>
<li style="text-align: justify;"><b>Rutas:</b>
Se debe agregar una ruta para que todo el tráfico que tenga como destino el host 192.168.1.23 tenga como gateway la 10.10.36.10
</li>
<li style="text-align: justify;"><b>Reglas:</b>
Se debe agregar reglas para que los 2 Servidores VPN (CentOS/OpenSwan y Cisco/ASA) intercambien tráfico por el puerto 50 de ESP y UDP 500 para IKE. Y para que el cliente en Guayaquil acceda a los puertos específicos del Servidor de Aplicaciones de Filadelfia.
</li>
</ul>
</li>
</ul>
Finalmente Iniciamos el Servicio:
<br />
<pre>service ipsec start
</pre>
Los logs pueden ser revisados en:
<br />
<pre>tail -f /var/log/secure
tail -f /var/log/messages
</pre>
Para comprobar que todo va bien:
<br />
<pre>ipsec verify
ipsec auto --status
</pre>
<div style="text-align: justify;">
Como se pueden crear varios túneles, también existe la manera de subir/bajar dichos túneles bajo demanda:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para subir un túnel:
</div>
<pre>ipsec auto --up net-filadelfia
</pre>
Para bajar un túnel:
<br />
<pre>ipsec auto --down net-filadelfia
</pre>
Finalmente, algunas pruebas de conectividad que realice:
<br />
<pre>ping 66.x.y.45
traceroute 192.168.1.23
tcpdump -i eth0 | grep 192.168.1.23
</pre>
Espero que les sea de utilidad ;).<br />
<br />
<b>Referencias:</b>
<br />
<ul>
<li><a href="http://www.ipsec-howto.org/spanish/x161.html">Teoría - ¿Qué es IPsec?</a></li>
<li><a href="http://urdiendo.blogspot.com/2008/05/openswan-ipsec-en-linux-i.html">Openswan: ipsec en linux (I)</a></li>
<li><a href="http://wiki.openswan.org/">OpenSwan Wiki</a></li>
<li><a href="http://howtoforums.net/viewtopic.php?t=92">HowTo Linux VPN OpenSwan site-to-site with Cisco PIX</a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/01/10/blog/iknaxio/openswan_conectando_contra_un_cisco_asa_de_la_serie_5500_con_ipsec#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-66880647515951352992016-10-18T13:49:00.002-05:002016-10-18T13:51:33.464-05:00Preparativos para la Instalación de Zimbra 8 en CentOS 6.x<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/11/16/comos/preparativos_para_la_instalaci%C3%B3n_de_zimbra_8_en_centos_6x" target="_blank">Publicado originalmente el 2012-11-16 00:36, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
El presente documento detalla los pasos a realizar antes de ejecutar en CentOS 6.x el instalador de la versión Open Source de Zimbra 8.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Partimos del supuesto de que se ha realizado una instalación "Minimal" de CentOS 6.3, por lo que en caso de que el lector realizó una instalación del tipo "Basic Server" u otra más completa, se encontrará con que algunos paquetes ya están instalados o entran en conflicto de puertos al momento de que se arranque por primera vez Zimbra, en este último caso se deberán identificar y deshabilitar los servicios del Sistema que causan el problema.</div>
<br />
<a name='more'></a><div style="text-align: justify;">
<i><b>Consejo:</b> Siempre que se pueda es preferible partir de una Instalación "Minimal".</i> </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A continuación los comandos a ejecutar y las configuraciones a realizar ;) : </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Antes que nada, primero siempre es bueno darle una actualizada al Sistema.
</div>
<pre>yum -y update
</pre>
<div style="text-align: justify;">
Instalamos algunas aplicaciones que son de mucha utilidad ;) : editor de texto (nano), gestor de descargas (wget), visor de manuales (man), auditoría de redes (nmap).
</div>
<pre>yum -y install nano wget man nmap
</pre>
Como Zimbra empaqueta su propio Postfix, vamos a detener y deshabilitar el que viene por defecto en el Sistema.
<br />
<pre>/etc/init.d/postfix stop
</pre>
<pre>chkconfig postfix off
</pre>
Instalamos las dependencias de los paquetes de Zimbra:
<br />
<pre>yum -y install nc libstdc++.i686 perl sysstat sudo
</pre>
Editamos el archivo de reglas de <i>sudo</i>:
<br />
<pre>nano /etc/sudoers
</pre>
<div style="text-align: justify;">
Comentamos la siguiente línea, para permitir que las tareas y procesos de Zimbra ejecuten <i>sudo</i> sin la necesidad de una sesión de login:
</div>
<pre># Defaults requiretty
</pre>
<b>Red:</b><br />
<div style="text-align: justify;">
Tenemos que verificar que la configuración de red de nuestro servidor sea la correcta.
Editamos el archivo de hosts
</div>
<pre>nano /etc/hosts
</pre>
<div style="text-align: justify;">
Debe existir al menos dos líneas: una para el localhost y otra para la IP de nuestro servidor con su respectivo nombre FQDN (<i>mail.iknaxio.net</i>).
</div>
<pre>127.0.0.1 localhost localhost.localdomain
192.168.0.102 mail.iknaxio.net mail
</pre>
Editamos el archivo de red
<br />
<pre>nano /etc/sysconfig/network
</pre>
<div style="text-align: justify;">
Y verificamos que la directiva <i>HOSTNAME</i> contenga el nombre FQDN
</div>
<pre>HOSTNAME=mail.iknaxio.net
</pre>
<div style="text-align: justify;">
Si se hacen cambios en este último archivo, podemos aplicarlos inmediatamente con el siguiente comando
</div>
<pre>hostname mail.iknaxio.net
</pre>
<div style="text-align: justify;">
Comprobamos que los cambios están fijados, ejecutando el mismo comando sin argumentos
</div>
<pre>hostname
</pre>
<b>Split DNS</b><br />
<div style="text-align: justify;">
Como lo más común es tener nuestro servidor de correo detrás de un firewall y por ende configurado con una dirección ip privada, tenemos que instalar un Servidor DNS interno para que el Postfix no arroje error al momento de realizar las consultas MX y A. Para mas detalles, recomiendo la lectura de los enlaces de referencia que se encuentran al final de este How To. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Realizamos la instalación del Servidor DNS
</div>
<pre>yum -y install dnsmasq
</pre>
Editamos el archivo de configuración de muestro servicio
<br />
<pre>nano /etc/dnsmasq.conf
</pre>
Y verificamos los valores de las siguientes directivas:
<br />
<pre>server=8.8.8.8
server=8.8.4.4
domain=iknaxio.net
mx-host=iknaxio.net,mail.iknaxio.net,5
listen-address=127.0.0.1
</pre>
En donde:
<br />
<ul>
<li style="text-align: justify;"><i>server</i>: Direcciones IP de los Servidores DNS Externos hacia donde se enviarán las consultas cuya zonas de resolución no pertenezcan al servidor local.</li>
<li style="text-align: justify;"><i>domain</i>: el dominio que estamos administrando.</li>
<li style="text-align: justify;"><i>mx-host</i>: el registro MX que identifica a los servidores de correo y su respectiva prioridad.</li>
<li style="text-align: justify;"><i>listen-address</i>: la dirección IP en la que escucha nuestro Servidor DNS.</li>
</ul>
<div style="text-align: justify;">
Editamos el archivo de resolución, en donde se encuentran especifícados los servidores DNS que mi sistema consulta.
</div>
<pre>nano /etc/resolv.conf
</pre>
<div style="text-align: justify;">
Nos aseguramos de que la primera línea <i>nameserver</i> sea la que apunta al DNS interno
</div>
<pre>nameserver 127.0.0.1
</pre>
Reiniciamos el servicio
<br />
<pre>/etc/init.d/dnsmasq restart
</pre>
Activamos la ejecución desde el arranque del Sistema
<br />
<pre>chkconfig dnsmasq on
</pre>
Instalamos las utilidades para realizar consultas DNS.
<br />
<pre>yum -y install bind-utils
</pre>
<div style="text-align: justify;">
Verificamos que nuestro DNS interno está trabajando de manera correcta, ejecutando:
</div>
<pre>dig iknaxio.net mx
</pre>
El resultado debe ser algo como esto:
<br />
<pre>; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.5 <<>> iknaxio.net mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29721
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;iknaxio.net. IN MX
;; ANSWER SECTION:
iknaxio.net. 0 IN MX 5 mail.iknaxio.net.
;; ADDITIONAL SECTION:
mail.iknaxio.net. 0 IN A 192.168.0.105
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Nov 11 02:08:23 2012
;; MSG SIZE rcvd: 77
</pre>
Hasta aquí los preparativos!<br />
<br />
Saludos ;)
<b> </b><br />
<br />
<b>Referencias:</b>
<br />
<ul>
<li><a href="https://wiki.zimbra.com/wiki/Split_DNS">Split DNS</a></li>
<li><a href="http://www.ecualug.org/2011/12/06/comos/%C2%BFc%C3%B3mo_configurar_un_dns_de_cach%C3%A9_con_dnsmasq">¿Cómo configurar un DNS de caché con dnsmasq?</a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/11/16/comos/preparativos_para_la_instalaci%C3%B3n_de_zimbra_8_en_centos_6x#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-86823124559870255942016-10-18T13:37:00.000-05:002016-10-18T13:39:21.865-05:00Como enviar correo desde la consola, sin tener un MTA local, usando SSmtp<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/11/07/comos/como_enviar_correo_desde_la_consola_sin_tener_un_mta_local_usando_ssmtp" target="_blank">Publicado originalmente el 2012-11-07 00:39, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Hace tiempo me encontré con el dilema de incluir en un bash script de respaldo que estaba programando la funcionalidad de enviar un correo electrónico al administrador con el resumen de la tarea realizada. Empezé a revisar y la única manera que encontré para ejecutar dicha tarea era instalando y configurando un MTA tipo Sendmail o Postfix.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo malo es que tengo la costumbre de desintalar cualquier servicio o programa que no considero útil para la función del servidor. En este caso se trataba de un servidor con CentOS 6.x que funciona como proxy caché, por lo que el MTA fue desinstalado desde en la primera arrancada del sistema. </div>
<div style="text-align: justify;">
<br /></div>
<a name='more'></a>Buscando y buscando en varios foros, dí con un programa llamado <a href="http://linux.die.net/man/8/ssmtp">SSmtp</a> que me permite enviar correos desde consola sin tener que instalar localmente un MTA.
<b> </b><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Manos a la obra:</b> </div>
<div style="text-align: justify;">
A continuación detallo el procedimiento de instalación y configuración necesario para enviar correo desde consola usando <b>SSmtp</b>. <i>La distribución sobre la cual se han realizado las pruebas es CentOS 6.3.</i> </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Instalamos la herramienta:
</div>
<pre>yum install ssmtp
</pre>
<div style="text-align: justify;">
Antes de ajustar la configuración a nuestras necesidades, sacamos una copia del archivo ;) :
</div>
<pre>cd /etc/ssmtp
</pre>
<pre>cp ssmtp.conf ssmtp.conf.copy
</pre>
Modificamos la cofiguración:
<br />
<pre>nano ssmtp.conf
</pre>
<pre>mailhub=mail.midominio.com.ec:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=iknaxiomarx
AuthPass=P455m4rx
</pre>
En donde:
<br />
<ul>
<li style="text-align: justify;"><b>mailhub:</b> Es el nombre del host del servidor de correo electrónico que voy a utilizar para el envio y el puerto por el que escucha.</li>
<li style="text-align: justify;"><b>FromLineOverride:</b> Especifica si el encabezado de un correo electrónico, si lo hay, puede reemplazar el dominio predeterminado.</li>
<li style="text-align: justify;"><b>UseSTARTTLS:</b> Si se hace un EHLO / STARTTLS antes de iniciar la negociación SSL.</li>
<li style="text-align: justify;"><b>AuthUser:</b> Nombre de Usuario a usar para SMTP AUTH</li>
<li style="text-align: justify;"><b>AuthPass:</b> Clave de Usuario a usar para SMTP AUTH</li>
</ul>
<div style="text-align: justify;">
Cabe recalcar que el valor de las variables antes expuestas depende de la configuración del servidor al cual nos vamos a conectar para enviar el correo, por lo que si por ejemplo: el servidor no usa SMTP AUTH no será necesario fijar las variables AuthUser y AuthPass. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Una vez lista la configuración procedemos a probarla, para lo cual vamos a preparar un archivo con el contenido del correo:
</div>
<pre>nano /tmp/pruebita.txt
</pre>
<pre>From: usuario089@midominio.com.ec
Subject: Correo de Prueba
Hola Mundo!
</pre>
Ejecutamos el envío:
<br />
<pre>ssmtp imarx.ecualug@gmail.com < /tmp/pruebita.txt
</pre>
<div style="text-align: justify;">
Para más de un destinatario, simplemente escribimos sus direcciones separadas por espacios en blanco:
</div>
<pre>ssmtp imarx.ecualug@gmail.com admin.procesos@midominio.com.ec < /tmp/pruebita.txt
</pre>
<div style="text-align: justify;">
Podemos revisar las respectivas páginas de manual para explotar al máximo esta herramienta:
</div>
<pre>man ssmtp
</pre>
<pre>man ssmtp.conf
</pre>
Espero que les sea de utilidad :D<br />
<br />
Saludos,<br />
<br />
<b>Referencias:</b>
<br />
<ul>
<li><a href="http://archive09.linux.com/feature/132006">sSMTP: A simple alternative to Sendmail</a></li>
<li><a href="http://tombuntu.com/index.php/2008/10/21/sending-email-from-your-system-with-ssmtp/">Sending Email From Your System with sSMTP</a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/11/07/comos/como_enviar_correo_desde_la_consola_sin_tener_un_mta_local_usando_ssmtp#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-66787873398605454162016-10-18T13:08:00.001-05:002016-10-18T13:11:07.001-05:00VLock: Bloqueo de Consolas Virtuales<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/07/17/blog/iknaxio/vlock_bloqueo_de_consolas_virtuales" target="_blank">Publicado originalmente el 2011-07-17 19:14, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Tengo la manía de modificar el archivo <i>~/.bash_logout</i> de mi usuario para agregar la línea:
</div>
<pre>history -c
</pre>
<div style="text-align: justify;">
Para que de esta manera, cuando cierre sesión no queden huellas de lo tecleado }:). El problema surge cuando me encuentro a medio trabajo, especialmente frente a una consola <i>TTY</i>, donde si cierro sesión ya no puedo volver al historial por haber agregado la bendita línea en el <i>bash_logout</i> y como no tengo entorno gráfico no puedo bloquear el equipo :O.
<!--break--> </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<a name='more'></a>
<div style="text-align: justify;">
Por suerte me topé con una aplicación bien simpática que se llama <b><a href="http://cthulhu.c3d2.de/~toidinamai/vlock/vlock.html">VLock</a></b>, y que sirve justamente para bloquear la consola actual o todo el sistema de consolas virtuales. Para desbloquear la consola basta con ingresar la contraseña del usuario que inició el bloqueo o la contraseña de <i>root</i>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo siguiente fue probado en un <i>Kubuntu 11.04</i>, pero debería funcionar al menos para cualquier derivado de <i>Debian</i>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo primero es instalar la aplicación:
</div>
<pre>apt-get install vlock
</pre>
Luego, a probar un bloqueo:
<br />
<pre>vlock
</pre>
Y obtenemos:
<br />
<pre>This TTY is now locked.
Please press [ENTER] to unlock.
iknaxio's Password:
</pre>
<div style="text-align: justify;">
Si ingresamos mal la contraseña o simplemente presionamos <i>ENTER</i>, nos pedirá la contraseña de <i>root</i> para desbloquear.
Si nos encontramos trabajando, en modo texto, en una consola <i>TTY</i> podemos hacer un bloqueo completo usando:
</div>
<pre>vlock -a
</pre>
<div style="text-align: justify;">
Con esto se deshabilita el <i>CTRL+ALT+F2</i>, etc. Y obtenemos un mensaje que dice:
</div>
<pre>The entire console display is now completely locked.
You will not be able to switch to another virtual console.
Please press [ENTER] to unlock.
</pre>
<div style="text-align: justify;">
El bloqueo completo no funciona en las consolas gráficas o en las sesiones remotas, en estos casos solo funciona el bloqueo simple.
Espero que a alguien le sea de utilidad ;)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Salu2</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Referencias:</b>
</div>
<ul>
<li><a href="http://www.pendrivelinux.com/how-to-clear-the-terminal-command-history/">How to clear the terminal command history</a></li>
<li><a href="http://cthulhu.c3d2.de/~toidinamai/vlock/vlock.html">vlock - virtual console lock program</a></li>
<li><a href="http://linux.die.net/man/1/vlock">vlock(1) - Linux man page</a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/07/17/blog/iknaxio/vlock_bloqueo_de_consolas_virtuales#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-86111421614858438022016-10-18T12:31:00.002-05:002016-10-18T12:33:49.265-05:00Squid: Revisa tus ACL del tipo port<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/06/05/blog/iknaxio/squid_revisa_tus_acl_del_tipo_port" target="_blank">Publicado originalmente el 2011-06-05 16:25, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Periódicamente suelo ingresar a los servidores para monitorear la actividad de navegación de los usuarios, debido a que hay algunos de ellos que por disposición de la dirección tienen acceso total al Internet pero abusan de este recurso. Cabe anotar que hay ciertos dominios que se encuentran expresamente bloqueados para todos.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para realizar la tarea de monitoreo me apoyo principalmente de <a href="http://sarg.sourceforge.net/sarg.php">sarg</a>, <a href="http://www.faqs.org/docs/linux_network/x-087-2-iface.netstat.html">netstat</a> y <a href="http://jnettop.kubs.info/wiki/">jnettop</a>. Aunque de pronto es obvio, igual cabe anotar que uso <a href="http://www.squid-cache.org/">Squid</a> como proxy caché ;).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<a name='more'></a><div style="text-align: justify;">
La semana pasada estaba en esta tarea de monitoreo (o caza de infractores jejeje) cuando observé con el <i>jnettop</i> que estaban accediendo hacia un servidor externo al puerto <i>4800</i>. Con <i>netstat</i> comprobé dicho acceso. Por un momento pensé que se trataba de un FORWARD, así que fui a revisar las reglas de iptables y aparentemente todo estaba en orden.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Intrigado, revisé nuevamente la salida del <i>jnettop</i> y me dí cuenta que el equipo que accedía al exterior hacia ese puerto inusual era el mismo servidor proxy.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Abrí el <i>squid.conf</i> y es allí donde realmente estaba el problema:
</div>
<pre>acl SSL_ports port 443 # https
# acl SSL_ports port 563 # snews
# acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
# acl Safe_ports port 631 # cups
# acl Safe_ports port 873 # rsync
# acl Safe_ports port 901 # SWAT
</pre>
Para ser específicos en la siguiente línea:
<br />
<pre>acl Safe_ports port 1025-65535 # unregistered ports
</pre>
Esto junto con la regla:
<br />
<pre>http_access deny !Safe_ports
</pre>
<div style="text-align: justify;">
Hacían que los usuarios con acceso total puedan acceder a direcciones del tipo:
</div>
<pre>http://miradioonline.com:4800/
</pre>
<div style="text-align: justify;">
Así que me dije, como diablos he estado tanto tiempo con este servidor así y porque carajo no he configurado bien mis reglas <i>OUTPUT</i> en el firewall.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo primero que hice fue dejar únicamente habilitadas las siguientes acl's de tipo <i>port</i>:
</div>
<pre>acl SSL_ports port 443 # https
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
</pre>
<div style="text-align: justify;">
Y solucioné ese molestoso puerto destino <i>4800</i> en la salida de mi <i>jnettop</i>. Luego revisaré esas reglas <b>OUTPUT</b> del FW.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo más probable es que luego se presente la necesidad de dar acceso a algún puerto específico, pero para ello básicamente bastaría con un:
</div>
<pre>acl mi_puerto port 8400
</pre>
<pre>http_access allow mi_puerto
</pre>
<div style="text-align: justify;">
<i>La ventaja es que de los problemas siempre se aprende algo ;)</i>
</div>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/06/05/blog/iknaxio/squid_revisa_tus_acl_del_tipo_port#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-50059074716885355712016-10-18T12:24:00.001-05:002016-10-18T12:24:06.229-05:00TIP: Dependencias Instalador DIMM Formularios del SRI<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=20151117/blog/iknaxio/tip_dependencias_instalador_dimm_formularios_del_sri" target="_blank">Publicado originalmente el 2015-11-17 18:36, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Formatee mi compu hace unas semanas para instalar desde cero Kubuntu 15.10 de 64bits. Como ya ha tocado realizar la declaración mensual de impuestos descargué el famoso DIMM Formularios del SRI, que actualmente se encuentra en la 1.0.9.</div>
<div style="text-align: justify;">
<br /></div>
<a name='more'></a>Al instalar me salia el siguiente error:
<br />
<pre>iknaxio@zeronode:~/Downloads$ sudo ./DIMMInstaladorLinux-x86-1.0.9
</pre>
<pre>invalid command name "bind"
while executing
"::unknown bind Text <Tab>"
("uplevel" body line 1)
invoked from within
"uplevel 1 $next $args"
(procedure "::obj::Unknown" line 3)
invoked from within
"bind Text <Tab>"
(procedure "::InstallJammer::InitializeGui" line 19)
invoked from within
"::InstallJammer::InitializeGui "
(procedure "::InstallJammer::InitInstall" line 68)
invoked from within
"::InstallJammer::InitInstall"
(file "/installkitvfs/main.tcl" line 30268)
</pre>
<div style="text-align: justify;">
Para no alargar el post, las librerías que se requieren tener instaladas son las siguientes:
</div>
<pre>sudo apt-get install libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 libglu1-mesa:i386 libxtst6:i386 libncurses5:i386
</pre>
<b>Referencia:</b>
<br />
<ul>
<li><a href="http://descargas.sri.gob.ec/download/declaraciones/dimm_2015/LINUX/DIMMInstaladorLinux-x86-1.0.9.zip">Paquete DIMM (DIMM Anexos y DIMM Formularios) para GNU/Linux (104 MB) fecha de actualización 01-07-2015</a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=20151117/blog/iknaxio/tip_dependencias_instalador_dimm_formularios_del_sri#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-65423999014609535392016-10-18T12:07:00.005-05:002016-10-18T12:16:02.728-05:00Zimbra: Script PHP para la Creación de Cuentas mediante un archivo CSV<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/06/10/blog/iknaxio/zimbra_script_php_para_la_creaci%C3%B3n_de_cuentas_mediante_un_archivo_csv" target="_blank">Publicado originalmente el 2011-06-10 12:43, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Tengo en producción un Servidor Debian 5 con Zimbra 6 y ayer me enviaron un listado de 300 usuarios para crear. Como obviamente es mucho trabajo hacerlo de manera manual, pués decidí crearme un script php que me ayude en esta tarea. La creación me tomó un par de horas (es que estoy oxidado con lo de programar :P ) pero al final el proceso manual me hubiese tomado mucho mas.<br />
<br />
<a name='more'></a>
Lo especial de este script, por así decirlo, es que me permite agregar automáticamente una cuenta a una lista de correo e incluir algunos campos que no se cargan a través de un aprovisionamiento normal. Adicionalmente, con <i>zimbraHideInGal</i> logro que las cuentas no estén visibles en la GAL.<br />
<br />
A continuación les copio el script, por si en algún momento, necesitan algo similar:
</div>
<pre><?php
## Felix Jose Liberio Vera
## 09.06.2011
## Requerimientos
## apt-get install php5-cli
## Formato del Archivo CSV
## Nombres,Apellidos,Nombres y Apellidos,Email,Provincia,Cargo
## Felix Jose,Liberio Vera,Felix Jose Liberio Vera,fliberio@midominio.com.ec,Guayas,Instructor
## Comando a ejecutar
## zmprov ca iknaxio@midominio.com.ec renef2011 \
## zimbraCOSId 894b6819-a3e0-4e43-8e41-91fd01390720 \
## zimbraHideInGal TRUE \
## description 'Ingeniero de Infraestructura' \
## displayName 'Felix Liberio Vera' \
## givenName 'Felix' \
## sn 'Liberio Vera'
$fila = 0;
$filas_ok = 0;
$debug = FALSE;
$filename = "";
$defaultpass = "ecualug2011";
$defaultlist = "instructores@midominio.com.ec";
$zimbraCOSId = "894b6819-a3e0-4e43-8e41-91fd01390720"; # Clase de Servicio 'instructores'
$zimbraHideInGal = TRUE;
if($argc > 1){
$filename = $argv[1];
if($argc == 3 && $argv[2] == "-D"){
$debug = TRUE;
}
}
else{
echo "\nUsage: php ca_instructores.php <filename.csv> [-D]\n";
echo "-D Activa el debug\n";
echo "\nIknaxio 2011\n\n";
exit(1);
}
function trim_value(&$value) {
$value = trim($value);
}
if (($gestor = fopen($filename, "r")) !== FALSE) {
while (($datos = fgetcsv($gestor, 1000, ",")) !== FALSE) {
if(count($datos)>=6){
array_walk($datos, 'trim_value');
$str="zmprov ca ".$datos[3]." $defaultpass ".
"zimbraCOSId $zimbraCOSId ".
"zimbraHideInGal ".($zimbraHideInGal?"TRUE":"FALSE")." ".
"description '".$datos[5]."' ".
"displayName '".$datos[2]."' ".
"givenName '".$datos[0]."' ".
"sn '".$datos[1]."' ".
"st '".$datos[4]."' ";
exec($str);
echo(($debug?$str:$datos[3])."\n");
$str="zmprov adlm $defaultlist ". $datos[3];
if($debug){ echo($str."\n"); }
exec($str);
$filas_ok++;
}
else {
echo "No se pudo procesar el registro ". ($fila + 1) ."\n";
}
$fila++;
}
}
else{
echo "No se encontró el archivo.\n";
exit(1);
}
echo "Se procesaron $filas_ok registros de $fila.\n";
fclose($gestor);
?>
</pre>
Saludos :D<br />
<br />
<div style="text-align: justify;">
<b>ACTUALIZACION:</b>
Aunque de pronto a algunos les parecerá obvio, para poder usar el script se debe hacer lo siguiente:
</div>
<ul>
<li><div style="text-align: justify;">
Instalar el paquete de linea de comandos de php
</div>
<pre>apt-get install php5-cli
</pre>
</li>
<li><div style="text-align: justify;">
Crear un archivo al que podemos llamar <i>ca_batch.php</i>, yo lo cree en el directorio <i>/root</i> porque estaba en ese momento logueado como <i>root</i> y dentro de este archivo copiar todo el código que escribí más arriba ;)
</div>
<pre>nano /root/ca_batch.php
</pre>
</li>
<li><div style="text-align: justify;">
Creamos un archivo de prueba en formato CSV, al que yo voy a llamar <i>users14062011.csv</i></div>
<pre>nano /root/users14062011.csv
</pre>
</li>
<li>Y colocamos dentro lo siguiente:
<pre>Jaqueline,Lopez Vargas,Jaqueline Lopez Vargas,jlopez@midominio.com.ec,Guayas,Capacitador
Ivette,Lozano Otero,Ivette Lozano Otero,ilozano@midominio.com.ec,Guayas,Capacitador
</pre>
</li>
<li>Para ejecutar el script, ingresamos como usuario <i>zimbra</i>
<pre>su - zimbra
</pre>
</li>
<li>Y lo ejecutamos
<pre>cd /root
php ca_batch.php users14062011.csv
</pre>
</li>
<li>Y listo</li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/06/10/blog/iknaxio/zimbra_script_php_para_la_creaci%C3%B3n_de_cuentas_mediante_un_archivo_csv#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-42466643572114142762016-10-18T11:34:00.001-05:002016-10-18T12:10:30.777-05:00Zimbra: Listar los usuarios creados en un determinado período de tiempo<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/08/07/blog/iknaxio/zimbra_listar_los_usuarios_creados_en_un_determinado_per%C3%ADodo_de_tiempo" target="_blank">Publicado originalmente el 2011-08-07 17:55, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Una de las malas noticias de estos últimos tiempos es que la Auditoría Externa nos cae este mes :S. Lo peor es que tengo desactualizada la <i>Bitácora de Creación de Cuentas de Correo</i> y me iba a tocar empezar a buscar en las carpetas del <i>Thunderbird</i> los mensajes de solicitud de creación de cuentas :O.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Fue en ese momento en que se me ocurrió que como tengo instalado un Servidor de Correo con <i>Zimbra 6</i> y la información de los usuarios se almacena en un LDAP, de pronto podía extraer con un bash script los datos que necesitaba. Y no me equivoqué.</div>
<div style="text-align: justify;">
<br />
<a name='more'></a></div>
<div style="text-align: justify;">
El comando <i>ldapsearch</i> era mi salvación. Ahora lo único que necesitaba saber, era como funcionaba el bendito comando y como convertía los registros de salida desde el formato ldif a csv.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Mi día mejoró cuando <i>googleando</i> un poco más, <a href="http://wiki.zimbra.com/index.php?title=Accounts_created_Report">me encontré un script</a> que hacia algo bastante similar a lo que requería, por lo que teniendo la base ya solo fue cuestión de adaptarlo a mis necesidades :).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A continuación detallo el script modificado y con los comentarios (mas o menos) traducidos al español :D :<br />
<div style="text-align: center;">
<a href="https://drive.google.com/open?id=0B1VA6kuxBwLjVGd0MF9Hdm41MUE" target="_blank">Descargar Script Modificado </a></div>
</div>
<pre>nano listCreatedAccount.sh
</pre>
<pre>#!/bin/bash
## Listado de usuarios creados en un determinado período de tiempo
## Basado en http://wiki.zimbra.com/index.php?title=Accounts_created_Report
## Fecha en formato ldapsearch: YYYYMMDDhhmmssZ
inidate="20100718000000Z"
enddate="20110713000000Z"
## Obtener el ldap password desde la configuración de zimbra
ldappass=`/opt/zimbra/bin/zmlocalconfig -s -m nokey zimbra_ldap_password`
## Obtener el ldap dn desde la configuración de zimbra
ldapdn=`/opt/zimbra/bin/zmlocalconfig -s -m nokey zimbra_ldap_userdn`
## Obtener el ldap URL desde la configuración de zimbra
ldapurl=`/opt/zimbra/bin/zmlocalconfig -s -m nokey ldap_url`
## Ruta al comando ldapsearch y argumentos
ldapsearch='/opt/zimbra/bin/ldapsearch'
ldapargs="-LLL -x -H $ldapurl -w $ldappass -D $ldapdn "
## Atributos que se van a extraer desde el directorio
## NombreCompleto, Descripcion, Ciudad, Email, FechaDeCreacion
ldapattrs="displayName description st zimbraMailDeliveryAddress zimbraCreateTimestamp"
## Buscamos en el LDAP todas las cuentas de Zimbra que se encuentran activas
## y que han sido creadas entre inidate y enddate
## Los registros resultantes en formato ldif son convertidos con awk a formato csv
$ldapsearch $ldapargs \
"(&(objectclass=zimbraAccount)(!(objectclass=zimbraCalendarResource))(zimbraAccountStatus=Active)(zimbraCreateTimestamp>=$inidate)(zimbraCreateTimestamp<=$enddate))" \
$ldapattrs \
| awk '
## Configura el separador de campo a ':' e inicializa variables
BEGIN {FS=": ";name=0;descrip=0;st=0;email=0;timestamp=0}
## Si la linea contiene nombre, guardar
/displayName/ {name=$2}
## Si la linea contiene descripcion, guardar
/description/ {descrip=$2}
## Si la linea contiene provincia, guardar
/^st/ {st=$2}
## Si la linea contiene email, guardar
/zimbraMailDeliveryAddress/ {email=$2}
## Si la linea contiene fecha de creacion, guardar en un formato legible
/zimbraCreateTimestamp/ {timestamp=substr($2,1,4) "-" substr($2,5,2) "-" substr($2,7,2)}
## Si la linea dn: sabemos que estamos empezando un nuevo registro,
## entonces imprimir los datos anteriores y reiniciar las variables
/dn:/ {if (email) print name "," descrip "," st "," email "," timestamp; name=0; descrip=0; st=0; email=0; timestamp=0}
## Si llegamos al final de la entrada, imprimimos el ultimo registro
END {if (email) print name "," descrip "," st "," email "," timestamp; name=0; descrip=0; st=0; email=0; timestamp=0}' > /tmp/listadoCuentasCreadas.csv
</pre>
Le damos permisos de ejecución al archivo:
<br />
<pre>chmod u+x listCreatedAccount.sh
</pre>
Lo ejecutamos:
<br />
<pre>./listCreatedAccount.sh
</pre>
<div style="text-align: justify;">
Y nos creará el archivo <i>/tmp/listadoCuentasCreadas.csv</i> con el siguiente contenido:
</div>
<pre>...
Fabian De Mesa,Ejecutivo Financiero,Sucumbios,fdemesa@domain.com.ec,2011-06-27
Andres Zuna,Agente Call Center,0,azuna@domain.com.ec,2011-06-29
...
</pre>
<div style="text-align: justify;">
Si alguno de los campos de las cuentas contiene caracteres con tilde te aparece algo como:
</div>
<pre>TWFyaWEgSGVybWluacOhIEhlcnJlcmEgTGFzbHVpc2E=,Administrativa,0,mherrera@domain.com.ec,2010-10-26
</pre>
<div style="text-align: justify;">
Lo más fácil para mí fue corregir la información de esos usuarios y volver a generar el listado ;).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Espero que les sea de utilidad igual que a mí ;)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Salu2!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Referencias:</b>
</div>
<ul>
<li><a href="http://wiki.zimbra.com/index.php?title=Accounts_created_Report">Accounts created Report</a></li>
<li><a href="http://en.wikibooks.org/wiki/An_Awk_Primer">An Awk Primer</a></li>
<li><a href="http://www.openldap.org/software/man.cgi?query=ldapsearch&apropos=0&sektion=0&manpath=OpenLDAP+2.0-Release&format=html">ldapsearch :: Manual Page</a></li>
</ul>
<div style="text-align: justify;">
<b><i>PD:</i></b> Escuchando <a href="http://www.jamendo.com/en/album/7505">8-bit lagerfeuer</a> de <a href="http://www.jamendo.com/en/artist/pornophonique">pornophonique</a> 8)
</div>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/08/07/blog/iknaxio/zimbra_listar_los_usuarios_creados_en_un_determinado_per%C3%ADodo_de_tiempo#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-39743021986944841882016-10-18T10:42:00.000-05:002016-10-18T10:46:39.530-05:00Zimbra: Reporte de Cuentas para todas las Listas de Correo<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/02/10/blog/iknaxio/zimbra_reporte_de_cuentas_para_todas_las_listas_de_correo" target="_blank">Publicado originalmente el 2012-02-10 22:25, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Aquí regreso otra vez con un script de bash vago para poder mostrar cada lista de correo de Zimbra con sus respectivas cuentas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Primero obtengo todas las listas de correo y luego a través de un lazo <i>for</i> voy presentando las cuentas por cada lista.</div>
<br />
<a name='more'></a>
Así de fácil jejeje.<br />
<br />
Aquí les dejo el script:
<br />
<pre>#!/bin/sh
## Iknaxio Marx - 10/02/2011
## Listar los miembros de los Grupos de Correos
echo ""
echo "REPORTE DE CUENTAS POR LISTAS DE CORREO AL "`date +%y-%m-%d_%H-%M-%S`
echo ""
LISTS=`/opt/zimbra/bin/zmprov gadl`
for LIST in $LISTS
do
echo "GRUPO $LIST"
echo "======================================"
/opt/zimbra/bin/zmprov gdl $LIST | /bin/grep zimbraMailForwardingAddress |/usr/bin/awk '{print $2}' FS=": "
echo ""
done
</pre>
La salida es:
<br />
<pre>REPORTE DE CUENTAS POR LISTAS DE CORREO AL 12-02-10_22-06-44
GRUPO auditores@miempresa.com.ec
======================================
aalvarez@fmiempresa.com.ec
eayala@miempresa.com.ec
gmoran@miempresa.com.ec
gsuarez@miempresa.com.ec
GRUPO callcenter@miempresa.com.ec
======================================
gsanchez@miempresa.com.ec
iaraujo@miempresa.com.ec
jcevallos@miempresa.com.ec
rnaranjo@miempresa.com.ec
</pre>
Pilas, espero que le sirva a alguien ;)<br />
<br />
Saludos :D
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/02/10/blog/iknaxio/zimbra_reporte_de_cuentas_para_todas_las_listas_de_correo#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-78832463667680468752016-10-18T10:32:00.007-05:002016-10-18T10:36:49.728-05:00Zimbra: Resetear password para un listado de cuentas<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/03/07/blog/iknaxio/zimbra_resetear_password_para_un_listado_de_cuentas" target="_blank">Publicado originalmente el 2012-03-07 23:07, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Esta tarde estuve trabajando en la creación de un script que nos permitiera resetear los password de un listado voluminoso de cuentas de correo electrónico de una implementación de Zimbra. Si no fuese por el script nos hubiese tocado resetear las claves una a una desde la consola gráfica de administración :S</div>
<div style="text-align: justify;">
<br />
<a name='more'></a></div>
<div style="text-align: justify;">
El script lo bauticé como <b>resetPasswd.sh</b>, es bien sencillo y fácil de usar:
</div>
<pre>./resetPasswd.sh <file> <new_password>
</new_password></file></pre>
<div style="text-align: justify;">
<i><FILE></i> es la ruta del archivo que contiene el listado de las cuentas de correo electrónico en el siguiente formato:
</div>
<pre>imarx@miempresa.com.ec
ehinojosa@miempresa.com.ec
jfranco@miempresa.com.ec
...
</pre>
<div style="text-align: justify;">
<i><NEW_PASSWORD></i> es el nuevo password que voy a colocar a todas las cuentas del listado.
</div>
<ul>
<li><div style="text-align: justify;">
<b>Nota:</b> En mi caso, para generar los archivos utilice la siguente instrucción:
</div>
<pre>/opt/zimbra/bin/zmprov -l gaa miempresa.com.ec | grep ventas > /tmp/usuarios-ventas-07032012.txt
</pre>
<div style="text-align: justify;">
Me ayudé del comando <i>grep</i> para encontrar un patrón específico que identifica a mis cuentas, de no existir dicho patrón toca generar el listado completo y depurarlo manualmente, aunque eso sigue siendo más rápido que hacer todo el proceso desde la consola gráfica jejeje
</div>
</li>
</ul>
Ahora sí, con Ustedes, el bendito script :D:
<br />
<pre>#!/bin/sh
## Iknaxio Marx - 07/03/2012
## Resetear el password de un listado de cuentas
##
## Uso:
## ./resetPasswd.sh <FILE> <NEW_PASSWORD>
##
echo ""
if [ $# -ne 2 ]
then
echo "Argumentos incorrectos!!!"
echo " Uso: ./resetPasswd.sh <FILE> <NEW_PASSWORD>"
echo ""
exit -1
fi
if [ -r $1 ]
then
ACCOUNTS=`cat $1`
for ACCOUNT in $ACCOUNTS
do
echo -e "- $ACCOUNT..."
/opt/zimbra/bin/zmprov sp $ACCOUNT $2
/opt/zimbra/bin/zmprov ma $ACCOUNT zimbraPasswordMustChange TRUE
done
else
echo "El archivo $1 no existe!!!"
exit -1
fi
</pre>
Espero que les sirva.<br />
<br />
Salu2
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/03/07/blog/iknaxio/zimbra_resetear_password_para_un_listado_de_cuentas#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-33680033429163426942016-10-17T12:09:00.000-05:002016-10-17T12:13:47.065-05:00OpenSSH: Asegurando la instalación por defecto de nuestro servidor SSH<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/06/15/blog/iknaxio/openssh_asegurando_la_instalaci%C3%B3n_por_defecto_de_nuestro_servidor_ssh" target="_blank">Publicado originalmente el 2011-06-15 17:36, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
En la empresa en la que trabajo tenemos algunos servicios implementados bajo GNU/Linux, uno de ellos es el de SSH para la administración remota de los servidores. Actualmente me encuentro en un sano proceso de revisión de configuraciones, con la finalidad de tener una mayor seguridad, más allá de la provista en una instalación por defecto.</div>
<div style="text-align: justify;">
<br />
<a name='more'></a></div>
<div style="text-align: justify;">
Aprovechando todas estas tareas, el presente post reúne las configuraciones en el servicio de SSH que acabo de aplicar en los servidores esta última semana. De seguro hay muchas mas cosas por hacer, pero aún estoy en proceso de lectura/prueba/error de las diversas opciones de configuración.
</div>
<ul style="text-align: justify;">
<li><b>IMPORTANTE:</b> <i>Estoy partiendo del hecho de que tengo instalado un servidor <a href="http://www.openssh.com/">OpenSSH</a> (Version 5.5p1) sobre un Debian 6.0.1.
Adicionalmente debo confesar que me estoy conectando a través de <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTY</a>.
</i></li>
</ul>
<b>TAREAS:</b><br />
Editamos el archivo <i>sshd_config</i>:
<br />
<pre>nano /etc/ssh/sshd_config
</pre>
Y procedemos a realizar los siguientes cambios:<br />
<br />
<b>Cambio de Puerto</b>
<br />
<pre>Port 22222
</pre>
<div style="text-align: justify;">
El cambio de puerto para mí significó doble beneficio, el primero es dificultar un poco el trabajo a un posible atacante al no brindar el servicio de SSH, por el habitual puerto <i>22</i>. Y el segundo beneficio es que puedo usar <a href="http://bbssh.org/">BBSSH</a> para conectarme desde mi blackberry al Servidor, ya que mi operadora celular tiene como política bloquear todo el tráfico hacia puertos bajos. Si se va a proveer el servicio SSH por varios puertos, lo único que tenemos que hacer es agregar tantas directivas <i>Port</i> como puertos se necesiten.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si tratamos de conectarnos hacia el puerto <i>22</i>, obtendremos un error del tipo: <i>Network error: Connection timed out</i><b> </b></div>
<br />
<b>Restricción de la Interface de Escucha</b>
<br />
<pre>ListenAddress 192.168.3.1
</pre>
<div style="text-align: justify;">
Esto es útil si el servidor cuenta con más de una interface. En mi caso cuento con 3 interfaces : 2 internas (<i>192.168.3.1</i> y <i>192.168.31.1</i>) y 1 externa (<i>186.42.x.x</i>); por lo que decidí permitir el acceso a través de sólo una de ellas. Si necesitamos escuchar por otras interfaces, sólo tenemos que agregar más líneas con la directiva <i>ListenAddress</i>, una por cada interface.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si tratamos de conectarnos desde alguna dirección IP que ingrese a través de otra interface, obtendremos un error del tipo: <i>Network error: Connection refused</i><b> </b></div>
<br />
<b>Deshabilitar el acceso remoto al usuario root</b>
<br />
<pre>PermitRootLogin no
</pre>
<div style="text-align: justify;">
Existen muchos motivos para deshabilitar el acceso remoto a través del usuario <i>root</i>. En mi caso, al inicio era una sola persona (yo) la que accedía al servidor, por lo que tener una traza de auditoría no me interesaba mucho, pero la empresa crece y tenemos ahora a más usuarios accediendo, lo cual trajo la necesidad de implementar cierto control al respecto. Al deshabilitar que el usuario <i>root</i> pueda iniciar una sesión SSH, obligo a que cada usuario se conecte con sus credenciales, lo cual me deja un rastro en el archivo <i>/var/log/auth.log</i>:
</div>
<pre>Jun 14 15:55:14 svpx03 sshd[23031]: Accepted password for fliberio from 192.168.3.14 port 10319 ssh2
Jun 14 15:55:14 svpx03 sshd[23031]: pam_unix(sshd:session): session opened for user fliberio by (uid=0)
</pre>
<div style="text-align: justify;">
Si tratamos de conectarnos como <i>root</i>, obtendremos un error del tipo: <i>Access denied</i>
<b> </b></div>
<br />
<div style="text-align: justify;">
<b>Permitir el Acceso Remoto sólo a Usuarios y Grupos Específicos</b>
OpenSSH tiene directivas deny/allow para restringir el acceso de usuarios y grupos, las cuales son aplicadas en el siguiente orden:
</div>
<ol>
<li>DenyUsers</li>
<li>AllowUsers</li>
<li>DenyGroups</li>
<li>AllowGroups</li>
</ol>
<div style="text-align: justify;">
No voy a entrar en detalle de lo que hace cada una, porque es bastante obvio, sino siempre queda la documentación ;). El modo de uso es el siguiente:
</div>
<pre>DenyUsers user1 user2 ...
</pre>
<div style="text-align: justify;">
Para mi caso yo parto de la existencia de 3 usuarios de sistema y un grupo. Los mismos que los cree de la siguiente forma:
</div>
<pre>groupadd fcmeadmins
adduser --ingroup fcmeadmins fliberio
adduser --ingroup fcmeadmins imarx
adduser --ingroup fcmeadmins ehurtado
</pre>
<div style="text-align: justify;">
Por lo que aplique en el archivo <i>sshd_config</i> la siguiente configuración:
</div>
<pre>AllowGroups fcmeadmins
</pre>
<div style="text-align: justify;">
Si tratamos de conectarnos con un usuario no autorizado, obtendremos un error del tipo: <i>Access denied</i>
<b> </b></div>
<br />
<b>Cambiar el Tiempo de Gracia para Iniciar la Sesión</b>
<br />
<pre>LoginGraceTime 45
</pre>
<div style="text-align: justify;">
Este es el tiempo (generalmente en segundos) que tenemos para ingresar nuestro <i>usuario/contraseña</i> una vez que establecemos conexión con el servidor SSH. El valor por defecto es 120 segundos, lo cual me parece mucho :P. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En directivas como ésta, que requieren como valor alguna unidad de tiempo se pueden usar las siguientes opciones:
</div>
<pre><none> seconds
s | S seconds
m | M minutes
h | H hours
d | D days
w | W weeks
</none></pre>
<div style="text-align: justify;">
Si sobrepasamos el tiempo de gracia para ingresar nuestras credenciales, obtendremos un error del tipo: <i>Server unexpectedly closed network connection</i>
<b> </b></div>
<b>Limitar el número de intentos fallidos para ingresar el password de acceso</b>
<br />
<pre>MaxAuthTries 3
</pre>
Este es el número máximo de intentos que tengo para ingresar el password, luego de establecida la conexión con el servidor SSH. Esto va relacionado con la directiva anterior ya que tengo <i>MaxAuthTries</i> intentos durante <i>LoginGraceTime</i> de tiempo.<br />
<br />
Si sobrepasamos el número de intentos para escribir nuestra password, obtendremos un error del tipo: <i>Too many authentication failures for userX</i>
<b> </b><br />
<br />
<b>Desconectar al usuario después de un tiempo de inactividad</b>
<br />
<pre>ClientAliveCountMax 0
ClientAliveInterval 600
</pre>
Para esto se utilizan dos directivas:
<br />
<ul>
<li style="text-align: justify;"><i>ClientAliveCountMax</i>: El numero máximo de mensajes checkalive (sigues allí/estas vivo?) que el servidor SSH envía al cliente sin recibir respuesta.</li>
<li style="text-align: justify;"><i>ClientAliveInterval</i>: El intervalo de tiempo entre cada mensaje checkalive.</li>
</ul>
<div style="text-align: justify;">
En mi caso <i>ClientAliveCountMax 0</i>, no envia mensajes checkalive desde el servidor y <i>ClientAliveInterval 600</i>, espera 600 segundos (10 min) para desconectar al usuario si durante este lapso no recibe algún tipo de interacción. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si sobrepasamos el tiempo de inactividad permitido, obtendremos un error del tipo: <i>Server unexpectedly closed network connection</i>
<b> </b></div>
<br />
<b>Algo de seguridad por oscuridad</b>
<br />
<pre>PrintLastLog no
</pre>
<div style="text-align: justify;">
Evita que cuando se conecten los usuarios les aparezca una línea igual a:
</div>
<pre>Last login: Tue Jun 14 15:19:19 2011 from 192.168.25.1
</pre>
También tenemos
<br />
<pre>PrintMotd no
</pre>
<div style="text-align: justify;">
Para que al conectarse el usuario no le aparezca el <a href="http://linux.about.com/library/cmd/blcmdl5_motd.htm">Mensaje del Dia</a>. En Debian no me funcionó la desactivación y tuve que hacer un:
</div>
<pre>>/etc/motd
</pre>
<b>Recomiendo:</b><br />
Revisar la directiva <i>Match</i>, se le ve buena pinta. Yo pienso revisarla luego ;).<br />
<br />
<b>Para finalizar</b><br />
Guardamos el archivo<br />
<br />
Y reiniciamos el servicio
<br />
<pre>/etc/init.d/ssh restart
</pre>
Espero que les sea de utilidad.<br />
<br />
Saludos :D
<b> </b><br />
<br />
<b>Referencias:</b>
<br />
<ul>
<li><a href="http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config&sektion=5">Manual Pages: sshd_config(5)</a></li>
<li><a href="http://www.thegeekstuff.com/2011/05/openssh-options/">7 Default OpenSSH Security Options You Should Change in /etc/ssh/sshd_config</a></li>
<li><a href="http://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html">Top 20 OpenSSH Server Best Security Practices</a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/06/15/blog/iknaxio/openssh_asegurando_la_instalaci%C3%B3n_por_defecto_de_nuestro_servidor_ssh#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-10075392399277517832016-10-17T11:56:00.003-05:002016-10-17T21:05:25.991-05:00Squid: Guardando los logs en una base de datos SQLite<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/06/19/blog/iknaxio/squid_guardando_los_logs_en_una_base_de_datos_sqlite" target="_blank">Publicado originalmente el 2011-06-19 23:18, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
En una <a href="http://www.ecualug.org/2011/06/15/forums/saludos_conocen_algo_mejor_que_sarg_para_los_reportes_de_squid">publicación anterior de este foro</a> se preguntaba si alguien conocía de alguna herramienta más versátil que <a href="http://sarg.sourceforge.net/">SARG</a> para consultar/filtrar los logs de <a href="http://www.squid-cache.org/">Squid</a>. Entre los comentarios salto la idea de construir una alternativa a <i>SARG</i> y además se sugirió almacenar los logs en una base de datos para una mayor facilidad en la consulta de los mismos.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En el presente post no voy (todavía :P ) a crear una alternativa a <i>SARG</i>, pero si voy a mostrar como almacenar los logs de <i>Squid</i> en una base de datos <a href="http://www.sqlite.org/">SQLite</a>. Para la funcionalidad de almacenar los logs en esta base de datos voy a usar el proyecto <a href="http://code.google.com/p/sqlite3squidlog/"><i>sqlite3squidlog</i></a></div>
<div style="text-align: justify;">
<br />
<a name='more'></a></div>
<div style="text-align: justify;">
Si bien es cierto la base de datos sugerida fué <a href="http://www.mysql.com/">MySQL</a>, yo me decidí por usar <i>SQLite</i> por dos razones: La primera es que en el Servidor donde se encuentra mi <i>Squid</i>, he tratado en lo posible de instalar la menor cantidad de software. La segunda es que la carga de ese servidor no es muy alta, son solo 20 usuarios los que lo utilizan. De todas formas reconozco el hecho de que para entornos más exigentes es necesario analizar la utilización de una base de datos más robusta como <i>MySQL</i>.
</div>
<ul style="text-align: justify;">
<li><b>IMPORTANTE:</b> Estoy partiendo del hecho de que tengo instalado un <i>Squid (Version 2.7.STABLE9)</i> sobre un <i>Debian 6.0.1</i>.
</li>
</ul>
<div style="text-align: justify;">
<b>Procedimiento:</b> </div>
<div style="text-align: justify;">
Instalamos la interfaz de linea de comandos para <i>SQLite 3</i>, lo cual por dependencia nos instalará la librería compartida <i>libsqlite3-0</i>:
</div>
<pre>apt-get install sqlite3
</pre>
Descargamos el paquete de instalación de <i>sqlite3squidlog</i> de la <a href="http://code.google.com/p/sqlite3squidlog/downloads/list">página de descargas</a> del proyecto. Desde la línea de comandos:
<br />
<pre>wget http://sqlite3squidlog.googlecode.com/files/sqlite3squidlog_0.1.0-1_i386.deb
</pre>
Procedemos a su instalación.
<br />
<pre>dpkg -i sqlite3squidlog_0.1.0-1_i386.deb
</pre>
<div style="text-align: justify;">
Creamos <i>(opcional)</i> un directorio llamado <i>db</i> dentro de <i>/var/log/squid/</i> para colocar la base de datos que almacenará los logs.
</div>
<pre>mkdir /var/log/squid/db
</pre>
Creamos la base de datos <i>access_log.db</i>.
<br />
<pre>sqlite3 /var/log/squid/db/access_log.db <<EOF
CREATE TABLE access_log(
timestamp REAL,
resp_time INTEGER,
src_ip TEXT,
cache_status TEXT,
http_status TEXT,
reply_size INTEGER,
req_method TEXT,
req_uri TEXT,
username TEXT,
peer_access TEXT,
dst_ip TEXT,
mime_type TEXT
);
EOF
</pre>
<div style="text-align: justify;">
Asignamos los permisos respectivos al directorio <i>db</i> y a su contenido, de tal manera que el usuario/grupo <i>proxy</i> sean los únicos autorizados para escribir/leer en ellos.
</div>
<pre>chown -R proxy:proxy /var/log/squid/db
chmod -R 740 /var/log/squid/db
</pre>
Editamos el archivo <i>squid.conf</i>
<br />
<pre>nano /etc/squid/squid.conf
</pre>
<div style="text-align: justify;">
Y en la sección <i>LOGFILE OPTIONS</i> modificamos las siguientes líneas (lo recomendable es comentar las ya existentes):
</div>
<pre>logformat sqlite3_columns %ts.%03tu %tr %>a %Ss %Hs %<st %rm %ru %Sh %un %<A %mt
access_log daemon:/var/log/squid/db/access_log.db sqlite3_columns
logfile_daemon /usr/bin/sqlite3squidlog
</pre>
Reiniciamos el servicio.
<br />
<pre>/etc/init.d/squid restart
</pre>
<ul>
<li><div style="text-align: justify;">
<b>Tip:</b> Como me tocó ir probando cual sería el permiso más óptimo para el directorio <i>db</i> y su contenido, hubo un momento en que luego de reiniciar el Squid aparentemente todo estaba bien, pero los clientes no navegaban, y el mensaje que recibian era que el proxy estaba rechazando las conexiones. Encontré que el error eran los permisos revisando el <i>syslog</i>.
</div>
<pre>tailf /var/log/syslog
</pre>
<div style="text-align: justify;">
Y observamos que hay un registro que indica que no se puede abrir la base de datos:
</div>
<pre>Jun 19 22:21:28 svpx03 (logfile-daemon): Can't open database: unable to open database file
Jun 19 22:21:29 svpx03 squid[7384]: I don't handle this error well!
Jun 19 22:21:29 svpx03 squid[7364]: Squid Parent: child process 7384 exited due to signal 6
Jun 19 22:21:32 svpx03 squid[7364]: Squid Parent: child process 7388 started
</pre>
<div style="text-align: justify;">
Una vez corregido lo de los permisos, ahora si los clientes se conectaron
</div>
<pre>Jun 19 22:22:44 svpx03 (logfile-daemon): starting...
Jun 19 22:22:44 svpx03 (logfile-daemon): Preparing database...
Jun 19 22:22:44 svpx03 (logfile-daemon): Prepared database.
</pre>
</li>
</ul>
<b>Pruebas:</b><br />
Iniciamos sesión en la base de datos
<br />
<pre>cd /var/log/squid/db
sqlite3 access_log.db
</pre>
Consultamos nuestros logs
<br />
<pre>sqlite> select * from access_log;
</pre>
Y obtenemos
<br />
<pre>1308541210.575|906|192.168.3.204|TCP_MISS|200|10578|GET|http://www.ecualug.org/?|DIRECT|-|174.142.111.36|text/html
1308541212.927|313|192.168.3.204|TCP_MISS|200|710|GET|http://www.ecualug.org/modules/codefilter/codefilter.css?|DIRECT|-|174.142.111.36|text/css
1308541212.976|362|192.168.3.204|TCP_MISS|200|908|GET|http://www.ecualug.org/modules/ad/serve.php?|DIRECT|-|174.142.111.36|application/x-javascript
1308541213.508|894|192.168.3.204|TCP_MISS|200|29476|GET|http://www.ecualug.org/files/css/css_bd6376b87b257c4eaecdddc38c9821fc.css|DIRECT|-|174.142.111.36|text/css
1308541213.938|517|192.168.3.204|TCP_MISS|200|943|GET|http://www.ecualug.org/modules/smileys/packs/Example/tongue.png|DIRECT|-|174.142.111.36|image/png
</pre>
Para salir del cliente de SQLite
<br />
<pre>sqlite> .quit
</pre>
Eso es todo ;)<br />
<br />
Estuve tratando de ver si se podía guardar al mismo tiempo en la DB y en el archivo access.log de toda la vida pero no me funcionó, lo que se me vino a la mente es que el <i>logfile_daemon</i> debería realizar esas dos funciones para que sea posible lo que quiero. En todo caso si alguien sabe como hacerlo, que lo postee.<br />
<br />
Saludos :D
<b> </b><br />
<br />
<b>Referencias:</b>
<br />
<ul>
<li><a href="http://www.squidoo.com/sqlitehammer#module5800826">How To Implement Simple Logging With SQLite </a></li>
<li><a href="http://www.squid-cache.org/Doc/config/logformat/">Squid configuration directive logformat</a></li>
<li><a href="http://www.squid-cache.org/Doc/config/access_log/">Squid configuration directive access_log</a></li>
<li><a href="http://www.squid-cache.org/Doc/config/logfile_daemon/">Squid configuration directive logfile_daemon</a></li>
<li><a href="http://zetcode.com/databases/sqlitetutorial/">SQLite tutorial</a></li>
</ul>
<i><b>PD OT:</b> Una sugerencia jazz-rock-metal-classical-gypsy, <a href="http://www.jamendo.com/en/album/49216">The Butcher's Ballroom</a> by <a href="http://www.jamendo.com/en/artist/Diablo_Swing_Orchestra_(2)">Diablo Swing Orchestra</a>.</i>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/06/19/blog/iknaxio/squid_guardando_los_logs_en_una_base_de_datos_sqlite#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-78481918356467274512016-10-17T11:35:00.004-05:002016-10-17T11:35:28.180-05:00Squid: Un error común al combinar ACL's<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/05/29/blog/iknaxio/squid_un_error_com%C3%BAn_al_combinar_acls" target="_blank">Publicado originalmente el 2011-05-29 16:01, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Esta semana me llamó un colega que recién está incursionando en el mundo de <a href="http://www.squid-cache.org/">Squid</a> (y en GNU/Linux en general) y me indicaba que estaba configurando unas reglas para restringir la navegación de sus usuarios pero que no le funcionaban.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Al revisar al detalle su configuración me volví a encontrar con un error común que cometemos cuando hacemos nuestros primeros pininos en Squid. A continuación detallo este error común para los novatos y también para los avanzados, considerando que estos últimos podrían hacer hincapie de esto en las clases o asesorias que imparten. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<a name='more'></a><br />
<div style="text-align: justify;">
<b>El Caso:</b> </div>
<div style="text-align: justify;">
Se tiene un Servidor Proxy Cache implementado con GNU/Linux y Squid dentro de una red local 192.168.31.0/24.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Inicialmente se tienen 2 tipos de usuarios: <i>Jefes</i> y <i>los demás usuarios</i>. Los <i>Jefes</i> tienen acceso a todo y <i>los demás usuarios</i> solo a las páginas del grupo industrial.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La implementación de este requerimiento inicial se ve representada en la sgte configuración:
</div>
<pre>/etc/squid/usuarios_jefes:
192.168.31.20
192.168.31.21
192.168.31.22
192.168.31.23
</pre>
<pre>/etc/squid/paginas_basicas:
.miempresa.com.ec
.miasociada.com.ec
.misubsidiaria.com.ec
</pre>
Las ACL's y reglas que se tienen en <i>squid.conf</i> son:
<br />
<pre>acl usuarios_jefes src "/etc/squid/usuarios_jefes"
acl paginas_basicas dstdomain "/etc/squid/paginas_basicas"
acl red_local src 192.168.31.0/255.255.255.0
</pre>
<pre>http_access allow usuarios_jefes
http_access allow red_local paginas_basicas
http_access deny all
</pre>
<div style="text-align: justify;">
Hasta aquí todo funciona bien, los Jefes tienen acceso a todo y el resto de usuarios de la red local solo a las páginas del grupo industrial.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A partir de este momento nace otro requerimiento, el cual es, de que el área contable de la empresa adicionalmente tenga acceso a las paginas de algunos bancos. Para lo cual se agrega la siguiente configuración:
</div>
<pre>/etc/squid/usuarios_contabilidad:
192.168.31.41
192.168.31.42
192.168.31.43
192.168.31.44
</pre>
<pre>/etc/squid/paginas_bancos:
.pichincha.com
.bp.fin.ec
.sfbp.fin.ec
.intermatico.com
.bancointernacional.com.ec
.bancomachala.com
.bancoguayaquil.com
.cashbg.bankguay.com
</pre>
Las ACL's y reglas en <i>squid.conf</i> quedan de la siguiente manera:
<br />
<pre>acl usuarios_jefes src "/etc/squid/usuarios_jefes"
acl usuarios_contabilidad src "/etc/squid/usuarios_contabilidad"
acl paginas_basicas dstdomain "/etc/squid/paginas_basicas"
acl paginas_bancos dstdomain "/etc/squid/paginas_bancos"
acl red_local src 192.168.31.0/255.255.255.0
</pre>
<pre>http_access allow usuarios_jefes
http_access allow usuarios_contabilidad paginas_basicas paginas_bancos
http_access allow red_local paginas_basicas
http_access deny all
</pre>
<div style="text-align: justify;">
El problema es que los usuarios de Contabilidad siguen sin acceder a las páginas de los bancos.</div>
<br />
<b>La Solución:</b>
<br />
<pre>http_access allow usuarios_jefes
http_access allow usuarios_contabilidad paginas_basicas
http_access allow usuarios_contabilidad paginas_bancos
http_access allow red_local paginas_basicas
http_access deny all
</pre>
<b>Por qué?:</b>
<br />
<pre>http_access allow usuarios_contabilidad paginas_basicas paginas_bancos
</pre>
Es como si yo dijera:
<br />
<ul>
<li style="text-align: justify;"><b>PERMITIR</b> el acceso <b>SI</b> se cumple: <i>usuarios_contabilidad <b>AND</b> paginas_basicas <b>AND</b> paginas_bancos</i></li>
</ul>
<div style="text-align: justify;">
Es decir nunca se va a cumplir la condición porque no hay forma que <i>usuarios_contabilidad</i> vaya al mismo tiempo a <i>paginas_basicas</i> y a <i>paginas_bancos</i>.</div>
<br />
En cambio:
<br />
<pre>http_access allow usuarios_contabilidad paginas_basicas
http_access allow usuarios_contabilidad paginas_bancos
</pre>
Es como si yo dijera:
<br />
<ul>
<li style="text-align: justify;"><b>PERMITIR</b> el acceso <b>SI</b> se cumple: <i>usuarios_contabilidad <b>AND</b> paginas_basicas</i></li>
<b>OR</b>
<li><b>PERMITIR</b> el acceso <b>SI</b> se cumple: <i>usuarios_contabilidad <b>AND</b> paginas_bancos</i></li>
</ul>
<div style="text-align: justify;">
Lo cual si se va a cumplir ;)
<b>Para resumir:</b>
La lógica de combinación de ACL's es así:
</div>
<pre>http_access allow|deny acl AND acl AND ...
OR
http_access allow|deny acl AND acl AND ...
OR
...
</pre>
Es importante tenerlo bien en claro :D<br />
<br />
<b>Referencias:</b>
<br />
<ul>
<li><a href="http://wiki.squid-cache.org/SquidFaq/SquidAcl">SquidFaq/SquidAcl</a></li>
<li><a href="http://workaround.org/squid-acls">How Squid ACLs work</a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/05/29/blog/iknaxio/squid_un_error_com%C3%BAn_al_combinar_acls#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-617126380234256002016-10-17T11:24:00.000-05:002016-10-17T11:37:00.198-05:00KVM: ERROR Host does not support any virtualization options<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/01/17/blog/iknaxio/kvm_error_host_does_not_support_any_virtualization_options" target="_blank">Publicado originalmente el 2012-01-17 19:24, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Toda la santa tarde he estado peleando con una implementación de KVM bajo CentOS 6.x en un Servidor HP Proliant ML350 G5.<br />
</div>
<div style="text-align: justify;">
<br />
<a name='more'></a></div>
<div style="text-align: justify;">
Aparentemente todos los paquetes y sus dependencias se instalaron con:
</div>
<pre>yum install kvm libvirt python-virtinst qemu-kvm
</pre>
<div style="text-align: justify;">
Pero cada vez que trataba de crear una máquina virtual con:
</div>
<pre>virt-install
</pre>
Me saltaba el siguiente error:
<br />
<pre>ERROR Host does not support any virtualization options
</pre>
<div style="text-align: justify;">
Pensé que por realizar una Instalación Mimimal, algún paquete faltaba, así que volví a instalar escogiendo el grupo de paquetes de Virtualization, Virtualization Client y Virtualization Platform y me seguía dando el mismo error. Luego de buscar en San Google llegué hasta un hilo en el que se hacia mención que la característica de virtualización suele venir desactivada a nivel de BIOS. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Así que reinicie y pulse <i>F9 -> Advanced Options -> Processor Options.. -> Interl(R) Virtualization Technology -> Enable</i> y fin de los problemas jejeje. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora si me rio, pero ya estaba al borde de lanzar la toalla jejeje </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Saludos.</div>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/01/17/blog/iknaxio/kvm_error_host_does_not_support_any_virtualization_options#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-74556248378706737932016-10-17T11:11:00.002-05:002016-10-17T11:14:08.595-05:00MySQL: Post-instalación en CentOS 6.x<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/11/08/comos/mysql_postinstalaci%C3%B3n_en_centos_6x" target="_blank">Publicado originalmente el 2012-11-08 00:39, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Hace unas semanas atrás había pecado con la posibilidad de que el administrador del Servidor MySQL que estaba revisando, había creado por descuido y/o negligencia algunos usuarios de acceso total a la base sin asignarles su respectiva clave. De todas formas para explotar este acceso en la DB es necesario estar logueados dentro del Servidor Linux, lo cual no es poco probable que se dé, en entornos multiusuarios.<br />
</div>
<div style="text-align: justify;">
</div>
<a name='more'></a><br />
<div style="text-align: justify;">
El otro día me tocó instalar a los tiempos <a href="https://www.mysql.com/">MySQL</a> en <a href="https://www.centos.org/">CentOS</a> y allí caí en cuenta de que el estado de seguridad, en que por defecto queda nuestro recién instalado RDBMS, no es el ḿás óptimo.
<!--break-->
Es por ello que el presente documento plantea los pasos posteriores que debemos realizar luego de instalar el motor de base de datos MySQL en CentOS 6.x para obtener un mejor nivel de seguridad al que se proporciona en una instalación por defecto.
</div>
<ul>
<li style="text-align: justify;"><b>Nota: </b><a href="http://www.ecualug.org/user/epe">Epe</a> me hizo caer en cuenta de que existe un script llamado <b><i>mysql_secure_installation</i></b>, el cual me permite realizar las siguientes tareas:
<ul>
<li>Puede establecer una contraseña para la cuenta root.</li>
<li>Puede eliminar cuentas root que se puede acceder desde fuera del host local.</li>
<li>Puede eliminar cuentas de usuario anónimo.</li>
<li>Se puede quitar la base de datos de prueba (que por defecto se puede acceder a todos los usuarios, incluso los usuarios anónimos), y los privilegios que permiten a cualquier persona acceder a bases de datos con nombres que comienzan con test.</li>
</ul>
Por lo que bien se podría realizar directamente la ejecución de este script en sustitución a lo que propongo ;)</li>
</ul>
<b>Manos a la obra:</b><br />
La instalación típica de MySQL es como la que sigue:
<br />
<pre>yum -y install mysql-server mysql
</pre>
<pre>chkconfig mysqld on
</pre>
<pre>service mysqld restart
</pre>
<div style="text-align: justify;">
Luego de ello lo primero que deberíamos hacer es colocar clave al usuario <i>root</i> de la base de datos:
</div>
<pre>mysqladmin -u root password 'LaNuevaClave'
</pre>
<div style="text-align: justify;">
Nos conectamos al Servidor de MySQL a través del cliente de consola, y en este momento ya se nos pedirá la clave que acabamos de fijar:
</div>
<pre>mysql -u root -p
</pre>
<div style="text-align: justify;">
Realizamos un <i>select</i> sobre la tabla de usuarios y podemos observar todos los usuarios que se han creado con el proceso de instalación:
</div>
<pre>mysql> select * from mysql.user;
</pre>
<pre>+----------------+------+-------------------------------------------+-------------+-------------+-------------+-------------+--
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv |
+----------------+------+-------------------------------------------+-------------+-------------+-------------+-------------+--
| localhost | root | *B7DF5040F512CDFBA7A3ADA6DDF2C4E157746666 | Y | Y | Y | Y |
| social.iknaxio | root | | Y | Y | Y | Y |
| 127.0.0.1 | root | | Y | Y | Y | Y |
| localhost | | | N | N | N | N |
| social.iknaxio | | | N | N | N | N |
+----------------+------+-------------------------------------------+-------------+-------------+-------------+-------------+--
5 rows in set (0.00 sec)
</pre>
<div style="text-align: justify;">
Se han creado cinco usuarios para permitir conexiones desde los nombre de host locales: <i>localhost, social.iknaxio y 127.0.0.1</i><i> </i></div>
<br />
<div style="text-align: justify;">
<i>social.iknaxio</i> corresponde al hostname del equipo. Aunque solo los tres primeros usuarios tienen permisos para ejecutar sentencias, lo malo es que solo uno tiene clave (al que le asignamos nosotros mismos), por lo que sería fácil para un usuario de sistema ingresar y ejecutar sentencias con solo usar:
</div>
<pre>mysql -h 127.0.0.1
</pre>
Por ello vamos a proceder a eliminar a todos los usuarios <i>'inseguros'</i>:
<br />
<pre>mysql> delete from mysql.user where not(Host='localhost' and User='root');
</pre>
<pre>Query OK, 4 rows affected (0.00 sec)
</pre>
Verificando nuevamente la tabla de permisos de usuarios;
<br />
<pre>mysql> select * from mysql.user;
</pre>
<pre>+-----------+------+-------------------------------------------+-------------+-------------+-------------+-------------+--
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv |
+-----------+------+-------------------------------------------+-------------+-------------+-------------+-------------+--
| localhost | root | *B7DF5040F512CDFBA7A3ADA6DDF2C4E157746666 | Y | Y | Y | Y |
+-----------+------+-------------------------------------------+-------------+-------------+-------------+-------------+--
1 row in set (0.00 sec)
</pre>
Seguimos ahora con la tabla de permisos de bases de datos;
<br />
<pre>mysql> select * from mysql.db;
</pre>
<pre>+------+---------+------+-------------+-------------+-------------+-------------+--
| Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv |
+------+---------+------+-------------+-------------+-------------+-------------+--
| % | test | | Y | Y | Y | Y |
| % | test\_% | | Y | Y | Y | Y |
+------+---------+------+-------------+-------------+-------------+-------------+--
2 rows in set (0.00 sec)
</pre>
Vamos a eliminar los permisos a la base de pruebas <i>test</i>:
<br />
<pre>mysql> delete from mysql.db;
</pre>
<pre>Query OK, 2 rows affected (0.00 sec)
</pre>
Verificamos:
<br />
<pre>mysql> select * from mysql.db;
</pre>
<pre>Empty set (0.00 sec)
</pre>
Hacemos un <i>flush</i> de los privilegios, para que se vuelvan a cargar.
<br />
<pre>mysql> flush privileges;
</pre>
<pre>Query OK, 0 rows affected (0.00 sec)
</pre>
Y finalmente salimos del cliente de MySQL.
<br />
<pre>mysql> exit
</pre>
Espero que les sea de utilidad.<br />
<br />
Saludos ;)
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/11/08/comos/mysql_postinstalaci%C3%B3n_en_centos_6x#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-56926323432868423072016-10-17T10:59:00.004-05:002016-10-17T11:04:30.969-05:00Drupal: Instalación Local de la versión 7 en [K]Ubuntu<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/01/17/blog/iknaxio/drupal_instalaci%C3%B3n_local_de_la_versi%C3%B3n_7_en_kubuntu" target="_blank">Publicado originalmente el 2012-01-17 00:57, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
El siguiente post presenta el procedimiento para instalar de manera local el Gestor de Contenidos <a href="http://www.drupal.org/">Drupal</a> 7 en <a href="http://www.kubuntu.org/">Kubuntu</a> 11.10, pero los pasos a continuación deberian ser válidos para cualquier variante de <a href="http://www.ubuntu.com/">Ubuntu</a> e incluso para <a href="http://www.debian.org/">Debian</a>.</div>
<div style="text-align: justify;">
<br />
<a name='more'></a></div>
<div style="text-align: justify;">
Es posible incluso que el procedimiento con pocos (o ningún cambio) también sirva para otras versiones de este excelente gestor de contenidos, osea Drupal :D. No incluyo la parte propia del Asistente de Instalación Web porque me parece demasiado intuitivo como para explicarlo, pero si alguien tiene algún problema que lo posteé para ver que se puede hacer ;)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Manos a la obra:</b> </div>
<div style="text-align: justify;">
Instalar los paquetes necesarios para tener funcional un entorno AMP (Apache + MySQL + PHP), se incluyen también el paquete GD de php e
<a href="http://www.imagemagick.org/">imagemagick</a> para el manejo de gráficos.
</div>
<pre>apt-get install apache2 php5 libapache2-mod-php5
apt-get install mysql-server mysql-client php5-mysql
apt-get install php5-gd imagemagick
</pre>
Descargar la última versión de Drupal desde <a href="http://drupal.org/project/drupal">http://drupal.org/project/drupal</a>
<br />
<pre>wget http://ftp.drupal.org/files/projects/drupal-7.10.zip
</pre>
<div style="text-align: justify;">
Copiar el archivo descargado al directorio donde se instalará finalmente Drupal, descomprimir y renombrar el directorio resultante
</div>
<pre>cp drupal-7.10.zip /var
cd /var
unzip drupal-7.10.zip
mv drupal-7.10 drupal7
</pre>
Opcionalmente, podemos eliminar el archivo comprimido
<br />
<pre>rm drupal-7.10.zip
</pre>
<div style="text-align: justify;">
Descargar en el directorio respectivo la Traducción al Español de Drupal desde <a href="http://localize.drupal.org/translate/languages/es">http://localize.drupal.org/translate/languages/es</a>
</div>
<pre>cd /var/drupal7/profiles/standard/translations
wget http://ftp.drupal.org/files/translations/7.x/drupal/drupal-7.10.es.po
</pre>
<div style="text-align: justify;">
Modificar el archivo de hosts, para crear un host que facilitará el acceso de forma local
</div>
<pre>nano /etc/hosts
</pre>
Y agregamos una línea como la que sigue:
<br />
<pre>127.0.0.2 drupal7.iknaxio.net drupal7
</pre>
<div style="text-align: justify;">
Configurar el Apache para crear un dominio virtual para Drupal a partir del sitio por default
</div>
<pre>cd /etc/apache2/sites-available/
cp -p default drupal7
nano drupal7
</pre>
Colocar dentro del archivo lo siguiente
<br />
<pre><VirtualHost *:80>
ServerName drupal7.iknaxio.net
ServerAdmin webmaster@iknaxio.net
DocumentRoot /var/drupal7
<Directory /var/drupal7/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/drupal7.error.log
CustomLog ${APACHE_LOG_DIR}/drupal7.access.log combined
</VirtualHost>
</pre>
Habilitar el virtual host recién creado
<br />
<pre>a2ensite drupal7
</pre>
<ul>
<li><b>Nota:</b> El comando anterior es lo mismo que:
<pre>cd ../sites-enabled/
ln -s ../sites-available/drupal7 001-drupal7
</pre>
</li>
</ul>
<div style="text-align: justify;">
Habilitar en Apache el modulo 'rewrite' para el uso de URL's amigables y el módulo 'headers' para el uso de compresión en archivos JS y CSS
</div>
<pre>a2enmod rewrite
a2enmod headers
</pre>
Reiniciamos el Servicio del Apache
<br />
<pre>/etc/init.d/apache2 restart
</pre>
Crear la Base de Datos denominada 'drupal7'
<br />
<pre>mysqladmin -u root -p create drupal7
</pre>
<div style="text-align: justify;">
Crear el usuario 'userd7' con contraseña 'passuserd7' que se conectará desde 'localhost' y que tendrá permisos de 'SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER' para la base de datos recién creada.
</div>
<pre>mysql -u root -p
</pre>
<pre>mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER
-> ON drupal7.*
-> TO 'userd7'@'localhost' IDENTIFIED BY 'passuserd7';
</pre>
Volver al directorio donde se instalará Drupal
<br />
<pre>cd /var/drupal7
</pre>
<div style="text-align: justify;">
Asignar permisos globales de escritura al directorio de nuestro sitio Drupal, SOLO MIENTRAS DURE LA INSTALACIÓN
</div>
<pre>chmod a+w sites/default
</pre>
<div style="text-align: justify;">
Crear el archivo de configuración de nuestro sitio Drupal a partir del archivo que viene por default.
</div>
<pre>cp sites/default/default.settings.php sites/default/settings.php
</pre>
<div style="text-align: justify;">
Asignar permisos globales de escritura al archivo de configuración de nuestro sitio Drupal, SOLO MIENTRAS DURE LA INSTALACIÓN
</div>
<pre>chmod a+w sites/default/settings.php
</pre>
<div style="text-align: justify;">
<b>Ahora sí, ya estamos listos para arrancar el instalador vía web:</b> En un navegador cargamos nuestro la URL de nuestro sitio Drupal para realizar la instalación:
</div>
<pre>http://drupal7.iknaxio.net
</pre>
Como dicen en mi tierra: "De aquí para adelante, ya todo es pampa". Se nos pedirá los datos de la base de datos, user y pass, y los datos de nuestro nuevo sitio, así que voy a omitir esa parte, porque es sumamente sencilla.<br />
<br />
Una vez que el Asistente de Instalación ha culminado con éxito, restringimos los permisos globales de lectura que aplicamos al directorio del sitio y el archivo de configuración.
<br />
<pre>chmod go-w sites/default/settings.php
chmod go-w sites/default
</pre>
<div style="text-align: justify;">
Espero que les sea de utilidad! ;)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/01/17/blog/iknaxio/drupal_instalaci%C3%B3n_local_de_la_versi%C3%B3n_7_en_kubuntu#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-34641566339735819692016-10-17T10:27:00.000-05:002016-10-17T10:47:25.692-05:00Como crear un Tema Splash Screen KDE para nuestro Kubuntu 10.04<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/08/26/comos/como_crear_un_tema_splash_screen_kde_para_nuestro_kubuntu_1004" target="_blank">Publicado originalmente el 2012-08-26 22:34, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Hoy me he dado a la tarea de crear un Splash Screen para mi Kubuntu 10.04, no es el mejor splash el que al final ha quedado, pero creo que para empezar está bien, y lo más importante he logrado darle un toque de personalización a mi KDE 8).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Antes que nada advierto que no soy especialista en estos lares, por lo que si alguno de los pasos parecen empíricos, realmente lo son jajaja .</div>
<div style="text-align: justify;">
<br />
<a name='more'></a></div>
<div style="text-align: justify;">
Sin más preámbulo, aquí va el proceso seguido para crear el Tema <i>IknaxioSplash</i> :D:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En nuestro directorio favorito, creamos la estructura de carpetas para nuestro Splash Screen Theme:</div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-jna4LP1TKSQ/WATtS2UWP9I/AAAAAAAAAGs/JfJSKCfXlt8X4TvWvc4WcH3lnsdiJl2egCLcB/s1600/IknaxioSplashTheme-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://1.bp.blogspot.com/-jna4LP1TKSQ/WATtS2UWP9I/AAAAAAAAAGs/JfJSKCfXlt8X4TvWvc4WcH3lnsdiJl2egCLcB/s400/IknaxioSplashTheme-1.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
</div>
<div style="text-align: justify;">
Como podemos observar he creado la carpeta <b>IknaxioSplash</b> y dentro de ella los archivos principales son:
</div>
<ul>
<li>Theme.rc</li>
<li>main.qml</li>
</ul>
<b>Theme.rc</b> contiene la información de mi tema:
<br />
<pre>[KSplash Theme: IknaxioSplash]
Name = Iknaxio Splash Screen for KDE
Description = My first splash screen theme
Version = 0.1
Author = Iknaxio Marx <iknaxio at="" ecualug.org="">
Homepage = http://www.ecualug.org/blog/iknaxio
# Theme behaviour settings.
Engine = KSplashQML
</iknaxio></pre>
<div style="text-align: justify;">
Según entendí, el <i>KSplash Theme</i> coincide con el nombre de la carpeta de nuestro tema, de allí las siguientes líneas son informativas <i>Name, Description, Version, Author, Homepage</i>. El <i>Engine</i> se refiere propiamente al motor que se va a usar para renderizar el tema, como voy a usar <a href="https://en.wikipedia.org/wiki/QML">QML</a>, el engine es <i>KSplashQML</i>.</div>
<br />
<b>main.qml</b> contiene en sí la "animación" del splash:
<br />
<pre>import QtQuick 1.0
Rectangle {
id: main
width: screenSize.width
height: screenSize.height
anchors.fill: parent
Image {
id: splashImage
fillMode: Image.PreserveAspectCrop
source: "images/background.jpg"
anchors.fill: parent
Image {
id: iknaxio
width: 732
height: 98
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
source: "images/iknaxio.png"
opacity: 0
}
Image {
id: bob
width: 550
height: 550
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
source: "images/bob.jpg"
opacity: 0
}
}
SequentialAnimation {
id:splashanimation
NumberAnimation {
target: bob;
property: "opacity";
duration: 4000;
to: 1;
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: bob;
property: "opacity";
duration: 4000;
to: 0.05;
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: iknaxio;
property: "opacity";
duration: 4000;
to: 1;
easing.type: Easing.InOutQuad
}
}
Component.onCompleted: splashanimation.start()
}
</pre>
<div style="text-align: justify;">
En la primera parte se declaran los elementos gráficos y se les asigna un <b><i>id</i></b>, realizamos algo así como la declaración de las variables que más adelante vamos a usar.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para el caso del elemento <i>Rectangle</i> le asigno el ancho y alto de la pantalla. Para los <i>Image</i> (fondo de pantalla, la estampa de Bob Marley y las letras que dicen IKNAXIO) es necesario declarar el ancho y alto real de esos elementos, sino los sabemos basta con dar clic derecho sobre la imagen para averiguarlo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Centro las imágenes a la pantalla y declaro los <b><i>source</i></b>, es decir la ruta en la que se encuentran almacenadas, en este caso es la carpeta <b><i>images</i></b>. <b><i>Opacity: 0</i></b>, significa que el elemento no es visible, <i>opacity</i> puede variar entre 1 y 0, si le asignamos uno el elemento se muestra totalmente.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
De allí viene la animación ;)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Se han definido tres etapas en la animación, las mismas que están representadas por cada una de las líneas <b><i>NumberAnimation</i></b>:
</div>
<ol>
<li style="text-align: justify;">En 4 segundos mostrar poco a poco la estampa de Bob Marley, para lo cual se incrementa gradualmente la propiedad <i>opacity</i> hasta llegar a 1.</li>
<li style="text-align: justify;">En los siguientes 4 segundos ocultar gradualmente a Bob, pero no del todo, ya que lo dejamos con un <i>opacity</i> de 0.05.</li>
<li style="text-align: justify;">Finalmente en los últimos 4 segundos mostrar la leyenda "IKNAXIO".</li>
</ol>
<div style="text-align: justify;">
Para poner en "producción" nuestro recién creado tema, copiamos toda la carpeta <b><i>IknaxioSplash</i></b> hacia la ruta:
</div>
<pre>~/.kde/share/apps/ksplash/Themes/
</pre>
<div style="text-align: justify;">
Y de allí vamos a activar nuestro tema a <b><i>System Settings->Workspace Appearance->Splash Screen</i></b>:</div>
<div style="text-align: left;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-Dv87TbcPpfE/WATtVAo3CNI/AAAAAAAAAGw/BACAgGgA6IMNudL0boAGRwdxosmskkTYQCEw/s1600/IknaxioSplashTheme-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="303" src="https://3.bp.blogspot.com/-Dv87TbcPpfE/WATtVAo3CNI/AAAAAAAAAGw/BACAgGgA6IMNudL0boAGRwdxosmskkTYQCEw/s400/IknaxioSplashTheme-2.png" width="400" /></a></div>
</div>
<div style="text-align: justify;">
Con esta mega explicación, espero que les despertara la curiosidad de intentar realizar su propio Splash Screen.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Adjunto encontrarán el archivo <a href="https://drive.google.com/open?id=0B1VA6kuxBwLjeHp3b2pjeGhQbkk" target="_blank"><b><i>IknaxioSplash.txt</i></b></a>, el cual contiene el tema al que se hace referencia en este Como. Para poder usarlo tienen que renombrarlo de tal manera que luego de quitar la extensión .txt quede asi <a href="https://drive.google.com/open?id=0B1VA6kuxBwLjLVdVYzZEVVVwYTA" target="_blank"><b><i>IknaxioSplash.zip</i></b></a> </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Saludos y una excelente semana para todos ;)
<b> </b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>Referencias:</b>
</div>
<ul>
<li><a href="http://qt-project.org/doc/qt-4.8/qml-tutorial.html">QML Tutorial</a></li>
<li><a href="http://doc-snapshot.qt-project.org/4.8/qdeclarativeintroduction.html">Introduction to the QML Language</a></li>
<li><a href="http://doc-snapshot.qt-project.org/4.8/qdeclarativeelements.html">QML Elements</a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/08/26/comos/como_crear_un_tema_splash_screen_kde_para_nuestro_kubuntu_1004#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-40598256296735880282016-10-17T10:05:00.000-05:002016-10-17T10:09:42.480-05:00Cómo generar Estadísticas de nuestro Sitio Web con AWStats<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2009/03/11/comos/c%C3%B3mo_generar_estad%C3%ADsticas_de_nuestro_sitio_web_con_awstats" target="_blank">Publicado originalmente el 2009-03-11 16:01, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Aprovechando que acá en mi trabajo necesité usar el <a href="http://awstats.sourceforge.net/">AWStats</a> (Advanced Web Statistics) he preparado este pequeño documento en el que explicó como instalar dicha herramienta para generar Estadísticas de nuestro Sitio Web.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<a name='more'></a><div style="text-align: justify;">
Para los que aún no han escuchado hablar de esta herramienta transcribo <a href="http://es.wikipedia.org/wiki/Awstats">la definición de AWStats según la Wikipedia</a>:</div>
<blockquote class="tr_bq">
<div style="text-align: justify;">
AWStats es una herramienta open source de informes de análisis web, apta para analizar datos de servicios de Internet como un servidor web, streaming, mail y FTP. AWstats analiza los archivos de log del servidor, y con base a ellos produce informes HTML. Los datos son presentados visualmente en informes de tablas y gráficos de barra. Pueden crearse informes estáticos mediante una interfaz de línea de comando, y se pueden obtener informes on-demand a través de un navegador web, gracias a un programa CGI.</div>
</blockquote>
<div style="text-align: justify;">
El procedimiento de instalación y configuración es el siguiente:
</div>
<ol>
<li style="text-align: justify;">Debemos tener instalado en nuestro Centos el repositorio <a href="http://dag.wieers.com/rpm/">dag</a>, en caso de no ser así recomiendo hacerlo guiandonos del documento <a href="http://www.ecualug.org/2006/03/30/comos/como_usar_el_repositorio_de_dag_en_nuestro_centos">Cómo usar el repositorio de dag en nuestro CentOS</a>.</li>
<li>Instalamos los paquetes necesarios a través de yum.
<pre># yum -y install awstats perl-Geo-IPfree
</pre>
</li>
<li style="text-align: justify;">Crear el archivo de configuración para nuestro sitio(<i>supersitio.com.ec</i>) tomando como base <i>awstats.model.conf</i>.</li>
<pre># cd /etc/awstats/
# cp awstats.model.conf awstats.supersitio.com.ec.conf
</pre>
<li><div style="text-align: justify;">
<b>Opcional:</b> Eliminar el archivo de configuración para el sitio <i>localhost.localdomain</i>. Como tiene el mismo contenido que <i>awstats.model.conf</i> no le veo utilidad mantenerlo (sino me creen pueden hacer un <i>diff</i> de los 2 archivos 8)).
</div>
<pre># rm -f /etc/awstats/awstats.localhost.localdomain.conf
</pre>
</li>
<li>Editar el archivo de configuración para nuestro sitio.
<pre># vi awstats.supersitio.com.ec.conf
</pre>
Y modificar las siguientes líneas:
<pre>SiteDomain="www.supersitio.com.ec"
HostAliases="supersitio.com.ec www.supersitio.com.ec"
</pre>
<div style="text-align: justify;">
Adicionalmente descomentamos la línea del plugin GeoIPfree para que en los reportes aparezcan los países desde donde visitaron nuestro sitio.
</div>
<pre>LoadPlugin="geoipfree"
</pre>
</li>
<li>
Ejecutar el script que genera las estadísticas de nuestro sitio.
<pre># /usr/bin/perl /var/www/awstats/awstats.pl \
-config=supersitio.com.ec \
-LogFile="/usr/bin/logresolvemerge.pl \
/var/log/httpd/access_log* |"
</pre>
</li>
<li>Configurar el acceso a la página de las estadísticas </li>
<pre># vi /etc/httpd/conf.d/awstats.conf
</pre>
Modificar la directiva <i>allow</i> para colocar la ip de la máquina desde la cual queremos consultar las estadísticas. Por defecto esta la 127.0.0.1.
<pre>allow from 192.168.55.16
</pre>
<li>
Reiniciar el Servidor Web.
<pre># service httpd restart
</pre>
</li>
<li>
Ingresar a nuestras estadísticas.
<ul>
<li><b>http://www.supersitio.com.ec/awstats/awstats.pl?config=supersitio.com.ec</b><b> </b></li>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-r-lOeVDxu0A/WATmz24zopI/AAAAAAAAAGc/3WFYJ6S09CAsoZ7-8JQeKakBLjUAZPPJACLcB/s1600/awstats-1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://4.bp.blogspot.com/-r-lOeVDxu0A/WATmz24zopI/AAAAAAAAAGc/3WFYJ6S09CAsoZ7-8JQeKakBLjUAZPPJACLcB/s400/awstats-1.PNG" width="400" /></a></div>
</ul>
<ul>
</ul>
</li>
<li><div style="text-align: justify;">
Adicionalmente podemos colocar un poco de seguridad a través de autenticación HTTP para acceder por medio de usuario/contraseña.
</div>
<pre># vi /etc/httpd/conf.d/awstats.conf
</pre>
Y agregamos las siguientes líneas:
<pre><Files "awstats.pl">
AuthUserFile /etc/awstats/.passwd
AuthName "Area restringida"
AuthType Basic
require valid-user
</Files>
</pre>
<div style="text-align: justify;">
Luego creamos un usuario para poder ingresar (Ej: <i>iknaxio</i>). Se nos solicitará una contraseña y su respectiva confirmación.
</div>
<pre># htpasswd -c /etc/awstats/.passwd iknaxio
</pre>
Reiniciar el Servidor Web.
<pre># service httpd restart
</pre>
<div style="text-align: justify;">
Cerramos el navegador y cuando intentemos acceder nuevamente se nos solicitará usuario/contraseña.
</div>
</li>
<li>
Fin }:)
</li>
</ol>
<div style="text-align: justify;">
Cabe anotar que las estadísticas se actualizarán automáticamente cada hora gracias a una tarea de cron que se agrega al momento de la instalación.</div>
<br />
<b>Bibliografía</b>
<br />
<ul>
<li><a href="http://www.ernster.net/?p=14">Configuring awstats on CentOS</a></li>
<li><a href="http://nachoproy.wordpress.com/2007/10/04/guia-rapida-instalacion-de-awstas/">Guía rápida de instalación de awstats </a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2009/03/11/comos/c%C3%B3mo_generar_estad%C3%ADsticas_de_nuestro_sitio_web_con_awstats#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-71151668278775063042016-10-16T22:18:00.000-05:002016-10-16T22:21:48.238-05:00Elgg: Creando nuestra Red Social. Instalación de la versión 1.8.6 en CentOS 6.2<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/07/02/comos/elgg_creando_nuestra_red_social_instalaci%C3%B3n_de_la_versi%C3%B3n_186_en_centos_62" target="_blank">Publicado originalmente el 2012-07-02 23:29, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Debido a un proyecto de la oficina he estado probando algunos sistemas de colaboración web. Aprovechando el trabajo, he ido documentando algunas de las instalaciones más interesantes y es así en que hoy le tocó el turno a <a href="http://elgg.org/">Elgg</a>, que no es más que una plataforma para crear redes sociales y que está licenciada bajo GPLv2.</div>
<div style="text-align: justify;">
<br />
<br />
<a name='more'></a></div>
<div style="text-align: justify;">
A continuación voy a detallar el proceso de instalación para CentOS 6.2. </div>
<br />
<b>Advertencia:</b>
<br />
<ul>
<li style="text-align: justify;">A pesar de haber tomado todas las precauciones del caso para obtener una instalación segura, libero responsabilidades de futuras afectaciones que por omisión de este texto pueda el lector sufrir, ya que todo este proceso ha sido realizado en un ambiente de pruebas.</li>
</ul>
<b>Requerimientos:</b>
<br />
<ul>
<li style="text-align: justify;">Entorno LAMP: Sistema Operativo CentOS 6.2 + Apache 2.2 + MySQL 5.1 + PHP 5.3</li>
</ul>
<b>Procedimiento:</b><br />
<div style="text-align: justify;">
Instalamos los módulos de php de los que hace uso Elgg
</div>
<pre>yum -y install php-gd php-mbstring
</pre>
Descargamos la última versión de Elgg:
<br />
<pre>wget http://elgg.org/getelgg.php?forward=elgg-1.8.6.zip
</pre>
Descomprimimos:
<br />
<pre>unzip elgg-1.8.6.zip
</pre>
<div style="text-align: justify;">
Movemos el directorio que contiene nuestro Elgg, a la ruta raíz del servidor web:
</div>
<pre>mv elgg-1.8.6 /var/www/html/elgg
</pre>
<div style="text-align: justify;">
Definimos al usuario y grupo <i>apache</i>, como dueño del directorio:
</div>
<pre>cd /var/www/html
chown -R apache.apache elgg
</pre>
<div style="text-align: justify;">
Creamos un directorio fuera del DocumentRoot del Servidor Web, para albergar la data de mi sitio y le asignamos el usuario/grupo respectivo:
</div>
<pre>cd /var/www
mkdir elgg-data
chown -R apache.apache elgg-data/
</pre>
<div style="text-align: justify;">
Editamos el archivo de configuración del Servidor Web Apache:
</div>
<pre>nano /etc/httpd/conf/httpd.conf
</pre>
<div style="text-align: justify;">
Agregamos las siguientes líneas para el manejo de los directorios de mi sitio:
</div>
<pre><directory /var/www/html/elgg/>
Options FollowSymLinks
AllowOverride All
</directory>
</pre>
<pre><directory /var/www/elgg-data/>
AllowOverride None
order deny,allow
deny from all
</directory>
</pre>
Reiniciamos el servicio
<br />
<pre>service httpd restart
</pre>
<div style="text-align: justify;">
Antes de ejecutar el instalador web, procedemos a crear la base de datos que definimos en el archivo de configuración, así como también el usuario de la base de datos y su clave de acceso.
</div>
<pre>mysql -u root -p
</pre>
<pre>mysql> create database dbelgg;
mysql> grant all on dbelgg.* to 'userelgg'@'localhost' \
-> identified by 'p4ss3lgg2012';
mysql> flush privileges;
mysql> exit
</pre>
<div style="text-align: justify;">
Finalmente en un navegador ingresamos a la URL del Sitio para realizar la instalación:
</div>
<pre>https://midominio.com.ec/elgg
</pre>
<div style="text-align: justify;">
La pantalla de Bienvenida:</div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-YI40Zr8rvIs/WARAaEVJSUI/AAAAAAAAAFw/qP0tju8uYMUPPrQqTOlaUCPRo1H8ww8cACLcB/s1600/elgg-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="https://4.bp.blogspot.com/-YI40Zr8rvIs/WARAaEVJSUI/AAAAAAAAAFw/qP0tju8uYMUPPrQqTOlaUCPRo1H8ww8cACLcB/s400/elgg-1.png" width="400" /></a></div>
<div style="text-align: justify;">
La pantalla de chequeo de requerimientos, si nos falta alguno aquí nos avisará!:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-i5YTcTMbSpA/WARAdFYDgLI/AAAAAAAAAF0/i8lJpxCNGy0fjeW-Qy6sr6epfgJ2TttRACLcB/s1600/elgg-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://2.bp.blogspot.com/-i5YTcTMbSpA/WARAdFYDgLI/AAAAAAAAAF0/i8lJpxCNGy0fjeW-Qy6sr6epfgJ2TttRACLcB/s400/elgg-2.png" width="400" /> </a></div>
La pantalla de instalación de la base de datos:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-aBMId3W5u6o/WARAf3xLUpI/AAAAAAAAAF4/jWEMTagcxsEcpgKhJiRTAEVRGWOT4NmvgCLcB/s1600/elgg-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="330" src="https://2.bp.blogspot.com/-aBMId3W5u6o/WARAf3xLUpI/AAAAAAAAAF4/jWEMTagcxsEcpgKhJiRTAEVRGWOT4NmvgCLcB/s400/elgg-3.png" width="400" /> </a></div>
La pantalla de configuración del sitio: <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-T0hxuqTAiOw/WARAii8vMAI/AAAAAAAAAF8/OkaqCGHUpG8fGxV2S-JSHUlwPvYEcopcQCLcB/s1600/elgg-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="375" src="https://2.bp.blogspot.com/-T0hxuqTAiOw/WARAii8vMAI/AAAAAAAAAF8/OkaqCGHUpG8fGxV2S-JSHUlwPvYEcopcQCLcB/s400/elgg-4.png" width="400" /> </a></div>
La pantalla de creación de la cuenta de administrador: <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-KN6dvfhHB5E/WARAk-Yxh4I/AAAAAAAAAGA/cLLb-CGz0MgmGfBK_HdKwJs5OAupfADTwCLcB/s1600/elgg-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="347" src="https://4.bp.blogspot.com/-KN6dvfhHB5E/WARAk-Yxh4I/AAAAAAAAAGA/cLLb-CGz0MgmGfBK_HdKwJs5OAupfADTwCLcB/s400/elgg-5.png" width="400" /> </a></div>
<div style="text-align: justify;">
La pantalla de finalización: </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-T8FfBGeUEXY/WARAnkmiRuI/AAAAAAAAAGE/ku0qQHefe5oqE0rk63J4xBpqJFG_uroiQCLcB/s1600/elgg-6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://4.bp.blogspot.com/-T8FfBGeUEXY/WARAnkmiRuI/AAAAAAAAAGE/ku0qQHefe5oqE0rk63J4xBpqJFG_uroiQCLcB/s400/elgg-6.png" width="400" /> </a></div>
<div style="text-align: justify;">
El <b>Sitio de Administración</b>:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-WN7kf1eifNo/WARAqODejlI/AAAAAAAAAGI/bIZ7u_qxtrINZok7XJaUGQy8r8WEo6SeACLcB/s1600/elgg-7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="246" src="https://1.bp.blogspot.com/-WN7kf1eifNo/WARAqODejlI/AAAAAAAAAGI/bIZ7u_qxtrINZok7XJaUGQy8r8WEo6SeACLcB/s400/elgg-7.png" width="400" /> </a> </div>
<b>Nuestra Red Social</b>, lista para que nuestros usuarios interactuen:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-jeKAMwXsnec/WARAsR2RQJI/AAAAAAAAAGM/0TRBS2EdNosB1BHW-HRbgjCd4aZzsffmACLcB/s1600/elgg-8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://3.bp.blogspot.com/-jeKAMwXsnec/WARAsR2RQJI/AAAAAAAAAGM/0TRBS2EdNosB1BHW-HRbgjCd4aZzsffmACLcB/s400/elgg-8.png" width="400" /></a></div>
<span id="goog_254507886"></span><span id="goog_254507887"></span><br /></div>
<div style="text-align: justify;">
Espero que les sea de utilidad :D<br />
<br />
Salu2</div>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/07/02/comos/elgg_creando_nuestra_red_social_instalaci%C3%B3n_de_la_versi%C3%B3n_186_en_centos_62#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-11044673005579634762016-10-16T18:01:00.003-05:002016-10-16T18:47:32.180-05:00Cómo instalar jEdit en Debian / [x]Ubuntu desde los repositorios oficiales<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/11/04/comos/c%C3%B3mo_instalar_jedit_en_debian_xubuntu_desde_los_repositorios_oficiales" target="_blank">Publicado originalmente el 2012-11-04 23:22, en EcuaLUG.org</a></div>
<br />
<div style="text-align: justify;">
Desarrollé aplicaciones web con <a href="http://www.php.net/">PHP</a> en los tiempos heróicos de la era <i>AF</i> (<b>A</b>ntes de los <b>F</b>rameworks :P), en ese entonces el repositorio de paquetes <a href="http://pear.php.net/">PEAR</a> y el motor de plantillas <a href="http://www.smarty.net/">Smarty</a> eran el boom, ya que por un lado tenías la versatilidad de las clases reusables cuando la orientación de objetos estaba en pañales en PHP y por el otro lado lograbas separar tu código de la vista HTML de una manera muy cómoda.</div><br />
<a name='more'></a>
<div style="text-align: justify;">
Eran también los tiempos en que las IDE's FLOSS no tenían soporte para PHP, pero por suerte me encontré con un proyecto llamado <a href="http://www.jedit.org/">jEdit</a>, el cual se convirtió en mi amigo inseparable, porque aunque es un editor para programadores de propósito general se le puede agregar, vía plugins o macros, una gran cantidad de funcionalidad.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para los que no han escuchado hablar de jEdit, allí les dejo un <a href="https://es.wikipedia.org/wiki/Jedit">par de párrafos de la wikipedia</a>:</div>
<div style="text-align: justify;">
<blockquote class="tr_bq">
jEdit es un editor de texto libre, distribuido bajo los términos de la Licencia pública general de GNU. Está escrito en Java y se ejecuta en Windows, GNU/Linux, Mac OS X y otros sistemas operativos que dispongan de la máquina virtual Java.<br />
<br />
JEdit dispone de docenas de plugins para diferentes áreas de aplicaciones. Soporta de forma nativa el resaltado de sintaxis coloreado de la sintaxis para más de 200 formatos de fichero. También se puede incluir nuevos formatos de forma manual utilizando ficheros XML. jEdit soporta UTF-8 y otros formatos de codificación del texto.</blockquote>
</div>
<b>Manos a la obra:</b>
<br />
<div style="text-align: justify;">
Los siguientes pasos describen la instalación en una Distro Debian / [x]Ubuntu, de la versión estable de jEdit desde los repositorios oficiales del proyecto.
Partimos asumiendo que se encuentra instalado en el Sistema como mínimo la versión 6 de la máquina virtual de Java. Para verificar esto podemos usar el comando:<code> </code></div>
<pre>java -version</pre>
<div style="text-align: justify;">
En mi caso la salida es:
</div>
<pre>java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.3) (7u9-2.3.3-0ubuntu1~12.04.1)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)</pre>
<div style="text-align: justify;">
Instalamos la clave pública con la cual están firmados los paquetes del repositorio:</div>
<pre>sudo apt-key adv --keyserver keyserver.ubuntu.com \
--recv-keys E6A233DBE3AFBEFC</pre>
<div style="text-align: justify;">
Y obtenemos una salida como la siguiente:
</div>
<pre>Executing: gpg --ignore-time-conflict --no-options --no-default-keyring
--secret-keyring /tmp/tmp.TzvK2kKUkp --trustdb-name /etc/apt/trustdb.gpg
--keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg
--keyserver keyserver.ubuntu.com --recv-keys E6A233DBE3AFBEFC
gpg: requesting key E3AFBEFC from hkp server keyserver.ubuntu.com
gpg: key E3AFBEFC: public key "Björn Kautler <bjoern@autler.net>" imported
gpg: Total number processed: 1
gpg: imported: 1
</pre>
<div style="text-align: justify;">
Agregamos en nuestro sistema la configuración del repositorio para jEdit:
</div>
<pre>echo "deb http://switch.dl.sourceforge.net/project/jedit /" | \
sudo tee /etc/apt/sources.list.d/jedit-stable.list
</pre>
<div style="text-align: justify;">
El comando <i>tee</i> lee de la entrada estándar, la salida del comando <i>echo</i> y escribe al archivo de repositorio <i>jedit-stable.list</i>.
Podemos verificar que el archivo se creó con el contenido correcto con:
</div>
<pre>more /etc/apt/sources.list.d/jedit-stable.list
</pre>
La salida debe ser:
<br />
<pre>deb http://switch.dl.sourceforge.net/project/jedit /
</pre>
Actualizamos la lista de paquetes:
<br />
<pre>sudo apt-get update
</pre>
Instalamos jEdit:
<br />
<pre>sudo apt-get install jedit
</pre>
<div style="text-align: justify;">
Lo ejecutamos buscándolo en el menú de arranque de nuestro sistema o con el comando:
</div>
<pre>jedit
</pre>
<div style="text-align: justify;">
Para finalizar les dejo un par de screenshots, luego de instalados unos cuantos plugins y perzonalizadas un par de cosas:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-wDuyOv3Rql0/WAQNE8vGJ6I/AAAAAAAAAFc/lUL_jEUtF5EBw6Q6thLOe9C5kRwvDhZigCLcB/s1600/jedit-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="https://2.bp.blogspot.com/-wDuyOv3Rql0/WAQNE8vGJ6I/AAAAAAAAAFc/lUL_jEUtF5EBw6Q6thLOe9C5kRwvDhZigCLcB/s400/jedit-1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-9uhXMu1i98I/WAQNM2_Rn-I/AAAAAAAAAFg/XKtTuSESzP8Y30tdzRIQU0Lmr3wXWi80gCLcB/s1600/jedit-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://1.bp.blogspot.com/-9uhXMu1i98I/WAQNM2_Rn-I/AAAAAAAAAFg/XKtTuSESzP8Y30tdzRIQU0Lmr3wXWi80gCLcB/s400/jedit-2.png" width="386" /></a></div>
Saludos, y una buena semana para todos! ;)</div>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2012/11/04/comos/c%C3%B3mo_instalar_jedit_en_debian_xubuntu_desde_los_repositorios_oficiales#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-68497111692184611502013-03-16T18:58:00.004-05:002016-10-16T18:39:48.495-05:00Creando un Helper para autenticar Squid mediante POP3<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/05/08/blog/iknaxio/creando_un_helper_para_autenticar_squid_mediante_pop3" target="_blank">Publicado originalmente el 2011-05-08 23:53, en EcuaLUG.org</a></div>
<br />
<a href="http://www.squid-cache.org/" rel="nofollow">Squid</a> nos permite crear los denominados <i>helpers de autenticación</i> para validar bajo nuestras propias reglas a los usuarios que requieren de autorización para acceder a ciertas páginas.<br />
<br />
El presente post demuestra como crear un <i>helper</i> usando <a href="http://www.php.net/" rel="nofollow">PHP</a> y <a href="http://pear.php.net/" rel="nofollow">PEAR</a> para autenticar Squid mediante POP3.<br />
<ul>
<li><b>IMPORTANTE: </b>Estoy partiendo del hecho de que tengo instalado un <i>Squid (Version 2.7.STABLE9)</i> sobre un <i>Debian 6.0.1.</i></li>
</ul>
<br />
<a name='more'></a><br /><br />
<b>Procedimiento:</b>
<br />
Instalar (sino los tenemos ya) los paquetes de línea de comandos para <i>PHP</i> y de los componentes base de <i>PEAR</i>:
<br />
<pre>apt-get install php5-cli php-pear</pre>
<br />
Instalar a través del cliente <i>PEAR</i> el paquete <i>Net_POP3</i> para interactuar con servidores <i>POP3</i>:
<br />
<pre>pear install pear/Net_POP3</pre>
<br />
Creamos el archivo del helper en el directorio de configuración de squid (esto es por comodidad, puede ir en cualquier lado):
<br />
<pre>nano /etc/squid/auth_pop3.php</pre>
<br />
Colocamos dentro el siguiente código:
<br />
<pre><?php
include('Net/POP3.php');
$host='mail.midominio.com.ec';
$port="110";
$pop3 =& new Net_POP3();
while (!feof(STDIN)) {
$line = trim(fgets(STDIN));
$fields = explode(' ', $line);
$username = rawurldecode($fields[0]);
$password = rawurldecode($fields[1]);
if($pop3->connect($host , $port ) ) {
if(PEAR::isError( $pop3->login($username , $password,'USER' ) ) ) {
fwrite(STDOUT, "ERR\n");
}
else {
fwrite(STDOUT, "OK\n");
}
}
else {
fwrite(STDOUT, "ERR\n");
}
}
$pop3->disconnect();
?>
</pre>
<br />
Editamos el archivo de configuración <i>squid.conf</i>
<br />
<pre>nano /etc/squid/squid.conf</pre>
<br />
Y agregamos las siguientes líneas en la sección "OPTIONS FOR AUTHENTICATION":
<br />
<pre>auth_param basic program /usr/bin/php /etc/squid/auth_pop3.php
auth_param basic children 20
auth_param basic realm Usuario y Password
auth_param basic credentialsttl 5 hours
</pre>
<br />
En donde:<br />
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;">program:</span> Cómo se ejecuta el helper. En este caso es a través del interprete de PHP.</li>
<li><span style="font-family: "courier new" , "courier" , monospace;">children:</span> Número de procesos para atender autenticaciones concurrentes para todos los clientes.</li>
<li><span style="font-family: "courier new" , "courier" , monospace;">realm:</span> Es el texto que se mostrará al usuario en la ventana de autenticación.</li>
<li><span style="font-family: "courier new" , "courier" , monospace;">credentialsttl:</span> Tiempo de vigencia de las credenciales de autenticación. Pasado este lapso se pedirá nuevamente al usuario que se autentique.</li>
</ul>
<br />
En el mismo archivo creamos unas ACL's de prueba:
<br />
<pre>acl client30 src 192.168.3.204/255.255.255.255
acl usuarios_auth proxy_auth REQUIRED
</pre>
<br />
Y agregamos una regla que las use:
<br />
<pre>http_access allow client30 usuarios_auth</pre>
<br />
Guardamos los cambios y Reiniciamos el servicio respectivo:
<br />
<pre>/etc/init.d/squid restart</pre>
<br />
Listo, con esto cada vez que quiera acceder a internet desde el equipo <span style="font-family: "courier new" , "courier" , monospace;">client30</span> se me pedirá autenticarme con las credenciales que uso para el correo electrónico ;)<br />
<br />
PD: El código del helper puede ser mejorado, se me ocurre por ejemplo que puede recibir como parámetros el nombre del servidor y el puerto.<br />
<br />
<b>Referencias:</b><br />
<ul>
<li><a href="http://www.freesoftwaremagazine.com/articles/authentication_with_squid" target="_blank">How to build squid authentication helpers</a></li>
<li><a href="https://pear.php.net/manual/en/package.networking.net-pop3.php" target="_blank">Net_POP3</a></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=comment/reply/15891#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org </a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-73385639109786197932013-02-04T22:51:00.001-05:002016-09-29T13:22:08.037-05:00Descargar videos de YouTube desde la consola<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/05/08/blog/iknaxio/descargar_videos_de_youtube_desde_la_consola" target="_blank">Publicado originalmente el <span content="2011-05-08T12:21:58-05:00" rel="sioc:has_creator">2011-05-08 12:21</span>, en EcuaLUG.org</a></div>
<br />
Estaba necesitando descargar los videos del <a href="http://www.intypedia.com/" target="_blank">Proyecto Intypedia</a>, y me dije debe haber una forma de hacerlo desde la consola, y en efecto vaya que la hay :D.<br />
<br />
El paquete en cuestión se llama <a href="http://rg3.github.com/youtube-dl/" target="_blank">youtube-dl</a>. Así que a instalarlo:
<br />
<pre>apt-get install youtube-dl</pre>
<br />
<a name='more'></a><br />
Es de fácil uso y permite cosas simpáticas como leer un archivo de texto con todas las url's de los videos a descargar, especificar el formato de video, usar como nombre de archivo el título del video, etc. Para un detalle de todas las opciones:
<br />
<pre>man youtube-dl</pre>
<br />
Adicional no está de más darle una ojeada a <a href="http://rg3.github.com/youtube-dl/documentation.html" target="_blank">youtube-dl Documentation</a>.<br />
<br />
La forma más fácil de usarlo es:
<br />
<pre>youtube-dl [URL_video]</pre>
<br />
<b>La forma como yo lo utilice:</b>
<br />
Primero procedí a crear un archivo de texto con las url de los videos:
<br />
<pre>nano intypedia.url</pre>
<br />
<pre>http://www.youtube.com/watch?v=jwSe2fct_Q8
http://www.youtube.com/watch?v=a99Qorfotv4
http://www.youtube.com/watch?v=46Pwz2V-t8Q
http://www.youtube.com/watch?v=On1clzor4x4
http://www.youtube.com/watch?v=74DlEMJsXBw
http://www.youtube.com/watch?v=sxg1nq17xj4
http://www.youtube.com/watch?v=NPsjN8AvNQM
http://www.youtube.com/watch?v=LSySUX8n-PQ
</pre>
<br />
Y ejecutamos:
<br />
<pre>youtube-dl -t -a ./intypedia.url</pre>
<br />
Donde:
<br />
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;">-a </span>Leer un archivo de texto con todas las url's de los videos a descargar</li>
<li><span style="font-family: "courier new" , "courier" , monospace;">-t </span>Usar como nombre de archivo el título del video.</li>
</ul>
Salu2 :D
<br />
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=comment/reply/15890#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-27937838408972365662013-02-04T17:43:00.000-05:002016-09-29T13:23:26.546-05:00Crear un Usuario "put only" en VSFtpd<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/05/08/blog/iknaxio/crear_un_usuario_put_only_en_vsftpd" target="_blank">Publicado originalmente el <span content="2011-05-08T01:45:08-05:00" rel="sioc:has_creator">2011-05-08 01:45</span>, en EcuaLUG.org </a></div>
<br />
A raíz de la pregunta del foro <a href="http://ecualug.org/2011/05/02/forums/configuracion_ftp" target="_blank">Configuracion FTP</a> me nació la curiosidad de saber si la <a href="http://ecualug.org/2011/05/02/forums/configuracion_ftp#comment-53549" target="_blank">solución que propuse</a> funcionaba o no.
<br />
<br />
Es por eso que el presente post muestra como crear Usuario <i>"put only"</i> en <a href="http://vsftpd.beasts.org/" target="_blank">VSFtpd</a>:<br />
<br />
<b>IMPORTANTE:</b> Estoy partiendo del hecho de que tengo instalado un <i>VSFtpd</i> <i>(vsftpd-2.0.5-16.el5_6.1)</i> sobre un <i>CentOS release 5.6 (Final)</i> con la siguiente configuración en <i>vsftpd.conf</i>
<br />
<pre>anonymous_enable=NO
xferlog_file=/var/sites/ftp_misitio_com_ec/logs/vsftpd.log
ftpd_banner=Bienvenido al Servidor FTP de Iknaxio.
chroot_local_user=YES
chroot_list_enable=NO
use_localtime=YES</pre>
<br />
<a name='more'></a><br /><br />
<b>Procedimiento:</b><br />
Creamos nuestro usuario de prueba y le asignamos una clave:
<br />
<pre>useradd -s /sbin/nologin iknaxio
passwd iknaxio</pre>
<br />
Editamos el archivo <i>/etc/vsftpd/vsftpd.conf</i> y agregamos la sgte linea:
<br />
<pre>user_config_dir=/etc/vsftpd/user_conf</pre>
<br />
Esta directiva permite crear una configuración específica para cada usuario especificado, sobreescribiendo la configuración global de vsftpd.conf: <br />
<blockquote class="tr_bq">
<b>user_config_dir</b> </blockquote>
<blockquote class="tr_bq">
<i>This powerful option allows the override of any config option specified in the manual page, on a per-user basis. Usage is simple, and is best illustrated with an example. If you set user_config_dir to be /etc/vsftpd_user_conf and then log on as the user "chris", then vsftpd will apply the settings in the file /etc/vsftpd_user_conf/chris for the duration of the session. The format of this file is as detailed in this manual page! PLEASE NOTE that not all settings are effective on a per-user basis. For example, many settings only prior to the user's session being started. Examples of settings which will not affect any behviour on a per-user basis include listen_address, banner_file, max_per_ip, max_clients, xferlog_file, etc.<br /><br />Default: (none) </i></blockquote>
Creamos el directorio para la configuración de usuarios:
<br />
<pre>mkdir /etc/vsftpd/user_conf</pre>
<br />
Creamos el archivo de configuración específico para el usuario iknaxio:
<br />
<pre>touch /etc/vsftpd/user_conf/iknaxio</pre>
<br />
Lo editamos y dentro colocamos la siguiente opción:
<br />
<pre>cmds_allowed=PUT,PASV,SYST,STOR,TYPE,QUIT</pre>
<br />
Finalmente hacemos un reinicio del servicio:
<br />
<pre>/etc/init.d/vsftpd restart</pre>
<br />
Y a probar:
<br />
<pre>ftp -d 127.0.0.1</pre>
<br />
El <span style="font-family: "courier new" , "courier" , monospace;">-d</span> es para que nos imprima los comandos que se envian al servidor:
<br />
<pre>Connected to 127.0.0.1.
220 Bienvenido al Servidor FTP del FCME.
ftp: setsockopt: Bad file descriptor
---> AUTH GSSAPI
530 Please login with USER and PASS.
---> AUTH KERBEROS_V4
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): iknaxio
---> USER iknaxio
331 Please specify the password.
Password:
---> PASS XXXX
230 Login successful.
cmds.c:276: verbose=1 debug=1 overbose=1
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
</pre>
<br />
<pre>ftp> put phplist.zip
local: phplist.zip remote: phplist.zip
---> TYPE I
200 Switching to Binary mode.
---> PASV
227 Entering Passive Mode (127,0,0,1,201,231)
---> STOR phplist.zip
150 Ok to send data.
226 File receive OK.
3443056 bytes sent in 0.011 seconds (3e+05 Kbytes/s)
</pre>
<br />
Y ahora probamos las restricciones:
<br />
<pre>ftp> get phplist.zip
local: phplist.zip remote: phplist.zip
---> PASV
227 Entering Passive Mode (127,0,0,1,220,239)
---> RETR phplist.zip
550 Permission denied.
</pre>
<br />
<pre>ftp> ls
---> TYPE A
200 Switching to ASCII mode.
---> PASV
227 Entering Passive Mode (127,0,0,1,135,130)
---> LIST
550 Permission denied.
</pre>
<br />
<pre>ftp> mkdir amirak
---> MKD amirak
550 Permission denied.
ftp> quit
---> QUIT
221 Goodbye.
</pre>
<br />
Salu2 8)<br />
<br />
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=comment/reply/15889#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-7431392997891541272013-02-03T23:41:00.000-05:002016-09-29T13:23:41.226-05:00Memorias de un Failover Vago para Internet<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/04/28/blog/iknaxio/memorias_de_un_failover_vago_para_internet" target="_blank">Publicado originalmente el 2011-04-28 17:45, en EcuaLUG.org </a></div>
<br />
Resulta que trabajo en Guayaquil y tenemos una oficina en Quito. Cada oficina tiene un acceso a internet independiente y existe un enlace dedicado Guayaquil-Quito para transmisión de datos. En cada punto tenemos un Firewall.<br />
<br />
El esquema general de red (Está feo, lo hice al apuro con Dia) es más o menos así:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-7UKx60NJFd8/UQ81qv1gM7I/AAAAAAAAACo/8QSNM_oIs6A/s1600/Diagrama+Acceso+Internet+UIO.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="206" src="https://lh3.ggpht.com/-7UKx60NJFd8/UQ81qv1gM7I/AAAAAAAAACo/8QSNM_oIs6A/s1600/Diagrama+Acceso+Internet+UIO.PNG" width="400" /></a></div>
<br />
<a name='more'></a><br /><br />
En donde:<br />
<ul>
<li>Fw1 = Firewall de Oficina Guayaquil</li>
<li>R1 = Router de Acceso a Internet en Guayaquil</li>
<li>R2 = Router para el Canal Dedicado de Transmisión de Datos </li>
</ul>
<ul>
<li>Fw2 = Firewall de Oficina Quito (IP Privada: 192.168.3.1)</li>
<li>R3 = Router de Acceso a Internet en Quito (IP Publica: 186.42.x.y)</li>
<li>R4 = Router para el Canal Dedicado de Transmisión de Datos (IP Privada: 192.168.3.254)</li>
</ul>
<br />
Y el día lunes nos tocó "la del lunes" el ISP de Quito tuvo problemas y nos quedamos sin acceso a Internet en este punto. Y para ponerle más emoción, ese día había una reunión de directivos en Quito.<br />
<br />
Lo que se me ocurrió en ese momento es lo siguiente:<br />
<ol>
<li>Verificar desde GYE que existe comunicación con el Firewall de Quito (Fw2) a través del canal dedicado:
<br />
<pre>ping 192.168.3.1</pre>
</li>
<br />
<li>Ingresar al Firewall de Quito (Fw2) a través de SSH haciendo uso de la dirección privada (192.168.3.1).</li>
<li>Ejecutar como root los siguientes comandos:
<br />
<pre>route del default gw 186.42.x.y
route add default gw 192.168.3.254
ip route flush cache
</pre>
<br />
El primer comando elimina el gateway que tiene por defecto el Firewall de Quito, luego se agrega una ruta hacia el router del Canal Dedicado: 192.168.3.254. Y el último comando borra las rutas almacenadas en caché.</li>
<li>Habilitar en el Firewall de Guayaquil (Fw1) una regla que permita acceder a Internet a la dirección del Fw2 (192.168.3.1).</li>
<li>Realizar las pruebas de Navegación.</li>
</ol>
<br />
Cuando se restablezca el Servicio de Acceso a Internet en Quito:<br />
<ol>
<li>Lo más fácil es reiniciar el Fw2.</li>
<li>Sino se puede reiniciar el equipo, entonces ejecutar los siguientes comandos como root en el servidor proxy:
<br />
<pre>route del default gw 192.168.3.254
route add default gw 186.42.x.y
ip route flush cache
</pre>
<br />
</li>
<li>Deshacer los cambios en el Fw1 de Guayaquil, es decir quitar o deshabilitar la regla que permite navegar al Fw2.</li>
<li>Realizar las pruebas de navegación.</li>
</ol>
<br />
Y eso fue todo, estuve leyendo como automatizar todo esto, pero eso ya queda para otro rato.<br />
<br />
Saludos<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=comment/reply/15862#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a></div>
Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-666833129074680672.post-35347150093995433792013-02-03T18:52:00.000-05:002016-09-29T13:28:53.865-05:00Agregando fecha y hora al Historial de BASH<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=2011/04/19/blog/iknaxio/agregando_fecha_y_hora_al_historial_de_bash" target="_blank">Publicado originalmente el 2011-04-19 03:42, en EcuaLUG.org</a></div>
<br />
Navegando me encontré con el siguiente tip para agregar fecha y hora al historial de BASH:<br />
<br />
Seteamos la variable de entorno <span style="font-family: "courier new" , "courier" , monospace;">HISTTIMEFORMAT</span>:<br />
<pre>export HISTTIMEFORMAT="%Y/%m/%d - %H:%M:%S "</pre>
<br />
Y probamos:<br />
<pre>history</pre>
<br />
Y obtenemos:<br />
<pre>1 2011/04/19 - 01:49:22 cd Desktop/
2 2011/04/19 - 01:49:22 ls -lh
3 2011/04/19 - 01:49:22 mysql
4 2011/04/19 - 01:49:22 mv wordpress/ /var/www
5 2011/04/19 - 01:49:22 mysql -u root -p
6 2011/04/19 - 01:49:22 cd /var/www/wordpress/
7 2011/04/19 - 01:49:22 ls -lh
</pre>
<br />
<i>"Para hacer esto global y permanente para todos los usuarios, editar <span style="font-family: "courier new" , "courier" , monospace;">/etc/profile</span> y agregar al comienzo el <span style="font-family: "courier new" , "courier" , monospace;">export</span>."</i><br />
<br />
Salu2<br />
<br />
<ul>
<li>Fuente: <a href="http://www.howtoforge.com/adding-date-and-time-to-your-bash-history" target="_blank">Adding Date And Time To Your Bash History</a></li>
</ul>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="http://www.ecualug.org/?q=comment/reply/15827#comment-form" target="_blank">Para comentarios y/o preguntas, por favor visite EcuaLUG.org</a> </div>
Anonymousnoreply@blogger.com