pfsense400x100 freebsd_bumper.sh-600x600

Perfil-ProfileBlogSoporte VorumServer Tools/HerramientasProcedimientosProyectos

Virtual_topologiaRedStub


Bitácora.




Continue Reading

(Visited 129 times, 1 visits today)

Monitorizar logs de pfSense con Nagios Log Server

Enlazando con http://www.javcasta.com/implementacion-de-maquina-virtual-de-nagios-log-server-e-instalacion-en-la-misma-de-nagios-core/

Con ese post veia cómo tener un Nagios Log Server y un Nagio Core en una misma máquina virtual. Ahora voy a monitorizar los logs del pfSense con el Nagios Log Server.

Tan simple cómo configurar en el pfSense, en el menú: Status > System Logs > Settings

En la sección: Remote Logging Options , habilitar:

Enable Remote Logging [x] Send log messages to remote syslog server

Indicando interfaz por donde enviar los logs, lo que queremos que envie al servidor de logs remoto y la IP:puerto del log server remoto

rsyslog

Y si todo ha sido correctamente configurado, en el dashboard del Nagios Log Server se deben de ver los logs del pfSense

rsyslog2

Y voila 🙂

(Visited 23 times, 1 visits today)

pfSense – Script: wol-dhcpleases.sh – Wake On Lan All dhcp leases

Enlazando con el post: http://www.javcasta.com/pfsense-wol-wake-on-lan/

captura-de-pantalla-de-2016-12-04-122221wol-dhcpleases.sh un shell script en pfSense para lanzar un wol a todas las entradas dhcp (dhcp leases) vía todas las direcciones de broadcast de sus interfaces .

#!/bin/sh
# wol-dhcpleases.sh
# wol all dhcp leases via all interfaces
# by javcasta - 2016 - https://javcasta.com

BROADCAST=$(ifconfig | grep broadcast | cut -d' ' -f 6)
DHCPLEASES=$(cat /var/dhcpd/var/db/dhcpd.leases | grep "hardware ethernet" | cut -d ' ' -f 5 | sort -u | sed "s|;||")
for LAMAC in $DHCPLEASES; do
   echo "wake on lan:  ${LAMAC}"
   for ELBROADCAST in $BROADCAST; do
	   /usr/local/bin/wol -i ${ELBROADCAST} ${LAMAC}
   done
done

Y voila 🙂

(Visited 19 times, 1 visits today)

pfSense Memory usage via shell – Obtener vía shell % memoria RAM usada en pfSense

captura-de-pantalla-de-2016-12-02-145217

Buceando en el código de /usr/local/www/includes/functions.inc he implementado una manera de obtener el % de ram usada en pfSense vía shell:

mem-used

[2.3.2-RELEASE][root@pfsense.localdomain]/scripts: echo `php -r “require(‘/etc/inc/functions.inc’);echo ‘% Memoria usada = ‘.round(get_single_sysctl(‘vm.stats.vm.v_page_count’)-get_single_sysctl(‘vm.stats.vm.v_inactive_count’)-get_single_sysctl(‘vm.stats.vm.v_cache_count’)-get_single_sysctl(‘vm.stats.vm.v_free_count’))*100/get_single_sysctl(‘vm.stats.vm.v_page_count’).’ ‘;”`
% Memoria usada = 8.2853002576452

El comando:

echo `php -r "require('/etc/inc/functions.inc');echo '% Memoria usada = '.round(get_single_sysctl('vm.stats.vm.v_page_count')-get_single_sysctl('vm.stats.vm.v_inactive_count')-get_single_sysctl('vm.stats.vm.v_cache_count')-get_single_sysctl('vm.stats.vm.v_free_count'))*100/get_single_sysctl('vm.stats.vm.v_page_count').' ';"`

O de forma más simplificada:

echo `php -r “require(‘/usr/local/www/includes/functions.inc.php’);echo mem_usage();”`

echo `php -r "require('/usr/local/www/includes/functions.inc.php');echo mem_usage();"`

Que coincide por lo indicado en el widget del dashboard

Y voila 🙂

(Visited 34 times, 1 visits today)

Implementación de máquina virtual de Nagios log Server e instalación en la misma de Nagios Core

1. Descargar OVA de Nagios Log Server:

https://assets.nagios.com/downloads/nagios-log-server/1/ovf/nagioslogserver-1.4.4-64.ova

1-download-vm-nagios-log-server

2. Abrir (importar) el OVA con VMware. (o VBox, etc)

2-open-vm-nagios-log-server

3. Iniciar la VM. Iniciar sesión en Nagios log server. root:nagiosls . Y configurar red.

3c-init-sesion

Si deseas cambiar la configuración de red, con lla utilidad system-config-network se hace de forma rápida y fácil.

 2a-system-config-network

Se puede acceder a la shell vía cliente ssh como root (root:nagiosls)

4 Instalamos Nagios Core desde la fuente.

Seguimos el doc de Nagios: Installing Nagios Core From Source.:

https://assets.nagios.com/downloads/nagioscore/docs/Installing_Nagios_Core_From_Source.pdf

 En lo que atañe a CentOS (la VM de Nagios log server viene en CentOS)

El guión de instalación:

# guión
# prerequisitos
yum install -y wget httpd php gcc glibc glibc-common gd gd-devel make net-snmp unzip
# download 
cd /tmp
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.2.3.tar.gz
wget https://nagios-plugins.org/download/nagios-plugins-2.1.4.tar.gz
# usuarios
#useradd nagios
groupadd nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagios,nagcmd apache
# descomprimir
 tar zxvf nagios-4.2.3.tar.gz
tar zxvf nagios-plugins-2.1.4.tar.gz
# install
cd nagios-4.2.3
./configure --with-command-group=nagcmd 

make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/
chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

# start
/etc/init.d/nagios start
/etc/init.d/httpd start

# add usr for web gui and password
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

# install plugins
cd /tmp/nagios-plugins-2.1.2
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

# nagios  services at boot
chkconfig --add nagios
chkconfig --level 35 nagios on
chkconfig --add httpd
chkconfig --level 35 httpd on

Abrimos un navegador con la ip de nagios http://<nagios-ip>, para terminar la instalación del Nagios Log Server (si tienes licencia es el momento de indicarla)

 2b-finish-nagios-log-server-install

Y ya se puede acceder a Nagios Core:

http://<your.nagios.server.ip>/nagios

2c-access-to-nagios

Ya tenemos Nagios Log Server y Nagios Core en la misma máquina virtual (eso sí, el Log server con licencia trial de 60 días 🙂 , pero para practicar, más que suficiente 🙂

Proximamente, cómo monitorizar un pfSense con Nagios Core/Log Server y definir nuestros comandos y scripts personalizados para monitorizar pfSense vía SNMP, etc …

Y  voila 🙂

(Visited 28 times, 1 visits today)

Update 04/12/16: Script: wol-dhcpleases.sh


pfSense – WOL – Wake On Lan

Hacer un WOL (Wake On Lan) es simplemente enviar a traves de una red local (LAN) un “magic packet” a una dirección mac (de capa 2) de una NIC de un equipo para que se inicie (“se encienda” o power on).

Esta utilidad está restringida al dominio de broadcast (no trasciende dispositivos de capa 3: routers/firewall), es decir, a las redes localmente conectadas al pfSense.

La condición necesaria es que el equipo a encenderse, tenga configurada en su BIOS, la opción WOL habilitada (enable).

 

20161124_102318

Desde la GUI del pfSense, en Services > Wake-on-LAN: Elegimos la interfaz por donde enviar el “magic packet” e indicamos la mac de la tarjeta de red del equipo a encender

 

pfsense-wake-on-lan

Clikamos en enviar (send) y si está todo correcto, el equipo deberá iniciar su encendido (power on).

Lo acabo de testear con un pfSense 2.3.2_1 y un portatil Toshiba, y todo OK.

¿Su utilidad?. Imagina que das soporte a una red remota, y puedes acceder a la administración del pfsense vía VPN, pero el equipo remoto al que quieres dar soporte esta apagado y no hay nadie que pueda encenderlo … pues si lo tienes ese equipo con la opción en BIOS de WOL habilitada (y conoces su mac) … pues coser y cantar 🙂


Para los que usen scripting:

La utilidad que envía el magic packet, en pfSense es: /usr/local/bin/wol

# /usr/local/bin/wol --help
Usage: /usr/local/bin/wol [OPTION] ... MAC-ADDRESS ...
Wake On LAN client - wakes up magic packet compliant machines.

    --help          display this help and exit
-V, --version       output version information and exit
-v, --verbose       verbose output
-w, --wait=NUM      wait NUM millisecs after sending
-h, --host=HOST     broadcast to this IP address or hostname
-i, --ipaddr=HOST   same as --host
-p, --port=NUM      broadcast to this UDP port
-f, --file=FILE     read addresses from file FILE ("-" reads from stdin)
    --passwd[=PASS] send SecureON password PASS (if no PASS is given, you
                    will be prompted for the password)

Each MAC-ADDRESS is written as x:x:x:x:x:x, where x is a hexadecimal number
between 0 and ff which represents one byte of the address, which is in
network byte order (big endian).

PASS is written as x-x-x-x-x-x, where x is a hexadecimal number between 0
and ff which represents one byte of the password.

Report bugs to <krennwallner@aon.at>

Por ejemplo para envíar un wol a la mac 00:50:56:00:01:02 en la red local (LAN), siendo la IP de la interfaz LAN del pfSense 192.168.0.254/24, ergo la IP de broadcast 192.168.0.255


 /usr/local/bin/wol -i 192.168.0.255 00:50:56:00:01:02
Waking up 00:50:56:00:01:02...

Y voila 🙂

(Visited 21 times, 1 visits today)

Activar SNMP en pfSense y consulta de cliente SNMP desde un Debian

Un post rápido sobre cómo activar SNMP en pfSense y cómo hacer una consulta SNMP desde un Debian al pfSense

Para activar el daemon SNMP en pfSense, ir a: Services > SNMP

Y habilitar (enable), configurar, indicar la o las interfaces donde va a escuchar el daemon SNMP (bind interface) y salvar

captura-de-pantalla-de-2016-11-23-144343

Ahora mi pfSense responderá a queries SNMP en su interfaz LAN

Desde un Debian, instalo snmp

apt-get update

apt-get install snmp

apt-get install snmp-mibs-downloader

download-mibs

Y efectuo un SNMP querie a la rama public a la ip de la interfaz LAN del pfSense

snmpwalk -v1 -cpublic 192.168.0.254 | more

captura-de-pantalla-de-2016-11-23-144530

Y voila 🙂

(Visited 23 times, 1 visits today)

pfSense script getIblockListByCategory.sh – Obtener listas iBlockLists en categorias

captura-de-pantalla-de-2016-11-20-141015

getIblockListByCategory.sh , un shell script testeado en pfSense 2.3.2_1, para descargar las listas (no de pago) de IblockLists en ficheros gz con el nombre de la categoria (spyware.gz, webexploit.gz, etc)

captura-de-pantalla-de-2016-11-20-140931

Se aloja en un directorio (por ejemplo /scripts) y se ejecuta con

sh /scripts/getIblockListByCategory.sh

Y descarga los ficheros en /tmp/iblocklist/

[2.3.2-RELEASE][root@pfSense232a.localdomain]/scripts: ls -l /tmp/iblocklist/                  total 7188
-rw-r--r--  1 root  wheel     5052 Nov 20 00:01 DROP.gz
-rw-r--r--  1 root  wheel       80 Nov 19 23:01 HOSTS.gz
-rw-r--r--  1 root  wheel    67690 Nov 20 02:02 Malicious.gz
-rw-r--r--  1 root  wheel    12946 Nov 19 19:07 Microsoft.gz
-rw-r--r--  1 root  wheel      231 Nov 19 19:50 Palevo.gz
-rw-r--r--  1 root  wheel   178438 Nov 19 15:00 Pedophiles.gz
-rw-r--r--  1 root  wheel      769 Nov 20 09:15 SpyEye.gz
-rw-r--r--  1 root  wheel     1698 Nov 19 15:20 ZeuS.gz
-rw-r--r--  1 root  wheel    47520 Nov 19 19:48 ads.gz
-rw-r--r--  1 root  wheel   114074 Nov 20 03:01 adservers.gz
-rw-r--r--  1 root  wheel   445274 Nov 19 19:45 badpeers.gz
-rw-r--r--  1 root  wheel    18010 Nov 19 16:11 bogon.gz
-rw-r--r--  1 root  wheel    46173 Nov 20 13:30 cruzitwebattacks.gz
-rw-r--r--  1 root  wheel      625 Nov 19 19:43 dshield.gz
-rw-r--r--  1 root  wheel   758263 Nov 19 20:06 edu.gz
-rw-r--r--  1 root  wheel     3946 Nov 20 02:43 exclusions.gz
-rw-r--r--  1 root  wheel      165 Nov 20 05:52 fornonlancomputers.gz
-rw-r--r--  1 root  wheel     3432 Nov 19 20:04 forumspam.gz
-rw-r--r--  1 root  wheel     3334 Nov 19 14:40 hijacked.gz
-rw-r--r--  1 root  wheel      114 Nov 20 04:21 iana-multicast.gz
-rw-r--r--  1 root  wheel      406 Nov 20 09:49 iana-private.gz
-rw-r--r--  1 root  wheel      283 Nov 19 15:48 iana-reserved.gz
-rw-r--r--  1 root  wheel  3665537 Nov 20 08:24 level1.gz
-rw-r--r--  1 root  wheel  1321060 Nov 19 18:12 level2.gz
-rw-r--r--  1 root  wheel   268600 Nov 19 20:35 level3.gz
-rw-r--r--  1 root  wheel     2537 Nov 19 21:24 malc0de.gz
-rw-r--r--  1 root  wheel       80 Nov 19 16:43 malwaredomainlist.gz
-rw-r--r--  1 root  wheel    37023 Nov 19 23:13 proxy.gz
-rw-r--r--  1 root  wheel     5314 Nov 20 03:35 rangetest.gz
-rw-r--r--  1 root  wheel     9350 Nov 19 19:55 spider.gz
-rw-r--r--  1 root  wheel    50334 Nov 20 04:36 spyware.gz
-rw-r--r--  1 root  wheel    19784 Nov 20 02:37 webexploit.gz

El código de getIblockListByCategory.sh

#!/bin/sh
# getIblockListByCategory.sh
# get iblocklist lists by Category
# @javcasta - Javier Casta?non - https://javcasta.com/ - 2016

if [ ! -d /tmp/iblocklist ]; then
 mkdir /tmp/iblocklist
fi

#categories
for CATEGORY in `curl -s https://www.iblocklist.com/lists.php | egrep -A1 '>*</a></span></td>' | cut -d '>' -f 5 | cut -d '<' -f 1`; do
	CATEGORIES="${CATEGORIES} $CATEGORY"
done

J=1
#download
for NAME in `curl -s https://www.iblocklist.com/lists.php | egrep -A1 '>*</a></span></td>' | egrep -o '[a-z]{20}'`; do
	MYID='$'$J
	#echo $J
	CATEGORY=`echo ${CATEGORIES} | awk -F' -- ' "{ print $MYID }" | tr -d '[[:space:]]'`
	echo $CATEGORY
	J=$((J+1))
	fetch -q -o /tmp/iblocklist/${CATEGORY}.gz "http://list.iblocklist.com/?list=${NAME}&fileformat=p2p&archiveformat=gz"
done

Y voila 🙂

(Visited 55 times, 1 visits today)

Scripting – pfSense-install-FreeBSD-Package.sh – Instalar paquete FreeBSD en pfSense 2.3.x

Referencia: pfSense-install-FreeBSD-Package.sh – Instalar paquete FreeBSD en pfSense 2.3.x

Enlazando con el post:pfSense 2.3 – Instalar paquetes FreeBSD – pscp (putty-tools)

Un shell script: pfSense-install-FreeBSD-Package.sh

Para instalar paquetes de FreeBSD en pfSense.

#!/bin/sh
# pfSense-install-FreeBSD-Package.sh
# @javcasta – Javier Casta?non – 2016 – https://javcasta.com/
###############################################################
# Install FreeBSD package at pfSense 2.3
# Use # sh pfSense-install-FreeBSD-Package.sh <FreeBSD-Package>
###############################################################

# FreeBSD: { enabled: no } =>  FreeBSD: { enabled: yes }
# /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
# /usr/local/etc/pkg/repos/FreeBSD.conf

if [ $# -eq 0 ]
then
echo “No package supplied”
exit 1
fi

FAUX=”/tmp/fauxf2b.tmp”
FILE1=”/usr/local/share/pfSense/pkg/repos/pfSense-repo.conf”
cp $FILE1 /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf.back
FILE2=”/usr/local/etc/pkg/repos/FreeBSD.conf”
cp $FILE2 /usr/local/etc/pkg/repos/FreeBSD.conf.back
NOFREEBSD=”FreeBSD: { enabled: no }”
YESFREEBSD=”FreeBSD: { enabled: yes }”
sed “s|$NOFREEBSD|$YESFREEBSD|” $FILE1  > $FAUX
cp $FAUX $FILE1
sed “s|$NOFREEBSD|$YESFREEBSD|” $FILE2  > $FAUX
cp $FAUX $FILE2

pkg bootstrap
pkg update
yes | pkg lock pkg
pkg lock pfSense-2.3.2
pkg lock dnsmasq-devel
echo ” Install package $1″
yes | pkg install $1
yes | pkg unlock pkg
pkg unlock pfSense-2.3.2
pkg unlock dnsmasq-devel
#rehash

#back
sed “s|$YESFREEBSD|$NOFREEBSD|” $FILE1  > $FAUX
cp $FAUX $FILE1
sed “s|$YESFREEBSD|$NOFREEBSD|” $FILE2  > $FAUX
cp $FAUX $FILE2

La captura de pantalla anterior es para el paquete FreeBSD py27-fail2ban

sh pfSense-install-FreeBSD-Package.sh py27-fail2ban

Y voila 🙂


Aviso de un Admin del foro

https://forum.pfsense.org/index.php?topic=121354.msg670799#msg670799

    Do not do this. We don’t allow FreeBSD packages to be installed directly with good reason. It’s only a matter of time before something gets screwed up in the dependencies or a package gets replaced and the whole system is hosed, or it’ll break wildly on upgrade.

Que viene a decir:

    No hacer esto. No permitimos que los paquetes de FreeBSD se instalen directamente por una buena razón. Es sólo cuestión de tiempo antes de que algo se fastidie en las dependencias o un paquete se reemplaze y todo el sistema esté mal, o se romperá salvajemente en la actualización.

 Lo cual tiene su lógica, ya que las dependencias , pfSense las buscará en sus repositorios y no en los de FreeBSD, ya que pfSense es una distro personalizada de FreeBSD

Así que las pruebas nunca en producción o bajo la responsabilidad de cada uno

(Visited 36 times, 1 visits today)

pfSense – Snort y OpenAppID:Bloquear protocolos de capa 7: openvpn,Facebook,twitter

Referencia: https://forum.pfsense.org/index.php?topic=120647.0

Tras investigar cómo ntopng y Snort detectan loos protocolos de capa 7 ( https://forum.pfsense.org/index.php?topic=120520 , https://forum.pfsense.org/index.php?topic=120399 )

Ahora he configurado Snort para que me bloquee en la LAN, el tráfico de OpenVPN, FaceBook y Twitter.

Obviamente se debe añadir la interfaz LAN a Snort, configurarala sgún necesidades de tu red (hay mucha doc en el foro y google), y para bloquear: OpenVPN, Facebook y Twitter.:

Services > Snort > RulesLAN > Lan Rules > Custom Rules: añadir las reglas

alert tcp any any -> any any (msg:”Facebook1″; appid: facebook; sid: 9000101; classtype:misc-activity; rev:1;)
alert udp !192.168.0.13/32 any -> any any (msg:”OpenVPN”; appid: openvpn;sid: 9000103; classtype:misc-activity; rev:1;)
alert tcp any any -> any any (msg:”Facebook2″; appid: facebook_apps;sid: 9000105; classtype:misc-activity; rev:1;)
alert tcp any any -> any any (msg:”Facebook3″; appid: facebook_like;sid: 9000107; classtype:misc-activity; rev:1;)
alert tcp !192.168.0.13/32 any -> any any (msg:”Twitter1″; appid: twitter;sid: 9000109; classtype:misc-activity; rev:1;)

Atendiendo de poner el sid adecuado (que no esté en uso por otra regla) y asgurándose que en Snort esté habilitado

 Services > Snort > Global Settings > Sourcefire OpenAppID Detectors
Enable OpenAppID

Click to enable download of Sourcefire OpenAppID Detectors

–     Services > Snort > Preprocessors and Flow > LAN > Application ID Detection
Enable

Use OpenAppID to detect various applications. Default is Not Checked.

Las reglas con source !192.168.0.13/32 , indican cualquier origen menos la IP 192.168.0.13 (la forma de definir una excepción en una regla de snort . No aplicamos la restricción a esa IP).

Una cosa importante a la hora de añadir una custom rule en Snort para bloquear protocolos de capa 7, es saber cómo Snort denomina los protocolos para construir la regla.

Por ejemplo para saber todos los protocolos relacionados con FaceBook que Snort reconoce.
Bastaria con hacer un grep filtrando lo que buscamos al volcado del fichero:

/usr/local/etc/snort/appid/odp/appMapping.data

[2.3.2-RELEASE][root@pfSense232a.localdomain]/root: cat /usr/local/etc/snort/appid/odp/appMapping.data | grep facebook
149   Facebook Apps   0   0   852   ~   facebook_apps
629   Facebook   0   161   17   ~   facebook
4068   Facebook Like   0   0   1846   ~   facebook_like

Y ya podremos implementar la regla, con sid adecuado (empezar por el sid 9000000 y >,  asegura que no interfiera con sids de otras reglas ya definidas)

alert tcp any any -> any any (msg:”Facebook3″; appid: facebook_like;sid: 9000107; classtype:misc-activity; rev:1;)

El classtype en una regla personalizada en snort en pfSense, tras leer posts del foro, se recomienda poner alguno siempre, por ejemplo : misc-activity

It is also vital that you always include a “classtype:” keyword in your custom rules

Y voila 🙂

(Visited 85 times, 3 visits today)

Forzar sshd habilitado al inicio del sistema – script force-at-boot-enable-ssh.sh

force-at-boot-enable-sshd

Una demo de como ejecutar un shell script (*.sh) al inicio del sistema en pfSense

#!/bin/sh
# force at boot enable sshd
# force-at-boot-enable-sshd.sh
# @javcasta – 2016 – https://javcasta.com/
# source code /etc/rc.initial
# host this script at /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh
# add execution privilege: chmod +x /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh
# Check to see if SSH is running.
if pgrep -q -a -F /var/run/sshd.pid sshd >/dev/null 2>&1; then
echo “already enable sshd”;
else
#run unattended php -f /etc/rc.initial.toggle_sshd
yes | php -f /etc/rc.initial.toggle_sshd
fi

El script se aloja en /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh

Se le dan permisos de jecución chmod +x /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh

[2.3.2-RELEASE][root@pfSense232a.localdomain]/usr/local/etc/rc.d: ./force-at-boot-enable-ssh.sh 
already enable sshd

Reloading firewall rules. done.
[2.3.2-RELEASE][root@pfSense232a.localdomain]/root: yes | php -f /etc/rc.initial.toggle_sshd
SSHD is currently disabled.  Would you like to enable? [y/n]? 
Writing configuration... done.

Enabling SSHD...
Reloading firewall rules. done.

Y al inicio del sistema de pfSense, si no esta habilitado sshd, se habilita (de forma no atendida).

Y voila 🙂

(Visited 29 times, 1 visits today)