NGINX – Logging Country Access

Trabajando con NGINX para controlar el acceso de ciertos paises, encontre un modulo GeoIP Country, que nos permite determinar en funcion de la IP el pais de origen de un request.

Al agregarlo en nuestro nginx.conf podemos bloquear facilmente visitas de ciertos paises. Por ejemplo:

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
RU no; #Rusia
UK no; #Ukrania
CN no; #China
}

Sin embargo, al tenerlo instalado en nginx, tambien podemos hacer uso de la variable $geoip_country para mapear en nuestro access log, de que pais vino el request. Asi el pais no este bloqueado.

Para esto definimos nuestro propio formato en log_format:

log_format main ‘$status $body_bytes_sent $geoip_country_code $sent_http_content_type “$request_method $scheme://$host$request_uri” $http_referer @$remote_addr $http_user_agent ‘;

Y lo aplicamos en la declaracion de access_log:

access_log /var/log/nginx/access.log main;

Y listo, ahora tendremos la informacion del pàis de nuestras peticiones:

200 8938 PE text/html; charset=UTF-8 “GET https://www.mariouriarte.com/?s=react” https://www.mariouriarte.com/?s=nginx @190.202.62.205 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/75.0.3770.90 Chrome/75.0.3770.90 Safari/537.36

Comandos para manejar npm ( parte I )

NPM es el sistema de gestion de paquetes de nodejs. Con él podemos gestionar las dependencias de nuestros proyectos de #nodejs o #reactnative. También lo podemos usar para instalar aplicaciones globales en nuestro sistema, como por ejemplo: ChromeCast ( aplicación que te permite enviar videos a un chromecast desde la linea de comandos 😉 )

npm init -y

Inicializa el archivo package.json de nuestro proyecto con los valores por defecto. Usar con cuidado porque reescribe el contenido del archivo, si  ya existe.

npm home <paquete>

Abre el navegador con la web oficial del <paquete>

npm repo <paquete>

Abre el navegador con el repositorio oficial del <paquete>

npm outdated

Te indica que paquete tienes desactualizados

npm  prune

Elimina las dependencias que no se estan utilizando

npm list

Te muestra los paquetes que se usan en un proyecto ( ordenado jerarquicamente )

npm dedupe

Intenta reducir las duplicidades de paquetes en tu proyecto

npm audit

Te muestra una lista de bugs conocidos en los paquetes de tu proyecto

npm audit fix

Actualiza los paquetes de tu proyecto que tienen parches de seguridad pendientes.

 

AWS S3 Error 403 RequestTimeTooSkewed

Si el servicio de Amazon S3 en algun momento podrias haber obtenido el codigo  de error RequestTimeTooSkewed.  Este error indica que amazon detecto que el fecha hora desde donde se origino la peticion al servicio s3 no concuerda con la fecha hora del servidor s3.

En mi caso, el error se presento usando la libreria knox de nodejs y fue bastante criptico. La funcion callback de knox no generaba ningun error, es decir daba el proceso como valido, sin embargo los archivos no se estaban generando en el s3.

Para validar instale la herramienta aws-shell y ejecute la subida de un archivo con dicha herramienta.

# pip install aws-shell

 

$ aws-shell cp file s3://bucket/file

Al intentar copiar un archivo de ejemplo, ahora si se obtenia el error 403 siguiente:

RequestTimeTooSkewed type,  stating that : The difference between the request time and the current time is too large 

Para solucionarlo debes asegurarte que la fecha hora del servidor este correctamente configurada.

wget –server-response  –spider  http://aws.amazon.com/s3/

Puedes verificar la fecha hora los headers de respuesta de amazon, y compararlos con la fecha hora de tu sistema.

 

Como conectar tu wordpress con Mailchimp

MailChimp es una plataforma de email Marketing ( la mejor que conozco de momento ). A traves de ella puedes diseñar campañas recordatorio a tus clientes, usuarios o visitantes. Puedes enviarles ofertas, segmentandolos por intereses, por producto, etc.

Hoy vamos a usar un plugin de wordpress para registrar en mail chimp, las personas que realizan un comentario en nuestro blog.

Vamos a la seccion de plugins de nuestro wordpress y decimos agregar nuevo. Buscamos mailchimp y lo instalamos y activamos.

Una vez activado, vamos a la seccion de configuracion donde nos pide ingresar nuestro APIKEY de Mailchimp

Para buscar nuestra APIKEY, vamos a MailChimp a la seccion de Account API https://admin.mailchimp.com/account/api/  y creamos nuestra APIKEY

Y la copiamos en la configuracion de mailchimp de nuestro wordpress. Luego nos vamos a la opcion de Integracion de MailChimp en nuestro wordpress

Ahi podremos ver todas las opciones de configuracion que vienen por defecto. En este caso configuraremos el registro en los comentarios.

Aca, activamos el plugin ( Enabled yes ).

Decidimos si registramos en mailchimp a todos los que comentan o si lo hacemos solo si desean ser agregados. En nuestro caso, a todos. ( Implicit yes )

Nos indica en que lista de MailChimp los vamos a guardar, es conveniente seleccionar una lista ya que nos permite diferenciar los contenidos que reciben los usuarios en funcion de sus intereses.

Luego nos pregunta, si el usuario debe ingresar su email 2 veces para confirmar que es correcto. ( Double opt-in )

A partir de ahora cuando alguien realice un comentario en tu blog, Mailchimp le enviara un correo de invitacion a la lista de correo que le acabas de agregar. Si acepta, estara ligado automaticamente a tu lista de MailChimp.

Happy Mailing.

 

 

 

NodeJS mySQL NOT SUPPORTED AUTH MODE

Recientemente al actualizar mi maquina de desarrollo me tope con el siguiente error desde NodeJS

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

Era evidente un problema de configuracion ya que dias atras la app funcionaba correctamente y no habia sido modificada.

Para solucionar este problema debes entrar en la consola de mysql:

sudo mysql -u root

Y ejecutar el siguiente comando

update mysql.user set authentication_string=password(''), plugin='mysql_native_password' where user='root';

Y luego proceder a reiniciar el servicio

sudo service mysql restart

Adios PHP5

Oficialmente a finales del 2016 se termina el soporte para PHP5 tamiflu generic. Eso quiere decir que ya no habran correcciones ni mejoras pasada esa fecha. Luego de eso habra un soporte exclusivo para fallas CRITICAS que se extendera hasta el 2018.

Lo bueno es que todos los frameworks soportan perfectamente PHP7, asi que llego la hora del adios ya no hay nada mas que hablar ?

Para mayores detalles PHP.net

Actualización de modulos en Drupal … requiere FTP ?

Cuando tratamos de instalar un theme o un modulo en Drupal es posible que mas de una ocasion nos haya salido la siguiente pantalla de configuracion:

updatingModulesAndThemesRequiresFTPAccessToYourServer

 

Esto es porque drupal requiere que la carpeta sites/default sea propiedad del usuario apache ( www-data )

chown www-data sites/default -R

Y listo, ahora si podremos instalar nuevos modulos con un click.

686060-33.check-filetransfer-availability-install