pfsense400x100 freebsd_bumper.sh-600x600

Perfil-ProfileBlogSoporte VorumServer Tools/HerramientasProcedimientosProyectos

Virtual_topologiaRedStub


Bitácora.




Continue Reading

(Visited 72 times, 1 visits today)

pfSense 2.3.x – Operaciones con script PhP con base de datos SQLite3

Referencias:

pfsense-php-sqlite3

Estaba pensando instalar el servidor de bbdd relacionales MySQL en pfSense.
Pero tras comprobar que los packages (pkg) en realidad se indexan en pfSense 2.3 en base de datos sqlite3:

Ergo pfSense 2.3 ya tiene su propio motor de gestión de bbdd relacionales de serie 🙂 , y es SQLite3.

Así que he testeado como operar desde un script php con una bbdd sqlite en pfSense 2.3:

Lo básico en SQL:

  • -Crear una bbdd
  • -Crear una tabla
  • -Borrar una tabla
  • -Crear o insertar un registro
  • -Actualizar un registro
  • -Efectuar una consulta de selección
  • -Cerrar la bbdd

Desde shell también se puede operar directamente con un fichero de bbdd sqlite3:
Por ejemplo una consulta de selección:

El código PhP:

<?php

?>

Y voila 🙂

(Visited 32 times, 1 visits today)

pfCentinel V 1.0 Beta – Manager Update Platform/Packages for pfSense Multisite

Descarga/Download:

pfCentinel-V1-Beta.zip

pfCentinel V 1.0 Beta – Manager Update Platform/Packages for pfSense Multisite
pfCentinel V 1.0 Beta – Gestor de actualizaciones de plataforma/paquetes para varios sitios pfSense

pfCentinel V 1.0 Beta – Gestor de actualizaciones de plataforma/paquetes para varios sitios pfSense

Esta utilidad sirve para tener un control de actualizaciones de la plataforma y los paquetes de varios pfSense.

Son dos scripts en php que se ejecutan desde un host pfSense (al que llamaré central) y efectua vía php conexiones ssh2 sobre los hosts pfSense remotos a controlar sus actualizaciones con comandos ssh/bash

pfcentinel-setup-ya-existe-machines-00

Condiciones necesarias:
Tanto el host pfSense (central) que corre los scripts como los hosts pfSense remotos para comprobar las actualizaciones deben de tener activada la Consola ssh
( Enable Secure Shell – sshd ) y ser accesibles vía puerto tcp22.

(Esto es fácil de comprobar: hacer desde la shell del pfSense central un ssh sobre otro pfSense remoto
para el usuario root: # ssh root@ip–otro-pfSense y ver si hay conectividad y acceso/validación ok)

Condiciones recomendables:
Se recomienda que el host que ejecuta los scripts se conecte a los otros hosts vía Tunel (openVPN o IPsec), ya que se supone que los otros hosts son remotos y externos a la LAN del pfSense Central. Y por defecto pfSense bloquea en su interfaz WAN este tipo de acceso.
Es decir evitar dejar un acceso ssh vía WAN a los pfSense y trabajar de forma segura vía tunnel.

La utilidad se compone de 2 scripts php

1.- pfCentinel-Setup.php
2.- pfCentinel-central.php

El 1.- pfCentinel-Setup.php sirve para crear la base de datos de los hosts a controlar o añadir más host a esa bbdd.

pfcentinel-setup-ya-existe-machines-0

La bbdd es un simpe fichero csv, alojado en la ruta /scripts/machines.csv

La bbdd guarda en sus registros los campos:

“descr”;”host”;”platform”;”packages”;”user”;”password”

-Descripción del pfSense remoto, por ejemplo: pfMadrid
-Host del pfSense remoto, la IP del pfSense remoto (altamente recomendable que sea una IP de un tunel openVPN o IPSec)
-Plataforma: la plataforma del pfSense remoto y si necesita update y la versión disponible del update
Valores posibles (por ejemplo):
===============================
CURRENT-2.3.1_5 = Esta al día, no hay update
2.3-UPDATE-to-2.3.1_5 = HAY UN UPDATE (versión actual – UPDATE a – versión disponible)
NO_CONEXION = No hay conectividad al host remoto
ERROR_AUTENTICACION = Hay conectividad pero hay un error de validación ssh2 de usurio:clave en host remoto
-Packages: Si existe algún paquete para actualizar
Valores posibles:
=================
CURRENT = Está al día, no hay updates de paquetes
NO_CONEXION = No hay conectividad al host remoto
ERROR_AUTENTICACION = Hay conectividad pero hay un error de validación ssh2 de usurio:clave en host remoto
UPDATES = Hay actualizaciones de paquetes disponibles.
-User, el usuario para conectarse vía ssh2 al host remoto, usualmente root
-Password, la clave de User para acceder vía ssh2 al host remoto.
En este campo se guarda la clave encriptada para cada host

Se recomienda alojar este script php cli: pfCentinel-Setup.php en un directorio no accesible desde web gui, como por ejemplo el directorio /scripts , o /tmp

Para ejecutar este script (se hace vía shell), si estuviera alojado en la carpeta scripts:

/usr/local/bin/php /scripts/pfCentinel-Setup.php

Al ejecutar viá shell o cli o consola el script pfCentinel-Setup.php, la primera vez, nos irá preguntando por los datos de cada host
(cuando pregunte la clave, no se verá por consola, y se guarda de forma encriptada en machines.csv, por seguridad)

pfcentinel-setup-ya-existe-machines-2

Y hará un test de conectividad, si este da NO CONEXION es que no hay conectividad a ese host vía ssh2,
pero se puede añadir a la bbdd ( An?adimos pftest1 a /scripts/machines.csv ?(y/n):y ) u optar por no añadirlo

Si da un ERROR DE AUTENTICACION, idem al caso anterior, lo normal seria no añadirlo a la bbdd hasta que nos de un Test OK

Y si el test es OK nos mostrará el estado de UPDATES de plataforma y paquetes

Para cortar el bucle del script, a la pregunta:

Continuamos? (y/n):n

Contestar n ( = no), y para continuar, contestar y ( = yes)

Si ya existe el fichero de la bbdd /scripts/machines.csv al volver a ejecutarse este script,
nos avisará mostrando la bbdd y dandonos opción a añadir más hosts

pfcentinel-setup-ya-existe-machines-1

Una vez tengamos la bbdd lista, ya podemos ejecutar desde web gui el script:

2.- pfCentinel-central.php

Este script hay que alojarlo en la ruta:

/usr/local/www/
o
/usr/local/www/pfCentinel/ (u otra subcarpeta debajo de www)

para que sea accesible vía web gui.

Accedemos a la web gui del pfSense central, nos validamos user:pass, y en el navegador indicamos la ruta al script:
Por ejemplo:

https://10.20.10.203/pfCentinel/pfCentinel-central.php

si lo hubiésemos alojado el script en /usr/local/www/pfCentinel-central.php el link seria:

https://10.20.10.203/pfCentinel-central.php

Para 5 hosts tardará de media 1 minuto o menos el script pfCenter-central.php
Por cada host se toma de 10 a 30 sg, en mi entorno de red, para unos 9 host me ha tardado un minuto (58sg).
Hasta que el script no haya recorrido todos los registros de /scripts/machines.csv no va a mostrar nada en el navegador
así que paciencia 🙂

Así que recomiendop no tener una bbdd de más de 15 registros, ya que puede dar el error Gateway Time Out el script y no mostrar nada.

Por lo que para empezar yo probaria la primera vez el script con no más de 10 host pfSense en la bbdd, con 5 seria un buen test.
(De todas formas pocos admins tienen más de 15 pfSense que administrar 🙂 , aunque haberlos haylos)

(En otra versión más adelante cuando controle mejor AJAX (solo con php no se puede mostrar cada registro uno a uno),
podré subsanar esto haciendo que se vaya mostrando cada registro en el navegador en tiempo real)

Una vez termine el scriopt se mostrarán los resultados, y en caso de algún registro con un UPDATE presentará el link para su actualización
(el link funcionará si hay una web gui validada a ese host pfSense)

pfcentinel-setup-ya-existe-machines-3

Se podria automatizar la actualización de la platforma y/o paquetes vía script, pero creo que es un asunto delicado dejar automatizada
updates en un firewall, ya que es la piedra angular o factor crítico de cualquier infraestructura de una red.
Mejor que sea asistida por un técnico o admin, siempre pueden haber sorpresas… 🙂

La página que muestra tiene un campo: Remote Date Last refresh. Muestra la última comprobación de Update del script, pero con la fecha y hora remota
,no la del host central

La tabla que se muestra en la página se puede ordenar clikando en los campos, como por ejemplo en el campo: Remote Date Last refresh

La página tiene un botón Refresh, para volver a lanzar el script, no recomiendo hacer esto más de una  o dos veces al día en un pfSense central en
producción con alta carga de red, ya que el script abre sockets (tcp22) y consume tiempo de cpu y algo de cantidad de ram, y ya se sabe que un firewall, cuanto
menos se le sature, mejor.

Si se ejecutara este script pfCentinel-central.php sin que exista /scripts/machines.csv daria el aviso:

Ejecute vía shell pfCentinel-Setup.php para crear fichero machines.csv, y depues de crearlo, refresque esta página.

EXECUTE via shell pfCentinel-setup.php for CREATE FILE machines.csv:
after create it, refresh this page

pfcentinel-setup-ya-existe-machines-4

Y voila 🙂

(Visited 367 times, 1 visits today)

pfSense – PhP script – Configurar vía script Email smtp Notifications con cuenta de gmail

ref: http://blog.lzahq.tech/2015/01/08/Using-pfSense’s-PHP-Shell/

setupEmailNotifications

Un php cli script para configurar las notificaciones de email smtp de pfSense con una cuenta de gmail.

<?php

?>

Y voila 🙂

(Visited 42 times, 1 visits today)

pfSense – PhP Scripting – Crear Cron

createcron

Un php script para crear un cron (si no existiera ya su comando en la tabla de cron) en pfSense.

Y voila 🙂


Nota: la penúltima linea es (cosas del plugin de wp que no me parsea ok 🙂  )

$config[‘cron’][‘item’][$j][‘command’] = “/usr/local/bin/php /usr/APROBAR/www/vorumserver/of_mail_package_platform_status.php 2&gt;&amp;1”;


Nota mental: Tengo que mirar este estupendo tutorial sobre como Managing Cron Jobs with PHP
No es referido a pfSense, pero a primer vistazo es un tutorial de lujo 🙂
http://code.tutsplus.com/tutorials/managing-cron-jobs-with-php-2–net-19428

(Visited 26 times, 1 visits today)

pfSense 2.3.x – Obtener lista de Pike project para bloquear Tor con pfBlockerNG

pikeTor.php

PikeTor.php – Pike Project PhP code adapted for pfSense 2.3.x
For download Pike Tor List and parsing to pfBlockerNG IPv4 list

Referencias:

pikeTor

El proyecto Pike project, provee una lista de nodos Tor activos las últimas 48hrs y actualizada cada 10 minutos (entre otras listas, como de proxies anonimos, etc).

Tor nodes list with the active nodes in the last 48h updated 10 minutes ago.

Para implementar esta lista en una lista IPv4 de pfBlockerNG, hay que descargarla y “parsearla” al formato del paquete pfBlockerNG.

El proyecto Pike brinda un código en PhP para bajarse la lista en formato Json y pasarla a un array . He modificado ese código para que se pueda ejecutar como un cli php script en pfSense 2.3.x (testeado en 2.3.1_5), se baje la lista, la parsee y la aloje en /usr/local/www/pikeTor.dat .

Alojandoo el script pikeTor.php en un directorio, como por ejemplo /scripts ( /scripts/pikeTor.php ), y definiendo un Cron para que ejecute ese script, por ejemplo, cada x horas, tendremos la lista actualizada cada x horas.

Simplemente habrá que añadir en pfBlockerNG en su IPv4 una lista con la ruta :

/usr/local/www/pikeTor.dat

Y efectuar un Update en pfBlockerNG.

El código

Y voila 🙂

(Visited 81 times, 1 visits today)

pfSense – PhP – fichero csv a Array y encriptar-desencriptar password

ENCRYPT-DECRYPT

Como estoy en un proyecto de desarrollo de pfSense con PhP, donde necesito:

Leer un fichero csv y pasar el contenido a un array (construir un array desde un csv)
-Hay un campo “password” que por seguridad debe guardarse encriptado en el fichero csv
-Y al leerse el campo “password” del csv , se pueda desencriptar.

Tras googlear un rato, lo he solucionado de la siguiente manera:

El fichero /scripts/machines.csv

Las funciónes y el comando que leen el fichero /scripts/machines.csv y lo pasan a un array

La función que encripta/desencripta

Lo implemento en el código html/php (muy resumido, a modo de ejemplo):

//…
foreach ($a_hosts as $hostent):
?>
<td>
<!– desencriptado –>
<?=fenydesencripta($hostent[‘password’], false)?>
</td>
<td>
<!– encriptado –>
<?=fenydesencripta(fenydesencripta($hostent[‘password’], false), true)?>
</td>
<!– …. ->

 

Y voila 🙂

(Visited 31 times, 1 visits today)

pfSense 2.3 – Instalar paquetes FreeBSD – pscp (putty-tools)

pscp

Procedimiento para instalar un paquete FreeBSD en pfSense 2.3.x:

En este caso el paquete es putty, donde se encuentra la utilidad pscp

Editar:

  • “/usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
  • “/usr/local/etc/pkg/repos/FreeBSD.conf

Y poner:

FreeBSD: { enabled: no }

a

FreeBSD: { enabled: yes }

Salvar los ficheros.

Y para instalar el paquete putty:

Y revertimos en los ficheros nombrados antes la cadena de FreeBSD a no:

FreeBSD: { enabled: no }

Y voila 🙂

 

(Visited 44 times, 1 visits today)

PowerShell Script – Envio de mensajes vía icmp y recepción en pfSense

referencia: http://www.javcasta.com/blog/powershell-script-envio-de-mensajes-via-ping/

Rescato de un viejo post mio, donde me encantó descubrir como: Enviar mensajes desde un Win con script powershell, en el buffer del ping (icmp echo request) a otra máquina, un pfSense en este caso.

send-icmp-msg-1

Y para leerlo la maquina receptora, el pfSense tendrá que tener un sniffer escuchando.:

tcpdump -A -v icmp

El código del script icmp-send-msg.ps1

Y voila 🙂

 

(Visited 37 times, 1 visits today)

pfSense 2.3.x – myWPAD – mywpad.php

mywpad.php

mywpad.php GUI script for pfSense 2.3.x to setup WPAD

mywpad.php: Un script php para ser ejecutado desde la GUI de pfSense 2.3.x ( https://ip/mywpad.php )

Configura a pfSense como servidor de WPAD sin revertir GUI a HTTP.

Alojar mywpad.php en la ruta /usr/local/www/ y ejecutar https://ip-pfSense/mywpad.php

mywpad-php-1

Elige la interfaz, marca o desmarca si quieres backup de nginx.conf y/o proxy.pac, y botón apply (aplicar)

El script, entre otras cosas, detecta si dhcp está enable en la interfaz y si existe entrada en unbound para el host wpad y hace los cambios que tenga que hacer. Si te interesa el código y lo que hace, bajate el fichero 🙂

Condiciones necesarias:

  • -Para que WPAD se propague vía dhcp, dhcp server debe estar enable en la interfaz seleccionada
  • -Para que WPAD se propague vía DNS, pfSense debe tener activado DNS Resolver (unbound)

mywpad-php-2

Tras clikar el botón apply nos pregunta si estamos seguros (Aceptar)

mywpad-php-3

Y aparecerá el test de nginx.conf y el contenido de la entrada para el host wpad en unbound. Habrá que clikar el botón Open Services y reiniciar los servicios dhcpd y unbound para que esté operativo WPAD.

mywpad-php-4Y voila 🙂

El fichero y el código en:

mywpad.php

mywpad.php GUI script for pfSense 2.3.x to setup WPAD

 

(Visited 283 times, 1 visits today)

pfSense 2.3.x – PhP Cli script – WPADcliSetup.php IV

WPADcliSetup.php

WPADcliSetup.php

wpadBeta

Pongo en fase Beta el script  WPADcliSetup.php

El código: ( https://forum.pfsense.org/index.php?topic=112715.msg628966#msg628966 )

Y voila 🙂

(Visited 73 times, 1 visits today)