Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Parte 1 - Proxmox VE
Proxmox
Cómo hacer la serie de laboratorio en casa
Laboratorio casero
Tabla de contenido
Por qué Home Lab
o Pros
o Contras
¿Por qué no Docker?
¿Qué es Proxmox VE?
Requisitos
Obtener Proxmox
Instalar Proxmox
Reparar actualizaciones de software
Crea una VM
Pros
Contras
Requisitos
Para un laboratorio doméstico de lo esencial, realmente solo necesitamos dos
componentes principales; un host de virtualización y un dispositivo de red para
manejar el enrutamiento del tráfico. Cualquier PC relativamente moderna debería
funcionar siempre que la CPU admita la virtualización. ¿Quizás tienes una vieja
torre de computadoras en el garaje acumulando polvo? En cuanto al enrutamiento
del tráfico, su módem o enrutador existente debería funcionar bien por ahora, se
pueden implementar mejores alternativas en el futuro si lo desea.
Nota: Parece que el Qotom Q255G4 tiene pocas existencias para la mayoría de
los vendedores y se agota con frecuencia; puede consultar los listados de
búsqueda aquí para ver vendedores con unidades similares en existencia. Desea
al menos un procesador Intel i5-5200U (porque admite tanto la virtualización como
AES-NI) y 8GiB o más de RAM.
Obtener Proxmox
Una vez que tenga una máquina para usar, pongamos en funcionamiento
Proxmox; Proxmox es un entorno de virtualización creado en Debian
Linux. Continúe y descargue el instalador más reciente del sitio web de Proxmox ,
luego diríjase a la página de instrucciones de instalación y siga los pasos para
crear un instalador USB.
Instalar Proxmox
ADVERTENCIA: Todo lo que esté en su próxima máquina servidor se
eliminará , así que asegúrese de tener todas las cosas importantes fuera de él
antes de continuar.
Utilizar las teclas de flecha para navegar por el menú (por lo general hay
instrucciones en la parte inferior de la pantalla), en primer lugar buscar la
configuración de arranque y mover el instalador USB a la parte superior de la lista,
a continuación, mirar a través de la configuración avanzada para cualquier cosa
que diga virtualization, VT-x, VT-d, AMD-Vo IOMMUactive cualquiera que esté
disponible. Finalmente, busque la opción "Guardar y salir", el sistema se reiniciará
y, con suerte, cargará el instalador de Proxmox.
Puntos extra: si ya tiene una red doméstica avanzada, configure los registros
DHCP y / o DNS de su enrutador para que el nombre de host apunte a su
servidor. Está totalmente bien omitir este paso si no tiene idea de lo que estoy
hablando.
Verifique la configuración una vez más en la página de resumen y luego haga clic
en Instalar.
cd /etc/apt/sources.list.d
mv pve-enterprise.list pve-enterprise.list.disabled
echo 'deb http://download.proxmox.com/debian/pve buster pve-no-
subscription' > pve-community.list
apt update
apt -y dist-upgrade
Una vez que tenga una ISO en su estación de trabajo, vuelva a la interfaz web de
Proxmox y haga clic en la flecha desplegable junto al nombre de su servidor, haga
clic en local (almacenamiento), haga clic en contenido y luego en el botón de
carga. Elija la imagen ISO que acaba de descargar y espere a que se cargue en
su servidor.
Para crear una nueva máquina virtual, haga clic en el botón Crear VM en la parte
superior derecha, ingrese un nombre significativo para esta VM como todo-list-
appy haga clic en Siguiente.
En la pestaña Sistema operativo, haga clic en la flecha desplegable junto a la
imagen ISO y elija la que cargó anteriormente. Continúe y haga clic en Siguiente
hasta llegar a la pestaña CPU, puede experimentar con las otras configuraciones,
pero tenga en cuenta que algunas configuraciones pueden hacer que la VM no se
inicie dependiendo de su sistema, así que mantengamos esta primera realmente
simple.
Aquí puede elegir la cantidad de sockets y núcleos que tendrá su CPU virtual,
realmente no hay una diferencia significativa entre sockets y núcleos a menos que
tenga varias CPU en su servidor, generalmente solo uso núcleos y dejo sockets
configurados en 1 debido a la licencia implicaciones para software como el
servidor de Windows (aunque Microsoft parece estar avanzando hacia las
licencias basadas en el número de núcleos, por lo que ya no hace mucha
diferencia).
Para la memoria, le doy a esta VM 1024 MB de RAM, que es 1 GiB. Continúe,
haga clic en siguiente y acepte los valores predeterminados para todo lo demás,
es posible que desee reducir el tamaño del disco según la cantidad que tenga
disponible, debería poder ejecutar Ubuntu 18.04 Server en tan solo 4 GiB.
Después de que se complete la configuración (puede tomar unos minutos), verá el
nombre de su nueva y brillante VM en la columna de la izquierda, continúe y haga
clic en eso, luego haga clic en iniciar en la parte superior derecha y luego haga clic
en consola en el interior columna izquierda.
¡Eso es! ¡Ahora tienes una máquina virtual!
En este punto, siéntase libre de jugar y sentirse cómodo con su servidor de
virtualización. Intente agregar algunas máquinas virtuales más, tal vez algunos
sistemas operativos diferentes de diferentes imágenes ISO.
Tabla de contenido
Prefacio
Actualizaciones de software
Actualizaciones de la versión PVE
Copia de seguridad y restaurar
o Instantáneas frente a copias de seguridad
o Copia de seguridad y restauración manual
Crear una copia de seguridad
Reinstalar desde el respaldo
Restaurar a una nueva máquina virtual desde la copia de seguridad
Copias de seguridad programadas
Solucionar el error "Se alcanzó el límite máximo de copias de seguridad"
Prefacio
Debido a la emoción abrumadora que presencié durante el primer segmento de
esta serie, decidí hacerlo continuo en lugar de solo 6 partes, ¡eso no es suficiente
para cubrir el viaje que estamos haciendo juntos! Me gustaría agradecer a todos
los que brindaron comentarios y críticas constructivas que me ayudaron a mejorar
la edición inaugural de la serie de varias maneras, ¡sigan así!
Actualizaciones de software
Dado que aún no hemos configurado las alertas por correo electrónico, deberá
buscar nuevas actualizaciones con regularidad, sugiero una vez por semana como
mínimo.
También debe mantenerse al día con las actualizaciones de software para cada
una de sus máquinas virtuales, los comandos difieren para cada sistema
operativo, pero en Ubuntu, debe ejecutar apt update, seguido de apt dist-
upgrade -ypara buscar e instalar todas las actualizaciones disponibles.
Desde la interfaz web, haga clic en el nombre de su servidor, luego haga clic en el
botón de shell.
Deberá elegir la opción " Mostrar las diferencias entre las versiones ".
Eso no estuvo tan mal, ¿verdad? Todo lo que queda por hacer es reiniciar el
sistema cuando finalice la actualización.
Como regla general, si solo desea crear un "punto de control" de una máquina
virtual antes de realizar una actualización importante o realizar un cambio
arriesgado, elija una instantánea para que pueda revertirla rápidamente si las
cosas salen mal, y elimine el instantánea cuando haya terminado. Para cualquier
otro caso de uso, solo use una copia de seguridad.
Debería tener al menos una VM en este momento, así que hagamos una copia de
seguridad de eso. Está perfectamente bien realizar una copia de seguridad en una
máquina virtual que se está ejecutando, sin necesidad de apagarla. Explore el
nombre de su VM en el menú de la izquierda y haga clic en él, luego haga clic en
la pestaña de copia de seguridad y luego haga clic en el botón de copia de
seguridad ahora. Los pasos para trabajar manualmente con copias de seguridad e
instantáneas son prácticamente idénticos, por lo que omitiré repasar las
instantáneas, puede seguir estos mismos pasos utilizando la pestaña de
instantáneas en lugar de la pestaña de copias de seguridad
En el menú de opciones, están disponibles las siguientes opciones:
También puede realizar una restauración en una máquina virtual que no sea la
que originalmente se realizó la copia de seguridad. Desde la interfaz web,
profundice en el almacenamiento en el que se encuentran sus copias de seguridad
(probablemente local), haga clic en la pestaña de contenido, luego en el nombre
de la copia de seguridad y luego en el botón de restauración.
Tiene dos nuevas opciones esta vez, VM ID, que es solo un identificador numérico
que es único para cada VM (¡no use valores inferiores a 100 aquí!), Y la casilla de
verificación única. La casilla de verificación única aleatorizará ciertos valores como
la dirección MAC para que la red vea esta máquina virtual como un sistema único
en comparación con el sistema originalmente respaldado, recomiendo dejar esta
casilla marcada.
Ahora que tenemos las cosas matemáticas fuera del camino, desde la interfaz
web, navegue hasta centro de datos> almacenamiento, haga clic en local (o su
almacenamiento de respaldo si ha agregado almacenamiento adicional), luego
haga clic en editar.
Junto al máximo de copias de seguridad, ingrese el número del cálculo anterior, o
simplemente use 1 como el que tengo si desea el máximo espacio para respirar
para futuras VM.
Eso es todo lo que tengo para este segmento, ¡y ya estoy trabajando en la parte 3
para ti! Mientras tanto, te dejo con esta increíble lista de proyectos
autohospedados de código abierto que puedes ejecutar en tu laboratorio
doméstico. ¿Quizás quieras hacer una lista de proyectos que te gustaría
configurar?
Proxmox guarda las copias de seguridad programadas como trabajos cron, y cron
es un componente del sistema operativo Linux que solo ejecuta un comando en
una fecha y hora específicas, es una herramienta muy poderosa. Necesitamos
editar la configuración de la tarea cron para cada programa de copia de seguridad
que necesite eliminar automáticamente las copias de seguridad más antiguas, si
no lo hacemos, la copia de seguridad fallará una vez que se alcance el número
máximo de copias de seguridad.
nano /etc/cron.d/vzdump
Todo lo que necesita hacer es agregar --remove 1a cada línea justo antes de la --
mailnotificationconfiguración. Debería parecerse a la captura de pantalla a
continuación.
Prefacio
Obtener pfSense
o Configurar la red de VM
o Configurar una máquina virtual pfSense
o Instalar pfSense
o Configurar pfSense
Configurar una máquina virtual de Template Server
Crear una máquina virtual de servidor web
o Calderería
o Instalar NGINX
Reserva DHCP
Configurar el reenvío de puertos
Sirva una aplicación en NGINX
Prefacio
En este segmento, aprenderá cómo poner en marcha una aplicación web
utilizando algunas de las mejores prácticas y metodologías en su host Proxmox
VE.
Nota: ¡NAT por sí solo NO es seguridad! Un hacker astuto puede eludir NAT, por
eso usaremos pfSense para agregar un firewall a la red del laboratorio privado.
Nota: Las reglas del firewall para proteger su red doméstica de la red de su
laboratorio se cubrirán en un artículo futuro, esta configuración por sí sola no es
segura para hospedarse en Internet abierta, llegaremos pronto, mientras tanto
diviértase con el viaje ¡y juega mientras aún puedes romper cosas con
consecuencias mínimas!
Obtener pfSense
Diríjase a la página de descarga de pfSense y obtenga la última versión, querrá la
arquitectura AMD64 y el instalador de imagen de CD.
Necesitará tener algún software instalado para extraer el archivo, yo uso 7-zip
para esto porque agrega una buena opción de menú contextual en Windows.
Debe reiniciar el host Proxmox antes de continuar para que la nueva red esté
disponible para que pfSense la use.
Cree una nueva máquina virtual, si marca la casilla avanzada en la parte inferior,
tendrá la opción de configurar la configuración de inicio automático:
Siempre marque la casilla para discard, esto liberará espacio de los archivos
eliminados en el invitado de la VM, si no está marcada, el espacio libre estará
disponible para el invitado de la VM, pero seguirá marcado como usado en el
dispositivo de almacenamiento y host Proxmox
En la pestaña CPU, configure los núcleos de CPU para esta VM, 1 o 2 deberían
estar bien, y configure las unidades de CPU en 2048. Las unidades de CPU le dan
a cada VM una prioridad para el tiempo de CPU, por lo que las VM que son menos
críticas pueden usar el valor predeterminado valor de 1024, y las máquinas
virtuales críticas deberían obtener un valor más alto para que tengan prioridad si
hay una gran demanda de uso de la CPU.
Para la memoria, 512MiB debería estar bien, siempre puede agregar más más
tarde si es necesario.
Instalar pfSense
Haga clic en el botón de inicio en la barra de menú superior, y luego haga clic en
la pestaña de la consola a la izquierda para ejecutar el instalador de pfSense, las
opciones de instalación predeterminadas deberían estar bien.
Después de reiniciar la máquina virtual, se le pedirá la siguiente entrada antes de
que se complete el inicio:
Una vez finalizado el arranque, elija la opción 8 y presione Intro para abrir una
sesión de shell.
Necesitamos deshabilitar el filtro de paquetes (firewall) temporalmente para que
podamos acceder a la interfaz web desde el lado WAN que está deshabilitado de
manera predeterminada, use el comando pfctl -dpara lograr esto y observe la
dirección IP de la interfaz WAN que se muestra arriba de las opciones del menú. lo
necesitará en el siguiente paso.
Acción: Pasar
Deshabilitado: sin marcar
Interfaz: WAN
Familia de direcciones: IPv4
Protocolo: TCP
Fuente
o Red: de donde vendrá el tráfico permitido, esta debería ser su red
doméstica.
Destino
o Destino: este cortafuegos (propio)
o Rango de puerto de destino
De: pfSense_Admin_Ports (el alias que creamos
anteriormente)
Para: pfSense_Admin_Ports (el alias que creamos
anteriormente)
Opciones extra
o Descripción: Esto es solo para ayudarlo a identificar reglas, es útil
cuando tiene una lista larga de reglas en una interfaz.
Para el resto de este artículo, cuando vea este mensaje después de cambiar algo,
siga adelante y haga clic en Aplicar cambios, se muestra porque hay algunos
casos en los que es posible que deba cambiar varias configuraciones antes de
aplicar para que todos los cambios se apliquen a la vez. pero hoy no estamos
haciendo nada parecido.
Ya conoce el ejercicio, ingrese una nueva contraseña dos veces y haga clic en
guardar en la parte inferior de la página.
Usted es libre de usar cualquier distribución de sistema operativo que elija, yo uso
Ubuntu aquí porque es una opción popular y hay muchos recursos disponibles
para ayudar si los necesita.
Agregue una nueva máquina virtual, aquí están las configuraciones que usé:
General
o ID de VM: 1001 (me gusta mantener las plantillas al final de la lista
de VM)
o Nombre: Ubuntu-18.04.3-20190824 (también me gusta poner la
fecha de creación en el nombre de la VM)
SO
o CD ISO: ubuntu-18.04.3
o SO invitado: Linux / 5.x
Sistema
o Defaults
Disco duro
o Tamaño: 8 GiB (incluso podría bajar a 4 GiB, se puede agregar más
espacio a los clones si es necesario)
o Descartar: marcado (siempre marque esta casilla como se explicó
anteriormente)
UPC
o Núcleos: 2 (esto se puede cambiar en los clones según sea
necesario)
Memoria
o MiB: 512 (esto también se puede cambiar en los clones)
La red
o Puente: vmbr1 ( use la red privada de VM )
También elegí Use an entire disk and set up LVMdurante la instalación, esto
hace que agregar espacio en disco más adelante sea mucho más fácil.
Cuando se le solicite, elimine los medios de instalación de la máquina virtual.
Después del reinicio, abra una consola en la nueva máquina virtual y ejecute los
siguientes comandos para instalar todas las actualizaciones de software
disponibles.
Solución de problemas:
Si obtiene errores aquí como lo hice yo, intente ejecutar el comando ping
google.com, si obtiene respuestas, intente el comando curl -I google.com, si eso
falla pero el comando ping funciona bien, regrese a su página de administración
de pfSense y diríjase a Sistema> Avanzado> Redes, verifique el cuadro Disable
hardware checksum offloady haga clic en guardar, esto me puso en
funcionamiento.
Cada vez que clona una máquina virtual, debe ejecutar los siguientes comandos
para asegurarse de que el nuevo sistema se vea como una máquina única en la
red y mantener cierta entropía para SSH si está instalado (también debe recibir
una dirección MAC única para todas las interfaces de red cuando ejecuta la
operación de clonación). Todos los comandos a continuación deben ejecutarse
como usuario root, esto se puede lograr en Ubuntu precediendo cada comando
con sudo, o ejecutando primero el comando sudo -ipara iniciar una sesión de root.
rm -f /var/lib/dbus/machine-id
rm -f /etc/machine-id
dbus-uuidgen --ensure=/etc/machine-id
ln -s /etc/machine-id /var/lib/dbus/
La máquina virtual debe reiniciarse para completar los cambios, pero esperemos
por ahora, ya que tendremos que reiniciar después de configurar la reserva DHCP
en pfSense.
Instalar NGINX
Ejecute el comando sudo apt install -y nginx, NGINX se envía con una página
de destino simple por defecto para hacerle saber que está funcionando, así que
eso es todo lo que hay para este paso.
Reserva DHCP
Asignar una reserva de DHCP significa que cuando el host configurado se inicia y
solicita una dirección IP del servidor DHCP (en pfSense), se le dará la dirección
especificada en lugar de obtener una dirección del grupo DHCP que puede no ser
siempre la misma en el siguiente reinicio (el grupo de DHCP es un rango de
direcciones IP que se entregarán automáticamente a los nuevos hosts).
Elija una dirección IP fuera del grupo DHCP y agregue una descripción opcional,
luego guarde y aplique los cambios.
Relacionados How to Home Lab: Parte 8 - Introducción a Docker: instalación y
uso.
Ahora diríjase a Firewall> NAT> Port Forward y haga clic en el botón Agregar.
Para la regla de reenvío de puertos, elija estas opciones:
En caso de que aún no lo supiera, cuando visita una página web http://en su
navegador, la solicitud va al puerto 80 usando el protocolo HTTP (tráfico no
encriptado), e https://irá al puerto 443 y usará el protocolo HTTPS (encriptado),
agregar dos puntos después de la dirección establecerá manualmente el puerto de
destino, pero el protocolo aún se selecciona por la presencia o ausencia de la
letra sposterior http.
Pongamos algo útil en nuestro servidor NGINX solo por diversión, elegí
una aplicación de mapas mentales solo porque es muy fácil de instalar, pero
siéntete libre de probar otras cosas y experimentar.
Aquí está una gran explicación de los permisos de archivos de linux de linux.com
Tabla de contenido
Prefacio
Configurar un punto final web
o Crea una nueva VM
o Instalar dependencias
o Agregar espacio en disco
o Aprovisionar aplicación web
o Reserva DHCP
Configurar proxy inverso
o 4t-app.conf
Míralo en acción
Prefacio
En este segmento, aprenderá a configurar un proxy inverso NGINX, agregar
espacio en disco VM y administrar aplicaciones NodeJS con pm2. Voy a configurar
una instancia de la aplicación '4t' que armé en React, que es un temporizador de
20, 20, 20 para la salud ocular que uso todo el tiempo, pero puedes configurar
cualquier back-end. anfitrión que desee.
Lo primero que debemos hacer es configurar una aplicación web en una nueva
VM para el tráfico de proxy, así que clonemos nuestra plantilla nuevamente.
Deberá seguir los pasos estándar de la parte 3 para establecer un nombre de host
único y darle a la nueva VM algo de entropía.
Instalar dependencias
Ahora nos encontraremos con un problema, ¡estamos casi sin espacio en disco en
esta máquina virtual!
También podría cambiar el tamaño del disco duro existente en la mayoría de los
casos, pero quiero demostrar el poder y la flexibilidad de LVM aquí, así que
agregaré un nuevo disco y combinaré los dos.
Después del reinicio, podemos ver que el dispositivo de bloque montado como /,
que es nuestro LV, ha aumentado a 11GiB de tamaño.
Aprovisionar aplicación web
nano package.json
touch startup.sh
chmod +x startup.sh
nano startup.sh
npx serve --single --no-clipboard build
Por último, guarde la configuración en ejecución para PM2 con el comando pm2
save.
Reserva DHCP
4t-app.conf
server {
listen 80;
server_name 4t.burns.lab;
location / {
proxy_read_timeout 36000s;
proxy_http_version 1.1;
proxy_buffering off;
client_max_body_size 0;
proxy_redirect off;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_hide_header X-Powered-By;
proxy_pass_header Authorization;
proxy_pass http://172.16.44.102:5000;
}
}
Tenga en cuenta que no todas las opciones son necesarias para todas las
circunstancias, para este caso de uso en particular podríamos haber omitido la
mayoría de ellas, y hay muchas otras que tampoco he enumerado aquí. Guardo
todas estas opciones en todas mis configuraciones solo para no tener que
buscarlas cuando las necesito, simplemente copio una configuración existente y la
edito para el nuevo servidor back-end. Esto es lo que hacen:
Debe probar la configuración con el comando sudo nginx -t, si vuelve con éxito,
continúe y reinicie NGINX con el comando sudo service nginx restart.
Míralo en acción
Aquí es donde realmente comenzamos a ver el inconveniente de ejecutar una red
privada interna en Proxmox sobre una solución de red doméstica personalizada
(abordaremos esto en un segmento futuro). Si lo visita http://(IP address of
your pfSense VM), obtendrá el sitio predeterminado que se ejecuta en el servidor
NGINX y no el sitio con proxy inverso, porque necesitamos que el encabezado del
host coincida con el archivo de configuración para el sitio con proxy
( 4t.burns.laben mi ejemplo anterior).
Ventanas: C:\Windows\System32\drivers\etc\hosts
Linux / Mac: /etc/hosts
Tabla de contenido
Prefacio
Configurar una máquina virtual de punto de acceso
o Redes
o Calderería
o Configuración SSH
Pares de claves SSH
o Crear un par de claves
o Administrar el acceso a la clave SSH
Asegure el servidor SSH
o Más configuración SSH
o Configurar Fail2Ban
Pruebe su configuración
Acceder a otros hosts
Consejos y trucos
o TMUX
o Comandos rápidos
o Transferir archivos
o Túneles
Prefacio
Muy bien, este debería ser el último segmento de la serie antes de quetransmitir
nuestra señal pirata y piratear Matrixir en vivo y hospedarse en Internet abierto. Lo
que estamos haciendo aquí es crear un punto final dedicado para el acceso
remoto y agregarle una cantidad razonable de seguridad. Esto nos da acceso
remoto a una sesión de consola realmente utilizable en otras máquinas virtuales
invitadas para que podamos hacer cosas geniales como copiar y pegar, por
ejemplo.
Usaremos SSH con una configuración bloqueada para permitir el acceso solo con
una clave, no se permiten contraseñas, y también configuraremos Fail2Ban como
una medida de seguridad adicional. También mencionaré algunas otras tácticas
que puede usar para bloquear su servidor SSH.
¿Por qué no usar SSH en pfSense? Es mejor tener SSH disponible para Internet
abierto solo en un punto final dedicado, en el improbable caso de que su punto
final SSH esté comprometido, simplemente puede desconectar la red de esta
máquina virtual en Proxmox, lo que le permite detener la amenaza y mantener la
máquina virtual en funcionamiento. mientras investiga, sin interferir con los
servicios de producción. Aún podrá SSH en pfSense, solo tiene que pasar primero
por el punto de acceso.
Calderería
¿Estás harto de esta parte? Yo también, construí un pequeño script bash para
automatizar el proceso de generar una nueva ID de máquina y claves de servidor
SSH, y establecer un nuevo nombre de host. Puede usarlo iniciando una sesión de
consola en su nueva VM (a través de Proxmox) y ejecutando el siguiente comando
que ejecutará el script directamente desde GitHub. (¿No sería bueno tener copiar
y pegar cuando terminemos este segmento?).
sudo bash -c "bash <(wget -qO-
https://raw.githubusercontent.com/dlford/ubuntu-vm-
boilerplate/master/run.sh)"
dlford / ubuntu-vm-boilerplate
Un script bash simple para manejar configuraciones repetitivas para máquinas virtuales Ubuntu
clonadas (ID de máquina, claves de servidor SSH, nombre de host) - dlford / ubuntu-vm-boilerplate
Configuración SSH
Por seguridad, solo debe crear claves en la máquina que las utilizará, no cree
claves SSH en el servidor ni en ninguna otra máquina y luego transferirlas a una
nueva máquina. Si tiene varias estaciones de trabajo, cree varias claves, si se
deshace de una estación de trabajo o reinstala el sistema operativo, simplemente
cree una nueva clave (¡elimine el acceso a la antigua desde su servidor también!).
Si está en Windows 10, ejecute esto desde PowerShell, si obtiene un error de "no
existe tal comando", debe instalar el cliente SSH. Abra la aplicación Configuración
y busque "Administrar funciones opcionales", desplácese hacia abajo hasta
"Cliente OpenSSH" y haga clic en Instalar.
Se le pedirá un directorio para almacenar los archivos clave (presione enter para
aceptar la ubicación predeterminada) y una contraseña opcional que recomendé
usar al menos en cualquier dispositivo que salga de su hogar (deberá proporcionar
la contraseña para usar la clave).
Esto debería crear un nuevo par de claves rsa de 4096 bits con el comentario
yourname @ devicename, el comentario es bueno para cuando necesite
desautorizar una clave del servidor, sabrá el usuario y el dispositivo que tiene esa
clave privada en particular.
Existe una herramienta útil para copiar claves públicas a un servidor, ejecute el
siguiente comando para copiar su nueva clave pública SSH a la apVM.
ssh-copy-id username@ip-address
Verá una advertencia acerca de que The authenticity of host ... can't be
establishedesto sucede porque el servidor SSH en la apVM tiene una clave de
servidor que es desconocida para su estación de trabajo, si elige Sí, continuará
conectándose y guardará la clave del servidor en su estación de trabajo. Si se
tratara de un servidor al que se conectó antes, debería ser preocupante recibir
esta advertencia, ya que puede ser evidencia de un juego sucio, por ejemplo, un
pirateo de DNS para robar su clave SSH haciéndose pasar por el servidor al que
estaba tratando de conectarse , afortunadamente, el cliente SSH se negará
rotundamente a conectarse si hay una falta de coincidencia de la clave del
servidor (una falta de coincidencia sería una situación en la que el archivo de
hosts conocidos de su estación de trabajo tiene una entrada para el servidor de
destino, pero la clave guardada no coincide con la clave del servidor).
Implementaremos las tres medidas más efectivas contra los ataques de fuerza
bruta SSH:
Hay tácticas adicionales que pueden emplearse, no las cubriré aquí, pero si está
interesado, hágamelo saber, puedo considerar escribir un artículo sobre algunas
de ellas si hay algún interés. Siento que los tres anteriores son un buen equilibrio
entre seguridad y conveniencia para el sistema promedio, pero enumeraré algunas
tácticas más solo para ser minucioso.
LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 1
AllowUsers your-username
HostbasedAuthentication no
IgnoreUserKnownHosts no
IgnoreRhosts yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM no
Configurar Fail2Ban
Fail2Ban es una herramienta increíblemente útil, escanea los archivos de registro
en busca de inicios de sesión fallidos (u otro comportamiento no deseado) y
bloquea dinámicamente las direcciones IP durante un período de tiempo
configurado, lo que limita de manera efectiva cualquier intento de fuerza bruta.
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
findtime = 3600
bantime = 300
maxretry = 2
Si quisiera, podría crear una segunda cárcel para cubrir los ataques realmente
persistentes que simplemente no saben cuándo dejar de fumar, por ejemplo, para
prohibir una dirección durante una semana si hace más de 19 intentos fallidos en
una semana (en un máximo de 12 intentos por hora desde la cárcel anterior,
tomaría alrededor de una hora y media obtener 19 intentos fallidos, por lo que esta
cárcel prohibiría una dirección durante una semana si atacan persistentemente el
servidor durante más de una hora y media ). Esa regla se vería así:
[sshd-persistent]
enabled = true
port = ssh
logpath = /var/log/auth.log
filter = sshd
bantime = 604800
findtime = 604800
maxretry = 19
Dado que esta cárcel necesita recordar eventos durante más tiempo que la
cantidad de tiempo que Fail2Ban realiza un seguimiento de forma predeterminada,
tendremos que cambiar ese valor predeterminado. Ejecute el comando sudo nano
/etc/fail2ban/fail2ban.confy edite la línea dbpurgeage = 1dpara
leer dbpurgeage = 8d. Tenga en cuenta que esto requerirá más recursos para que
Fail2Ban se ejecute.
También hay una cárcel "reincidente" que puede configurar, que hace casi lo
mismo que el anterior al prohibir las direcciones persistentes durante un largo
período de tiempo, la diferencia es que no busca en el archivo de registro un
evento específico como un inicio de sesión fallido, busca en el propio archivo de
registro de Fail2Ban los eventos de prohibición, esencialmente si una dirección ha
sido prohibida x veces en una ventana de tiempo y, prohíbala por más tiempo. Sin
embargo, me gusta el control de configurar esto para cada cárcel individualmente
para cada servicio.
Relacionados How to Home Lab: Parte 8 - Introducción a Docker: instalación y
uso.
Pruebe su configuración
Queremos asegurarnos de que todo funcione, ¿verdad? Abra una sesión de
consola en su apVM en Proxmox y ejecute el comando sudo apt install -y
lnav, que es una herramienta para navegar por los archivos de registro. Una vez
hecho esto, continúe y ejecute lnav /var/log/fail2ban.logpara que podamos
monitorear el archivo (es posible que deba tocar la tecla de flecha derecha en su
teclado para desplazar el texto a la vista, las marcas de fecha son muy largas).
Bien, todo funciona, ¡pero ahora estás bloqueado! Arreglemos eso, en su sesión
de consola Proxmox en la apVM, presione la qtecla para salir lnavy ejecute el
comando sudo fail2ban-client status sshdpara ver una lista de direcciones IP
prohibidas, que obviamente debería ser solo su estación de trabajo. Puede
desbloquear la dirección ejecutando el comando sudo fail2ban-client set sshd
unbanip your-workstation-ip-address.
Si no puede conectarse desde la apVM a otra, es posible que deba abrir una
consola a través de Proxmox e instalar SSH en la VM de destino (consulte los
pasos anteriores para la configuración SSH).
Dado que estas otras máquinas virtuales no tienen el puerto SSH abierto a
Internet, podemos dejarlas en la autenticación de contraseña. Si decide crear una
clave SSH en la apVM para acceder a otras VM, asegúrese de que la clave tenga
una frase de contraseña y no agregue su clave pública al archivo
de apVM authorized_keys.
Consejos y trucos
Eso es todo para este segmento, te dejo con una pequeña colección de útiles
trucos de línea de comando y SSH.
TMUX
Verás una barra verde en la parte inferior de la pantalla con información. Ejecute el
comando toppara enumerar los procesos en ejecución en la apVM, luego
presione ctrl+ bque cambia el enfoque al tmuxproceso, luego presione la dtecla
para desconectarse de la tmuxsesión. Ahora está de vuelta en la consola principal
y debería ver algo como [detached (from session 0)], ahora escriba exitpara
salir de la sesión SSH, está de vuelta en la terminal de su estación de trabajo.
A continuación, intente presionar ctrl+ b, y luego cpara crear una nueva ventana,
tenga en cuenta que la esquina inferior izquierda ahora muestra dos
ventanas 0:top-, y 1:bash. Ejecute el comando watch freeaquí, esto repetirá el
comando freeque muestra la información de la memoria, cada dos segundos al
mostrar la salida. Ahora tiene dos comandos continuos ejecutándose en
diferentes tmuxventanas.
Presione ctrl+ by luego no ppara saltar a la ventana anterior o siguiente,
respectivamente. Solo hemos arañado la superficie de lo que se tmuxpuede hacer
aquí, pero seguramente puede ver lo útil que es. Presiona ctrl+ bnuevamente y
presiona dpara desconectar. Ejecutar tmux lsahora mostrará dos ventanas
abiertas, ejecute el comando tmux kill-serverpara cerrar todas las tmuxsesiones
y ventanas abiertas.
Relacionados Home Lab Servidor de correo electrónico: cómo evitar los bloques
de puertos de ISP
Comandos rápidos
Transferir archivos
touch hello.txt
echo "This is a test" > hello.txt
Ahora ejecute exitpara salir de la sesión SSH, y luego ejecute scp user@ip-
address:hello.txt ./, esto copiará el hello.txtarchivo del host remoto a su
directorio actual, ejecute lspara verlo en su directorio actual. También puede
copiar un archivo de su estación de trabajo al host remoto, por ejemplo scp
./hello.txt user@ip-address:~/.
La sintaxis es scp FROM TO, cualquiera de estos puede ser la ruta a un archivo
local, o una conexión de host remoto seguida de dos puntos :y luego una ruta en
el host remoto. el ~símbolo de tilde solo significa la ruta de inicio del usuario actual
(por ejemplo /home/username).
Túneles
Puede crear túneles SSH al establecer una conexión con la -Lbandera, la sintaxis
es ssh -L localport:remotehost:remoteport user@ip-address.
30 de noviembre de 2019
Tabla de contenido
Obtener un nombre de dominio
o Lo que busco en un registrador de dominios
Reglas de pfSense
o Alias
No público
o Reglas
Permitir todo en esta subred
Permitir DNS saliente
Permitir NTP saliente
Rechazar no público
Permitir ICMP
Permitir puertos web
Eliminar reglas predeterminadas
o Ajustes
Deshabilitar IPv6
Desactivar la regla antibloqueo
Agregar un reenvío de puerto desde Internet externo
Configurar DNS externo
oConfigurar el servicio de DNS dinámico
oScript de DNS dinámico
Guión Bash
/usr/local/updateServerIP.sh
Archivo de servicio Systemd
/etc/systemd/system/updateServerIP.service
Archivo de temporizador de Systemd
/etc/systemd/system/updateServerIP.timer
Propagación de DNS
Reconfigurar NGINX
LetsEncrypt
Una nota sobre los dominios de Apex
KeePassXC
KeePassXC puede almacenar sus contraseñas de forma segura y escribirlas automáticamente en sus
sitios web y aplicaciones cotidianos.
Reglas de pfSense
Queremos bloquear la red LAN (que en realidad es producción,
técnicamente). Tenga en cuenta que las reglas de pfSense se leen primero
coinciden de arriba hacia abajo y se aplican al tráfico que ingresa a la interfaz, por
lo que las reglas que estamos agregando son para restringir el tráfico que ingresa
a la interfaz LAN y sale de la red LAN la interfaz WAN, o el tráfico que ingresa a la
red LAN desde el exterior, es restrictivo de forma predeterminada). Inicie sesión en
su panel de pfSense ( https://IPADDRESS:8080).
Alias
NO PÚBLICO
Estas son direcciones a las que restringiremos el acceso de las VM internas para
proteger su red doméstica. Es posible que desee
agregar 255.255.255.255/32transmisión y 224.0.0.0/4multidifusión a esta lista
también, pero no creo que sea necesario.
Nombre: Non_Public
Descripción: Direcciones IP no públicas
Tipo: Redes
La red
o 10.0.0.0/8
o 172.16.0.0/12
o 192.168.0.0/16
o 169.254.0.0/16
o 127.0.0.0/8
Reglas
Primero, queremos permitir cualquier tráfico que provenga de y hacia la red LAN,
no hace nada en este momento, pero nos ahorrará mucho drama en el futuro si
expandimos la red a través de múltiples conmutadores o algo por el estilo.
naturaleza.
Acción: Pasar
Deshabilitado: sin marcar
Interfaz: LAN
Familia de direcciones: IPv4
Protocolo: Cualquiera
Fuente: LAN net
Destino: red LAN
Registro: sin marcar
Descripción: Permitir toda esta subred
Sus máquinas virtuales deben usar pfSense para su servidor DNS de forma
predeterminada, pero algunas aplicaciones tienen su propia configuración
predeterminada (como el script de DNS dinámico que se muestra a continuación,
que fallaría sin esta regla habilitada).
Acción: Pasar
Deshabilitado: sin marcar
Interfaz: LAN
Familia de direcciones: IPv4
Protocolo: TCP / UDP
Fuente: LAN net
Destino: cualquiera
o Rango de puerto de destino
o Desde: DNS (53)
o Para: DNS (53)
Registro: sin marcar
Descripción: Permitir DNS saliente
Acción: Pasar
Deshabilitado: sin marcar
Interfaz: LAN
Familia de direcciones: IPv4
Protocolo: TCP / UDP
Fuente: LAN net
Destino: cualquiera
o Rango de puerto de destino
o Desde: NTP (123)
o Para: NTP (123)
Registro: sin marcar
Descripción: Permitir NTP saliente
RECHAZAR NO PÚBLICO
Tenga en cuenta que, dado que pfSense coincide con las reglas de arriba hacia
abajo, cualquier regla por debajo de esta solo se aplicará a las direcciones IP
públicas, ya que las direcciones no públicas ya están bloqueadas.
Acción: Rechazar
Deshabilitado: sin marcar
Interfaz: LAN
Familia de direcciones: IPv4
Protocolo: Cualquiera
Fuente: LAN net
Destino: host único o alias, no público
Registro: marcado
Descripción: Rechazar no público
PERMITIR ICMP
Acción: Pasar
Deshabilitado: sin marcar
Interfaz: LAN
Familia de direcciones: IPv4
Protocolo: ICMP
Subtipos de ICMP: Cualquiera
Fuente: LAN net
Destino: cualquiera
Registro: sin marcar
Descripción: Permitir ICMP
Acción: Pasar
Deshabilitado: sin marcar
Interfaz: LAN
Familia de direcciones: IPv4
Protocolo: TCP
Fuente: LAN net
Destino: cualquiera
Rango de puerto de destino
o Desde: Web_Ports
o Para: Web_Ports
Registro: sin marcar
Descripción: Permitir puertos web
ELIMINAR REGLAS PREDETERMINADAS
Querrá eliminar las reglas Default allow LAN to any rule, y Default allow LAN
IPv6 to anyahora. Luego siga adelante y aplique los cambios.
Verifique dos veces el orden de las reglas, hacerlo mal podría romper cosas o
abrir agujeros de seguridad, debería verse así:
Es posible que también desee agregar reglas al final de la lista para permitir
el acceso de salida Git (puerto 9418) y SSH (puerto 22), aunque evitaría permitir
este último a menos que sea realmente necesario.
Ajustes
DESHABILITAR IPV6
Dirígete a Sistema> Avanzado> Redes, desmarca la casilla Allow IPv6y luego haz
clic en Guardar en la parte inferior de la página.
Relacionados Home Lab Servidor de correo electrónico: cómo evitar los bloques de
puertos de ISP
DESACTIVAR LA REGLA ANTIBLOQUEO
Desde esa interfaz web, querrá buscar una configuración llamada "Reenvío de
puerto", "Host virtual" o "Servidor virtual", que generalmente se encuentra en un
menú llamado "Avanzado", "Enrutamiento", "Cortafuegos", "Reglas de entrada", o
alguna combinación de ellas. A veces solo tienes que hacer clic en todos los
menús hasta que encuentres el lugar extraño en el que decidieron ponerlo.
HTTP
o Host: dirección IP de pfSense VM
o Puerto: 80 (o de 80 a 80)
o Protocolo: TCP
HTTPS
o Host: dirección IP de pfSense VM
o Puerto: 443 (o de 443 a 443)
o Protocolo: TCP
Nota: Esta es su línea principal hacia el mundo exterior, si alguna vez desea
derribar su laboratorio doméstico, asegúrese de que sus reenvíos de puerto
también se deshabiliten.
Usar @ para el host solo significa que el dominio ápice, por ejemplo, google.comes
un dominio ápice, www.google.comno lo es. El 0.0.0.0valor no se enrutará a
ninguna parte, y esto es intencional, cuando ejecutamos el script de DNS
dinámico, debe completar el valor correcto y sabremos que está funcionando.
Tenga en cuenta que el valor debe ser su nombre de dominio ápice con un punto
adicional al final. Esto dirigirá las solicitudes www.yourdomain.comal dominio apex
( @), que tendrá la entrada DNS dinámica. También puede cambiar el valor
de wwwa *, que dirigiría wwwal igual que cualquier otro subdominio
como somethingelse.mydomain.comel nombre de dominio de ápice.
Permítanme comenzar diciendo que si nunca antes ha usado scripts bash, esto
puede parecer bastante abrumador, pero es más fácil de lo que parece, ¡así que
no se asuste! Primero, SSH en su servidor NGINX, creo que es un lugar lógico
para manejar DNS dinámico (pero siéntase libre de crear una nueva VM para esto
si lo desea, esa sería la opción más segura).
GUIÓN BASH
touch /usr/local/updateServerIP.sh
chown root:root /usr/local/updateServerIP.sh
chmod 0700 /usr/local/updateServerIP.sh
Permítanme explicar qué hace este script antes de entrar en él, para cada dominio
configurado, cada vez que se ejecuta el script:
# --------------------------------
# ------ BEGIN HOST DEFINITION ---
# --------------------------------
isdiff='1'
# --------------------------------
hostlist=("@")
domain="mydomain.com"
password="DynamicDnsSecretFromNamecheap"
# --------------------------------
ipcheck $domain $hostlist
if [ $isdiff -eq 0 ]; then
update $hostlist $domain $password
fi
# --------------------------------
# -------- END HOST DEFINITION ---
# --------------------------------
Una cosa más que debe saber es que puede copiar todo el bloque de código
entre BEGIN HOST DEFINITIONy END HOST DEFINITION, y pegarlo debajo del
existente (justo encima de la exit 0línea) para agregar otro dominio, ¡puede
agregar tantos como necesite!
/usr/local/updateServerIP.sh
#!/bin/bash
logFile="/var/log/updateServerIP.log"
touch $logFile
logMessage() {
case $1 in
1)
level="INFO"
;;
2)
level="WARN"
;;
3)
level="FAIL"
;;
esac
echo "[$(date)] [$level] - $3" >>$logFile
if [[ $2 == "1" ]]; then
echo "[$(date)] [$level] - $3" | mail -s "ALERT updateServerIP.sh"
$emailAddress
fi
}
ipcheck() {
isdiff=1
hostlist=$2
ipaddressnew=$(dig +short myip.opendns.com @resolver1.opendns.com)
for host in ${hostlist[@]}; do
if [ $host == "@" ]; then
ipaddresscurrent=$(nslookup $1 8.8.8.8 | grep Address | grep -v "#"
| cut -f2 -d" ")
else
ipaddresscurrent=$(nslookup $host.$1 8.8.8.8 | grep Address | grep
-v "#" | cut -f2 -d" ")
fi
diffcheck=$(echo $ipaddresscurrent | grep -c $ipaddressnew)
if [ $diffcheck -eq 0 ]; then
isdiff=0
fi
done
}
update() {
hostlist=$1
for host in ${hostlist[@]}; do
response=$(curl https://dynamicdns.park-your-
domain.com/update?host=$host\&domain=$2\&password=$3\&ip=$ipaddressnew)
errorcount=$(echo $response | perl -pe
"s/.*\<errcount\>(\d+)\<\/ErrCount\>.*/\$1/gi")
if [ $errorcount -gt 0 ]; then
logMessage 3 1 "$response"
else
message="Updated IP Address $host.$2 from $ipaddresscurrent to
$ipaddressnew"
logMessage 1 0 "$message"
fi
done
}
# --------------------------------
# ------ BEGIN HOST DEFINITION ---
# --------------------------------
isdiff='1'
# --------------------------------
hostlist=("@")
domain="mydomain.com"
password="DynamicDnsSecretFromNamecheap"
# --------------------------------
ipcheck $domain $hostlist
if [ $isdiff -eq 0 ]; then
update $hostlist $domain $password
fi
# --------------------------------
# -------- END HOST DEFINITION ---
# --------------------------------
exit 0
ARCHIVO DE SERVICIO SYSTEMD
Relacionados Tres sencillos pasos para enviar alertas por correo electrónico desde un
servidor Linux
/etc/systemd/system/updateServerIP.service
[Unit]
Description=Check external IP address against DNS and update if needed
[Service]
Type=oneshot
ExecStart=/usr/local/bin/updateServerIP.sh
ARCHIVO DE TEMPORIZADOR DE SYSTEMD
/etc/systemd/system/updateServerIP.timer
[Unit]
Description=Check external IP address against DNS and update if needed
[Timer]
# Time to wait after booting before the first run
OnBootSec=15min
# Time each consecutive run
OnUnitActiveSec=30min
Unit=updateServerIP.service
[Install]
WantedBy=timers.target
PROPAGACIÓN DE DNS
Una vez que haya creado los archivos de servicio y temporizador, ejecute los
comandos (como root) systemctl enable updateServerIP.timery systemctl
start updateServerIP.timer. Ahora, el script se ejecutará automáticamente 15
minutos después de que se inicie la VM, y cada 30 minutos después de eso.
Reconfigurar NGINX
Primero, necesitaremos un certificado autofirmado para configurar las cosas,
obtendremos certificados legítimos de LetsEncrypt a continuación, pero
necesitamos algo para que los sitios se ejecuten en el puerto 443 para poder
hacer eso (como cuando compra un par de tijeras y necesita un par de tijeras para
abrir el embalaje). Desde su VM NGINX, ejecute los siguientes comandos como
root:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days
365000 -nodes
mv key.pem /etc/ssl/private/ssl-cert-snakeoil.key
mv cert.pem /etc/ssl/certs/ssl-cert-snakeoil.pem
server {
listen 80;
server_name 4t.burns.lab;
location / {
proxy_hide_header X-Powered-By;
proxy_pass_header Authorization;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
client_max_body_size 0;
proxy_read_timeout 36000s;
proxy_redirect off;
proxy_pass http://172.16.44.102:5000;
}
}
Justo después de server_name, agregue las siguientes cinco líneas. Los dos
primeros son para el certificado autofirmado que acabamos de crear, los dos
segundos son para el certificado LetsEncrypt que aún no tenemos, por lo que
están comentados, y la última línea toma el archivo de parámetros SSL que
acabamos de crear.
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
# ssl_certificate /etc/letsencrypt/live/4t.mydomain.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/4t.mydomain.com/privkey.pem;
include /etc/nginx/snippets/ssl-params.conf;
Agregue lo siguiente en la parte superior del archivo para redirigir el tráfico HTTP a
HTTPS:
server {
listen 80;
server_name 4t.mydomain.com www.4t.mydomain.com;
return 301 https://www.4t.mydomain.com$request_uri;
}
# letsencrypt validation
location '/.well-known/acme-challenge' {
default_type "text/plain";
root /var/www/html;
}
Cuando solicitas un certificado de LetsEncrypt, su servidor debe asegurarse de
que eres el propietario del dominio para el que estás solicitando un
certificado. Para hacer eso, la herramienta de línea de comandos que usa para
solicitar el certificado obtendrá un token de LetsEncrypt y lo colocará en un archivo
en /var/www/html/.well-known/acme-challenge, luego el servidor de LetsEncrypt
solicitará ese archivo de su FQDN en mysite.com/.well-known/acme-
challengepara verificar el token.
server {
listen 80;
server_name 4t.mydomain.com www.4t.mydomain.com;
return 301 https://4t.mydomain.com$request_uri;
}
server {
listen 443 ssl;
server_name 4t.mydomain.com www.4t.mydomain.com;
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
# ssl_certificate
/etc/letsencrypt/live/4t.mydomain.com/fullchain.pem;
# ssl_certificate_key
/etc/letsencrypt/live/4t.mydomain.com/privkey.pem;
include /etc/nginx/snippets/ssl-params.conf;
location / {
proxy_hide_header X-Powered-By;
proxy_pass_header Authorization;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
client_max_body_size 0;
proxy_read_timeout 36000s;
proxy_redirect off;
proxy_pass http://172.16.44.102:5000;
}
# letsencrypt validation
location '/.well-known/acme-challenge' {
default_type "text/plain";
root /var/www/html;
}
}
LetsEncrypt
Aún en su VM NGINX como root, ejecute apt install -y certbotpara instalar la
herramienta Certbot que usaremos para obtener los certificados LetsEncrypt,
luego haga una "ejecución en seco" con el siguiente comando solo para
asegurarse de que todo esté bien.
En cuanto a por qué, www.yes-www.org tiene una lista muy completa de razones.
Aquí hay un ejemplo completo (tenga en cuenta que aún necesita certificados SSL
tanto para el dominio apex como para el dominio www):
# No apex in server_name
server {
listen 443 ssl;
server_name www.mydomain.com;
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
include /etc/nginx/snippets/ssl-params.conf;
location / {
proxy_hide_header X-Powered-By;
proxy_pass_header Authorization;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
client_max_body_size 0;
proxy_read_timeout 36000s;
proxy_redirect off;
proxy_pass http://172.16.44.102:5000;
}
# letsencrypt validation
location '/.well-known/acme-challenge' {
default_type "text/plain";
root /var/www/html;
}
}
7 de enero de 2020
Tabla de contenido
Próximos segmentos de la serie "How to Home Lab"
Nota IMPORTANTE
Prefacio
Configuración Base
o VM
o La red
o Instantánea
Configuración del servidor
o Opción uno: el enfoque simple
o Opción dos - Graylog
Configuración del cliente
Recomendaciones de hardware de servidor
o Hardware pfSense dedicado
o Hardware de servidor dedicado
o Mi equipo personalizado
Esta lista está sujeta a cambios en cualquier momento, puedo agregar / eliminar /
reordenar los elementos de esta lista en cualquier momento para mantener la
serie coherente y útil.
Nota IMPORTANTE
Pronto cubriré el proceso de migración de la instancia pfSense del laboratorio
doméstico para que sirva a toda la red doméstica, de modo que podamos hacer un
mejor uso de pfSense y facilitar el acceso a las máquinas virtuales. Esto se hace
mejor con algo de hardware adicional para pfSense, se puede hacer manteniendo
pfSense como una VM, pero no lo recomiendo a menos que tenga un clúster de
hosts Proxmox para habilitar la alta disponibilidad (HA) en la VM pfSense.
Prefacio
Si aprende algo de mí, déjelo que sea la administración de registros, en mi
opinión, esto es lo más importante que puede hacer por seguridad y tiempo de
actividad.
Voy a dar dos opciones para esto, mi preferencia es Graylog, que consume
muchos recursos (recomiendan 4 núcleos y 8GiB de RAM, aunque lo tengo
funcionando en 6GiB en un sistema y parece funcionar bien, pero está usando
algún intercambio y hay una diferencia de rendimiento obvia).
El registro centralizado coloca todos sus registros en un solo lugar y los mantiene
cohesivos, por ejemplo, si restaura un host a partir de una instantánea o copia de
seguridad, aún tendrá todos los registros para consultarlos más adelante si es
necesario. Además, agrega algo de protección contra manipulaciones a sus
sistemas, en caso de un compromiso, será más difícil para el actor malo ocultar
sus huellas si no puede acceder al servidor de registro remoto.
Configuración Base
Vamos a hacer uso de rsyslogambos ejemplos, la diferencia estará en cómo ve
los registros y las funciones adicionales que obtiene de un sistema como Graylog.
VM
# See note 1
sudo apt -y dist-upgrade
# See note 2
sudo bash -c "bash <(wget -qO-
https://raw.githubusercontent.com/dlford/ubuntu-vm-
boilerplate/master/run.sh)"
La red
Inicie sesión en su pfSense VM ( https://IPADDRESS:8080) y diríjase a Servicios>
Servidor DHCP.
Haga clic en el botón Agregar en la parte inferior de la página para agregar una
nueva reserva de dirección IP (Mapeo estático), tenga en cuenta las otras
direcciones IP en uso, en mi caso las usaré 172.16.44.104porque es la siguiente
dirección disponible. Deberá obtener la dirección MAC de la log-serverVM de
Proxmox en Hardware> Dispositivo de red.
Complete los primeros cinco campos del formulario, luego haga clic en Guardar en
la parte inferior y Aplicar cambios.
Recibí el pedido al revés esta vez, generalmente ejecuto el script repetitivo
después de configurar la red, por lo que no es necesario reiniciar la VM por
segunda vez, pero podemos omitir el reinicio adicional con los siguientes
comandos de la log-serverlínea de comandos de la VM para forzar la renovación.
la dirección IP.
ip route
# We're looking for the device name in the
# output which will appear after the word
# "dev" In my case the device name is "ens18"
sudo ip addr flush ens18 && sudo dhclient ens18
# Your SSH session will be terminated after
# running this command, but you can reconnect
# by hostname now (ssh log-server)
Instantánea
Si tiene la intención de probar ambos métodos solo por experimentar, tome una
instantánea aquí para que pueda volver a este punto en lugar de aprovisionar la
máquina virtual nuevamente.
Relacionados Cómo hacer el laboratorio en casa: Parte 4 - Proxy inverso NGINX
Debajo de esas líneas, también agrego lo siguiente para guardar los registros
remotos en su propio archivo para cada host remoto; de lo contrario, todos se
apilarían en el /var/log/syslogarchivo principal con los log-serverregistros '.
$template remote-incoming-logs,"/var/log/%HOSTNAME%-rsyslog.log"
*.* ?remote-incoming-logs
& ~
Puede hacer todo tipo de trucos ingeniosos sobre cómo y dónde se almacenan los
registros; para obtener más información, consulte man page:
rsyslogd (8): syslogd confiable / extendido - página de manual de
Linux
Rsyslogd es una utilidad del sistema que brinda soporte para el registro de mensajes. La compatibilidad
con sockets de dominio de Internet y Unix permite que esta utilidad admita el registro tanto local como
remoto.
/var/log/*-rsyslog.log
Por supuesto, aquí hay otro man pagesi desea personalizar el comportamiento
de logrotate:
CLAVE ACCIÓN
/ Buscar
n/N Ir al resultado de búsqueda siguiente / anterior
g/G Ir a la parte superior / inferior del archivo
e/E Ir al error siguiente / anterior
w/W Ir a la advertencia siguiente / anterior
ctrl +r Recargar (útil para borrar filtros rápidamente)
CLAVE ACCIÓN
: Escribe un comando
? Ayuda abierta
Desde la entrada del comando, suelo usar filter-in some text I want to
seey filter-out some text I want to hide, hay muchos otros beneficios en el
menú de ayuda para revisar, estos son solo los que uso con más frecuencia.
...
wget https://packages.graylog2.org/repo/packages/graylog-3.1-
repository_latest.deb
sudo dpkg -i graylog-3.1-repository_latest.deb
sudo apt update
sudo apt install -y graylog-server graylog-integrations-plugins
Una vez que llegue a la pantalla de inicio de sesión, inicie sesión con el nombre de
usuario adminy la contraseña de root que creó anteriormente.
Por último, haga clic en Mostrar mensajes recibidos, luego haga clic en el menú
desplegable "No actualizando" y elija "1 segundo", y deberíamos verlos comenzar
a aparecer después de configurar nuestro primer cliente en el siguiente paso.
Una vez que recibamos algunos mensajes de registro, querrá crear un panel en la
pestaña "Paneles", puede usar la pestaña "Buscar" para buscar prácticamente
cualquier cosa que desee (consulte los documentos para ver la sintaxis, es
bastante fácil de aprender) y cree widgets de tablero desde allí con puntos de
datos interesantes. Debería dedicar algún tiempo a navegar por la documentación
que está vinculada desde la página principal después de iniciar sesión, Graylog es
una herramienta muy poderosa con toneladas de funciones útiles, ¡no tenga miedo
de experimentar con ella!
/etc/rsyslog.d/100-log-server.conf
*.* @log-server:514
*.* @172.16.44.104:514
Le *.*dice rsyslogque transmita todos los registros, pero puede ser realmente
específico si lo desea, consulte el man pageenlace de arriba para obtener más
información.
Si está utilizando el método simple, ahora debería ver un nuevo archivo en el log-
serverhost con el nombre de host del sistema de envío, en mi
caso /var/log/nginx-rsyslog.log. Que se puede ver ejecutando lnav
/var/log/nginx-rsyslog.log.
Si está utilizando Graylog, debería ver algún resultado ahora (si no, intente volver
a cargar la página y debería obtener algo).
Eso es prácticamente todo lo que hay que hacer, ¡no olvide configurar el resto de
sus hosts para utilizar su nuevo servidor de registro centralizado!
Mi equipo personalizado
Una placa base X399 (tengo el ASRock Taichi, no tengo quejas, quería el
GigaByte Designaire pero estaban agotados en ese momento).
64 GiB de RAM DDR4 (¡tal vez opte por 128 si puede pagarlo!)
Un enfriador de CPU Noctua NH-U14S TR4-SP3
Un par de SSD para la matriz OS RAID1
Cuatro discos duros WD de 2TB para datos de VM en una matriz RAID10
Una carcasa de PC ATX (asegúrese de que pueda caber en el enfriador de
CPU alto, estoy usando el Rosewill HIMARS descontinuado para sus cuatro
bahías de unidades de intercambio en caliente, ¡es una pena que ya no las
fabriquen!
Un puñado de ventiladores Noctua de 120 mm
Una tarjeta de video de gama baja ya que Threadripper no tiene gráficos
integrados
Una fuente de alimentación de 1000 vatios (esto es excesivo, ¡pero es
bueno tener espacio para la cabeza!)
Algunos cables SATA III para conexiones de unidades
19 de febrero de 2020
Tabla de contenido
Próximos segmentos de la serie "How to Home Lab"
Nota IMPORTANTE
Que es Docker
o ¿Qué es Docker-Compose?
o Que es Portainer
Instalación
o Agregar espacio en disco
o Instalar Docker
o Instalar Docker-Compose
o Instalar Portainer
Uso
o CLI
o Dockerfile
o Docker-Compose
Esta lista está sujeta a cambios en cualquier momento, puedo agregar / eliminar /
reordenar los elementos de esta lista en cualquier momento para mantener la
serie coherente y útil.
Nota IMPORTANTE
Pronto cubriré el proceso de migración de la instancia pfSense del laboratorio
doméstico para que sirva a toda la red doméstica, de modo que podamos hacer un
mejor uso de pfSense y facilitar el acceso a las máquinas virtuales. Esto se hace
mejor con algo de hardware adicional para pfSense, se puede hacer manteniendo
pfSense como una VM, pero no lo recomiendo a menos que tenga un clúster de
hosts Proxmox para habilitar la alta disponibilidad (HA) en la VM pfSense.
Si usted no tiene ningún tipo de hardware adicional, pero está con ganas de hacer
un poco de compras, tengo algunas recomendaciones aquí .
Que es Docker
Docker es una herramienta de contenedorización, antes de entrar en todo eso,
primero hablemos un poco sobre cómo funciona la virtualización, solo para
expresar las diferencias con la contenedorización.
VirtualOperating
SystemVirtualKernelVirtualMachinePhysicalHardwareHypervisorHostOperating
SystemHostKernelVirtualOperating
SystemVirtualKernelVirtualMachineNetworkVirtual HardwareVirtual Hardware
Mejor aún, puede crear su imagen a partir de una imagen preexistente desde el
concentrador de Docker, sin necesidad de ejecutar ninguna instalación de sistema
operativo u otro aprovisionamiento.
¿Qué es Docker-Compose?
Si Docker es una herramienta para ejecutar contenedores, la mejor manera de
explicar Docker-compose es una herramienta para ejecutar varios
contenedores. También proporciona más opciones de configuración que un
Dockerfile, como adjuntar volúmenes con nombre o bind-mounts, o redes con
nombre, y lo más importante, conectar varios contenedores a la misma red.
Que es Portainer
Portainer es una bonita interfaz web para Docker. En general, cubriré el uso de la
línea de comandos en este segmento, pero Portainer es bastante fácil de entender
una vez que comprenda el propio Docker. Si eres un aprendiz visual, esta será
una herramienta útil para ti.
Instalación
Como de costumbre, querremos crear una nueva máquina virtual y hacer todas las
configuraciones estándar, las omitiré aquí, pero puede consultar la parte 5 (no
olvide aumentar la memoria RAM y el recuento de CPU).
Escriba ppara imprimir la tabla actual, debería tener algo como esto:
Vamos a eliminar la partición 3 y volver a crearla con un tamaño más grande (¡que
no cunda el pánico!). Tenga en cuenta que la partición 3 comienza en el sector
2101248, y su tipo es "sistema de archivos Linux", queremos asegurarnos de que
no cambien.
Escriba dpara eliminar una partición, luego presione enter para seleccionar la
partición 3 que debería ser la predeterminada, luego npara crear una nueva
partición e ingrese tres veces para seleccionar los valores predeterminados (solo
asegúrese de que sea el mismo número de partición y sector de inicio que estaba
antes de).
Escriba puna vez más para verificar que todo se vea bien, luego wqescriba los
cambios en el disco y salga fdisk.
Command (m for help): p
Instalar Docker
Si desea poder ejecutar Docker como un usuario no root, debe agregar su usuario
al grupo "docker" ejecutando el comando sudo usermod -aG docker
YOURUSERNAME(tendrá que cerrar la sesión y luego volver a iniciarla para que el
cambio surta efecto) . Tenga en cuenta que este es un riesgo de seguridad, ya
que le otorga a su usuario acceso de root sin contraseña a la máquina virtual host.
Instalar Docker-Compose
sudo curl -L
"https://github.com/docker/compose/releases/download/1.25.3/docker-
compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Instalar Portainer
Uso
Ahora podemos profundizar en él, comenzar por ejecutar docker
versiony docker-compose versionasegurarnos de que se hayan instalado
correctamente.
CLI
Intente ejecutar docker container list -apara mostrar todos los contenedores
en ejecución y detenidos, encontrará el contenedor de Fedora allí, se le ha dado
un nombre aleatorio ya que no especificamos uno. deshagámonos de éste
con docker container rm CONTAINER_NAME.
Otro buen truco, si hubiera ejecutado el comando docker run --rm -it
fedora:latest /bin/bash, la --rmbandera significa "Retire el contenedor cuando
se detenga", lo que facilita la limpieza.
La ejecución docker image listle mostrará qué imágenes tiene en el sistema,
hasta ahora tenemos portainer/portainer:latest, y fedora:latest. En el caso
de Portainer, la imagen tiene una organización de portainery una imagen
nombrada portainer, por lo tanto portainer/portainer, y en ambos casos, la
imagen está etiquetada latest, pero hay muchas otras etiquetas (piense en las
etiquetas de manera similar a las versiones), pero latestes la predeterminada si
no especifique una etiqueta.
Puede encontrar imágenes listas para usar para toneladas de software en Docker
Hub , intente buscar Fedora allí y vea qué etiquetas están disponibles.
hello.js
console.log('hello world')
Es una práctica común especificar la ruta completa del comando a ejecutar (por
ejemplo, en /usr/local/bin/nodelugar de node), encontré esa ruta
ejecutando docker run --rm -it node:10-alpine which node.
Alpine Linux se usa comúnmente en Docker porque está diseñado para ser de
tamaño muy pequeño, Alpine logra su tamaño pequeño solo con un pequeño
conjunto de herramientas de línea de comandos.
Dockerfile
Vamos a llevarlo a un nivel superior ahora, cree un archivo en su directorio de
trabajo:
Dockerfile
FROM alpine:latest
la CMDlínea se proporciona como una matriz separada por espacios, por lo que el
comando real que se ejecutará en el contenedor es /usr/local/bin/cowsay "I am
a Docker cow!".
Sin embargo, esto apenas rasca la superficie, puede copiar archivos en la imagen,
declarar volúmenes, incluso compilar su aplicación en un contenedor y luego
pasar la compilación terminada a un contenedor nuevo, todo en el mismo
Dockerfile. Te dejo con la referencia de Dockerfile para que la revises también.
Docker-Compose
Nota: Las imágenes, los volúmenes y las redes están todavía en el sistema, si
desea eliminarlos puede ejecutar docker-compose down --rmi local --
volumesdesde el directorio del proyecto, o docker container prune, docker image
prune, docker volume prune, y docker network prune, lo que eliminará cualquier
recipiente, la imagen, el volumen y la red que ISN' t funcionando o en uso.
¿Cómo funcionó todo eso, podrías preguntar? Aquí está su tarea: pondré el
archivo Docker-Compose abajo, puede parecer bastante largo, ¡pero solo
configuramos cuatro sistemas en esas 60 líneas de configuración! Vea si puede
descifrar lo que hace cada línea. La documentación debe tener toda la información
necesaria para hacer referencia.
docker-compose.yml
version: '3.7'
services:
db_prod:
volumes:
- type: volume
source: db-data_prod
target: /data/db
- type: volume
source: db-config_prod
target: /data/configdb
networks:
net1:
aliases:
- db
build:
context: ./db
dockerfile: Dockerfile
server_prod:
depends_on:
- db_prod
build:
context: ./server
dockerfile: Dockerfile
environment:
- DATABASE_URL=mongodb://db:27017/cloud-native-next
- PORT=3000
networks:
net1:
aliases:
- server
client_prod:
depends_on:
- server_prod
build:
context: ./client
dockerfile: Dockerfile
networks:
net1:
aliases:
- client
nginx_prod:
depends_on:
- server_prod
- client_prod
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- '3000:3000'
networks:
net1:
aliases:
- nginx
networks:
net1:
name: cloud-native-next
volumes:
db-data_prod:
db-config_prod:
14 de julio de 2020
Tabla de contenido
Próximos segmentos de la serie "How to Home Lab"
Introducción
Prepare los medios de instalación
Provisión pfSense
o VLAN
Migración
Módem puente
Esta lista está sujeta a cambios en cualquier momento, puedo agregar / eliminar /
reordenar los elementos de esta lista en cualquier momento para mantener la
serie coherente y útil.
¿Por qué? Bueno, si todavía está aquí, entonces está claramente involucrado en
este esfuerzo, por lo que es hora de llevarlo al siguiente nivel asumiendo la plena
propiedad de su red doméstica. Este es, en mi opinión, un compromiso demasiado
grande para haberte puesto al principio de la serie, hubiera sido más fácil hacerlo
primero, pero mucho más difícil de limpiar si hubieras decidido que no era para
ti. Un laboratorio doméstico es más que un servidor, involucra a toda la red.
Necesitará al menos una máquina para ejecutar pfSense con dos o más interfaces
de red, una memoria USB vacía, y recomiendo encarecidamente un conmutador
administrado de capa 2 con soporte VLAN (una opción asequible para comenzar
sería un Netgear GS308T), un estándar Se podría usar un enrutador o un
conmutador no administrado en su lugar, pero no un dispositivo combinado de
módem / enrutador porque queremos todo detrás de pfSense. También querrá un
enrutador WiFi dedicado para poner detrás de pfSense.
WiFiDevicesModempfSenseSwitchModempfSenseWiFiDevicesModempfSenseWi
FiDevices
Notas: Es posible que el nombre de archivo del instalador haya cambiado desde el
momento de la escritura, y asegúrese de poner la ruta de disco correcta para su
unidad USB en lugar de /dev/sdXX, puede enumerar los discos disponibles con el
comando lsblk.
sudo dd \
if=pfSense-netgate-memstick-vga-2.4.5-RELEASE-p1-amd64.img \
of=/dev/sdXX \
bs=4M
Una vez hecho esto, debe tener una partición FAT32 en la memoria USB, copiar la
copia de seguridad de su configuración en esa partición y cambiarle el
nombre config.xml, podemos restaurar la configuración durante la instalación con
este archivo.
Provisión pfSense
Hemos realizado una instalación antes, y esto no debería ser muy diferente, pero
debería ver una opción para restaurar la configuración config.xmldurante la
instalación, elija sí aquí.
VLAN
¿Qué es una VLAN? Significa red de área local virtual, puede pensar en ella como
una red separada. Aunque tendrá todos sus dispositivos conectados a la misma
red física, los dispositivos en diferentes VLAN deberán comunicarse a través del
firewall pfSense, lo que permitirá un control mucho mejor sobre las reglas de la
red.
¿Quizás no quiere que sus compañeros de casa tengan acceso a sus máquinas
virtuales? Fácil, simplemente colóquelos en su propia VLAN, asigne a su máquina
una reserva DHCP en la red LAN y cree una regla de firewall para permitir que
solo esa dirección IP se comunique con la VLAN con sus VM en ella. ¿Qué tal una
VLAN separada para sus hijos (o quien sea) que bloquea ciertos sitios web o
bloquea Internet completamente fuera de las horas designadas? Todo eso se
puede hacer con pfSense y VLAN.
Si no tiene un conmutador VLAN administrado, puede omitir esta parte, pero si lo
hace, sería mejor crear una nueva interfaz VLAN en pfSense para sus servidores y
dejar la red LAN para su estación de trabajo, tal vez agregar algunas VLAN para
su Dispositivos WiFi o IoT para mantenerlos separados. Deberá copiar sus reglas
de LAN a la VLAN del servidor. También hice una VLAN "DMZ" para las VM que
están expuestas a Internet y reglas específicas sobre cómo pueden comunicarse
con las otras VM en mi VLAN de "producción". ¿Entonces cómo hacemos eso?
Solo cubriré los conceptos básicos para mantener esto conciso, lo principal que
necesita saber es etiquetado versus no etiquetado. Supongamos que tiene un
paquete de datos de Internet procedente de pfSense destinado a un host en la
VLAN 11, este paquete está "etiquetado" para la VLAN 11, el conmutador ve la
etiqueta y la compara con su propia tabla de VLAN para determinar dónde enrutar
el tráfico. eso es bastante fácil. El tráfico no etiquetado es solo eso, no tiene
etiqueta.
Desde el punto de vista del conmutador, puede tener puertos etiquetados y sin
etiquetar; de manera predeterminada, todos los puertos generalmente están sin
etiquetar en la VLAN 1. Si una VLAN no está etiquetada en un puerto, eso significa
que todo el tráfico que entra o sale de ese puerto no está etiquetado. pasará por
esa VLAN. Si una VLAN está etiquetada en un puerto, el tráfico etiquetado para
esa VLAN se permitirá a través del puerto. Si una VLAN no está etiquetada o no
etiquetada en un puerto, no se permitirá que el tráfico de esa VLAN pase a través
del puerto, sino que se enrutará a través de pfSense.
Migración
Tómate tu tiempo aquí, las cosas pueden complicarse muy rápido si no te tomas tu
tiempo y piensas las cosas sobre la marcha, te sugiero que lo planifiques con
anticipación también, recorra cada paso y consideres cualquier cosa que pueda
convertirse en un problema. . Intentaré proporcionar una descripción general
amplia aquí que debería cubrir todo lo que hemos configurado en la serie hasta
ahora, pero tenga en cuenta que hay tantas consideraciones aquí que no puedo
dar cuenta de todo, no dude en ¡Extiende la mano si tienes algún inconveniente!
Módem puente
IMPORTANTE: No conecte su módem a menos que el único dispositivo
conectado sea la máquina pfSense o algún otro cortafuegos.