lunes, 24 de noviembre de 2014

Bloquear y desbloquear direcciones IP con iptables

Una de situaciones más importantes como Administrador de sistemas es la seguridad, es por eso que en este post les mostraré como bloquear direcciones ip en un servidor para que no tengan acceso a el   o bien bloquear las conexiones salientes hacia una IP determinada (en el caso de que se use ese servidor como gateway/router)


BLOQUEAR

Bloquear acceso a ip: 

iptables -A INPUT -s 189.240.240.8 -j DROP

Bloquear acceso a ip pero en un puerto y protocolo especifico:

iptables -A INPUT -s 189.240.240.8 -p tcp --destination-port 25 -j DROP

Bloquear conexión hacia IP: 

iptables -A INPUT -d 189.240.240.8 -j DROP

DESBLOQUEAR

Desbloquear acceso de IP:

iptables -D INPUT -s 189.240.240.8 -j DROP

Desbloquear conexión a hacia IP:

iptables -D INPUT -d 189.240.240.8 -j DROP



Ver reglas de iptables:
iptables --list



REGLAS PERMANENTES

Si deseas que estas reglas se queden de manera permanente es necesario instalar :

apt-get install iptables-persistent

para luego ingresar las reglas que iptables cargará desde el inicio de el equipo.

Archivo para IPv4: /etc/iptables/rules.v4 

Archivo para IPv6: /etc/iptables/rules.v6




viernes, 14 de noviembre de 2014

Realizar conexiones SSH sin password

En este post le mostraré como hacer conexiones SSH sin utilizar password de manera permanente.


Escenario:



PC2 necesita conectarse a PC1 por ssh sin utilizar password



Procedimiento:

1 ) Generar la llave pública (en PC2)

ssh-keygen -b 4096 -t rsa

Te pedirá tres datos,  en todos ellos solo es necesario dar [ENTER] sin introducir información

2 )  Mandar la llave pubica de PC2 a PC1

ssh-copy-id root@192.168.0.2

Te pedirá por única ocasión la contraseña de PC1

A partir de este momento podemos hacer una conexion SSH a PC1 sin utilizar password:
Ejemplo:
ssh root@192.168.0.2


NOTAS:
* En ambos equipos es necesario tener el servidor ssh
* Se deben respetar los usuarios con los que se generan las llaves públicas ya que con esos mismos usuarios deberás hacer la conexión SSH para que no te pida password.  si usas otros usuarios te lo pedirá.








miércoles, 12 de noviembre de 2014

SSH Inverso (saltando firewall con ssh)

Propósito:
Acceder a PC1 por ssh (está bajo firewall) desde PC2 (Con acceso público)




PASO 1 (en PC1)
ssh -v -NR 3333:127.0.0.1:22 villatux@189.224.13.X

- Nos pedirá el password de PC2

PASO 2 (En PC2)
ssh -v usuario@127.0.0.1 -p 3333

- Nos pedirá el password de PC1

Con esto podremos establecer conexión SSH desde PC2 A PC1 sin la necesidad de que PC1 tenga abierto los puertos de SSH en su firewall local

viernes, 10 de octubre de 2014

Generar contraseñas random

Cuando generas muchas cuentas de usuario, es muy engorroso ponerle una contraseña a cada uno y asegurarte de que sea segura.


Con este comando puedes generar contraseñas tan seguras como gustes de manera random,  el cual puedes utilizar en tus scripts de creación de usuarios:

 date +%s | md5sum | base64|  head -c 8 ; echo

Descripción:

date +%s  :  nos muestra la fecha en formato timestamp indicando los segundos
md5sum : encripta la salida anterior en md5
base64 :  encripta la salida anterior en base64
head -c 8: muestra solo los primeros 8 caracteres

martes, 7 de octubre de 2014

Error en Postfix "Message size exceeds fixed limit"

Cuando ocurre este error no pueden salir correos por medio de el servidor, y esto es debido a que el correo es muy pesado o el adjunto está muy grande y pesado.

Para solucionarlo cambiamos los valores de /etc/postfix/main.cf a lo siguiente :
mailbox_size_limit = 0
message_size_limit = 0
virtual_mailbox_limit = 0



si no tienes estos parámetros, puedes incluirlos en el archivo de configuración



viernes, 26 de septiembre de 2014

Vulnerabilidad en BASH CVE-2014-6271 "Shellshock"

Les dejo este howto para que actualicen el paquete "bash" ya que tiene la vulnerabilidad  BASH CVE-2014-6271 "Shellshock"   y con ella tu servidor puede ser comprometido y con el toda la información contenida.

Verifica si eres vulnerable
En una terminal ejecuta el siguiente comando:
env x='() { :;}; echo vulnerable' bash -c "esto es una prueba"

Si eres vulnerable te saldrá un mensaje:

vulnerable
esto es una prueba

Si no eres vulnerable te saldrá unicamente:

esto es una prueba

Para actualizar bash primero debes actualizar la lista de paquetes 
apt-get update

y luego actualizar bash
apt-get install --only-upgrade bash

Si no se actualizó bash, es que no tienes correctamente tus repositorios de paquetes.

edita el /etc/apt/sources.list  y agrega el siguiente repo:
deb http://ftp.debian.org/debian sid main contrib non-free

despues e esto vuelve a actualizar bash

jueves, 4 de septiembre de 2014

Vaciar la cola de correo en postfix

Es una de las cosas secillas pero no menos importantes a la hora de administrar un servidor de correo.

Mostrar los correos encolados:
mailq

Eliminar un correo en cola:

postsuper -d queue_id

Ver contenido de un correo:

postcat -q queue_id

Eliminar TODOS los correos en cola:

postsuper -d ALL

lunes, 18 de agosto de 2014

Sustituir palabras en VI /VIM

A veces estamos editanto archivos ya sea de configuración o programación, y resulta necesario cambiar muchas coincidencias en patrones de texto dentro de nuestros archivos.

para cambiar de una sola vez todos los patrones dentro de VI podemos usar este comendo dentro de la edición:
%s/palabra_a_sustituir/palabra_nueva/g

jueves, 24 de julio de 2014

El primer smartphone holográfico de mundo: Takee 1

A mi parecer es un nuevo mundo en el nicho de videojuegos y aplicaciones para automatización o ejecución de acciones a distancia.

Juzgalo por ti mismo:


domingo, 29 de junio de 2014

FFMPEG Convertidor en formatos de audio y vídeo

Convertir formatos de video con ffmpeg
Para hacer esto tienes que tener instalado ffmpeg, si no lo tienes, lo puedes instalar con el comando:

sudo apt-get install ffmpeg

Una de las opciones para hacer las conversiones es con la Interfaz Gráfica, que podemos instalar con el comando:

sudo apt-get install winff

Para poder trabajar con los formatos de video .ogg y .ogv instalamos mencoder con el comando:

sudo apt-get install mencoder

Para poder trabajar con CODECS PRIVATIVOS o con problemas de licencia instalar el paquete Ubuntu Restricted Extras (para mp3...) con:

sudo apt-get install ubuntu-restricted-extras

Si nos encontramos problemas para convertir a .avi es que nos falta el paquete libavcodec-unstripped-52. Lo instalamos ejecutando en una terminal el siguiente comando:

sudo apt-get install libavcodec-unstripped-52

La forma de convertir videos es la siguiente:

ffmpeg -i video_a_convertir.avi video_convertido.mpg

Las opciones:
-i → Lo comentado. La orden básica para iniciar la conversión de archivos.
-b → El bitrate del vídeo resultante tras la conversión. El bitrate es uno de los determinantes de la calidad de imagen del vídeo resultante. Esto también afectará al peso total del archivo tras la conversión; algo a tener en cuenta si deseamos grabar el vídeo en formato físico (dvd’s, cd’s, etc.) o no contamos con memoria suficiente en el dispositivo externo de memoria.
-vcodec → la codificación que utilizaremos para el vídeo resultante. Como véis, en este caso es mpeg4.
-s → las dimensiones del vídeo. En el caso de ejemplo, 640×360.
-acodec → códec elegido para el audio.
-ac → canales de audio establecidos. Si no los establecemos, por defecto se determina un canal.
-ab → el bitrate del audio.
Obviamente, el proceso de conversión consumirá más o menos tiempo en función de la portencia de vuestro equipo, de las variables de ejecución de ffmpeg y del archivo a convertir.

EJEMPLOS:


De .mov -> .avi


ffmpeg -i video.mov -sameq -vcodec msmpeg4v2 -acodec pcm_u8 video.avi

De .avi -> .mp4

ffmpeg -i video.avi -b 750000 -vcodec mpeg4 -s 640×360 -acodec libfaac -ac 2 -ab 96000 video.mp4

De .flv -> .avi

ffmpeg -i video1.flv video2.avi

Se puede controlar los ratios de compresión, resolución... (peso y calidad), por ejemplo:

ffmpeg -i video.wmv -ab 56 -ar 22050 -r 15 -s 320×240 video.flv

Formatos de audio
ffmpeg -i audio.wma -f mp3 -ab 192 audio.mp3

ffmpeg -i audio.mp3 -acodec amr_nb -ar 8000 -ac 1 -ab 32 audio.amr

ffmpeg -i audio.wav -acodec mp3 -ab 32 -ar 44100 audio.mp3

ffmpeg -i video.mpg -f mp3 audio.mp3

Fromatos de video
ffmpeg -i video.avi -acodec mp3 -ar 11025 video.flv

ffmpeg -i video.avi -target pal-vcd video.mpg

ffmpeg -i video.mpg -vcodec flv -y video.flv

ffmpeg -i video.flv video.mpeg

ffmpeg -i video.flv video.avi

jueves, 19 de junio de 2014

Consultar IP pública desde terminal

Puedes consultar la ip publica desde tu terminal  con un sólo comando, o vía web si lo deseas en el mismo sitio.

El sitio en el que consultas es: ifconfig.me

TERMINAL:
 curl ifconfig.me

WEB
http://ifconfig.me 

en la web podrás ver algo como esto:









































miércoles, 18 de junio de 2014

Encriptar archivos con GPG

Si quieres encriptar tus archivos para que nadie tenga acceso a ellos, más que la persona que tenga la contraseña, lo puedes hacer con GPG (GNU Privacy Guard)

GPG maneja los tipos de cifrado: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224

ENCRIPTAR:

Opción 1
gpg -c miarchivo.tar.gz

esto nos pedirá una contraseña que será asignada al binario encriptado y generará un archivo binario .gpg
NOTA: si no recuerdas tu contraseña jamás vas a poder abrir tu archivo de nuevo

Opción 2
Si prefieres que se encripte en modo texto y no en binario ejecuta:
gpg -ca miarchivo.tar.gz


El comando anterior generará un archivo sac que se puede abrir con cualquier editor de texto plano, aunque no será legible su información.

Opción 3
Si quieres que tu archivo encriptado tenga otro nombre:
gpg -o otronombre.tar.gz.gpg -c miarchivo.tar.gz

Esto lo puedes hacer para archivos individuales, pero si lo que necesitas es proteger directorios completos, te recomiendo comprimirlos primero y luego encriptarlos como en los ejemplos anteriores.


DESENCRIPTAR:

gpg -d miarchivo.tar.gz.gpg

Nos pedirá la contraseña para desencriptar el archivo.

Si deseas más información para los usos y posibilidades de GPG puedes ejecutar :
gpg --help


viernes, 23 de mayo de 2014

Analisis forense a whatsapp (cracking msgstore.db.crypt5)

 Este tutorial es para los que tienen respaldos de conversaciones con la extensión  crypt5  de Whatsapp. Si tienes el crypt normal puedes ver el post anterior:
http://villatux.blogspot.mx/2013/04/analisis-forence-whatsapp-cracking.html


Este nuevo tipo de encripción  utiliza el correo de google con el que está registrado el telefono + una llave para formar la llave de encripción:

echo -n micorreo@gmail.com | md5sum
f114f9011ed7050730b29d78ba7f2883

El MD5 resultante tendrá un valor de 32 dígitos hexadecimales  y tendremos que convertirlo a un valor de 48 digitos agregando los primeros 16 digitos al final del hash resultante ,  nos quedaría algo así la llave para des encriptar:

f114f9011ed7050730b29d78ba7f2883f114f9011ed70507


Ahora necesitamos hacer una operación XOR en el hash obtenido de 48 digitos,  el resultado nos dará la llave para desencriptar. Para esto es necesario un valor inicializador :

1e39f369e90db33aa73b442bbbb6b0b9

Ya teniendo estos valores requeridos , usamos openssl para desencriptar el archivo directamente:

openssl enc -aes-192-cbc -d -nosalt -in msgstore.db.crypt5 -out msgstore.db -K [key] -iv [iv]

Para hacer el proceso más sencillo Mohamed Ibrahim escribió el siguiente script que hace todo el proceso. Para esto es necesario pasarle como parámetro el correo electronico con el que está registrado el teléfono, el nombre de el archivo encriptado  y el nombre de el archivo de salida como el siguiente comando:

./script.sh micorreo@gmail.com msgstore.db.crypt5 > msgstore.db


 SCRIPT:
#!/bin/bash
 
function xor24 ()
{
  x24=$1
  y24=$2
  z24=""
   
  for ((i=0;i<48;i=i+2))
  do
    x=${x24:$i:2}
    y=${y24:$i:2}
    z=`printf "%02x" $((16#$x^16#$y))`   
    z24="${z24}${z}"
  done
  echo $z24
}
 
 
if [ "$#" -ne 2 ] ; then
  echo "Usage: $0 (primary-android-email-account) (whatsapp-inputfile) > outputfile"
  exit 1
fi
 
key=8d4b155cc9ff81e5cbf6fa7819366a3ec621a656416cd793   
iv=1e39f369e90db33aa73b442bbbb6b0b9
emailacct="$1"
infile="$2"
 
md5_16=`echo -n $emailacct | md5sum | cut -c -32`
md5_24=`echo -n $md5_16 ; echo $md5_16 | cut -c -16`
aeskey=`xor24 $key $md5_24`
 
#openssl enc -aes-192-cbc -d -nosalt -in $infile -K $aeskey  -iv $iv
openssl enc -aes-192-cbc -d -nosalt -nopad -bufsize 16384 -in $infile -K $aeskey  -iv $iv

jueves, 22 de mayo de 2014

Bloquear dominios con POSTFIX (spam)

Al menos una ves en la vida, si no es que muy seguido, hay spamers que lanzan sus ataques desde nuevos "dominios. Lo cual hace muy complicado la administración deL MTA
Si tu sistema de bloqueo anti-spam aún no cubre el dominio de las cuentas desde las cuales te están enviando spam tienes estas opciones:

Opcion 1 :  bloquear correo por correo, para eliminar posibles ataques desde esa cuenta de correo   en /etc/postfix/access (lo explicaré en otro post)

Opcion 2 : bloquear el dominio completo (tema del post)

En la variable de configuración smtpd_recipient_restrictions que tiene tu /etc/postfix/main.cf  (si no lo tiene lo puedes agregar)

En esta parte puedes hacer:

Una lista  de direcciones (hash) de correo a bloquear por ejemplo: comochingo@spam.com, ventas@spam.com, premios@spam.com  y así sucesivamente escribiento cada direción exacta para bloquear

Una expresión regular (regexp) para bloquear todo lo que sea @spam.com

Con la finalidad de que no se vea "sucio" tu archivo de configuración main.cf recomiendo que agregues tu regexp de la forma:

regexp:/etc/postfix/dominios_bloqueados

quedando así:

smtpd_recipient_restrictions =
permit_mynetworks
reject_unauth_destination
regexp:/etc/postfix/dominios_bloqueados
permit_sasl_authenticated
reject_non_fqdn_hostname
reject_non_fqdn_sender
reject_invalid_hostname
reject_unknown_sender_domain
reject_unknown_recipient_domain
reject_rbl_client blackholes.mail-abuse.org
reject_rbl_client list.dsbl.org
reject_rbl_client sbl.spamhaus.org
reject_rbl_client cbl.abuseat.org
reject_rbl_client dul.dnsbl.sorbs.net

Una vez hecho esto creas la lista de tus dominios que quieres bloquear en : regexp:/etc/postfix/dominios_bloqueados de la siguiente manera:

/@spam\.com$/ 521
/@otrodominio\.com$/ 521
/@otrootro\.com$/ 521

NOTA: los códigos de el MTA los puedes consultar AQUI

Si no queremos bloquear el dominio completo, cambiamos "regexp:"  por "hash" y el archivo de la siguiente forma:

comochingo@spam.com 521
ventas@spam.com 521
premios@spam.com 521

Ya terminado las configuraciones  creamos un archivo entendible para el MTA a partir de nuestra lista con el comando

postmap /etc/postfix/dominios_bloqueados

después de esto recargamos nuestro POSTFIX  para que funcione con la nueva configuración:

/etc/init.d/postfix reload

Esto te ayudará bastante en la administración de tu servidor de correo.

miércoles, 21 de mayo de 2014

Mostrar conversaciones de whatsapp en HTML

Anteriormente les comentaba como desencriptar los respaldos automáticos de Whatsapp : http://villatux.blogspot.mx/2013/04/analisis-forence-whatsapp-cracking.html


Ahora les pongo a disposición este script para mostrar en tu webserver las converzaciones de Whatsapp (Previamente desencriptadas) y se vean como en la siguiente imagen:



Script:
s

PD. Disculpen que les ponga el código en imagen, pero blogger no me permitió poner parte de el en este post.

martes, 20 de mayo de 2014

Compartir red / internet a partir de Cable de red en Ubuntu


LAN a Wifi




Anteriormente les comentaba como compartir red/internet  de  Wifi -> LAN  en el post: http://villatux.blogspot.mx/2014/02/compartir-red-internet-partir-de-wifi.html


Ahora les comento la forma inversa de hacer esto,  o sea de LAN -> Wifi


esto se hace buscando las opciones de red:


Nos saldrá la siguiente pantalla, y habilitamos la red inalambrica:
  


Damos clic en "Usar como hotspot"  :


Confirmamos la activación:


Y finalmente nos arrojará el nombre de la red (SSID)  y contraseña para conectarte rapidamente:



NOTA:   Es opcional hacer una configuración para cambiar el modo de cifrado, SSID y otros parametros personalizados.


miércoles, 30 de abril de 2014

Solución a GPG error "NO_PUBKEY"

Esto sucede por que la cláve publica para un repositorio ha cambiado ó no existe, y por tal motivo no se pueden instalar paquetes o simplemente actualizar los existentes.

W: GPG error: http://debian.uchicago.edu etch Release: The following signatures couldn’t be
 verified because the public key is not available: NO_PUBKEY 7D570D06M42584E2

PROBLEMA:
Cuando queremos actualizar la lista de paquetes nos aparece esto:
$sudo apt-get update
Get:1 http://debian.linux.org.tw lenny Release.gpg [394B]
Get:2 http://debian.linux.org.tw lenny Release [73.6kB]
Get:3 http://debian.linux.org.tw lenny/main Packages [5310kB]
Fetched 5384kB in 1m13s (73.5kB/s)
Reading package lists... Done
W: There is no public key available for the following key IDs:
7D570D06M42584E2
W: You may want to run apt-get update to correct these problems


SOLUCIÓN:
Ahi nos muestra el error, el cual podemos solucionar con los siguientes comandos para agregar la llave publica para los paquetes que están teniendo problemas:
$ gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 7D570D06M42584E2

# You should see the following output while executing the above command.
gpg: Total number processed: 1
gpg:               imported: 1

$ gpg --armor --export 7D570D06M42584E2 | apt-key add -
OK

$sudo apt-get update

Con esto ya no debe salir errores al actualizar o instalar paquetes:

LayoutIt! (crea plantillas web con bootstrap online)

Un excelente sitio, para crear plantillas web  con, html, css y javascript  usando una interfaz muy amigable con la cual puedes arrastrar al diseño y descargar tu código generado.

Enlace: http://www.layoutit.com/




viernes, 25 de abril de 2014

Certificados SSL apropiados para Postfix y Dovecot (Mail Server)

Una de las mejores formas de encriptar los passwords y tu información que circula entre el cliente de correo y el mail server, es estableciendo los certificados ssl apropiados.

Hay varias formas de manejar tus preferencias con los certificados,  una es crear tu certificado, dejarlo como está, usar una autoridad certificadora gratuita ó comprar un certificado

Dejarlo como está:
Los usuarios recibirán advertencias informándoles que el certificado es invalido y no concuerda con el nombre del servidor

* Ventajas:  flojo, no cuesta nada
* Desventajas: Algunos clientes de correo rechazan el certificado por que no concuerda el nombre del servidor
* Conclusión: Sólo has esto si no te importa que suceda con el mail server

Crear un certificado auto firmado :
Los usuarios les dará a tus usuarios un certificado con el nombre apropiado para tu mail server

* Ventajas: "un poco de trabajo", no cuesta
* Desventaja: Estarás entrenando a tus usuarios a que acepten cualquier certificado
* Conclusión: Has esto si tienes un pequeño grupo de usuarios a los cuales les puedas informar acerca el certificado (o configurar personalmente los clientes de correo)

Crear certificados SSL puede ser tan sencillo como aplicar un comando:

Dovecot

Este comando crea el certificado SSL para dovecot (10 años   365X10=3650):

openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem -keyout /etc/ssl/private/dovecot.pem

No olvides establecer los permisos adecuados para mantener segura de mirones a tu llave privada:

chmod o= /etc/ssl/private/dovecot.pem

Tendrás que reiniciar Dovecot para que el servicio lea el nuevo certificado

/etc/init.d/dovecot restart

Postfix

Para crear un certificado en postfix:

openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem -keyout /etc/ssl/private/postfix.pem

No olvides establecer los permisos adecuados para mantener segura de mirones a tu llave privada:

chmod o= /etc/ssl/private/postfix.pem

Después de esto necesitas indicarle a Postfix en donde encontrar tu certificado y llave privada ya que por default busca un certificado llamado "ssl-certsnakeoil" :

postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem

Usar una autoridad certificadora gratuita :

* Ventajas: Un poco de trabajo, no cuesta
* Desventajas: estos certificados no están incluidos en todos los clientes de correo
* Conclusión: Si no quieres gastar dinero esta es tu mejor elección

Hay gran variedad de servicios gratuitos como este,  uno de ellos es http://www.startssl.com/

Comprar un certificado SSL

* Ventajas:  el certificado será aceptado automáticamente por todos los clientes de correo
* Desventajas: Inviertes bastante dinero en la mafia de los certificados web
* Conclusión: Has esto si te quieres ver profesional en tu servidor de correo  y no quieres tener problemas con usuarios


Depende de tu política de administración del mail server, elegir cual de las anteriores estrategias es la idónea para usar.

sábado, 19 de abril de 2014

Reproductor de música en terminal

Este script que les comparto el dia de hoy, lo hice para acoplarlo en un sistema de domotica (luces, accesos, audio, riego, etc)  ustedes lo pueden usar en terminal o acoplarlo a su sistema web que deseen para tener control sobre el.

Este script hace una lista de musica en modo RANDOM de un directorio donde tengas tus archivos .mp3 y a partir de esa lista empieza la reproducción desde la terminal, las opciones para este script son:
./musica.sh start
./musica.sh stop
./musica.sh volume+
./musica.sh volume-

#!/bin/bash
#  Directorio de musica
musica="/home/villatux/Musica/despertador/"
ls -lah $musica | awk '{print $9" "$10" "$11" "$12" "$13" "$14" "$15}' | sort -R | grep -i mp3 > lista.txt
case "$1" in
start)
 amixer set Master 60
 while read linea
 do
         echo "Reproduciendo: "$linea
         mpg123 -q "$musica$linea"
 done < lista.txt
 ;;
stop)
 killall -9 musica.sh & mpg123
 ;;
volume+)
 amixer set Master 10%+
 ;;
volume-)
 amixer set Master 10%-
 ;;
*)
 echo -e ""
 echo "Uso: $0 start | stop | volume+ | volume-"
 exit 1
esac 

jueves, 3 de abril de 2014

Identificar posible SPAM con postfix y BASH (script)

Este script lo que hace es mostrar cuantas veces se repite un correo como remitente  tanto en los correos enviados, como en las colas de correo (que están por enviarse)

Con esto podemos identificar algún spammer y actuar ante ello.

Les dejo el script:

#!/bin/bash
tail -8000 /var/log/postfix-in.log |grep from= | grep [a-z]@[a-z] | awk '{print $7}' |grep -v reject > correos.txt

fentrada="correos.txt"
cat $fentrada | while read line; do
  veces=`cat $fentrada | grep $line | wc -w`
         echo -e "   $veces\t$line" >> uno.txt
  done

echo -e ""
echo -e "---------------------------------------------"
echo -e "CORREOS ENVIADOS"
echo -e ""
cat uno.txt | sort | uniq
echo -e "---------------------------------------------"
echo -e "CORREOS EN COLA :"
echo -e ""
postqueue -p | grep [a-z]@[a-z] |awk '{print $7}' > cola.txt

entrada="cola.txt"
cat $entrada | while read linea; do
 veces=$(cat $entrada | grep -o "$linea" | wc -w)
 echo -e  "   $veces\t$linea" >> dos.txt
done
cat dos.txt | sort | uniq


rm correos.txt
rm uno.txt
rm cola.txt
rm dos.txt

El resultado de la ejecución de este script se ve de esta manera:


viernes, 21 de marzo de 2014

Ejecutar comandos de PostgreSQL en BASH

Les paso este script que hice para ejecutarlo cuantas veces sea necesario , ya que estoy probando una aplicación externa que usa la API de Moodle y pues en las pruebas necesito limpiar la base de datos de moodle cada vez que quiero hacer una prueba nueva.

Descripción:
1 - comprueba si el usuario es postgres
      si NO es  te dice que necesitas serlo
2.- borra la base de datos que tengo (llena de datos)
3.- crea la base de datos nueva
4.- importa el respaldo de mi base de datos limpia de Moodle

Script:
#!/bin/bash
# Ejecutar como usuario postgres

ARCHIVO="backup_21-03-2014.sql"
BASEDEDATOS="moodledb"

USUARIO=$(whoami)
if [ $USUARIO == "postgres" ] ;then
    echo -e "BORRANDO Y CREANDO BASE DE DATOS NUEVA"
    echo -e ""
    psql << EOF
    drop database $BASEDEDATOS;
    create database $BASEDEDATOS;
EOF
    sleep 3
    echo -e "IMPORTANDO RESPALDO $ARCHIVO"
    echo -e ""
    sleep 2
    psql moodledb < $ARCHIVO
else
    echo -e "-----------------------------------------------------------------"
    echo -e "Necesitas ser $USUARIO para ejecutar este script"
    echo -e "-----------------------------------------------------------------"
    echo -e ""
fi

martes, 18 de marzo de 2014

Mover archivos dispersos en varios directorios hacia un directorio en especifico

Pues ya me ha pasado varias veces que necesito mover archivos, como es en este caso, que bajé cientos de fuentes true type para mi distribución linux y al descomprimirlas están cáda una de ellas dentro de un directrorio con el nombre de la fuente y mescladas con imagenes y archivos de texto

Propuesta:
sacar todos los archivos de fuentes .ttf  y colocarlos en un solo directorio listo para instalar las fuentes

Solución:
find . -type f -iname '*.ttf' -exec mv {} ./000_TTF/ \;

O también puedes ponerlos directamente ya instalados:

find . -type f -iname '*.ttf' -exec mv {} /usr/share/fonts/truetype/ \;


viernes, 14 de marzo de 2014

De que compañía es X telefono ? (Busca la empresa telefonica)




Si quieres buscar la empresa de X numero telefónico, ya sea celular o fijo puedes hacerlo directamente en la pagina de COFETEL:

http://www.cft.gob.mx:8080/portal/marcacion-y-claves-de-ld/







jueves, 13 de marzo de 2014

Prip - Servicio Radio Nextel Con Android

Para los que quieren converzar con sus amigos que tienen nextel por solo 2 dolares mensuales aprox.

Descripción:

Prip es compatible con los dispositivos:
- Motorola Atrix HD
Prip – El nuevo servicio de Radio disponible para clientes de Nextel. Únete a los millones de personas que hoy utilizan Radio para hablar instantáneamente con su red de contactos Nextel. Prip es un servicio que funciona sobre la red Nextel y también sobre cualquier red Wi-Fi en el mundo. Prip es inmediato, eficiente, y se puede utilizar en todos los países. Prip te permite estar más cerca de tu mundo.

Prip se conecta con otros servicios de Radio Nextel y está disponible exclusivamente para usuarios Nextel. Para utilizar Prip, debes obtener un nombre de usuario y contraseña de Nextel. Para pedirlo, visita http://www.nextel.com.mx/prip.

miércoles, 12 de marzo de 2014

Web Scraping con curl, lynx, wget

Para quien no sepa que es web scraping : http://es.wikipedia.org/wiki/Web_scraping

Para esto hay varias formas y lenguajes de como hacerlo,  en este post les comentaré sobre 3 soluciones para hacerlo en cualquier Linux desde terminal:

LYNX
Es un navegador web para la terminal sin soporte para javascript (AJAX)

lynx -dump "http://www.ejemplo.com/"

Si lo que quieres es obtener el codigo fuente completo de la pagina web, puedes usar la opción -source :

lynx -source "http://www.ejemplo.com/"

También puedes usar pipe "|" para usar programas como grep,sed,awk para obtener solo cierto contenido de la consulta web :

lynx -source "http://www.ejemplo.com/" | grep -o 'tu expresión regular' | sed 's/etiquetas html aqui//g'

También puedes redirigir la salida a un archivo (Recomendado para webservers con ASP) :

lynx "http://www.ejemplo.com/info?cld=312&aac=ugc" -dump > miarchivo.txt


CURL
Es una herramienta para transferir información de un servidor a otro (Está diseñado para trabajar sin intervención del usuario)

Obtienes el código completo de la pagina con:
curl "http://www.ejemplo.com/" 

Puedes agregar la opción -s para hacerlo en modo silencioso:
curl -s "http://www.ejemplo.com/"

También puedes redirigir la saida a un archivo:

curl -s "http://www.ejemplo.com/" > miarchivo.txt

Limitas la salida con expresiones regulares y sed,awk y grep :

curl -s "http://www.ejemplo.com/" | grep -o 'tu expresión regular'


WGET
Es una herramienta para descargar archivos en red/Internet el cual soporta http, https, ftp:

wget http://www.ejemplo.com

Puedes agregar la opción -q  para ejectuar wget en modo silencioso

wget -q http://www.ejemplo.com

También puees dirigir la salida a un archivo:

wget -q http://www.ejemplo.com > miarchivo.txt



Con estas tres herramientas se pueden hacer muchas cosas, ya depende de ti en que y como lo quieras usar.


martes, 11 de marzo de 2014

Configurar virtual host en apache para correr scripts cgi con perl

Primero tenermos que tener instalado el modulo de perl para apache:

#apt-get install libapache2-mod-perl2 


y tener nuestro virtual host como esto:

  ServerAdmin webmaster@localhost
  ServerAlias miserver.local
  ServerName miserver
  ServerAdmin villatux@midominio.com.mx
  DocumentRoot /var/www/mivirtualhost/docs
  ErrorLog /var/www/mivirtualhost/logs/error.log
  CustomLog /var/www/mivirtualhost/logs/access.log combined

  
     Options FollowSymLinks
     AllowOverride None
   

   
     Options Indexes FollowSymLinks MultiViews
     AllowOverride None
     Order allow,deny
     allow from all
   

  Alias /app/ /var/www/mivirtualhost/docs/mi_app_perl/
  
  
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    AddHandler cgi-script .pl
    Order allow,deny
    allow from all
  



Es importante remarcar que el uso de la directiva Alias te permitirá acceder de manera sencilla a tu aplicación en PERL como en este ejemplo:

http://mipagina.com.mx/app/index.pl

O también podemos acceder sin usar el alias de esta manera:

http://mipagina.com.mx/miapp_perl/index.pl

miércoles, 5 de marzo de 2014

Generador de diccionarios (Fuerza bruta)


Les comparto este generador de passwords de fuerza bruta que hice por si se ofrece :D . Opera de la siguiente forma:

1) asignas los caracteres con los cuales quieres generar las combinaciones
2) ejecutas el script de la siguiente forma:

./generador.sh passwords.txt

Y con esto se generará el archivo passwords.txt con todas las combinaciones que establecimos dentro del script.

NOTA:
* Entre más caracteres para combinar puede tardar semanas en generar tu diccionario ya que hace todas las combinaciones entre ellos
* Con el crackeo sucede de la misma forma, Puede tardar años ...
* Disculpen por la identación, no se refleja de forma correcta

#!/bin/bash

caracteres="a b c d e f g h i j k l m n ñ o p q r s t u v x y z 1 2 3 4 5 6 7 8 9 0" 

ndigitos=$(echo $caracteres | wc -w)
echo $ndigitos
if [ -z ${1} ]
then
 echo "     Uso: Falta el archivo de salida"
 echo " Ejemplo: $0 passwords.txt"
else
 cont0=0
 cont1=0
 cont2=0
 cont3=0
 cont4=0
 cont5=0
 cont6=0
 cont7=0
 cont8=0
  time for a in $caracteres
           do
               let cont0=cont0+1
        for b in $caracteres
        do
            let cont1=cont1+1
          for c in $caracteres
          do
              let cont2=cont2+1
            for d in $caracteres
            do
                let cont3=cont3+1
             for e in $caracteres
             do
                 let cont4=cont4+1
               for f in $caracteres
               do
                   let cont5=cont5+1
                 for g in $caracteres
                 do
                     let cont6=cont6+1
                   for h in $caracteres
                   do
                       if [ $cont2 -lt $ndigitos ]; then a="";  fi
                       if [ $cont3 -lt $ndigitos ]; then b="";  fi
                       if [ $cont4 -lt $ndigitos ]; then c="";  fi
                       if [ $cont5 -lt $ndigitos ]; then d="";  fi
                       if [ $cont6 -lt $ndigitos ]; then e="";  fi
                       if [ $cont7 -lt $ndigitos ]; then f="";  fi
                       if [ $cont8 -lt $ndigitos ]; then g="";  fi
                       let cont7=cont7+1
                       `echo "$a$b$c$d$e$f$g$h" >> ${1}`
                        echo "$a$b$c$d$e$f$g$h"
                  done
                 done
               done
             done
            done
          done
        done
      done
fi

martes, 4 de marzo de 2014

Combinaciones sin repetición (script en bash)


Son los grupos que podemos hacer de entre m elementos tomados de n en n diferenciándose, un grupo de otro, en tener algún elemento distinto.

Si disponemos de los elementos: {a,b,c,d} y los tomamos de 2 en dos, los grupos que podemos formar de modo que cada grupo se diferencie de los demás en tener un elemento distinto son:

ab,ac,ad,bc,bd,cd  =  6 combinaciones

Lo mismo hace este script que hice para calcular las combinaciones que se realizarán para generar un diccionario de fuerza bruta para crackeo de accesos:

mi prueba inicial fue de letras minúsculas y números que dan un total de 36 dígitos , haciendo la combinación de 1 en 1  y la ejecución del script fué de la siguiente forma:

./script.sh 36 1

se envía el parámetro 36  y el parametro 1  indicando el total de numeros y de cuantos en cuantos va a ser las combinaciones .  de esta ejecución el resultado fue de 9003737871877668864 Combinaciones posibles para intentos de loggeo (Es por eso que entre más segura sea tu contraseña más difícil será el hackeo de la misma  :D )

Este script realiza algunas operaciones con factoriales en bash para calcular las combinaciones:

#!/bin/bash
# By, Oswaldo villa @villatux

# USO  ./script.sh 4 2
# Descripcion:  En este ejemplo queremos sacar cuantas combinaciones tenemos
# con 4 caracteres combinados de dos en dos

factorial=$1
res=1
while [ $factorial -gt 1 ]
 do
 let res=$res*$factorial
 let factorial-=1
done

factorial2=$2
res2=1
while [ $factorial2 -gt 1 ]
 do
 let res2=$res2*$factorial2
 let factorial2-=1
done
echo $1" digitos de "$2 "en "$2

let combinaciones=($res/$res2)/$res2
echo "Resultado : " $combinaciones "Combinaciones"

jueves, 27 de febrero de 2014

(Solucion) Al problema : "/bin/rm: Argument list too long"

EL PROBLEMA
Me ha pasado en ocaciones cuando quiero borrar miles de archivos dentro de un directorio (rm /mi/directorio/*"  obtengo el error:

/bin/rm: Argument list too long

Esto nos indica que la cantidad de archivos es muy grande y no puede gestionarla (wtf?)

LA CAUSA
La causa es una limitación del buffer de la función exec() la cual es de 128K, y esta funcion está utilizada en muchos otros programas como , ls, rm, du ...

El limite afecta la funcion execve() del kernel, la cual es usada por  las funciones exec() (execl, execlp, execle,etc). La funcion trabaja creando un buffer de 128k al final del espacio de memoria y copiando el comando y el entorno para el nuevo proceso en este espacio. En ese momento el kernel carga el nuevo programa en memoria, configura sus punteros argv y endv, y salta al punto de entrada del programa. El mensaje de error "argument list too long" es causado por el codigo de error !E2BIG, siendo devuelto por la funcion execve(), cuando es incapaz de introducir el argumento y entorno suministrados dentro del buffer de 128k.

LA SOLUCIÓN 
La técnica que soluciona esto es seleccionar archivo por archivo . pensarías que esto no es viable ya que tendrías que borrar miles de archivos a mano y tardarías años en realizar este proceso

Para borrar de uno en uno sin hacerlo manualmente podemos hacer un bucle for (ciclo) que seleccione a cada archivo y le aplique el comando rm

for i in ls /mi/directorio/*; do rm -v $i -f; done

También se puede haciendo una búsqueda de todos los archivos  y aplicar a cada uno que vaya encontrando el comando rm

find . -name '*' | xargs rm


y listo, con esto podemos  borrar de manera masiva miles de archivos sin problemas :D


miércoles, 26 de febrero de 2014

Comando sed multiusos (mostrar, sustituir)

Les comparto esta información acerca de el uso del comando "sed", que puede servir tanto para mostrar información de archivos , como para sustituir cadenas de texto en los mismos.


MOSTRANDO SALIDA ESTANDAR

sed -e 'd' archivo.txt
Este comando no edita el archivo, solo muestra el contenido del mismo eliminando la primer linea de la salida estandard

sed -e '1,10d' /etc/services | more
Es parecido al anterior solo que ahora es con rangos, y elimina de la salida estandard de la linea 1 a la 10

sed -e '/^#/d' /etc/services | more
Elimina de la salida todas las lineas que empiezan con el caracter '#'

Expresiones regulares:
^ Apunta al comienzo de la línea
$ Apunta al final de la línea
. Apunta a un único carácter
* Apunta a cero o más ocurrencias del carácter previo
[ ] Apunta a todos los caracteres entre los corchetes


Ejemplos con expresiones regulares:

/./ Apuntará a cualquier línea que contenga al menos un carácter
/../ Apuntará a cualquier línea que contenga al menos dos caracteres
/^#/ Apuntará a cualquier línea que comience con un '#'
/^$/ Apuntará a cualquier línea en blanco
/}$/ Apuntará a toda línea que termine con un '}' (sin espacios)
/} *$/ Apuntará a toda línea que termine con un '}' con cero o más espacios
/[abc]/ Apuntará a toda línea que contenga una 'a', 'b', o 'c' minúscula
/^[abc]/ Apuntará a cualquier línea que empiece con 'a', 'b', o 'c'



sed -e '/expreg/d' /ruta/a/mi/archivo/de/pruebas | more
Elimina de la salida que coincidan con la expresion

sed -n -e '/PRINCIPIO/,/FIN/p' /mi/archivo/de/pruebas | more
Muestra un bloque de texto que comienza con la linea que contiene "PINCIPIO"  y terminará con la linea que contiene "FIN"


SUSTITUCIÓN EN ARCHIVOS

sed -e 's/foo/bar/' miarchivo.txt
Sustituye dentro de miarchivo.txt  la primer coincidencia de foo por la cadena bar

sed -e 's/foo/bar/g' miarchivo.txt
La opción "g" indica que la sustitución será de manera global en el archivo

sed -e '1,10s/enchantment/entrapment/g' miarchivo2.txt
Sustituye la palabra enchantment por entrapment pero solo hasta la linea 10 del archivo

sed -e '/^$/,/^FIN/s/colinas/montañas/g' miarchivo3.txt
Sustituye 'colinas' por 'montañas', pero únicamente en los bloques de texto que comiencen con una línea en blanco, y que terminen con una línea que comience con los tres caracteres 'FIN'

sed -e 's:/usr/local:/usr:g' milista.txt
cambia /usr/local por /usr:

sed -e 's/<[^>]*>//g' miarchivo.html
Elimina etiquetas html. El '[^>]' especifica un "carácter que no sea '>'" y el '*' después del mismo completa la expresión para significar "cero o más caracteres que no sean '>'"

Clases de caracteres

Clase de carácter Descripción
[:alnum:] Alfanumérico [a-z A-Z 0-9]
[:alpha:] Alfabético [a-z A-Z]
[:blank:] Espacios o tabuladores
[:cntrl:] Cualquier carácter de control
[:digit:] Dígitos numéricos [0-9]
[:graph:] Cualquier carácter visible (no espacios en blanco)
[:lower:] Minúsculas [a-z]
[:print:] Caracteres que no sean de control
[:punct:] Caracteres de puntuación
[:space:] Espacio en blanco
[:upper:] Mayúsculas [A-Z]
[:xdigit:] Dígitos hexadecimales [0-9 a-f A-F]


sed -e 's/.*/Rafa dijo: &/' msjorig.txt
El siguiente ejemplo pondrá el prefijo "Rafa dijo: " a cada frase/linea


Y pues siguiendo con este howto les dejo este script que acabo de ocupar para sustituir una dirección web de todos los archivos html de un directorio y hace un backup de los archivos modificados por si necesitas restaurar.

#!/bin/bash
echo "";echo ""; echo ""
echo "Sustituyendo  http://beta.fd.uach.mx"
echo "en todos los directorios y subdirectorios de: $1"

find $1 -iname *.html > tmp
while read linea
do 
 sed 's/http:\/\/beta.fd.uach.mx//g' $linea > $linea.tmp
 cp $linea $linea.bak
 cat $linea.tmp > $linea
 rm $linea.tmp
done < tmp
rm tmp


El modo de uso de este script es:

./script.sh /directorio/de/mis/html




martes, 25 de febrero de 2014

Compartir red / internet a partir de wifi en Ubuntu

Hay situaciones en las que estamos limitados en cuanto a red inalambrica  en algunos dispositivos, y estas situaciones suceden casi  siempre cuando algun otro dispositivo si tiene acceso a red / internet  ya sea por wifi o 3G

Es en estos casos cuando pensamos "Si pudiera pasarle el internet de mi cel / otra laptop" . Pues es justo lo que les vengo a comentar en este post.

Caso de ejemplo:
* Tengo 3G en mi cel y quiero pasarle internet a otro dispositivo por cable de red

Procedimiento:
1.-  Compartir mi red 3G a traves de Wifi
2.- Conectar mi laptop a la red compartida de mi celular
3.- Compartir la red que esta recibiendo mi laptop hacia otro dispositivo

Procedimiento del paso 3 en imágenes:


Habilitar el botón :"Todos los usuarios deben conectarse a esta red"

Establecer el método de conexión: "Compartido con otros equipos"



y con esto tendremos nuestra red compartida.

miércoles, 19 de febrero de 2014

Configurar Locales

Este es un problema común en Debian que se presenta cuando instalas tu server y a cada que instalas un paquete, te salen los errores de la configuración de las "Locales"

Instalar Locales
# apt-get install locales
Configurar Locales
en este paso eliges las locales de tu idioma, ejemplo:

es_MX
es_MX.UTF-8

con el siguiente comando:
# dpkg-reconfigure locales
y por ultimo ejecutamos:
# dpkg-reconfigure console-data
y con esto queda configurado completamente tu sistema y puede detectar acentos y demás caracteres propios de tu idioma

lunes, 17 de febrero de 2014

Ejecutar comandos BASH como otro usuario

para ejecutar comandos como si fueras otro usuario puedes hacerlo con el comando su que sirve para cambiarse de usuario en una sesion shell

las opciones de el comando son:

root@vuach:/home/villatux/pruebas#su --help
Modo de uso: su [opciones] [USUARIO]

Opciones:
  -c, --command ORDEN           pasa la ORDEN a la consola invocada
  -h, --help                    muestra este mensaje de ayuda y termina
  -, -l, --login                hace que la consola sea una de acceso
  -m, -p,
  --preserve-environment        no reinicia las variables de entorno, y mantiene la misma consola
  -s, --shell CONSOLA           usa CONSOLA en lugar de la predeterminada en passwd


Ahora para ejecutar el comando como otro usuario lo podemos hacer de la siguiente forma:

su -c "echo blablah > archivo1" -s /bin/bash villatux

y al mostrarel directorio vemos que los permisos y grupo son de el usuario que elegimos para ejecutar "echo":

root@vuach:/home/villatux/pruebas# ls -lah
total 12K
drwxr-xr-x  2 villatux villatux 4,0K feb 17 11:44 .
drwxr-xr-x 52 villatux villatux 4,0K feb 17 11:44 ..
-rw-rw-r--  1 villatux villatux    8 feb 17 11:44 archivo1

Ejecutando unicamente el comando "echo" sin invocar a ningun usuario : 

echo blablah > archivo2

y al listar el directorio podemos ver los permisos, propietario y grupo:

root@vuach:/home/villatux/pruebas# ls -lah
total 16K
drwxr-xr-x  2 villatux villatux 4,0K feb 17 11:44 .
drwxr-xr-x 52 villatux villatux 4,0K feb 17 11:44 ..
-rw-rw-r--  1 villatux villatux    8 feb 17 11:44 archivo1
-rw-r--r--  1 root     root        8 feb 17 11:44 archivo2

miércoles, 12 de febrero de 2014

Ocultar extensiones php/html con .htaccess

Si quieres ocultar las extensiones de tus archivos web, puedes utilizar el siguiente fragmento de codigo para tu .htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
Consulta web sin ocultar extensiones:
www.mipagina.com/contacto.php

Consulta ocultando extensiones :
www.mipagina.com/contacto

lunes, 10 de febrero de 2014

Crear USB Booteable con wifislax / Wifiway

Posiblemente funcionen otras distribuciones con este método, solo hay que leer la documentación de cada una para ello.

Les dejo este tutorial para crear una USB booteable con Wifislax / Wifiway :

1 Conectar la usb y desmontarla manualmente para luego volverla a montar (Cuando se monta automaticamente el sistema no permite correr scripts), En este caso mi memoris USB es /dev/sdb1  pueden comprobar cual es la suya con fdisk -l
umount /dev/sdb1
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb
2 Descargar wifislax
http://www.wifiway.org/

3 Montar el iso para acceder a los archivos
mkdir /mnt/iso
mount -o loop wifislax-4-7-2-final.iso /mnt/iso
4 copiar el contenido de el iso a la memoria USB
cd /mnt/iso
cp -R wifislax /mnt/usb/
cp -R boot /mnt//usb/
5 Ejecutar el script
cd /mnt/usb/boot
./bootinst.sh

Y aparecerá algo como esto:

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
                        Welcome to Wifislax boot installer                        
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

This installer will setup disk /dev/sdi1 to boot only Wifiway.

Warning! Master boot record (MBR) of /dev/sdi will be overwritten.
If you use /dev/sdi to boot any existing operating system, it will not work
anymore. Only Wifiway will boot from this device. Be careful!

Press any key to continue, or Ctrl+C to abort...



Ahora solo nos queda presionar cualquier tecla varias veces hasta que se reescriba el MBR de tu memoria para que pueda bootear con nuestro live usb

6 Por ultimo nos salimos del directorio de la usb para desmontar todo y borrar los directorios que creamos:
cd /mnt
umount /dev/sdb1
umount /mnt/iso
rm -rf iso
rm -rf usb
exit
Y listo, con esto tenemos nuestro live usb listo para bootear

viernes, 7 de febrero de 2014

Como agregar un nuevo usuario administrador (con privilegios de SUDO)

Agregar un nuevo usuario:

sudo adduser nuevousuario

Dar permisos de administrador al usuario agregado:

sudo adduser nuevousuario sudo

 Con estos comandos el usuario podrá ingresar con privilegios de administrador 

jueves, 6 de febrero de 2014

Habilitar CDR (Reportes de llamadas) con Asterisk y MySQL

Las nuevas versiones de asterisk y las distros que lo llevan no habilitan por default el registro de llamadas con mysql para las interfaces gráficas ya sea de su distro o de FreePBX.

Te das cuenta de esto ya que no puedes ver el registro de llamadas  ni reportes de las mismas.


Para habilitar el registro de llamadas con MySQL
Editar el archivo modules.conf   con tu editor de texto que prefieras, en este caso yo usé vim

vim /etc/asterisk/modules.conf

Localizar la linea:

noload => cdr_mysql.so

Sustituirla por:

load => cdr_mysql.so

miércoles, 5 de febrero de 2014

Ver videos bloqueados con "Like de facebook"

A quien no le ha pasado que ve alguna publicación de amigos en las redes sociales con títulos llamativos  y al darle click al video para verlo te das cuenta que está bloqueado para que le des like y despues de ello lo puedas ver.

Este tipo de videos en particular me repatea, pues no has visto el video y obviamente no sabes si te ha gustado, como para darle like


para evitar estos bloqueos podemos hacer lo siguiente:

1.- Abrir la pagina con el vídeo bloqueado
 ejemplo: http://hd.soyvideos.com/una-nina-le-da-una-moneda-a-un-musico-y-lo-que-sucede-despues-ha-hecho-historia/

2.- click secundadio -> ver el código fuente de la pagina


3.-  En el siguiente código buscamos el valos de data-videoid :


4- Copiamos ese valor del código fuente y nos vamos a youtube, reproducimos cualquier video  y en la barra de direcciones cambiamos la parte donde dice watch?v=cYJ-LRZWnog  lo cambiamos por el valor que copiamos del código fuente.  Algo asi:

watch?v=sP-RL2JrZGI

martes, 4 de febrero de 2014

¿Que DNS tiene mi ISP y ¿cual es la resolución inversa de mi ip?

No es muy común necesitarlos, de hecho no es normal, pero aún así hay veces que si es necesario.  Un amigo me pregunto por los dns de cablemás, por lo que empecé a investigar  desde un servidor de un cliente el cual su ISP es Cablemás:


El servidor de mi cliente tiene un dominio dinámico "dyndns" el cual usé de la siguiente forma para saber la ip publica:

villatux@vuach:~$ host ctrp.selfip.net
ctrp.selfip.net has address 187.253.82.1XX

ya sabiendo la ip publica podemos buscar los dns de el ISP y la resolución inversa de la ip de mi cliente:

villatux@vuach:~$ nslookup 187.253.82.1XX
Server:  127.0.1.1
Address: 127.0.1.1#53

Non-authoritative answer:
1XX.82.253.187.in-addr.arpa name = 187.253.82.1XX.cable.dyn.cableonline.com.mx.

Authoritative answers can be found from:
82.253.187.in-addr.arpa nameserver = cva1.cableonline.com.mx.
cva1.cableonline.com.mx internet address = 200.95.144.3


villatux@vuach:~$ dig cva1.cableonline.com.mx

; <<>> DiG 9.9.3-rpz2+rl.13214.22-P2-Ubuntu-1:9.9.3.dfsg.P2-4ubuntu1.1 <<>> cva1.cableonline.com.mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51437
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;cva1.cableonline.com.mx. IN A

;; ANSWER SECTION:
cva1.cableonline.com.mx. 37226 IN A 200.95.144.3

;; AUTHORITY SECTION:
cableonline.com.mx. 37226 IN NS cva2.cableonline.com.mx.
cableonline.com.mx. 37226 IN NS cva1.cableonline.com.mx.

;; ADDITIONAL SECTION:
cva2.cableonline.com.mx. 37226 IN A 200.95.144.4

;; Query time: 0 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Thu Jan 30 13:52:45 MST 2014
;; MSG SIZE  rcvd: 117


Y listo, tenemos los dns con sus respectivas ip de el ISP

cva1.cableonline.com.mx. 37226 IN A 200.95.144.3
cva2.cableonline.com.mx. 37226 IN A 200.95.144.4

jueves, 30 de enero de 2014

Permisos correctos solo a directorios ó archivos en web-servers

Es muy común para los Administradores de sistemas estar instalando CMS (Content Management System) en servidores web y por lo general, la practica no recomendable es establecer todos los permisos a directorios y archivos (777) para evitar algunos problemas con plugins, cache o archivos que se modifican frecuentemente.

Esta practica es un grave error de seguridad permitiendo a personas con el suficiente conocimiento para vulnerar tu CMS y con ello hacer defacement o infectar tu servidor para ser usado como envío de SPAM.

Los permisos recomendados para CMS son los siguientes:

755 para directorios, esto significa que:

El propietario puede: leer, escribir, ejecutar
El grupo puede: leer, ejecutar
Otros pueden: leer, ejecutar

644 para archivos, esto significa que:

El propietario puede: leer, escribir
El grupo puede: leer
Otros pueden: leer

Y para hacerlo de la manera convencional pueden aplicar el típico:

chmod -R 644 /var/www/mipagina/docs/*
O aplicar solo a directorios y archivos (RECOMENDADO)  de la siguiente forma:

Solo a directorios:
find . -type d -exec chmod -R 0755 {} \;

Solo a archivos:
find . -type f -exec chmod -R 0644 {} \;

puedes cambiar el punto (.) por la ruta donde se encuentre tu directorio web ejemplo: /var/www/mipagina/

miércoles, 29 de enero de 2014

Parametro Qualify en Asterisk (Monitorizar peers)


Todos los que manejamos Conmutadores digitales con software libre hemos configurado alguna vez el parámetro qualify en los archivos de configuración para iax, y sip. Pero ¿que función tiene este parámetro? ¿Que sucede en nuestro conmutador cuando lo activamos o lo desactivamos ?.

Archivos:

la configuración de este parámetro se encuentra en los archivos iax.conf y sip.conf que afecta a todas las extensiones si se encuentra en el contexto [general] ó en extensiones independientes en estos dos protocolos de comunicación.

Tipos de formato:

* qualify=xxx
* qualify=yes
* qualify=no

Si lo que queremos es modificar este parámetro únicamente a ciertas extensiones, podemos configurarlo modificando la extensión:

[ext105]
type=friend
host=dynamic
secret=M1p4ssw0rD
qualify=yes
disallow=all
allow=ulaw
allow=gsm

* Con qualify= yes

Asterisk monitoriza el estado de la extensión en periodos ( por default 60s)
¿Como sucede esto?

Astersk realiza peticiones de tipo "SIP OPTIONS" cada 60 segundos hacia la extensión y espera una respuesta del mismo, algo asi como un PING , por defecto Asterisk espera 2000ms (2s) para dar por buena una respuesta y con esta poder determinar:

1.- Estado
2.- Latencia o tiempo de retardo en la conexión con la extensión

*Con qualify=no

Asterisk deja de monitorizar el estado de la extensión y de esta forma omite las peticiones hacia sus destinos y hace las llamadas telefónicas sin importar latencia, ya que si hay latencia puede ser que la extensión sea marcada como no disponible.

* Con qualify=xxx

esto es un tipo de qualify=yes pero en este caso nosotros establecemos el tiempo máximo en milisegundos para recibir la respuesta (Por default son 2000ms)

Recomendaciones:

* Personalmente yo activo este parámetro en todas las extensiones
* En las extensiones con grandes latencias lo desactivo
* Si lo quieres tener activado y reducir los indeseados UNREACHABLE puedes establecer un tiempo máximo menor


Espero les sirva esta información para una mejor implementación de sistemas telefónicos digitales :D

miércoles, 22 de enero de 2014

Acceso a notas, howtos y directorio telefónico desde terminal

DESCRIPCIÓN

Cuando no tenemos ambiente gráfico, o no se usa frecuentemente y queremos ver algún numero telefónico o algún dato de archivos de texto que frecuentemente uso, es un poco engorroso estar acordándote del directorio + el nombre de los archivos donde se encuentra lo que busco.

Con este Script en BASH podemos hacer esto de manera rápida . el cual tiene las siguientes caracteristicas:

* utiliza los programas de linux:  less, vim, cat, grep dependiendo de los argumentos
      -c:  usa cat
      -e:  usa vim
      -l:   usa less
      -n:  usa grep
* Uiliza un directorio por default en donde se alojarán los archivos creados y por crear
     ejemplo: "/home/villatux/archivos_dse/"
* El script está guardado en "/usr/bin/dse" con permisos de ejecución 

EL CÓDIGO

#!/bin/bash
# By Oswaldo Villa
# @villatux
# USO:
#       dse -l archivo
#       dse -e archivo
directorio="/home/villatux/archivos_dse/"
case "$1" in
        -l)
                less $directorio$2
                ;;
        -e)
                vim $directorio$2
                ;;
        -c)
                if [ $3 == "-n" ]; then
                        cat $directorio$2 | grep -i $4
                else
                        cat $directorio$2
                fi
                ;;
        -h|--help)
                echo $"Uso: $0 [-c|-l|-e|-h] [ARCHIVO]"
                echo ""
                echo "Permite el facil acceso a el contenido de archivos para ver o editar su contenido"
                echo "  -c      Muestra Todo el documento"
                echo "          *  -n  muestra solo la linea donde está el texto deseado"
                echo "  -l      Permite visualizar el documento con solo presionar arriba, abajo y q para salir"
                echo "  -e      Permite editar el documento con el editor vim"
                echo "  -h      Muestra ayuda"
                echo ""
                echo "Ejemplo: "
                echo "$0 -l servidores"
                echo ""
                echo "Puede incluir los siguientes archivos:"
                ls -l $directorio | awk '{print $9}'
                ;;
esac


EJEMPLO EN USO:

villatux@vuach:~$ dse -c servidores -n vegito
vegito  1X.61 archivos.midominio.mx

villatux@vuach:~$ dse -c directorio -n oswaldo
  172X dse sysadmin oswaldo villa

villatux@vuach:~$ dse -c datos -n ldap
ldap  midominio.mx  P4ssw0rd LDAP General

villatux@vuach:~$ dse -c proxys -n .16
nacho  148.229.XXX.16  148.229.XXX.141 new

a quien le sea de utilidad puede copiarlo con toda libertad :D

viernes, 17 de enero de 2014

Importar script .sql a MySQL

Los usuarios de MySQL al querer importar un archivo .sql lo hacer a travez de phpMyAdmin, la cual solo soporta subir archivos menores a 2.048Kb (2Mb), que es la configuración default de php.ini, y cuando esto sucede algunos otros lo hacen por pequeños pedazos de script (peor aún), Esto incrementará la dificultad, el tiempo y las probabilidades de falla en la importación, Para cuando esto sucede es dificil reparar el error y es necesario comenzar de nuevo.

La mejor manera de importar bases de datos, tablas y datos a mysql es por consola(terminal), esto nos permite importar archivos mas grandes de lo normal de la siguiente manera

1)
mysql -u USUARIO -p BASEDEDATOS < /home/miusuario/script.sql

NOTA: Para poder subir el script de este modo ya deberá estar creada la Base de Datos.

Para no tener que crear la base de datos podemos crearla en la misma importación del script agregando las siguientes lineas al mismo:

1.2)
CREATE DATABASE `NOMBRE_DE_LA_BASEDEDATOS`;
USE `NOMBRE_DE_LA_BASEDEDATOS`;


Una vez hecho esto ejecutamos de nuevo el comando para importar el script que mencionamos en el paso 1

miércoles, 15 de enero de 2014

Publicar Código fuente resaltado en blogger y paginas web

Varios de nosotros los bloggers o webmasters hemos deseado publicar código fuente y que no se vea distorcionado o mal formado.

SyntaxHighlighter nos permite hacerlo añadiendo colores resaltados según el lenguaje que queramos mostrar de una manera limpia y llamativa.

SyntaxHighlighter es de codigo libre y en la pagina oficial :     ofrece la versión online o también a descarga si lo prefieres.  En este caso usaremos la version online ya que blogger no nos permite subir archivos.

Para agregar código  primero modificaremos nuestra plantilla de blogger o el código fuente de nuestra web,  entre las etiquetas HEAD debemos poner el siguiente código:





Debemos insertar todos los tipos de lenguajes que va a soportar nuestra pagina para publicar,  tambien se pueden quitar los que no creas utilizar para no hacer más extenso nuestro head

Ahora para publicar cualquier código debemos poner las etiquetas :



La siguiente tabla indica los lenguajes que soporta, además de el modo de uso en las publicaciones:

Brush nameBrush aliasesFile name
ActionScript3as3, actionscript3shBrushAS3.js
Bash/shellbash, shellshBrushBash.js
ColdFusioncf, coldfusionshBrushColdFusion.js
C#c-sharp, csharpshBrushCSharp.js
C++cpp, cshBrushCpp.js
CSScssshBrushCss.js
Delphidelphi, pas, pascalshBrushDelphi.js
Diffdiff, patchshBrushDiff.js
Erlangerl, erlangshBrushErlang.js
GroovygroovyshBrushGroovy.js
JavaScriptjs, jscript, javascriptshBrushJScript.js
JavajavashBrushJava.js
JavaFXjfx, javafxshBrushJavaFX.js
Perlperl, plshBrushPerl.js
PHPphpshBrushPhp.js
Plain Textplain, textshBrushPlain.js
PowerShellps, powershellshBrushPowerShell.js
Pythonpy, pythonshBrushPython.js
Rubyrails, ror, rubyshBrushRuby.js
ScalascalashBrushScala.js
SQLsqlshBrushSql.js
Visual Basicvb, vbnetshBrushVb.js
XMLxml, xhtml, xslt, html, xhtmlshBrushXml.js

Nota. Si queremos publicar código xml, xhtml, xslt, html y xhtml debemos considerar que dentro de las etiquetas pre no debemos utilizar los caracteres < ni > en vez de ello utilizaremos < y > respectivamente, todo esto para no confundir al código html.