miércoles, 28 de julio de 2021

Replicar directorios entre 2 servidores Linux



Cómo replicar una estructura de directorios (sin archivos) entre dos servidores Linux.



Puede que necesitemos replicar una estructura de directorios entre 2 servidores Linux y que solo queramos copiar los directorios, no los archivos. En ese caso, podemos usar la herramienta rsync.

Para esta tarea, usaremos las siguientes opciones de rsync:

Copiar los directorios:

-f"+ */"

No copiar los archivos:

-f"- *"

Seguido de la ruta en origen y la ruta en destino:

HOST# rsync -av -f"+ */" -f"- *" /carpeta/ root@destino:/carpeta/

Tras ejecutar el comando anterior, el árbol de carpetas de origen, es decir, la carpeta que hemos indicado y todas sus subcarpetas, se copiarán en destino, sin los archivos que haya en su interior.

El resto de opciones de rsync significan:

-a: archive mode; es como ejecutar las opciones -rlptgoD
-v: mostrar más información por pantalla.

Rescto al parámetro -a / -rlptgoD, singifica:

-r, --recursivo: entra a los subdirectorios
-l, --links: copiar enlaces
-p, --perms: preservar pemisos
-t, --times: preservar marcas de tiempo
-g, --group: el grupo en destino es el mismo que el grupo en origen
-o, --owner: preservar el autor
-D, -devices --specials: transfiere archivos especiales
0

miércoles, 21 de julio de 2021

PowerShell: comprobar si un puerto está abierto



Cómo comprobar si un puerto está abierto usando PowerShell.



Para comprobar si un puerto está abierto, podemos usar el siguiente script de PowerShell:

Function Test-PortConnection { [CmdletBinding()] # Parameters used in this function Param ( [Parameter(Position=0, Mandatory = $True, HelpMessage="Provide destination source", ValueFromPipeline = $true)] $Destination, [Parameter(Position=1, Mandatory = $False, HelpMessage="Provide port numbers", ValueFromPipeline = $true)] $Ports = "80" ) $ErrorActionPreference = "SilentlyContinue" $Results = @() ForEach($D in $Destination) { # Create a custom object $Object = New-Object PSCustomObject $Object | Add-Member -MemberType NoteProperty -Name "Destination" -Value $D Write-Verbose "Checking $D" -ForegroundColor Yellow ForEach ($P in $Ports) { $Result = (Test-NetConnection -Port $p -ComputerName $D ).PingSucceeded If(!$Result) { $Status = "Failure" } Else { $Status = "Success" } $Object | Add-Member Noteproperty "$("Port " + "$p")" -Value "$($status)" } $Results += $Object # or easier way true/false value # # ForEach ($P in $Ports) # { # $Result = $null # $Result = Test-NetConnection -Port $p -ComputerName $D # $Object | Add-Member Noteproperty "$("Port " + "$p")" -Value "$($Result)" # } # # $Results += $Object # } # Final results displayed in new pop-up window If($Results) { $Results } }

Tras pegar el script en la consola de PowerShell, podemos usarlo de la siguiente manera:

Test-NetConnection -ComputerName hostname -Port 443

Dodne hostname es el hostname de la máquina y 443 el puerto a comprobar.
0

miércoles, 14 de julio de 2021

Evitar contenido HTTP usando NGINX con HTTPS



Cómo evitar mostrar contenido HTTP en una web HTTPS a través de NGINX.



Al pasar un dominio, digamos dominio.com, a través de NGINX actuando como proxy inverso, me encontré que algunos JavaScript no cargaban, por lo que la web funcionaba a medias.

Tras mucho rato tratando de averiguar por qué no cargaban los JavaScript, me di cuenta de lo siguiente:

1) Hacía un redirect HTTP a HTTPS en NGINX.

2) La web cargaba recursos en HTTP en su código fuente que a su vez trataban de ir a HTTPS debido mi configuración de NGINX, y, al estar en el código fuente, este redirect no funcionaba.

Tras dar muchas vueltas y probar sin éxito cosas como:

proxy_set_header X-Forwarded-Proto https;

acabé usando el siguiente header dentro del location del dominio en NGINX:

add_header 'Content-Security-Policy' 'upgrade-insecure-requests';

Esta directiva indica al navegador del usuario que trate todas las URL inseguras de un sitio (las que se sirven a través de HTTP) como si hubieran sido reemplazadas por URL seguras (las que se sirven a través de HTTPS). Esta directiva está destinada a sitios web con un gran número de URL heredadas inseguras.

La directiva 'upgrade-insecure-requests' se evalúa antes que 'block-all-mixed-content', por lo que permite cargar recursos HTTP vía HTTPS sin bloquearlos.
0

miércoles, 7 de julio de 2021

Aumentar tamaño de swap en Linux



Cómo aumentar el tamaño de swap por si el sistema se queda sin memoria RAM disponible.



Administro un sistema operativo Linux que corre directamente sobre una máquina física, sin ningún sistema de virtualización por en medio. Este sistema va algo corto de memoria RAM y cae a menudo.

Mientras espero la llegada de nuevos DIMM's de RAM, lo que he hecho ha sido aumentar el tamaño de swap para que pagine bajo demanda bajando a disco aquellos programas que no necesite usar en un momento dado para evitar que el sistema haga un kernel panic al no contar con la RAM necesaria.

Para aumentar el tamaño de swap en un sistema Linux, podemos aumentar la partición de swap o podemos añadir un swapfile que actúe como espacio swap. Lo más rápido es añadir un swapfile.

Para ello, creamos un directorio donde ubicar el fichero:

HOST # mkdir /swap

A continuación, creamos un swapfile de 100GB:

HOST # fallocate -l 100G /swap/swapfile

Si no disponemos de fallocate, podemos usar dd:

HOST # dd if=/dev/zero of=/swap/swapfile bs=1G count=100 100+0 records in 100+0 records out 107374182400 bytes (107 GB, 100 GiB) copied, 151.577 s, 708 MB/s

- bs indica el tamaño de los bloques a crear.
- count indica el número de bloques a crear en total.

bs * count = el número de GB del fichero.

Damos derechos de lectura/escritura/ejecución al fichero solo a root:

HOST # chmod 600 /swap/wapfile

Indicamos al sistema que el archivo es una swap area:

HOST # mkswap /swap/swapfile Setting up swapspace version 1, size = 100 GiB (107374178304 bytes) no label, UUID=37855cb5-34f6-45b6-a6a3-bdf87642abff

Activamos el fichero:

HOST # swapon /swap/swapfile

Recordar que este fichero se desactivará tras un reinicio del sistema operativo.

Por último, solo queda comprobar que swap ha aumentado su tamaño:

HOST # swapon --show NAME TYPE SIZE USED PRIO /dev/sdb3 partition 32G 0B -2 /swap/swapfile file 100G 0B -3

También podemos mirarlo con el comando free:

HOST # free -h total used free shared buff/cache available Mem: 1.3Ti 777Gi 275Gi 37Gi 324Gi 549Gi Swap: 131Gi 0B 131Gi

Si quisiéramos deshabilitar el swapfile:

HOST # swapoff /swap/swapfile

Listo.
1