Elimiar categorias sin uso | WordPress

al inicio del año he conseguido un plugin que, en ese momento pense “era la maravilla” para hacer categorias automaticamente, segun como hiba publicando mis articulos en el blog, lamentablemente se volvio loco y me ha creado 3K en categorias, que a la larga no me han servido de nada, puesto que algunas pocas contienen la mayoria de publicaciones.

Ahora como hacemos el depurado de esto?

Bueno vamos a recurrir a la magia de MYSQL:

Listamos la categorias por cantidad de post contenidos, esto sera en forma ascendente [0..a...100 y etc] recordemos que los prefijos de las tablas pueden cambiar dependiendo del tipo de instalacion o si por seguridad lo hemos cambiado:

<br />
SELECT<br />
	x.count AS howmany,<br />
	t.name AS name<br />
FROM<br />
	wp_terms AS t,<br />
	wp_term_taxonomy AS x<br />
WHERE<br />
	t.term_id = x.term_id<br />
ORDER BY<br />
	x.count<br />

Ahora si nos queremos enfocar a las categorias que unicamente tienen CERO publicaciones:

<br />
SELECT<br />
	x.count AS howmany,<br />
	t.name AS name<br />
FROM<br />
	wp_terms AS t,<br />
	wp_term_taxonomy AS x<br />
WHERE<br />
	t.term_id = x.term_id AND<br />
	x.count = 0<br />
ORDER BY<br />
	x.count<br />

mi resultado:

<br />
Showing rows 0 – 130 (3,252 total, Query took 0.0110 sec)<br />

Ahora, a borrar se ha dicho. #Recuerden siempre tener una copia de respando de la DB antes de realizar cualquier cambio permanente#

<br />
DELETE t, x<br />
FROM<br />
wp_terms AS t,<br />
wp_term_taxonomyAS x<br />
WHERE<br />
t.term_id = x.term_id AND<br />
x.count = 0<br />

y listo todas las categorias con CERO publicaciones han desaparecido, ahora no olviden optimizar nuestra DB de wordpress al terminar nuestra depuracion

Automatizar tareas FTP dentro de un script en BASH

La automatización de tareas vía FTP dentro de un script, puede resultar muy útil para scripts de copias de seguridad por ejemplo. Vamos a ver la forma de hacerlo y las posibilidades que nos ofrece.

La sintaxis básica para hacer la llamada a FTP dentro de un script en bash es la siguiente:

<br />
ftp -inv direccion_ip<br />

Comenzamos explicando los parámetros que pasamos al binario FTP, i sirve para desactivar el prompt interactivo, n sirve para impedir que se use la auto-autenticación, se puede quitar si va a ser usado el acceso automático a través de .netrc, finalmente v es para verbose.

Posteriormente, dentro de la llamada a FTP ya se trata de añadir los comandos que cada uno necesite, en el siguiente ejemplo nos conectamos con usuario test y clave t3st al ftp 192.168.0.100 y subimos dos ficheros desde la carpeta local /home/local hacia la carpeta remota /.

<br />
#!/bin/bash<br />
ftp -inv 192.168.0.100<br />

Protege tu Asterisk de ataques usando fail2ban

En ocasiones anteriores he hecho la mención de fail2ban, una herramienta escrita en Python que analiza logs del sistema y responde en caso de que ciertas condiciones se cumplan, por ejemplo, 5 intentos de contraseña SSH equivocada en un periodo de 10 minutos. Dada la proliferación de ataques a equipos Asterisk para tratar de hacer llamadas de larga distancia, tiene sentido que ocupemos esta herramienta para protegernos de los amantes de lo ajeno.

Ahora bien, ¿cómo configuramos esta herramienta para que nos evite los cargos de miles de dólares en llamadas fantasmas?

Primero, lo instalamos. En Debian podemos apt-get:

<br />
apt-get install fail2ban<br />

O, si tenemos Centos, primero asegurémonos de que tengamos EPEL (un repositorio que nos da acceso a mucho software útil) y luego instalamos fail2ban:

<br />
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm<br />
yum -y install fail2ban<br />

Fail2Ban se configura en 2 partes básicas:

  • /etc/fail2ban/jail.conf – Define que logs monitorear y que hacer en caso de que una regla se cumpla
  • /etc/fail2ban/filter.d/ – Definimos las reglas de coincidencia para analizar los logs
  • Editemos el archivo jail.conf y agreguemos esto hasta abajo:

    <br />
    [asterisk-iptables]<br />
    enabled  = true<br />
    filter   = asterisk<br />
    action   = iptables-allports[name=ASTERISK, protocol=udp, port=5060]<br />
    sendmail-whois[name=ASTERISK, dest=micorreo@algunmail.com, sender=fail2ban@example.org]<br />
    logpath  = /var/log/asterisk/full<br />
    maxretry = 5<br />
    findtime = 600<br />
    bantime = 10800&lt;/div&gt;<br />
    

    Lo que estamos especificando es lo siguiente:

    • La regla (jail) se llama asterisk-iptables
    • El filtro a usar debe existir en /etc/fail2ban/filter.d/asterisk.conf
    • Cuando se active la regla, usaremos la acción iptables-allports, la cual bloquea a nivel de iptables. Nosotros le estamos indicando que cierre el acceso al puerto UDP 5060, y luego que haga uso de la acción sendmail-whois, la cual me enviaria a mi correo electrónico la notificación del bloqueo, además de enviarme información de whois de la IP que se bloqueó.
    • El archivo log a monitorear es el /var/log/asterisk/full (ojo, dependiendo de tu sistema, el log puede ser diferente, ajústalo acorde)
    • Se permiten un máximo de 5 fallos en 10 minutos antes de activar la protección. Es decir, se permiten un máximo de maxretry intentos en findtime segundos
    • Al activarse el bloqueo, se hará por 3 horas o bien, 10800 segundos (bantime)

    En esta liga encuentras el manual oficial para el jail.conf.

    Ya definido el jail, necesitamos crear el filtro que atrapará los ataques. Esto se define (de acuerdo a lo que especificamos arriba) en el /etc/fail2ban/filter.d/asterisk.conf (los valores con # son comentarios, solo se dejan por referencia)

    <br />
    [INCLUDES]</p>
    <p># Read common prefixes. If any customizations available &#8212; read them from<br />
    # common.local<br />
    #before = common.conf</p>
    <p>[Definition]</p>
    <p>#_daemon = asterisk</p>
    <p># Option:  failregex<br />
    # Notes.:  regex to match the password failures messages in the logfile. The<br />
    #          host must be matched by a group named &quot;host&quot;. The tag &quot;&quot; can<br />
    #          be used for standard IP/hostname matching and is only an alias for<br />
    #          (?:::f4,6:)?(?PS+)<br />
    # Values:  TEXT<br />
    #</p>
    <p>failregex = Registration from &#8216;.*&#8217; failed for &#8216;(:[0-9]1,5)?&#8217; &#8211; Wrong password<br />
           Registration from &#8216;.*&#8217; failed for &#8216;(:[0-9]1,5)?&#8217; &#8211; No matching peer found<br />
           Registration from &#8216;.*&#8217; failed for &#8216;(:[0-9]1,5)?&#8217; &#8211; Device does not match ACL<br />
           Registration from &#8216;.*&#8217; failed for &#8216;(:[0-9]1,5)?&#8217; &#8211; Username/auth name mismatch<br />
           Registration from &#8216;.*&#8217; failed for &#8216;(:[0-9]1,5)?&#8217; &#8211; Peer is not supposed to register<br />
           NOTICE.* &amp;lt;HOST&amp;gt; failed to authenticate as &#8216;.*&#8217;$<br />
           NOTICE.* .*: No registration for peer &#8216;.*&#8217; (from &amp;lt;HOST&amp;gt;)<br />
           NOTICE.* .*: Host &amp;lt;HOST&amp;gt; failed MD5 authentication for &#8216;.*&#8217; (.*)<br />
           VERBOSE.* logger.c: &#8212; .*IP/&amp;lt;HOST&amp;gt;-.* Playing &#8216;ss-noservice&#8217; (language &#8216;.*&#8217;)</p>
    <p># Option:  ignoreregex<br />
    # Notes.:  regex to ignore. If this regex matches, the line is ignored.<br />
    # Values:  TEXT<br />
    #<br />
    ignoreregex =</p>
    <p>

    Se observa que estamos tratando de atrapar a los siguientes:

    • Usuarios que ingresan su contraeña SIP incorrectamente
    • Usuarios que intentan usar un usuario SIP que no existe
    • Usuarios que no cumplen con los parámetros permit y deny del sip.conf
    • Usuarios que su auth username no coincide con su username
    • Usuarios que tratan de registrarse con perfiles que son fijos (es decir, que no tienen host=dynamic)
    • Usuarios que no cumplen con los criterios de autenticación
    • Usuarios que marcan hacia números que no existen (esto es común en Elastix/FreePBX cuando deshabilitamos recibir llamdas anónimas)

    En esta liga encontramos el manual de los filtros de fail2ban.

    Finalmente, solo nos queda activar el servicio. En Debian ya quedó instalado automáticamente, solo tenemos que arrancarlo:

    /etc/init.d/fail2ban start

    En CentOS, tenemos que habilitar el autoarranque para que inicie al arrancar el equipo:

    chkconfig –add fail2ban
    chkconfig fail2ban on
    /etc/init.d/fail2ban start

    Fail2ban es un excelente apoyo contra ataques que dejan registros en logs y no solo nos sirve para Asterisk, también para SMTP, SSH, HTTP o cualquier otra cosa que queramos monitorear. Esto, en conjunción con buenas prácticas de seguridad para Asterisk, nos darán un sistema más confiable y menos propenso a sufrir daños por parte de atacantes.

    Sintaxis de colores para archivos .conf en nano

    Muchas veces tenemos que editar los archivos .conf de Asterisk desde algún editor no gráfico y seamos honestos: el vim o vi resultan muy complicados para la mayoría de los usuarios, así que en términos de simpleza, nano lleva las de ganar.

    Para poder activar una sintaxis de colores que ayude a nano a distinguir las diferencias en el texto de los archivos de Asterisk, inserten en siguiente contenido en su /root/.nanorc

    *(&quot;<br />
    color yellow &quot;(SIP|IAX|DAHDI|Local)/&quot;<br />
    color cyan &quot;(#|;).*&quot;<br />
    color cyan &quot;$.*&quot;<br />
    color green &quot;^(exten|include)&quot;<br />
    color brightgreen &quot;(|)&quot;<br />
    color brightyellow &quot;($?:|.|,|=&gt;)&quot;<br />
    color brightred &quot;&#8217;[^']*&#8217;&quot;<br />
    color brightred &quot;&quot;[^&quot;]*&quot;&quot;<br />
    color brightred &quot;($?[|])&quot;<br />
    

    Esto debe facilitarles mucho la edición de sus archivos siempre que usen este editor.

    Novedades en Asterisk 1.8

    Para muchos Asterisk 1.6 seria el candidato natural para reemplazar al 1.4, pero no muchos lo adoptaron, ya que aunque tenia algunas mejoras, estas no son trascendentes o urgentes.

    Que trae Asterisk 1.8 que nos llame la atención?

    Soporte para encriptacion AES 128 bits, ideal para aprovechar las funcionalidades de los telefonos SNOM por ejemplo. TLS, SSIP, entre otras funcionalidades anti chuponeo.

    Codec G722, incluido, con capacidad de transcoding entre los demás codecs. Este codec también llamado el codec HD o de Alta definición, mejora significativamente la calidad de sonido en las comunicaciones, aunque debe ser soportado por los terminales, tanto por software como por el hardware, ya que la calidad de sonido también dependerá de terminal y la calidad de sus parlantes.

    Integración con el calendario de Google!!! se puede recibir una llamada que nos avise de una reunión, incuso instalando TTS (Text to speech) nos puede leer las citas.

    CEL, es el nuevo CDR, mucho mas completo y que resuelve los temas fallidos del las versiones anteriores, con mejor seguimiento de la llamada, en las transferencias, conferencias y otros eventos, lo que brinda mayor precisión en el reporte total de las llamadas. Ademas no solo es un CDR sino un reporte de EVENTOS lo cual se puede usar de muchas formas interactivas.

    A nivel del protocolo SIP, se ha implementado la variable Remote-party-ID, que aunque no es la variable mas moderna o correcta, nos sirve para identificar el Caller ID incluso en transferencias, y es fundamental para el CEL para poder hacer seguimiento a las llamadas desde su origen, no importando cuantas veces sea transferida.

    Hay también la posibilidad de integrar el Calendario con EWS, M$ Exchange,  requiere encriptacion y al igual que con el calendario de Google podremos crear y escuchar o recibir alertas por eventos.

    Tambien, aunque ya estaba en Asterisk 1.6, la posibilidad de activar las conexiones SIP via TCP y TLS, lo cual es muy funcional en integraciones con otras centrales IP como Avaya o para integrarse al M$ Office comunicator, que creo que ha cambiado de nombre nuevamente… pero siempre hay clientes que tienden a esos costosos “saltos para atras”….

    El amigo, experto asteriskero, Elio Riojano presento recientemente en el evento VoIP2Day 2010 las principales caracteristicas del Asterisk 1.8, aqui la presentacion y su blog http://www.sinologic.net/blog/2010-10/voip2day-2010-profundizando-en-asterisk-1-8/

    Seguridad en Asterisk un poco mas :D

    La forma de ataque más común que se viene presentando hacia soluciones de telefonía IP basadas en Asterisk consiste en buscar servidores SIP, que se encuentren expuestos hacia Internet, incluso NATeados con firewalls (cuando erróneamente se natea el puerto 5060 en TCP, se expone el puerto a los escaneos).

    Se trata de ataques SIP, no son intrusiones, ni se están aprovechando vulnerabilidades que se puedan reparar con un parche, son básicamente descuidos en la configuración hacia internet.

    Los atacantes realizan intentos mediante técnicas de “fuerza bruta”, probando diferentes números de anexos, como los típicos 100, 101, 1000, 2001, etc. y realizan pruebas con muchos passwords. Es muy frecuente que usemos el mismo password para todos los anexos y generalmente con muy poca imaginación, sólo números y combinaciones como 1234, 7777, 0000, etc.

    El siguiente paso consiste en ubicar un anexo que tenga salida a todos los recursos, esto lo realizan mediante software robot que hace varias pruebas, con un 9, con 00, etc., si logran tener salida, VENDEN esa ruta a algún terminador internacional y durante ese sábado y domingo (o cualquier día, o madrugada) pueden pasar un trafico enorme de llamadas…

    Uno de los casos reportados, se pasaron más de 20,000 minutos a celulares de África, lo que equivale a 60 mil soles de facturación en solo 2 días.

    RECOMENDACIONES

    1) Si se desea exponer el servidor Asterisk, usar el software Portsentry para no dejarse escanear. La gran mayoría los ataques comienzan detectando el puerto SIP 5060 abierto en la victima. Con esta solución no solo se oculta la información sino que se bloquea la IP del atacante.

    2) Si es necesario hacer un NAT desde un router, SOLO Natear en UDP y no en TCP, y SOLO los puertos necesarios, NO todo el servidor.

    3) Verificar si en el SIP.CONF el [general] apunta a que contexto, normalmente Default, en ese contexto no debemos permitir llamadas anónimas!!! y si lo hacemos debe llegar a un IVR o solo hasta una extensión pero no a los demás recursos… usemos los contextos que para eso han sido creados!!!

    Ejemplo

    [default]

    exten=> s,1,Congestion

    4) Que no existan cuentas que pueden salir a TODOS los recursos como celulares, llamadas internacionales, etc., no importa que sea la cuenta del fax o la del Gerente General, al exponer hacia Internet el Server se exponen TODOS los anexos. Si es necesario tener esos accesos plenipotenciarios, DEBEN usar claves de salida, prefijos o no permitir recursos simples como 00 para internacionales o 0 para nacionales. Es muy probable que esta medida no sea muy popular entre los jefes y gerentes… pero es eso o una factura de $20k.

    5) Mejorar los passwords de los anexos, no usar el 0000 o el 1234… deben ser más fuertes y si es posible variar incluso letras, números y caracteres especiales.

    6) NAT=NO en los anexos que no serán usados desde el exterior, faxes, gerentes, etc.

    7) Si se requiere un usuario viajero o móvil, se recomienda instalar el softphone Zoiper, que utiliza protocolo IAX, se puede usar un puerto diferente al estándar, es mucho mas seguro, la clave o password de usuario viaja en MD5, los ataques están orientados hacia SIP y no a IAX, y por muchas razones mas IAX es la alternativa ideal.

    8 ) En caso de ser necesaria la interconexión SIP o H323 con otros equipos vía internet, se recomienda el uso de VPNs, si no se han considerado los puntos anteriores y/o especificar la IP publica del otro extremo, no permitir que se utilice IPs dinámicas para estos casos. OpenVPN, es free, cuenta con un cliente para windows y roadwarriors (viajeros, que se mueven entre hoteles, locutorios o internets domésticos) se puede implementar en el mismo servidor Asterisk para recibir conexiones seguras de anexos remotos.

    La marca SNOM, cuenta en sus nuevos modelos 370, 820 y 870 con clientes OpenVPN en el mismo teléfono.

    9) Fail2Ban es una herramienta que “escucha” los intentos por registrar una cuenta SIP y registra que al ocurrir 10 o mas errores de password se bloquee la IP del atacante que intenta registrarse, esta es una excelente solución para evitar los ataques por fuerza bruta, pero podemos llegar a acumular un largo historial de IP bloqueadas que deberemos revisar frecuentemente.

    10)  No aceptar pedidos de autenticación SIP desde cualquier dirección IP. Utilizar las líneas “permit=” y “deny=” de sip.conf para sólo permitir un subconjunto razonable de direcciones IP alcanzar cada usuario/extensión listado en el archivo sip.conf. Aún aceptando llamadas entrantes desde “anywhere” (via [default]) no se debe permitir a esos usuarios alcanzar elementos autenticados.

    11)  Establecer el valor de la entrada “alwaysauthreject=yes” en el archivo sip.conf. Esta opción está disponible desde la versión 1.2 de Asterisk, pero su por defecto su valor es “no”, lo que puede ser potencialmente inseguro. Estableciendo este valor en “yes” se rechazarán los pedidos de autenticación fallidos utilizando nombres de extensiones válidas con la misma información de un rechazo de usuario inexistente. De esta forma no facilitamos la tarea al atacante para detectar nombres de extensiones existentes utilizando técnicas de “fuerza bruta”. Hay que considerar que la aplicación de esta variable podría afectar el funcionamiento del fail2ban, ya que los mensajes de Warning podrían ser diferentes a los esperados por este ultimo.

    Es importante recordar que estos ataques afectan a TODOS los proveedores de equipos SIP, y no estan orientados a Asterisk, ni es este el mas vulnerable.

    Es gracias a la flexibilidad de Asterisk que se pueden tomar medidas simples como estas, en otras plataformas es el fabricante que tiene que activar algunas normas de seguridad.

    En VoIP los Firewalls no resuelven nada porque igual hay que abrir los puertos que se requieren para que pase la voz y por esa misma vía es que ocurre el ataque.

    1 2 3 12  Scroll to top