Intentando instalar Ownc/NextCloud en casa: ayuda con Nginx

tglaria

InExperto
Estimados, estoy intentando instalar NextCloud (un fork de OwnCloud) en un microcomputador Beaglebone Black.

Partí con Debian como base.
Instalé PHP7.0 a partir de unos repositorios para raspberry (para ARM) .

Instalé la versión 10 de Nextcloud (descargué el tar.bz2, descomprimí, metí en la carpeta /var/www/nextcloud)

Instalé nginx.

y aquí viene el problema.
Generé el archivo para nginx según ésta referencia
Cambié
- el puerto 80 por 8081,
- el server_name por "_" (al no estar usando aún un dominio)
- el redireccionamiento de https://$server_name$request_uri; → https://$host

Desde la misma red, puedo acceder a la página de Nextcloud usando la dirección IP y el puerto:
→ http://ip_de_nextcloud:8081 (con 80 entro a la página por defecto de nginx)

Ahora, quiero poder acceder desde fuera.
Configuro el 'port forward' en el módem de modo de redireccionar las llamadas de los puertos de interés al dispositivo con Nextcloud:
- puerto 8080 → ip_de_nextcloud, puerto 80
- puerto 8081 → ip_de_nextcloud, puerto 8081

Ahora, si ingreso la ip del router de manera local (192.168.1.1) o la externa (e.g. 192.256.312.204) más el puerto 8080, me despliega la página por defecto de nginx, por lo que asumo que el servidor funciona.
Pero al usar el puerto 8081, para que me cargue la página de Nextcloud, no carga nada. La página se queda cargando.

Ahora, ¿qué estoy haciendo mal?
Debo redireccionar el puerto 443 (de SSL) también?
Puede ser que estoy teniendo atados con el redireccionamiento ("$server_name" o "$host"), pero si no tengo una dirección/dominio fijo, ¿cómo puedo realizar el redireccionamiento?

A ver si me pueden orientar.
 

Kutral

Miembro Activo
Qué complicado. Si desde fuera le haces un telnet X.X.X.X 8081 se queda tomado? (para probar si el proveedor te tiene habilitado ese puerto o en alguna parte la redirección no funciona.
 
Upvote 0

Kutral

Miembro Activo
vas a usar el 80 de esa máquina?
ya probaste usando el 8080 (que se ve de afuera) al 8081 del ncloud?
El usuario dijo que desde afuera sí accede al 8080 y la interfaz de ahí, pero usando el 8081 no.

Con el telnet debería ver si se engancha a ese puerto o no. Si no s engancha, entonces el ISP le filtra ese puerto.
 
Upvote 0

Miguelwill

Matrix Operator
Miembro del Equipo
MOD
Revisa desde fuera con algún celular, y ve si te llega la conexión al servidor
Por el lado de linux puedes monitorear por el access log o de plano por tcodump
En el celu puedes usar el navegador o alguna aplicación tipo test de puertos

Enviado desde mi HUAWEI KII-L23 mediante Tapatalk
 
Upvote 0

tglaria

InExperto
Al final, un primer paso fue activar el ruteo de puertos en el módem para el puerto 443, con eso ya tengo acceso a dispositivo desde fuera.
Luego activar un DDNS y habilitar esa dirección en la configuración de NGINX.

Ahora puedo acceder por le puerto 8081.

Siguiente paso: habilitar el redireccionamiento del puerto 80 para poder usar la página letsencrypt para el certificado SSL.
Por algún motivo, al tratar de hacer redireccionamiento al puerto 80 del modem al puerto 80 del computador con Nextcloud, la página no carga nunca y no me muestra la página por defecto de Nginx.

Revisa desde fuera con algún celular, y ve si te llega la conexión al servidor
Por el lado de linux puedes monitorear por el access log o de plano por tcodump
En el celu puedes usar el navegador o alguna aplicación tipo test de puertos
¿Como puedo monitorear en linux, el log cuál sería?
 
Upvote 0

Miguelwill

Matrix Operator
Miembro del Equipo
MOD
Al final, un primer paso fue activar el ruteo de puertos en el módem para el puerto 443, con eso ya tengo acceso a dispositivo desde fuera.
Luego activar un DDNS y habilitar esa dirección en la configuración de NGINX.

Ahora puedo acceder por le puerto 8081.

Siguiente paso: habilitar el redireccionamiento del puerto 80 para poder usar la página letsencrypt para el certificado SSL.
Por algún motivo, al tratar de hacer redireccionamiento al puerto 80 del modem al puerto 80 del computador con Nextcloud, la página no carga nunca y no me muestra la página por defecto de Nginx.


¿Como puedo monitorear en linux, el log cuál sería?
por default Nginx deja su log de acceso y error en /var/log/nginx
debe estar configurado en /etc/nginx/nginx.conf, pero si no esta definido , puedes agregarlo siguiendo ejemplos de la documentacion oficial para la version que estes utilzando

si quieres monitorear que la conexion al puerto 80 este llegando a la ip del servidor linux, usa tcpdump, con ese puedes ver si llega el paquete, que se esta pidiendo, y desde que origen, prueba con este comando
asumiento que la ip esta sobre la interface "eth0":

tcpdump -ieth0 -nnn -vvv -AAA port 80

con eso veras todo lo que entre y salga por el puerto 80, tanto los datos de cabeceras IP como los datos dentro del paquete , que es lo que recibe nginx y usa para interpretar que pagina se esta pidiendo, url , cabeceras, etc

saludos
 
Upvote 0

wurrzag

Ciclista Jipi
si tenis internet "hogar" muchos isp te bloquean el puerto 80, supuestamente por seguridad, pero todos sabemos que es por razones comerciales.
 
Upvote 0

wurrzag

Ciclista Jipi
Demonios, es probable que sea por eso...

Algún tutorial de cómo generar un certificado ssl para casa?
El que pille usando letsencrypt me pide acceso al puerto 80.
en teoría deberías poder llamar a tu isp y webear para que te lo desbloqueen por ley de neutralidad de internet y chamullos varios
 
Upvote 0

Miguelwill

Matrix Operator
Miembro del Equipo
MOD
Demonios, es probable que sea por eso...

Algún tutorial de cómo generar un certificado ssl para casa?
El que pille usando letsencrypt me pide acceso al puerto 80.
aca tienes instrucciones

https://www.sslshopper.com/article-most-common-openssl-commands.html

primero genera la private key
despues la solicitud de certificado CSR
al final, tu mismo firma la peticion CSR con la key y te generas el certificado (pem o crt )

con eso puedes configurar el servicio web para funcionar con https
 
Upvote 0

tglaria

InExperto
aca tienes instrucciones

https://www.sslshopper.com/article-most-common-openssl-commands.html

primero genera la private key
despues la solicitud de certificado CSR
al final, tu mismo firma la peticion CSR con la key y te generas el certificado (pem o crt )

con eso puedes configurar el servicio web para funcionar con https
Ya tengo/tenía el servicio web funcionando con SSL, el problema es el mensaje de seguridad que me aparece cada vez que entro, "no se puede validar la autenticidad del certificado" (o algo así). Por eso estoy tratando de usar la página Let's Encrypt, para ver si puedo eliminar ese mensaje.

Con este método, aún saldría ese mensaje de seguridad, ¿no?
 
Upvote 0

Miguelwill

Matrix Operator
Miembro del Equipo
MOD
Ya tengo/tenía el servicio web funcionando con SSL, el problema es el mensaje de seguridad que me aparece cada vez que entro, "no se puede validar la autenticidad del certificado" (o algo así). Por eso estoy tratando de usar la página Let's Encrypt, para ver si puedo eliminar ese mensaje.

Con este método, aún saldría ese mensaje de seguridad, ¿no?
mm no tengo idea que hara eso que estas averiguando
normalmente cuando uso certificados autofirmados y que no reclame, suelo instalar el certificado en windows en el almacen correspondiente (certificados de confianza, o certificados raiz de confianza )

con eso windows toma el certificado como valido y ahi no lo vuelve a reclamar

saludos
 
Upvote 0

tglaria

InExperto
mm no tengo idea que hara eso que estas averiguando
normalmente cuando uso certificados autofirmados y que no reclame, suelo instalar el certificado en windows en el almacen correspondiente (certificados de confianza, o certificados raiz de confianza )

con eso windows toma el certificado como valido y ahi no lo vuelve a reclamar

saludos
:'(

Vale, a seguir leyendo entonces.
¡Gracias!
 
Upvote 0

Miguelwill

Matrix Operator
Miembro del Equipo
MOD
Upvote 0

Miguelwill

Matrix Operator
Miembro del Equipo
MOD
ahi estaba leyendo de que trataba let's encrypt (no costaba mucho mencionarlo, me parecio interesante el proyecto )
la validacion la realizan via http ?
revisaste si la conexion al puerto 80 llega a la ip del linux ?

saludos
 
Upvote 0

tglaria

InExperto
ahi estaba leyendo de que trataba let's encrypt (no costaba mucho mencionarlo, me parecio interesante el proyecto )
la validacion la realizan via http ?
revisaste si la conexion al puerto 80 llega a la ip del linux ?

saludos

No cacho como hacen la validación, aún no entiendo como funciona.

Sobre si en el computador de prueba llega la conexión por el puerto 80, no, no llega (al menos tcpdump no muestra nada), 'claramente' tengo un problema de redireccionamiento, quizá está el puerto bloqueado por el isp.
Quería intentar usar otro puerto en vez del 80 para obtener el certificado validado externamente, pero no cacho como.... Aún.
 
Upvote 0

Miguelwill

Matrix Operator
Miembro del Equipo
MOD
No cacho como hacen la validación, aún no entiendo como funciona.

Sobre si en el computador de prueba llega la conexión por el puerto 80, no, no llega (al menos tcpdump no muestra nada), 'claramente' tengo un problema de redireccionamiento, quizá está el puerto bloqueado por el isp.
Quería intentar usar otro puerto en vez del 80 para obtener el certificado validado externamente, pero no cacho como.... Aún.
Mm ya veo
entonces lo más probable es que efectivamente este bloqueado por el isp
le Nat a la ip interna es completo? o estas usando alguna función de tipo DMZ host?
con eso debería natear todas las conexiones entrantes

sobre cómo instalar el certificado en diferentes sistemas, depende de cada sistema
cada uno tiene un almacén de certificados raíz públicos y de certificados que el usuario da como válidos, por lo que cambia un poco en cada sistema
en Windows es cosa de tener el archivo con extensión crt o cer, y al abrirlo te mostrará la información del certificado
dando ahí la opción de instalar en alguno de los almacenes de certificados del pc o del. usuario

saludos

Enviado desde mi Huawei GR5 con MM
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
letsencrypt necesita de un cliente que ellos proporcionan (o bien lo haces manual).

Este cliente levanta un server http(s) con algunos archivos donde letsencrypt puede verificar que el dominio que estás pidiendo efectivamente es de tu propiedad (lógicamente tu A Record debe apuntar a la ip correcta). Lo malo es que tienes que bajar tu servidor web para que ellos puedan hacer la validación.

Si no hay certificado que renovar el webserver estará abajo por unos 2 segundos, cuando hay un certificado que renovar estar abajo dura unos 8 segundos.

La otra opción es manual, tienes que tener cierta estructura de directorios y archivos en tu sitio web que letsencrypt verifica. Lo bueno es que no necesitas tirar abajo el servicio.

De todas formas, acá en la pega lo ocupamos para algunos sitios menores con los cuales no vale la pena pagar por un certificado, ojo que cualquier cliente que no sea compatible con SNI tirará certificado inválido con letsencrypt (revisar http://caniuse.com/#feat=sni , pero si ocupas Windows XP ni siquiera los navegadores modernos que siempre han soportado SNI lo reconoce bien). Para mis sitios personales, retrocompatibilidad no me importa así que todos mis sitios ahora están con certificados de letsencrypt.

El script que tengo para renovar (los certificados de letsencrypt duran sólo 3 meses, así que es buena idea correr el cron una vez cada 2 semanas o una vez al mes), correr como root:

Código:
#!/bin/bash

cd letsencrypt/
echo "[INFO] Getting last copy of letsencrypt..."
git checkout .
git pull -q
pip install --upgrade pip
echo "[INFO] Generating binary..."
./certbot-auto --help 1>/dev/null
echo "[INFO] Ready to renew certificates"

date +"%Y-%m-%d %H:%M:%S.%6N"
./certbot-auto renew --standalone --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
date +"%Y-%m-%d %H:%M:%S.%6N"

La primera vez que corres el comando (o cada vez que agregas o sacas un host), es el siguiente:

Código:
# Comando original:
./letsencrypt-auto certonly --standalone -d telegram.unreal4u.com -d munin.unreal4u.com -d kibana.unreal4u.com

Obviamente reemplazar los hosts por los tuyos.

Saludos.


PD: Letsencrypt sólo funciona con puertos 80, 443 (seguro) y 8080 ó 8081 (creo), por razones de seguridad (cualquiera puede levantar un servidor sin siquiera ser dueño de la máquina y de esa forma crear certificados inválidos haciendo posible MITM) y autentificación, así que si tu ISP te bloquea, cagaste.

PD2: Veo que ahora certbot está en los repos oficiales así que ya no es necesario sacarlo de github: https://certbot.eff.org/#centosrhel7-nginx

PD3: quizás te sea útil, mi configuración de nginx donde cargo los certificados entregados por letsencrypt:

Código:
server {
  server_name telegram.unreal4u.com;
  listen 80;
  return 301 https://telegram.unreal4u.com$request_uri;
}

server {
  server_name telegram.unreal4u.com;
  listen 443;
  root /home/tgbot/tg-timebot/public/;

  ssl on;
  ssl_certificate /etc/letsencrypt/live/telegram.unreal4u.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/telegram.unreal4u.com/privkey.pem;
  # disable poodle attack (sslv3)
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

  location / {
    access_log /home/tgbot/logs/access.log combined;
    fastcgi_pass  unix:/var/opt/remi/php70/run/php-fpm/telegram.unreal4u.com.socket;
    include  fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param  SCRIPT_NAME $fastcgi_script_name;
  }
}
 
Última modificación:
Upvote 0
Subir