jueves, 26 de marzo de 2020

Monitorizar recursos de un firewall Palo Alto



Cómo monitorizar recursos (CPU, RAM, Sesiones) de un Next Generation Firewall Palo Alto desde CLI.



En tiempos de confinamiento y de work at home, las VPN - es decir, todos los elementos que las hacen posibles - son puntos críticos para la continuidad de negocio.

Quien haya trabajado o esté trabajando actualmente con un firewall físico como endpoint de la VPN a la que se conectan los empleados de una empresa, se habrá dado cuenta de que los recursos de un firewall físico no son ilimitados. Por este motivo, una de las mayores preocupaciones de los departamentos de sistemas a día de hoy es saber si el firewall que usan es capaz de aguantar una gran carga de trabajo o si necesitan barajar otras opciones para permitir el work at home.

En los firewalls Palo Alto encontramos 2 chips de CPU (3 en los nuevos modelos, donde hay un chipset emplazado específicamente para la desencriptación SSL) y un banco de memoria. El primer chip está destinado al management plane (MP) que es la CPU encargada de compilar cambios en la configuración de reglas del firewall. La otra CPU, data plane (DP), se encarga de aplicar las reglas al tráfico que pasa a través del dispositivo. Por último, tenemos la memoria RAM, común para todas las operaciones.

Para empezar la monitorización, podemos averiguar el porcentaje de uso de la CPU del data plane. Para monitorizar la CPU del data plane del firewall, debemos usar el comando show running resource-monitor:

admin@FW(active)> show running resource-monitor Resource monitoring sampling data (per second): CPU load sampling by group: flow_lookup : 31% flow_fastpath : 29% flow_slowpath : 31% flow_forwarding : 31% flow_mgmt : 17% flow_ctrl : 17% nac_result : 31% flow_np : 29% dfa_result : 31% module_internal : 31% aho_result : 31% zip_result : 31% pktlog_forwarding : 31% lwm : 0% flow_host : 28% CPU load (%) during last 60 seconds: core 0 1 2 3 4 5 * 18 34 32 32 32 ...

En este caso, la mejor opción para ver una media de uso de CPU es fijarnos en estos dos apartados:

Resource utilization (%) during last 60 seconds: session: 22 22 22 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 22 22 22 22 22 22 22 23 23 23 ... Resource utilization (%) during last 60 minutes: session (average): 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 21 22 22 21 22 21 21 21 21 21 21 22 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 23

El siguiente problema que podemos encontrarnos al usar un firewall físico como endpoint de VPN es la falta de memoria RAM del aparato. Es conveniente, pues, monitorizar la RAM libre.

Podemos monitorizar conjuntamente la CPU de management y la RAM del dispositivo usando el comando show system resources, una versión de top adaptada por Palo Alto:

admin@FW(active)> show system resources top - 10:21:01 up 9 days, 14:08, 1 user, load average: 0.00, 0.01, 0.00 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 4.2%us, 2.0%sy, 0.1%ni, 93.4%id, 0.1%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 3850716k total, 3498408k used, 352308k free, 189140k buffers Swap: 2008084k total, 2620k used, 2005464k free, 1302264k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1848 30 10 50816 9812 3740 S 5.9 0.3 7:58.32 python 2479 nobody 20 0 157m 33m 6328 S 2.0 0.9 93:39.88 appweb3 2480 20 0 76584 14m 4908 S 2.0 0.4 64:32.14 ikemgr 2495 20 0 160m 19m 5048 S 2.0 0.5 12:39.28 authd 2580 20 0 762m 35m 3576 S 2.0 0.9 20:51.64 mongod 1 20 0 2084 592 564 S 0.0 0.0 0:05.99 init 2 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 RT 0 0 0 0 S 0.0 0.0 0:03.41 migration/0 4 20 0 0 0 0 S 0.0 0.0 0:23.75 ksoftirqd/0 5 RT 0 0 0 0 S 0.0 0.0 0:03.47 migration/1 ...

Las líneas CPU y Mem nos in dican el uso de la CPU de management y de la RAM del dispositivo.

Para acabar, no está de más monitorizar el número de sesiones en uso en el firewall:

admin@FW(active)> show resource limit session current session max session ---------------------------------------- 59800 262142

Con toda esta información, ya podemos saber si nuestro firewall está en las últimas o si es capaz de soportar la carga de trabajo a la que se enfrenta.


Fuentes:

https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000ClUbCAK
https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000ClXwCAK
0

miércoles, 18 de marzo de 2020

NGINX: net::ERR_HTTP2_PROTOCOL_ERROR



Cómo solucionar el error net::ERR_HTTP2_PROTOCOL_ERROR en NGINX y Google Chrome.



Recientemente, me tocó publicar una aplicación web en internet que corría sobre un servidor web WildFly. Para ello, usé NGINX como reverse proxy para enrutar las peticiones de entrada al servidor web.

Desde Firefox, IE y Edge, la web era accesible sin problemas, pero al acceder desde Chrome e ir a un apartado concreto, la web se quedaba cargando indefinidamente.

Tras debugar con las herramientas de desarrollador de Chrome, llegué al siguiente error:


net::ERR_HTTP2_PROTOCOL_ERROR 200

Trasteando con los logs de nginx vi que el problema residía en que el backend, es decir, el servidor al que pasaba las peticiones el NGINX, tenía activada la compresión gzip en el envío de cabeceras. NGINX, por su parte, comprimía de nuevo las cabeceras de cada petición. Y Chrome, en el extremo final, no es capaz de procesar esa doble compresión.

Por lo visto, Chome no es capaz de procesar cabeceras doblemente comprimidas y cuando le llegan ese tipo de cabeceras muestra el "descriptivo" error "HTTP2_PROTOCOL_ERROR".

Para evitar que haya una doble compresión de cabeceras al usar NGINX como proxy inverso, debemos insertar la siguiente línea en el apartado location del bloque server de ese dominio:

proxy_set_header Accept-Encoding "";

Esta directriz le indica a NGINX que edite la cabecera que se enviará al servidor que está detrás del proxy para que este no comprima sus respuestas. De esta manera, se recibirán respuestas sin comprimir por parte del backend, que Chrome podrá tratar sin problema.

El bloque entero debería parecerse a esto:

server { ... location / { ... proxy_set_header Accept-Encoding ""; ... } }

Una vez aplicada esta configuración, recargué NGINX.

A partir de este momento, la web funcionó correctamente bajo Google Chrome.

Otra posibilidad hubiera sido desactivar la compresión en el backend, pero yo no tenía acceso administrativo al servidor. En mi caso, solo podía jugar con la configuración del proxy inverso.


Fuentes:

https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
https://www.busindre.com/uso_de_sub_filter_en_nginx_como_proxy_reverso
2

miércoles, 11 de marzo de 2020

Instalar VMware Tools en CentOS 6



Cómo instalar VMware Tools en una distribución Linux CentOS.



A continuación, explicaré cómo instalar VMware tools (vmtools) en un sistema operativo CentOS.

Antes que nada, instalamos los prerequisitos de vmtools para CentOS:

[root@virtualmachine]$ yum install make gcc kernel-devel kernel-headers glibc-headers perl net-tools

Ahora, montamos la ISO con las vmtools desde el ESXi:



Creamos una carpeta vacía en la máquina virtual:

[root@virtualmachine]$ mkdir /mnt/cdrom

Montamos el CD:

[root@virtualmachine]$ mount /dev/cdrom /mnt/cdrom

Copiamos el contenido del CD a, por ejemplo, /tmp:

root@virtualmachine]$ cp /mnt/cdrom/VMwareTools*.tar.gz /tmp/

Descomprimimos el archivo:

[root@virtualmachine]$ tar xvfz /tmp/VMwareTools*.tar.gz

Nos dirigimos a la carpeta recien creada:

[root@virtualmachine]$ cd /tmp/vmware-tools-distrib

Ejecutamos el instalador:

(Añadir -d para autoaceptar los "defaults")

HOST# ./vmware-install.pl -d Creating a new VMware Tools installer database using the tar4 format. Installing VMware Tools. In which directory do you want to install the binary files? [/usr/bin] What is the directory that contains the init directories (rc0.d/ to rc6.d/)? [/etc/rc.d] What is the directory that contains the init scripts? [/etc/rc.d/init.d] In which directory do you want to install the daemon files? [/usr/sbin] In which directory do you want to install the library files? [/usr/lib/vmware-tools] The path "/usr/lib/vmware-tools" does not exist currently. This program is going to create it, including needed parent directories. Is this what you want? [yes] In which directory do you want to install the common agent library files? [/usr/lib] In which directory do you want to install the common agent transient files? [/var/lib] In which directory do you want to install the documentation files? [/usr/share/doc/vmware-tools] The path "/usr/share/doc/vmware-tools" does not exist currently. This program is going to create it, including needed parent directories. Is this what you want? [yes] The installation of VMware Tools 10.1.10 build-6082533 for Linux completed successfully. You can decide to remove this software from your system at any time by invoking the following command: "/usr/bin/vmware-uninstall-tools.pl". Before running VMware Tools for the first time, you need to configure it by invoking the following command: "/usr/bin/vmware-config-tools.pl". Do you want this program to invoke the command for you now? [yes] Initializing... Making sure services for VMware Tools are stopped. Found a compatible pre-built module for vmci. Installing it... Found a compatible pre-built module for vsock. Installing it... The module vmxnet3 has already been installed on this system by another installer or package and will not be modified by this installer. The module pvscsi has already been installed on this system by another installer or package and will not be modified by this installer. The module vmmemctl has already been installed on this system by another installer or package and will not be modified by this installer. The VMware Host-Guest Filesystem allows for shared folders between the host OS and the guest OS in a Fusion or Workstation virtual environment. Do you wish to enable this feature? [no] Found a compatible pre-built module for vmxnet. Installing it... The vmblock enables dragging or copying files between host and guest in a Fusion or Workstation virtual environment. Do you wish to enable this feature? [no] VMware automatic kernel modules enables automatic building and installation of VMware kernel modules at boot that are not already present. This feature can be enabled/disabled by re-running vmware-config-tools.pl. Would you like to enable VMware automatic kernel modules? [yes] Disabling timer-based audio scheduling in pulseaudio. Do you want to enable Guest Authentication (vgauth)? Enabling vgauth is needed if you want to enable Common Agent (caf). [yes] Do you want to enable Common Agent (caf)? [yes] Detected X server version 1.17.4 Distribution provided drivers for Xorg X server are used. Skipping X configuration because X drivers are not included. Creating a new initrd boot image for the kernel. Generating the key and certificate files. Successfully generated the key and certificate files. vmware-tools start/running The configuration of VMware Tools 10.1.10 build-6082533 for Linux for this running kernel completed successfully. You must restart your X session before any mouse or graphics changes take effect. You can now run VMware Tools by invoking "/usr/bin/vmware-toolbox-cmd" from the command line. To enable advanced X features (e.g., guest resolution fit, drag and drop, and file and text copy/paste), you will need to do one (or more) of the following: 1. Manually start /usr/bin/vmware-user 2. Log out and log back into your desktop session 3. Restart your X session. Enjoy, --the VMware team Found VMware Tools CDROM mounted at /mnt/cdrom. Ejecting device /dev/sr0 ...

Software instalado. Ahora podemos borrar la carpeta de instalación; ya no es necesaria.
0

miércoles, 4 de marzo de 2020

Reiniciar Windows automáticamente cada día



Cómo reiniciar Windows automáticamente cada día (o con una frecuencia elegida).



Puede que nos interese reiniciar una máquina virtual con Windows Server cada noche para limpiar la RAM de la máquina, para matar un proceso determinado o por cualquier otro motivo.

Una de las herramientas que nos ofrece Windows para reiniciarse automáticamente es crear una tarea en el "Programador de tareas" (Task Scheduler en inglés) incluido en todas las ediciones de Windows.

Para acceder al programador de tareas, vamos a inicio y tecleamos "programador de tareas" o "task scheduler" y abrimos la aplicación.

Una vez en la aplicación, creamos una nueva tarea:



A partir de aquí, le damos un nombre y una descripción, configuramos un desencadenador (periodicidad, hora de inicio, expiración, etc.) y, por último, especificamos la acción a realizar.

En el caso que nos ocupa, vamos a usar el siguiente programa con estos argumentos:

%SystemRoot%\system32\shutdown.exe -r -f -t 01

Los argumentos se traducen como:

-r : reiniciar máquina.

-f : forzar acción.

-t : timeout, en segundos, para reiniciar la máquina. El defecto es 20 segundos.

Para más información sobre los parámetros de shutdown.exe, se puede consultar este MS TechNet doc.

Una vez configurados todos los apartados, la tarea quedará activada.

Al día siguiente, podemos comprobar que se ha ejecutado el reinicio fijándonos en la pestaña "Last run time" del programador de tareas / Task Scheduler:



Si en algún momento ya no queremos reiniciar la máquina cada día, o queremos modificar la periodicidad de los reinicios a semanal o mensual, podemos hacer click con el botón derecho encima de la tarea y editarla o eliminarla.
0