Publicado el Dejar un comentario

Optimizar WordPress con wp-cron.php

apple desk laptop macbook

WordPress es un fantástico administrador de contenidos que nos permite, de manera fácil y eficiente, publicar contenidos de todo tipo; sobre todo para aquellos usuarios no técnicos. Sin embargo, en el día a día para la ejecución de tareas de mantenimiento o procesamiento de datos, WordPress suele “ejecutar” wp-cron.php durante todas las visitas de todos los usuarios en nuestro sitio, consultas a bases de datos o llamados a scripts o recursos que terminan incidiendo (dependiendo del tamaño de nuestro sitio) en el rendimiento del servidor. Por ello, en este tutorial, te voy a enseñar cómo optimizar WordPress con wp-cron.php, un sencillo y modesto script incluido en la instalación del propio WordPress que te ayudará a ejecutar estas tareas de mantenimiento en periodos de tiempo determinados.

Paso número 1: deshabilitar el wp-cron.php

En primer término, tenemos que editar el archivo wp-config.php que se encuentra en la raíz de nuestro directorio de instalación. Aquí, la sugerencia es que incluyas la siguiente línea de código de manera posterior a donde aparece $table_prefix = ‘wp_’; (aproximadamente en la línea 122):

define('DISABLE_WP_CRON', true);
Aquí realizamos una modificación al archivo de configuración wp-config.php para optimizar WordPress con wp-cron.php para lograr mejor performance y velocidad de descarga del sitio.

Paso número 2: programar el cron en nuestro sistema

¿Ya modificaste el archivo wp-config.hp para deshabilitar el wp-cron.php? Vayamos ahora al siguiente paso.

En los sistemas operativos tipo Unix, el Cron es un programa que se ejecuta en segundo plano para la ejecución de procesos en intervalos de tiempo regulares como por ejemplo, cada minuto, cada hora, cada lunes, cada mes, etc. En este sentido, dichos procesos programados para ejecución se “guardan” en un archivo de texto llamado Crontab.

Dato curioso: el término “cron”, se deriva del griego “chronos” que significa “tiempo”.

Con lo anterior, ya sea si utilizar un sistema operativo tipo Unix o sus derivados en estado puro (como GNU/Linux) o bien, si cuentas con un proveedor de hosting que te proporcione acceso en su panel de control a la programación de tareas mediante cron o crontab, solo tienes que programar una tarea similar a esta para su ejecución cada 5 minutos (por ejemplo):

php -q /var/www/clients/client1/web15/web/wp-cron.php

La imagen anterior, es un ejemplo del programador de tareas de mi proveedor de hosting, quien utiliza ISPConfig como panel de control para administrar mi página web. En tu caso particular, te recomiendo que investigues en la documentación de tu proveedor o solicites ayuda mediante un ticket de soporte técnico para que puedas programar y ejecutar la tarea en el intervalo de tiempo que más te acomode. Si usas un hosting comercial compartido, es muy probable que tu proveedor no te permita o te penalice por programar tareas que se ejecuten cada 1 minuto; en estos casos, es muy común que los límites sean cuando menos cada 5 minutos o más. ¡Consulta la documentación de tu hosting!

Publicado el Dejar un comentario

Encender el ventilador de una laptop Acer Predator Helios 300 PH315-51 en Linux

Encender el ventilador de una laptop Acer Predator Helios 300 PH315-51 en Linux

La línea Predator de computadoras tipo laptop de Acer, incorporan un software llamado PredatorSense a través del cual, como usuarios, podemos controlar el encendido o apagado (manual o automático) de nuestra computadora. Desafortunadamente, PredatorSense solo funciona en Windows por lo que, aquellos usuarios que utilizamos sistemas operativos alternativos basados en GNU/Linux, no podemos disponer de una herramiento oficial para ello. Por ello, en esta ocasión, echaremos mano de algunos hacks y utilidades que he encontrado por ahi para conseguir encender el ventilador de una laptop Acer Predator Helios 300 PH315-51 en Linux. ¡Veamos!

PredatorSense para Windows

Encender el ventilador de una laptop Acer Predator Helios 300 PH315-51 en Linux

Como te lo comentaba al inicio del post, PredatorSense no tiene otra función más que la de controlar el ventilador de tu computadora de manera manual o automática y en distintos grados de intensidad.

Si realizas una instalación limpia de Windows y borraste por alguna razón la partición de drivers y utilidades de tu PC, es recomendable que descargues e instales esta herramienta. El link del sitio es: https://www.acer.com/ac/es/ES/content/predatorsense; no obstante, descárgala directamente desde la sección de utilidades al realizar una búsqueda de drivers para tu modelo específico de computadora.

Encender el ventilador de una laptop Acer Predator Helios 300 PH315-51 en Linux

Bien. Como te comentaba: no existe una herramienta oficial de Acer para hacer funcionar los ventiladores o fans de nuestra laptop en GNU/Linux, lo cual es decepcionante. Para serte franco, y desde mi punto de vista, los fabricantes tendrían que ofrecer las herramientas y detalles técnicos mínimos para aprovechar las funciones de nuestros equipos sin importar su sistema operativo (que al día de hoy, bien puede ser GNU/Linux, Windows e, inclusive, Android) de nuestra PC.

Sin embargo, siempre hay buenos samaritanos que buscan explorar y explotar al máximo el poder del pingüino por lo que, gracias a un hack, es posible tener cuando menos la función de “encender” o “apagar” nuestro ventilador con el uso de herramientas externas.

NBFC (NoteBook Fan Control) para Linux

NBFC es una herramienta multiplataforma que es capaz de ajustar configuraciones específicas para controlar los ventiladores de distintos modelos de computadora.

El link oficial del proyecto es: https://github.com/hirschmann/nbfc

Primeros pasos: instalar NBFC en Linux

Para el desarrollo de este tutorial, estaré trabajando bajo GNU/Linux Ubuntu 22.04 por lo que, algunos de los comandos que veas por aquí, tendrás que adaptarlos si es que usas distribuciones distintas o alternativas. No obstante, no creo que tengas mayores problemas.

En primer lugar, vamos a instalar el conjunto de herramientas Mono para correr programas compatibles desarrollados en .NET en Linux. Para ello, agregamos el repositorio de Mono a nuestro directorio de fuentes de software, actualizamos el repositorio e instalamos Mono.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list

sudo apt update && sudo apt upgrade -y

sudo apt install mono-complete
Instalación de Mono en GNU/Linux Ubuntu 22.04

Ahora, como siguiente paso, deberemos instalar Git en nuestra computadora:

sudo apt install git

Hecho lo anterior, procederemos a descargar NBFC en nuestro directorio Descargas/nbfc con el siguiente comando:

git clone --depth 1 https://github.com/hirschmann/nbfc.git ~/Descargas/nbfc

Una vez hecho lo anterior, procederemos a crear un directorio en /opt/nbfc y, posteriormente, a copiar los archivos que descargamos mediante Git de nuestro directorio ~/Downloads/nbfc.

sudo mkdir /opt/nbfc

sudo cp -r ~/Descargas/nbfc/Linux/bin/Release/* /opt/nbfc/

sudo cp ~/Descargas/nbfc/Linux/{nbfc.service,nbfc-sleep.service} /etc/systemd/system/

cd /opt/nbfc

Con esto, ¡ya tienes nbfc disponible en tu computadora!

Encender y apagar ventiladores de Acer Predator Helios 300 PH315-51 en Linux

Ahora, para encender los ventiladores de nuestra laptop Acer Predator Helios 300 PH315-51 en Linux, según el post “Fan control in Linux” de Namangup, solo tenemos que ejecutar dentro del directorio /opt/nbfc el siguiente conjunto de comandos:

sudo modprobe -r ec_sys

sudo modprobe ec_sys write_support=1

sudo mono ec-probe.exe write 0x21 0x64

sudo mono ec-probe.exe write 0x22 0x0c

Ahora bien, Namangup especifica 2 comandos adicionales en donde 00 es el valor más bajo y 64 el valor más alto para indiciar la intensidad del ventilador dentro de [value].

En este sentido, los comandos en cuestión son:

ec_probe write 0x37 0x[value]

ec_probe write 0x3a 0x[value]

En mi experiencia personal, pude encender el ventilador de una laptop Acer Predator Helios 300 PH315-51 en Linux con este comando:

sudo mono ec-probe.exe write 0x21 0x64

…y pude apagar el ventilador de una laptop Acer Predator Helios 300 PH315-51 en Linux con este otro:

sudo mono ec-probe.exe write 0x21 0x00
Probando valores mediante ec-probe de nbfc

Si estos comandos no te funcionan, es probable que esté funcionando como servicio nbfc por lo que, puedes verificarlo así:

sudo systemctl status nbfc
Consulta de estado del servicio nbfc en Linux

Si el servicio está ejecutándose (running), puedes detenerlo ejecutando el siguiente comando:

sudo systemctl stop nbfc
Consulta de estado del servicio nbfc en inux

Y vuelve a intentar con los comandos “sudo mono ec-probe.exe write 0x21 0x64” y “sudo mono ec-probe.exe write 0x21 0x00” para encender y apagar los ventiladores.

pIndependientemente de que estos comandos realmente funcionan, para serte honesto, no me fue posible elegir otras intensidades o velocidad de las revoluciones de los ventiladores.

Por ello, exploré más opciones y encontré la posibilidad de utilizar archivos de configuración previamente desarrollados con las opciones disponibles, hallazgos y experimentos personales de diversos desarrolladores y entusiastas.

Utilizar nbfc con opciones preconfiguradas

Como te lo comentaba: debes saber que nbfc viene por defecto con distintas configuraciones preconfiguradas para comenzar a trabajar de inmediato.

Antes de continuar y comenzar a experimentar opciones preconfiguradas, debemos activar nbfc como servicio mediante el siguiente comando:

sudo systemctl enable nbfc --now

Para asegurarte de que esté activo lanza una comprobación así:

sudo systemctl status nbfc

Si está activo, deberá mostrarse por ahí la palabra “active (running)”.

Consulta de estado del servicio nbfc en inux

Hecho lo anterior, la forma más fácil de averiguar qué configuración podría funcionar en tu computadora es que ejecutes dentro del directorio /opt/nbfc el siguiente comando:

sudo mono nbfc.exe config -r
Consulta de lista de configuraciones recomendadas de nbfc en Linux para mi laptop

…e inmediatamente se te desplegará una lista recomendaciones de configuraciones prefabricadas para distintos tipos de computadora.

En mi caso, como tengo una computadora Acer Predator Helios 300 PH315-51, la configuración que más se le podría parecer es la de la Acer Predator G3-572 por lo que, para activarla de inmediato, solo debes de ejecutar:

sudo mono nbfc.exe config -a "Acer Predator G3-572"

Y sería todo. Con esto, habrás conseguido implementar el servicio de encendido automático del ventilador de tu computadora Acer Predator Helios 300 PH315-51 de manera eficiente y en automático en tu computadora.

Ahora, si así lo deseas, puedes obtener información sobre la configuración actual de nbfc tecleando lo siguiente:

sudo mono nbfc.exe status -a
Consulta del estado de la configuración aplicada mediante nbfc en Linux

Lo anterior, resulta muy útil ya que así puedes probar distintas configuraciones y experimentar.

Para saber más

Publicado el 5 comentarios

Instalar el software Lenovo Nerve Center

Tuve la necesidad de reinstalar Windows desde cero en mi computadora Lenovo Y720 con lo cual, al instalar los drivers, me pareció extraño no encontrar una herramienta que me resultaba de gran utilidad para “echar a andar” los ventiladores que me permiten refrigerar y mejorar el rendimiento de CPU / tarjeta gráfica a voluntad, y por la cual me era imposible instalar el software Lenovo Nerve Center que acompañó a mi laptop desde que la compré por ahí del año 2017.

Ya en ocasiones anteriores había notado algunos problemas en este modelo computadora como el de solucionar error en menú contextual en Lenovo Legion Y720 (tap two fingers) que documenté en años pasados en este blog (creo que muy pocos usuarios se han dado cuenta de esto).

Pues bien, el tema es el siguiente: en la base de conocimiento de Lenovo que puedes consultar en https://pcsupport.lenovo.com/th/es/solutions/ht508689-lenovo-common-preloaded-software, comentan que el Lenovo Nerve Center que viene dentro de la lista de software precargado de los equipos Legion Y720-15IKB, ha sido descontinuado o al alcanzado el fin del periodo de vida.

Con ello en consideración, establecí una sesión de chat con un técnico de Lenovo a quien le expuse la situación y el problema para conseguir el Lenovo Nerve Center, el cual dejó de estar disponible tanto para descarga en la página web de Lenovo como en Tienda de Microsoft para su instalación, y lo único que me comentó fue:

  • Que software Lenovo Nerve Center ya no estaba disponible.
  • Que el Lenovo Nerve Center presentó una vulnerabilidad (no me dijeron cual, ni en qué consistía).
  • Que me recomendaba utilizar un software de terceros (bajo mi propia responsabilidad y riesgo).
  • Que no saben cómo activar los ventiladores si saldrá una actualización, driver o mejora.

Mi comentario al técnico fue simple: era frustrante y decepcionante que Lenovo decidiera eliminar una característica fundamental (y razón por la cual mucha gente compramos este tipo de equipos, ¡ventilación, refrigeración, rendimiento!) sin ofrecer una alternativa, software sustituto o drivers mejorados u optimizados. Sinceramente, Lenovo nos ha dejado solos. Esto haciendo y documentando lo que Lenovo tendría que informar a sus clientes.

No obstante lo anterior, te comparto un tip y mi experiencia para recuperar y/o volver a instalar el software Lenovo Nerve Center (un poco “forzado” el tema y esperando que Microsoft no retire la app de la Tienda pronto).

¿Cómo instalar el software Lenovo Nerve Center de nuevo en tu laptop?

Los pasos que tienes que seguir son los siguientes:

  1. Descarga el archivo wwnc02ae.exe que se encuentra en https://download.lenovo.com/consumer/mobiles/wwnc02ae.exe o bien, si por alguna razón dejara de ser provisto por el fabricante, encontré este otro link de respaldo por ahí: https://mega.nz/file/iNggQZKL#kdsMhV65SwvfI2pd5zi2JuniBMND99RGM0c4S0AGWTM.
  2. Instálalo y reinicia tu equipo.
  3. Abre el software Lenovo Nerve Center; realizará una comprobación rápida y te pedirá que actualices tu software desde la Tienda de Microsoft.
  4. Instala el Lenovo Nerve Center desde la Tienda de Microsoft.
  5. ¡Y listo! Ya tienes nuevamente el Lenovo Nerve Center en tu equipo.

Espero que este truco te haya servido; para mí, en el día a día, esta herramienta me es fundamental en mis tareas de trabajo de edición de gráficos y video. Es ruidoso el ventilador, lo sé, pero funciona.

Instalar el software Lenovo Nerve Center
Instalar el software Lenovo Nerve Center
Instalar el software Lenovo Nerve Center

Tip adicional sobre este tema

Sin el software Lenovo Nerve Center, un par de botones del teclado más, quedarían inutilizados:

  • El botón de grabación / captura de video de la pantalla de tu computadora (muy útil para aquellos Gamers a quienes les gusta grabar sus partidas de videojuegos).
  • La función de la tecla de inicio del software Lenovo Nerve Center.

Algo pasó por ahí; desconozco las razones por las cuales Lenovo decidió descartar esta herramienta, pero aquí la tienes de nuevo. En verdad, espero que te sirva.

Publicado el Dejar un comentario

Sincronizar la hora entre Windows y Linux

Si tienes instalada alguna distribución GNU/Linux conviviendo con Windows, es muy probable que te resulte molesto (y necesario) sincronizar la hora entre Windows y Linux.

Este “detalle” (porque no es un problema realmente), se debe a que estos ambos sistemas operativos, gestionan de manera distinta el tiempo: en el caso de una gran mayoría de distribuciones GNU/Linux, se utiliza los esquemas UTC (Universal Time Coordinated) o GMT (Greenwich Mean Time) que no son otra cosa que formas universales de “comprender” el tiempo y zonas horarias; en otro sentido, los sistemas operativos Windows, utilizan los esquemas de “Hora Local” (Localtime) que al día de hoy, se encuentran asistidos por NTP (Network Time Protocol) para “sincronizar” relojes entre dispositivos. La hora local, no es más que la “hora” de una zona horaria particular que “establece” el usuario o bien, que establece tu servidor NTP en función de la región que le hayas indicado.

Para serte honesto, el modelo UTC es un esquema de gestión del tiempo universal más apropiado que garantiza interoperabilidad.

Lo anterior, es la razón por la cual, si tienes una instalación Windows con GNU/Linux conviviendo, es muy seguro que tengas Dual Boot instalado (también conocido como Arranque Dual) por lo que habrás notado que en tu distribución GNU/Linux obtienes la hora exacta sin mayor inconveniente pero, al arrancar sesión en Windows, obtienes una hora distinta que no concuerda con tu zona horaria.

Para resolver esto, tienes 2 opciones:

Opción A: Obligar a Windows a utilizar el esquema de Coordinación de Hora Universal (UTC)

En mi caso, esta sería mi opción favorita porque representa la oportunidad de hacer que tu sistema operativo respete y se ajuste a los estándares de sentido de comunidad y convivencia. Además, será capaz de actualizarse sin problemas durante los cambios de horario de invierno y verano, o simplemente, durante al paso a una zona horaria distinta.

Para configurar este esquema, presiona la combinación de tecla Windows + R y escribe “regedit” para abrir el editor de registro de Windows:

Iniciamos el editor de registro de Windows.

Ahora, busca dentro de los registros, la siguiente clave:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
Modificamos la zona horaria.

A continuación, haz clic con el botón derecho del mouse sobre la carpeta TimeZoneInformation y crea un valor dword al cual deberás poner por nombre “RealTimeIsUniversal”:

Añadimos un valor DWORD…
Sincronizar la hora entre Windows y Linux mediante opción "RealTimeIsUniversal".
RealTimeIsUniversal

Ahora, haz doble clic sobre el valor “RealTimeIsUniversal” creado y asígnale el valor de “1”:

Una vez hecho lo anterior, deberemos ahora desactivar la sincronización automática de hora en Windows; para ello, escribe en la barra de búsqueda de Windows el comando CMD y selecciona la opción “Ejecutar como administrador”:

sc config w32time start= disabled

Si todo ha funcionado bien, observarás un mensaje como este, ¡y es todo!

Nota: Si en algún momento deseas revertir los cambios, solo debes el valor de la entrada “RealTimeIsUniversal” a “0” para volver a trabajar con la hora local.

Opción B: Obligar a GNU/Linux a utilizar el esquema de Hora Local (localtime)

En GNU/Linux el tema es más simple, ya que solo tienes que ejecutar el siguiente comando como administrador:

sudo timedatectl set-local-rtc 1

¡Y eso es todo!

Publicado el Dejar un comentario

Recordar el último sistema operativo en Linux

Si eres instalaste alguna distribución de GNU/Linux en tu computadora y la configuraste para convivir junto con Windows, seguramente te podrá resultar “molesto” que tu distribución sea la primera en iniciar cada que enciendes tu computadora; por ello, para que tu computadora pueda recordar el último sistema operativo en Linux, solo debes seguir los siguientes pasos:

1.- Abre una sesión de terminal y edita el archivo /etc/default/grub

sudo nano /etc/default/grub

2.- Una vez abierto, verás algo como esto:

Aquí, deberás cambiar la línea..

GRUB_DEFAULT=0

…por la línea:

GRUB_DEFAULT=saved

…y deberás añadir también la línea:

GRUB_SAVEDEFAULT=true

…y guardar los cambios de tu archivo.

Te recomiendo mucho verificar que escribas correctamente las líneas para evitar problemas en la reconfiguración del arranque de inicio; revisa bien antes de guardar cambios.

Si todo está correcto, tu archivo del cargador de arranque GRUB deberá verse algo así:

recordar el último sistema operativo

3.- Ahora, solo resta indicarle a Linux que aplique los cambios en el cargador de arranque ejecutando el siguiente comando:

sudo update-grub2

¡Y listo! Tu cargador de arranque estará listo y programado para iniciar y recordar el último sistema operativo con el que iniciaste la computadora.

Publicado el Dejar un comentario

Solucionar error en menú contextual en Lenovo Legion Y720 (tap two fingers)

Tengo una Laptop Lenovo Legion y720 desde la cual realizo tareas de diseño, edición de video y trabajo con la web desde 2 sistemas operativos distintos. En GNU/Linux Ubuntu 20.04 LTS todo funciona bien, pero en Windows 10 no por lo que me di a la tarea de solucionar error en menú contextual mediante una pulsación con dos dedos (tap two fingers) me resulta indispensable en entornos gráficos.

Cuando la compré, noté que la función de mostrar el menú contextual (clic con el botón derecho del mouse) utilizando un “tap” a dos dedos (tap two finger) no funcionaba en Windows 10 pero en GNU/Linux sí.

Con ello, me dí a la tarea de buscar e instalar drivers originales, asignar valores de fábrica, mover configuraciones en el Panel de Control en Windows en donde, a pesar de que las configuraciones debían de resolver la posibilidad de obtener el menú contextual a 2 dedos, no lo hacían.

Propiedades del mouseGeneralmente, uno accede a las propiedades del mouse de la computadora para realizar configuraciones adicionales del dispositivo.
Tap two fingers no funciona.
No obstante, al acceder a las configuraciones de Elan, en apartado “Varios dedos”, aún y cuando tengas la configuración del “Clic” a “Dos dedos” activada, el menú contextual no funciona; no importa si lo activas o desactivas múltiples veces: lo único que hace es poner el valor de 7 a Tap_Two_Finger y dejar en blanco otros valores del registro de Windows. Por ello, te ofrezco la solución más abajo.

Solucionar error en menú contextual para activar tap two fingers en una Lenovo Legion Y720

Revisando en un foro y otro, así como experimentando y comparando valores en el Registro de Windows, por fin pude dar con la solución; si tienes una computadora Lenovo Legion Y720 y no puedes obtener el menú contextual con 2 dedos, esto es lo que tienes que hacer:

  1. Presiona la combinación de tecla Windows + R
  2. Escribe “regedit” y presiona enter
  3. Busca / dirígete a la siguiente clave de registro: HKEY_CURRENT_USER\SOFTWARE\Elantech\SmartPad
Abrimos el editor del registro de Windows

Ahora bien, una vez dentro de la carpeta SmartPad, haz doble clic sobre los siguientes registros y asígnales el valor de 1:

  • Tap_Two_Finger
  • Tap_Two_Finger_Enable
  • Tap_Two_Finger_ShowItem
Solucionar error en menú contextual
Aquí podrás encontrar los registros a modificar para corregir el menú contextual en tu laptop Lenovo Legion Y720

Hecho lo anterior, solo tienes que reiniciar tu computadora, y el tap con dos dedos debería ya de funcionar. ¡Espero que te haya servido!

Publicado el Dejar un comentario

Configurar una tarjeta de red con WPA desde la línea de comandos en Ubuntu

configurar una tarjeta de red con WPA desde la línea de comandos

En mi oficina, tengo una vieja laptop a la cual, el monitor de cuando en cuando deja de funcionar sin forma de volver a encenderlo nuevamente. Con ello en consideración, decidí tomar esta laptop para configurarme un modesto servidor conUbuntu Server 14.04 LTS en el cual tengo habilitado Apache, PHP y MySQL principalmente con la cual te mostraré cómo conigurar una tarjeta de red con WPA desde la línea de comandos en Ubuntu.

Es pertinente comentar en este que punto que para el presente tutorial, procedí a realizar una instalación limpia de Ubuntu Server 14.04, configuré mi tarjeta de red, particiones y demás, pero al concluir el proceso de reinicio posterior a la instalación.

Así, para lograr que Ubuntu “inicie” y se “conecte” automáticamente a una red WPA, tenemos que seguir los siguientes pasos desde la consola o línea de comandos:

1.- Averiguamos en primer lugar el nombre de nuestra interface de red inalámbrica (generalmente es wlan0):

iwconfig

2.- Creamos el archivo de configuración del demonio de administración de redes wpa_supplicant…

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

…y guardamos dentro del mismo los siguientes valores:

ctrl_interface=/var/run/wpa_supplicant
network={
ssid="NOMBRE-DE-RED-WIFI"
key_mgmt=WPA-PSK
psk="CONTRASEÑA-WIFI"
}

3.- Ahora, iniciamos el demonio wpa_supplicant mediante el siguiente comando:

sudo wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0 -B

4.- “Levantamos” nuestra tarjeta de red…

sudo ifconfig wlan0 up

5.- Pedimos ahora una dirección IP al servidor DHCP activo:

sudo dhclient wlan0

6.- Con ello, si hacemos un ping a google.com, deberías de obtener ya una respuesta. Pero bien, para que nuestra configuración se cargue en cada reinicio, abrimos el archivo /etc/network/interfaces…

sudo nano /etc/network/interfaces

…y nos aseguramos de añadir lo siguiente:

auto wlan0
iface wlan0 inet dhcp
wpa-ssid NOMBRE-DE-RED-WIFI
wpa-psk CONTRASEÑA-WIFI

7.- Para comprobar que el demonio wpa_supplicant se iniciará automáticamente en cada inicio del sistema, ejecutamos los siguientes comandos:

sudo /etc/init.d/networking stop
sudo /etc/init.d/networking start

¡Y es todo!

Si deseas profundizar mucho más en el tema u obtener información para realizar un proceso similar para redes WEP, te recomiendo hacer clic en este enlace, el cual te llevará a un excelentísimo artículo que habla con gran detalle sobre este proceso.

Publicado el Dejar un comentario

Bloquear accesos por país con Firewall CSF

Bloquear accesos por país con Firewall CSF

Para todos aquellos que en algún momento tengan la necesidad de desarrollar actividades de administración de un servidor Web bajo GNU/Linux, descubrirán que Internet es un entorno más que propicio tanto para la colaboración o distribución de contenidos, como también, para prácticas maliciosas o ataques informáticos por lo que seguramente te resultará de gran utilidad el aprender a bloquear accesos por país con firewall CSF.

En este sentido, les comento que en mi práctica profesional, y concretamente, para el caso de una tienda en línea administrada con Magento, comencé a notar una baja en el performance impresionante, al punto tal en que las peticiones al servidor, se resolvían muy lentamente.

En este contexto, una solución “rápida” y “lógica” era incrementar los recursos del VPS contratado (más memoria RAM, más procesador), con el respectivo costo asociado.

Al revisar los logs de Apache (siempre es una buena práctica, algo tediosa) y las estadísticas del sitio en mi panel de control (con AW Stats o Webanalizer) y las visitas de Google Analytics, descubrí que tenía visitas en varias horas del día, y con distinta intensidad, del robot del buscador Chino llamado Baidu.

Con esta información en consideración, mi primer “movimiento” lógico, fue deshabilitar la indexación del agente/bot Baidu en el home de mi servidor, pero, el problema persistía: Baidu maneja diversos agentes (de contenidos, de imágenes, de video, etc.) para indexar un sitio, y para serles francos, aún y cuando Baidu tiene documentadas las medidas para el manejo de sus bots mediante el archivo robots.txt (puedes consultarlas aquí: http://help.baidu.com/question?prod_en=master&class=498&id=1000973), me dio la impresión de que sus bots no respetaban las instrucciones contenidas en el mismo, por lo cual, teniendo en consideración que el público de la tienda en línea era solo mexicano, procedí a realizar un bloqueo mediante reglas de un Firewall basado en software, inicialmente a China, con posibilidades de extenderlo a todo el mundo y permitir solo IP´s de México y Estados Unidos. Es importante destacar que Baidu, tiene una “página” en la cual uno puede “retroalimentar” y reportar incidentes; la liga es: http://webmaster.baidu.com/feedback/index. Aquí puedes encontrar más información sobre el “bloqueo” a Baidu Spider mediante el archivo robots.txt: http://www.baidu.com/search/robots_english.html

Consideraciones

Este “truco” te funcionará si tienes una distribución Linux en la cual tengas acceso como root o usuario con privilegios. Si tienes un VPS, asegúrate que si realizas por accidente un “bloqueo” a la IP desde la cual te conectas, podrás acceder nuevamente mediante una terminal o consola Web que te ofrezca tu propio proveedor.

Primeros pasos

CSF (ConfigServer Security & Firewall), es un poderoso conjunto de scripts que nos permiten disponer reglas de iptables para constituir un Firewall SPI (Stateful Packet Inspection) basado en software, con detector de intrusiones y seguridad en aplicaciones para servidores Linux.

Si actualmente tienes reglas de IPtables aplicadas en tu server, es muy probable que vayas a tener conflicto con las mismas, por lo cual, es muy probable que decidas qué solución de Firewall pretendes usar, o bien, analizar si CSF puede hacer por tí lo que actualmente estás haciendo con otra solución. Desde mi punto de vista personal, CSF es uno de los Firewalls para servidores Linux más potentes, transparentes y sencillos de usar que he visto.

Puedes conocer más a fondo las características de CSF visitando este link: http://configserver.com/cp/csf.html

Para este tutorial, estaré trabajando sobre Ubuntu Server 14.04.01 de 64 Bits.

De igual manera, la documentación oficial para la instalación de CSF la puedes encontrar aquí: http://download.configserver.com/csf/install.txt

Comentado lo anterior, primero vamos “actualizar” un poco algunas dependencias y paquetes de Perl requeridos:

sudo apt-get install libwww-perl liblwp-protocol-https-perl

Posteriormente, vamos a proceder a descargar y descomprimir el conjunto de scripts de CSF mediante el siguiente comando:

cd /usr/src
sudo wget https://download.configserver.com/csf.tgz
sudo tar -xzf csf.tgz

Ahora, procedemos a realizar la ejecución del script de instalación de CSF:

cd csf
sudo sh install.sh

Si no ha habido mayores problemas, podrás leer en tu pantalla algo como esto:

TCP ports currently listening for incoming connections:
     22

UDP ports currently listening for incoming connections:
     68,45861

Note: The port details above are for information only, csf hasn't been auto-configured.

Don't forget to:
     1. Configure the following options in the csf configuration to suite your server: TCP_*, UDP_*
     2. Restart csf and lfd
     3. Set TESTING to 0 once you're happy with the firewall, lfd will not run until you do so
     «lfd.sh» -> «/etc/init.d/lfd»
     «csf.sh» -> «/etc/init.d/csf»
     el modo de «/etc/init.d/lfd» permanece como 0755 (rwxr-xr-x)
     el modo de «/etc/init.d/csf» permanece como 0755 (rwxr-xr-x)
     Removing any system startup links for /etc/init.d/lfd ...
     Removing any system startup links for /etc/init.d/csf ...
     Adding system startup for /etc/init.d/lfd ...
     /etc/rc0.d/K20lfd -> ../init.d/lfd
     /etc/rc1.d/K20lfd -> ../init.d/lfd
     /etc/rc6.d/K20lfd -> ../init.d/lfd
     /etc/rc2.d/S80lfd -> ../init.d/lfd
     /etc/rc3.d/S80lfd -> ../init.d/lfd
     /etc/rc4.d/S80lfd -> ../init.d/lfd
     /etc/rc5.d/S80lfd -> ../init.d/lfd
     Adding system startup for /etc/init.d/csf ...
     /etc/rc0.d/K80csf -> ../init.d/csf
     /etc/rc1.d/K80csf -> ../init.d/csf
     /etc/rc6.d/K80csf -> ../init.d/csf
     /etc/rc2.d/S20csf -> ../init.d/csf
     /etc/rc3.d/S20csf -> ../init.d/csf
     /etc/rc4.d/S20csf -> ../init.d/csf
     /etc/rc5.d/S20csf -> ../init.d/csf
     «/etc/csf/csfwebmin.tgz» -> «/usr/local/csf/csfwebmin.tgz»

Installation Completed

Lo que debemos saber

CSF es una colección de scripts muy potente, que en un momento determinado, puede inclusive “impedirnos” la conexión remota al servidor si no tenemos muy claro lo que hacemos.

En este sentido, la ruta para la edición de su archivo de configuración, es:

/etc/csf/csf.conf

Dentro del mismo, tenemos 2 líneas que son muy interesantes:

  1. TESTING = “1” – Si está activida esta regla así, es porque tu Firewall está en “modo de prueba” con lo cual, en función del valor asignado en el siguiente punto (testing_interval), pasado ese tiempo, te “borrará” todas las reglas de Firewall con el propósito de “regresar” a la normalidad. En otro caso, si has quedado conforme con la configuración de Firewall, puedes ponerle el valor de “0”, con lo cual, quedará aplicado este sistema.
  2. TESTING_INTERVAL = “5” – Si las reglas de Firewall están en modo de prueba (testing), pasado número de minutos, se “limpiarán” del sistema, volviendo todo a la normalidad.

Bloquear accesos por país con firewall CSF y asignación de permisos de conexiones por país

Particularmente, CSF utiliza los 2 caracteres de país del código ISO de países CIDR (Classless Inter-Domain Routing – enrutamiento entre dominios sin clases) mediante el cual, se “clasifican” los rangos de direcciones IP de cada país. Como comenta CSF en el archivo de configuración, esta lista no es 100% segura ya que algunos ISPs, usan designaciones de IP para sus clientes mediante criterios no geográficos, lo cual dificulta su ubicación.

Por otra parte, la creación de reglas asociadas a grandes rangos de direcciones IP, pueden representar una disminución en el performance del servidor, con lo cual, no es muy recomendado para servidores VPS; aunque en mi caso, lo he usado en VPS de 1 GB de RAM y me fue muy bien, inclusive, me ayudó con tráfico indeseado.

Con ello en consideración, CSF se apoya en los 2 caracteres de país para la asignación en las reglas de Firewall, a partir de los bloques CIDR administrados por Maxmind GeoLite Country, el cual puedes consultar aquí: http://dev.maxmind.com/geoip/legacy/geolite/ (te sugerimos descargar el archivos CSV disponible para crear tus reglas con mayor seguridad y certeza).

Ahora bien, ¿qué haré? Permitiré el tráfico a México y Estados Unidos, y bloquearé al resto del mundo. Para ello, deberemos editar el archivo de configuración de CSF:

sudo nano /etc/csf/csf.conf

Ahora, buscamos las líneas:

CC_DENY = ""
CC_ALLOW = ""

Y nos aseguramos que queden algo así como:

CC_DENY = "AU,CN,JP,TH,IN,MY,KR,SG,HK,TW,PH,VN,RU,FR,EU,DE,IL,SE,IT,NL,GR,ES,AT,GB,BE,AE,KZ,PT,SA,DK,IR,NO,CA,SY,UA,CY,CZ,CH,IQ,TR,RO,BZ,PA,BR,CL,AR,CO,PL,LB,GE,AZ,A2,PS,LT,OM,SK,RS,FI,IS,HU,BG,SI,MD,MK,LI,JE,HR,BA,PY,EE,LV,JO,A1,KG,RE,IE,IM,LY,LU,AM,VG,YE,BY,GI,QA,KW,GP,MQ,GF,ZA,EG,ID,PK,DO,GU,VI,PR,MN,NZ,NP,PG,AP,CR,PE,NG,VE,BS,MA,SC,BB,KE,BN,BH,AW,LC,BD,TK,KH,MO,MV,AF,NC,FJ,WF,AL,UZ,ME,KP,VA,AQ,BM,CW,EC,KN,WS,GG,MT,TJ,ZW,LR,GH,TZ,ZM,MG,AO,NA,CI,SD,CM,MW,MU,GA,ML,BJ,TD,BW,CV,RW,CG,UG,MZ,GM,LS,DZ,GN,CD,SZ,BF,SL,SO,NE,CF,TG,BI,GQ,SS,SN,MR,DJ,KM,TN,YT,LA,MM,LK,NR,VU,BT,FM,PF,TL,TO,ER,ET,TM,GL,KY,JM,GT,MH,MC,AI,GD,MS,TC,AG,TV,SB,BO,SR,CK,NU,TF,NF,PN,SM,AX,FO,SJ,CC,GS,UM,SX,GW,MF,VC,PM,BL,DM,ST,FK,MP,BQ,AS,KI,PW,GY,HN,NI,SV,AD,HT,TT,UY,CU,SH,CX,IO"
CC_ALLOW = "MX,US"

Ahora, guardamos el archivo, y reiniciamos el CSF:

sudo csf -r

Y revisamos las reglas aplicadas:

sudo iptables -L -n

Pasos finales

Por otra parte, con el objetivo de que nuestro Firewall tome acciones a partir de “falsos positivos” o “información confusa” proporcionada por los registros del sistema (syslog/rsyslog), en el archivo /etc/csf/csf.conf, debemos cambiar esto:

# 0 = Allow those options listed above to be used and configured
# 1 = Disable all the options listed above and prevent them from being used
# 2 = Disable only alerts about this feature and do nothing else
# 3 = Restrict syslog/rsyslog access to RESTRICT_SYSLOG_GROUP ** RECOMMENDED **
RESTRICT_SYSLOG = "0"

Por esto:

# 0 = Allow those options listed above to be used and configured
# 1 = Disable all the options listed above and prevent them from being used
# 2 = Disable only alerts about this feature and do nothing else
# 3 = Restrict syslog/rsyslog access to RESTRICT_SYSLOG_GROUP ** RECOMMENDED **
 RESTRICT_SYSLOG = "3"

Con lo anterior, evitarás también “molestas” alertas del tipo:

*WARNING* RESTRICT_SYSLOG is disabled. See SECURITY WARNING in /etc/csf/csf.conf.

Goodie

CSF es un estupedísimo Firewal; para el caso de este material, podría decir que no está reservado solamente para “bloquear” rangos de IP´s de países sino para implementar un cortafuego por software a tu computadora o servidor.

Por ello, si modificas, en el siguiente conjunto de líneas, puede “decidir” qué puertos deseas mantener abiertos y en qué dirección:

# Allow incoming TCP ports
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995"

# Allow outgoing TCP ports
TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995"

# Allow incoming UDP ports
UDP_IN = "20,21,53"

# Allow outgoing UDP ports
# To allow outgoing traceroute add 33434:33523 to this list
UDP_OUT = "20,21,53,113,123"

…e inclusive, si permitirás que hagan “ping” a tu equipo:

# Allow incoming PING
ICMP_IN = "1"

Si has despertado la curiosidad con respecto a las capacidades de CSF, te recomendamos encarecidamente dar un vistazo a todo el fichero de configuración para hacer pruebas y descubrir sus posibilidades. ¡Te encantará! Cpanel lo integra generalmente a través de WHM, lo cual nos “garantiza” en cierto sentido su mejora y mantenimiento constante.

Nota final

Si al aplicar tus reglas de Firewall con CSF te aparece el mensaje de error:

*WARNING* URLGET set to use LWP but perl module is not installed, reverting to HTTP::Tiny

Es probable que te hayas olvidado de instalar paquetes de Perl de apoyo, con lo cual, solo hace falta instalar un módulo faltante mediante lo siguiente:

sudo apt-get install libwww-perl liblwp-protocol-https-perl

¿Qué pasa en este punto? Según comentan en algunos sitios, CSF implementó el procesamiento de peticiones para HTTP y HTTPS, con lo cual, el modelo LWP::UserAgent procesa muchísimo mejor HTTPS que el modelo HTTP::Tiny.

Si quisieramos evitar usar LWP, hay que buscar la línea:

# "1" = HTTP::Tiny
# "2" = LWP::UserAgent
URLGET = "2"

Y dejarla en algo como esto:

# "1" = HTTP::Tiny
# "2" = LWP::UserAgent
URLGET = "1"
Publicado el Dejar un comentario

Análisis de logs de Apache con Scalp!

Análisis de logs de Apache con Scalp!

En temas de seguridad y protección de servidores, no existe nada mejor que proteger los mismos con aplicaciones de detección de intrusiones como Snort (https://www.snort.org/) o Suricata (http://suricata-ids.org/) u otras ofertas comerciales basadas tanto en hardware (firewalls) como Software (http://www.acunetix.com/) o servicios en la nube (https://www.cloudflare.com/) que actualizan con mayor regularidad sus bibliotecas y/o diccionarios de ataques, y están “más preparados” ante estas amenazas de la red Internet, por los que reaizar análisis de logs de Apache con Scalp! es una fantástica idea para prevenir y/o anticipar amenazas.

En esta ocasión les comparto un analizador de Logs muy sencillo, el cual propiamente, no es el más recomendado para “prevenir” ataques a un servidor Apache sino que más bien, su propósito es el de analizar potenciales huecos de seguridad o vulnerabilidades apoyándose de los registros (logs) que ha dejado atrás Apache para detectar aquellas áreas de oportunidad, mejora, e inclusive, vulnerabilidades propias de sistemas o aplicaciones desarrollados en PHP.

Scalp!, es un script analizador de logs del servidor Apache desarrollado en Phyton, que tiene como objetivo buscar problemas de seguridad. Su idea principal, es “leer” dentro de los registros de accesos al servidor para buscar patrones ataques potenciales mediante el envío de peticiones por los métodos HTTP/GET y HTTP/POST.

El sitio Web oficial de Scalp! es https://code.google.com/p/apache-scalp/.

Primeros pasos

Para los propósitos de este post, he de comentar que estoy realizando pruebas sobre Ubuntu Server 14.04. En este caso, tengo una instalación con Apache 2, PHP5 y MySQL para un servidor Web, en donde mis “logs”, se encuentran dentro del directorio /var/logs/apache2/access.log.

Con esto en consideración, lo primero que tenemos que hacer, es “descargar” el script de Scalp! en nuestro directorio favorito:

wget https://apache-scalp.googlecode.com/files/scalp-0.4.py

(Nota: te sugiero que visites regularmente la página de Scalp! para descargar la última versión actualizada).

Ahora, descargamos el archivo de expresiones regulares que utiliza PHP-IDS (otra estupenda herramienta para proteger a nuestras aplicaciones PHP) para combinarlo en su uso con Scalp! mediante el siguiente comando:

wget https://dev.itratos.de/projects/php-ids/repository/raw/trunk/lib/IDS/default_filter.xml --no-check-certificate

Ahora bien, con estos dos archivos descargados, vamos a hacer nuestro primer análisis de logs:

python scalp-0.4.py -l /var/log/apache2/access.log default_filter.xml -o scalp-output --html

En este caso, al ejecutar Scalp! por primera vez, me arrojó este mensaje de error:

The directory %s doesn't exist, scalp will try to create it
 Loading XML file 'default_filter.xml'...
 The rule '(?i:(\%SYSTEMROOT\%))' cannot be compiled properly

“Tuneando” nuestro fichero de patrones

Con respecto a la primera y segunda línea de error, no tenemos mayor problema. Más bien, el detalle que tenemos que resolver es que al parecer Phyton, no es capaz de “procesar” correctamente parte del contenido XML que descargamos de PHP-IDS. Para ello, la solución es muy sencilla, abrimos el archivo default_filter.xml con nuestro editor favorito:

nano default_filter.xml

Y alrededor de la línea 741, hay que cambiar (referencia: https://code.google.com/p/apache-scalp/issues/detail?id=8) esto:

(?i:(\%SYSTEMROOT\%))

…por esto:

(?:(\%[sS][yY][sS][tT][eE][mM][rR][oO][oO][tT]\%))

Iniciando Scalp!

Con lo anterior, guardamos los cambios, y volvemos a ejecutar el comando de Scap!

python scalp-0.4.py -l /var/log/apache2/access.log default_filter.xml -o scalp-output --html

A continuación, les aparecerá un mensaje como este, ante el cual, solo tenemos que esperar un poco (en función del tamaño de archivo de tu log o de las reglas que hayas pedido ejecutar):

Loading XML file 'default_filter.xml'...
 Processing the file '/var/log/access.log'...
 Scalp results:
 Processed 491229 lines over 491413
 Found 3175 attack patterns in 177.725208 s
 Generating output in scalp-output/access.log_scalp_*

Ahora, solo tienes que ir al directorio scalp-output y “visualizar” en tu navegador en archivo generado para visualizar el reporte completo de patrones de ataque observados.

¡Esta herramienta es genial!

Goodie

Tecleando el comando:

python scalp-0.4.py --help

…podrás obtener la ayuda relacionada con otros patrones de uso de Scalp!.

Scalp the apache log! by Romain Gaucher - http://rgaucher.info
 usage: ./scalp.py [--log|-l log_file] [--filters|-f filter_file] [--period time-frame] [OPTIONS] [--attack a1,a2,..,an]
 [--sample|-s 4.2]
 --log |-l: the apache log file './access_log' by default
 --filters |-f: the filter file './default_filter.xml' by default
 --exhaustive|-e: will report all type of attacks detected and not stop
 at the first found
 --tough |-u: try to decode the potential attack vectors (may increase
 the examination time)
 --period |-p: the period must be specified in the same format as in
 the Apache logs using * as wild-card
 ex: 04/Apr/2008:15:45;*/Mai/2008
 if not specified at the end, the max or min are taken
 --html |-h: generate an HTML output
 --xml |-x: generate an XML output
 --text |-t: generate a simple text output (default)
 --except |-c: generate a file that contains the non examined logs due to the
 main regular expression; ill-formed Apache log etc.
 --attack |-a: specify the list of attacks to look for
 list: xss, sqli, csrf, dos, dt, spam, id, ref, lfi
 the list of attacks should not contains spaces and comma separated
 ex: xss,sqli,lfi,ref
 --output |-o: specifying the output directory; by default, scalp will try to write
 in the same directory as the log file
 --sample |-s: use a random sample of the lines, the number (float in [0,100]) is
 the percentage, ex: --sample 0.1 for 1/1000

Si te interesa el tema, aquí puedes encontrar un estupendo artículo (en inglés) sobre una comparativa entre Snort y Suricata, los IDS (intrusion detection system) Open Source más populares. La liga es: http://wiki.aanval.com/wiki/Snort_vs_Suricata

Publicado el Dejar un comentario

Configuración de un Servidor Proxy Squid + Script de Iptables

En este tutorial, te enseñaré a realizar la configuración de un servidor proxy Squid + script de iptables.

Actualización 20210619.- Esta es una entrada de una publicación antigua en donde, para tener contexto de la época, casi todas las conexiones a sitios web se hacían mediante HTTP (80) y muy pocas sobre HTTPS (443). A pesar de ello, es muy probable que este script y archivo de configuración siga funcionando, así como también, te puede servir de base y referencia para jugar con tus propias configuraciones. KW.

Contexto

Resulta que cuando recién llegué a laborar en una organización, la misma tenía una red de aproximadamente 60 computadoras con una conexión a internet tipo ADLS de 2048 kbps (2 mbps) de bajada, y 256 de subida (0.25 mbps). Como ya imaginarán, la velocidad de conexión era lentísima, por lo cual me dí a la tarea de configurar un servidor Proxy Squid con reglas de Iptables para que pudieramos todos trabajar a gusto, bloquear algunas urls para los usuarios ociosos (juegos, pornografía, videos), etc. En fin, en ese entonces, trabajé sobre OpenSuSE 10.0 como sistema operativo y vale, ahora que tengo Internet en casa, me he configurado un servidor Proxy para mi red casera.

En fin, con todo lo anterior, pongo en sus manos una modesta configuración para Squid 2.6 STABLE5 sobre Debian 4 Etch junto con su respectivo Script de IPTables para que lo echen a andar en su casa o red. Debo mencionar que la configuración de estos servicios, podrían resultar ser no tan sencillos para el usuario novato, más sin embargo, les comentaré lo siguiente:

¿Qué es un servidor Proxy?

En el ámbito de las redes informáticas, el término proxy hace referencia a un programa o dispositivo que realiza una acción en representación de otro. La finalidad más habitual de un servidor proxy, es el de permitir el acceso a Internet a todos los equipos de una organización cuando sólo se puede disponer de un único equipo conectado, esto es, una única dirección IP.

Fuente: http://es.wikipedia.org/wiki/Servidor_proxy

¿Qué es y para qué funciona el programa Squid?

Squid es un popular programa de software libre que implementa un servidor proxy y un demonio para caché de páginas web, publicado bajo licencia GPL. Tiene una amplia variedad de utilidades, desde acelerar un servidor web, guardando en caché peticiones repetidas a DNS y otras búsquedas para un grupo de gente que comparte recursos de la red, hasta caché de web, además de añadir seguridad filtrando el tráfico. Está especialmente diseñado para ejecutarse bajo entornos tipo Unix.

Fuente: http://es.wikipedia.org/wiki/Squid

¿Qué es Netfilter/Iptables?

Netfilter es un framework disponible en el núcleo Linux que permite interceptar y manipular paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del procesamiento. Netfilter es también el nombre que recibe el proyecto que se encarga de ofrecer herramientas libres para cortafuegos basados en Linux.

El componente más popular construido sobre Netfilter es iptables, una herramientas de cortafuegos que permite no solamente filtrar paquetes, sino también realizar traducción de direcciones de red (NAT) para IPv4 o mantener registros de log. El proyecto ofrecía compatibilidad hacia atrás con ipchains hasta hace relativamente poco, aunque hoy día dicho soporte ya ha sido retirado al considerarse una herramienta obsoleta. El proyecto Netfilter no sólo ofrece componentes disponibles como módulos del núcleo sino que también ofrece herramientas de espacio de usuario y librerías.

Iptables es el nombre de la herramienta de espacio de usuario mediante la cual el administrador puede definir políticas de filtrado del tráfico que circula por la red. El nombre iptables se utiliza frecuentemente de forma errónea para referirse a toda la infraestructura ofrecida por el proyecto Netfilter. Sin embargo, el proyecto ofrece otros subsistemas independientes de iptables tales como el connection tracking system o sistema de seguimiento de conexiones, o que, que permite encolar paquetes para que sean tratados desde espacio de usuario. iptables es un software disponible en prácticamente todas las distribuciones de Linux actuales.

Fuente: http://es.wikipedia.org/wiki/Iptables

Utilidad y funcionamiento

Ahora bien, se preguntarán seguramente, ¿para qué sirve Squid + Iptables en la red de una casa, empresa u organización? Mmmm, de mucho. Intentaré explicarlo de manera sencilla:

Imaginen que tienen 20 computadoras conectadas en su red mediante un switch directamente al modem ADSL de la compañía de su preferencia (Prodigy Infinitum de Telmex, por ejemplo), y resulta que esos 20 usuarios requieren entrar a una página como Hotmail, la cual tiene un peso específico (imágenes, documentos html, animaciones, etc.) de 300 kb cada vez que se conectan a ella. Como muchos seguramente sabrán, todos los navegadores destinan una carpeta en su disco duro para almacenar información en algo que llaman “caché”, el cual es un concepto que tiene como principal objetivo, “acelerar” la descarga en el futuro, y solo para esa PC cuando accedan más adelante a la misma página Web. Así pues, bajo nuestro escenario, si tenemos 20 usuarios que entren a Hotmail al mismo tiempo, estaríamos “descargando” entre todos, 6000 kb de información (20 usuarios X 300 kb = 6,000 kb) o lo que es lo mismo, 5.8 megas de información aproximadamente. ¿Qué sucedería en esta situación? Básicamente, que la conexión se alentaría para todos aún y cuando estén bajando todos lo mismo.

configuración de un servidor proxy squid

Y viene aquí la magia de Squid e Iptables (no puede vivir el uno sin el otro, eh), ya que, suponiendo que hemos destinado una vieja PC para hacerla de “proxy” y/o “router” mediante un servidor DHCP (ya platicaré de él en un post posterior), y conectándole un switch de 20 puertos para esas 20 pc´s, lo que sucedería es que la primer PC de nuestra red que intente establecer una conexión a Hotmail, le enviaría la petición a nuestro proxy para que haga una consulta,  en la cual éste revisaría si está “almacenada” en la caché del servidor, y en caso de no ser así, se conectaría a Internet para “descargar” todos los elementos básicos del sitio (imágenes, scripts, animaciones, etc.), con el fin de devolver “la misma respuesta” a todas las demás computadoras. En otras palabras: si una computadora ha “accedido” con anterioridad a Hotmail, habrá “descargado” seguramente a nuestro proxy esos 300 kbs de los que hablaba, evitando “saturar” nuestra con “otras conexiones” similares, ahorrándonos así 5700 kb.

Instalación de un Servidor Proxy Squid

En mi caso, tengo una PC HP Pavilion a110m con un procesador AMD Atlhon a 1.67 mhz, 512 megas de memoria RAM, dos tarjetas de red PCI y disco duro de 40 gb. Mis tarjetas de red están configuradas de la siguiente manera:

  • ETH0 – Tiene una IP del tipo 192.168.1.XX, y está conectada directamente a mi a mi Modem ADLS Prodigy Infinitum
  • ETH1 – Tiene una IP fija del tipo 192.168.0.254, la cual conecta a mi switch (y la hace de servidor DHCP en la clase 192.168.0.x) y que funciona de “puerta de enlace” a los equipos que tengo conectados.

Para instalar Squid en Debian 4 Etch, solo tienen que hacer lo siguiente:

apt-get install squid

Y ¡listo!

Solo deberán acceder a la carpeta:

/etc/squid/

Renombrar el archivo squi/d.conf y “copiar” o dejar en su lugar el mío (o el que ustedes deseen configurar manualmente).

En el caso de mi Script de Iptables, yo lo he guardado en el directorio:

/etc/init.d/fw_squid

Y le he asignado permiso de ejecutable (chmod 777 /etc/init.d/fw_squid)

Ahora, hago que se cargue al inicio, agregándolo en el nivel 3 mediante el enlace simbólico:

ln -s /etc/init.d/fw_squid /etc/rc5.d/S20fw_squid

Y listo!

Caramba, en verdad podría elaborar todo un tutorial sobre esto, pero, vale, por cuestión de tiempo me resulta un poco difícil. Sin embargo, pongo a su disposición mis archivos de configuración a fin de que puedan hacer uso de ellos; en verdad, deseo que les sirvan:

Con los siguientes comandos:

  • /etc/init.d/squid restart – reiniciamos el servidor proxy squid
  • tail -fv /var/log/squid/access.log – “miran” en tiempo real las páginas que visitan las PC´s de su red
  • /etc/init.d/fw_squid.sh – ejecutan el script de iptables
  • iptables -L -n – sirve para ver qué puertos tienen cerrados, abiertos, bloqueados, etc.

¡Hasta pronto!

PD.- Se me olvidaba. Mi script de Iptables para proxy transparente con Squid, es también una joyita que los sacará de muchos apuros. En otra entrega les platicaré más sobre él. ¡Saludos!