?>/script>'; } ?> [HOWTO] Luci con SSL oficial. También automático y gratis (LetsEncrypt) con acme Widgets Magazine

Autor Tema: [HOWTO] Luci con SSL oficial. También automático y gratis (LetsEncrypt) con acme  (Leído 13021 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado peperfus

  • ******
  • Mensajes: 251
W A R N I N G
Citar
DISCLAIMER - EXCENCIÓN DE RESPONSABILIDAD
El presente tutorial / manual / howto, instrucciones o texto en general, carece de cualquier garantía y sólo está pensado como uso a modo educativo, de aprendizaje, experimentación, investigación y desarrollo.
Puede contener errores así como ambigüedades o falta de información precisa. En cualquier caso, las sugerencias, comentarios y críticas constructivas serán siempre bienvenidos.
El autor rechaza cualquier responsabilidad por cualquier tipo de daño, ya sea directo o indirecto, accidental o intencionado que la aplicación del siguiente texto pueda ocasionar.
Su uso está totalmente desaconsejado en entornos de producción a no ser, bajo la supervisión de un profesional debidamente cualificado y bajo su única responsabilidad.
La aplicación del presente texto en cualquier sistema, implica la total aceptación de estas condiciones.
Peperfus.

-----------------------------------------
Edito: Para instalación automática y (casi) desatendida mediante script, pasar a leer el cuarto y quinto post.
Para instalación manual, seguir leyendo este post.
-----------------------------------------

Citar
Nota: Aquí se compra el dominio y el certificado. Más adelante, se explica como conseguir un certificado gratis, usando LetsEncrypt.
Tutorial de novato a novato.
Así es como lo he hecho yo y estoy contento, porque me ha funcionado prácticamente a la primera, después de solucionar algunos detallitos leves.

1) Necesitamos tener un dominio en Internet. Por ejemplo: openwrt.pepito.com
En la configuración del dominio, el email del admin debe ser estándard:
"admin@openwrt.pepito.com" (bueno, eso suponiendo que elijamos como método de validación del certificado la confirmación por email)
Y la dns, lo lógico es que apunte a la IP privada del router: (la típica suele ser 192.168.1.1) (si no queremos navegar por nuestro luci desde fuera de la LAN)
Citar
Nota:
Algunos DNS no admiten IPs privadas como resolución de nombres de dominio, por seguridad. Si este es el caso, se puede añadir la resolución al hosts del router para que nos lo resuelva localmente en la red.
En cambio de IP de un registro DNS puede tardar cierto tiempo. (A veces es inmediato).
Lo que sí tarda bastante (24... 48 horas) es cambiar el nameserver (NS) de un dominio.

2) Instalar:
Código: [Seleccionar]
opkg install  luci-ssl-openssl luci-app-uhttpd
3) Generar el certificado. Consta de 2 archivos: el certificado en sí y el que se envía para que nos lo firmen, que tiene extensión csr (certificate signing request (petición de firma de certificado))
Yo utilicé este comando, que me lo dio la CA de donde compré mi certificado y me fue bien:
Código: [Seleccionar]
openssl req -new -newkey rsa:2048 -nodes -keyout certificado.key -out certificado.csr
Se rellena el formulario con los datos (código de país, etc...)
Lo más IMPORTANTE es que el common name sea nuestro dominio: (openwrt.pepito.com)

4) Nos vamos a una CA (Autoridad Certificadora, una especie de "notario"), compramos el certificado más barato que haya (que sólo valide el dominio va que chuta) y seguimos sus instrucciones para que nos firme el csr. Si nos pregunta qué tipo de cifrado, elegimos OPENSSL (suele poner también nginx) Seguramente nos enviará un email a la dirección de admin del dominio con un código para confirmar la firma del cert. Hay muchísimas CAs por ahí en Internet, algunos tienen certificados muy baratos (el mío me costó unos 8$ al año), e incluso creo que hay hasta gratis y todo, aunque no lo he mirado porque los veía algo más complicados y como este em funcionó bien y 8$ al año no es dinero, pues me lo pillé.

5) Una vez validada nuestra identidad, nos envían el cert firmado por email*.

6) Nos vamos a luci, Services, uhttpd y lo configuramos:
Primero le damos al botón: "Remove configuration for certificate and key". Esto borra el certificado autofirmado generado por defecto y su configuración, para que tenga en cuenta la nueva configuración de nuestro cetificado firmado.
Yo le pongo que sólo escuche http por la IP de mi red privada
La ip https la misma, pero en puerto 443
IPv6 lo quito
Redirect http al https marcado.
Ignore private IPs on public interface, según os interese... (yo lo marco)
Y luego le ponemos el archivo CRT que habíamos recibido de la CA y el key que habíamos generado.
Guardamos ...
Nos corta la conexión. Yo lo que hice fue forzar actualización de configuración. Y luego reinicié el uhttpd.
No funciona...
Porque la dns aún no nos resuelve a la IP. La solución temporal es ponerle en /etc/hosts la ip del router asociada al dominio:
192.168.1.1 openwrt.pepito.com
Reiniciar dnsmasq...
Y listo. En principio ya debería funcionar.

Probar en un navegador:
openwrt.pepito.com y debería redirigirnos a https y ponernos el candadito VERDE, diciéndonos que somos de fiar :)
(Como hacer que Firefox vuelva a mostrar el candadito verde)

(He hecho el tutorial de cabeza, no sé si me habré dejado algún paso o algo. De todas formas volveré a hacerlo siguiéndolo, a ver si me he dejado algo)
Edito: Probado otra vez y funcionando ok.

A disfrutar de conexión luci segura :)
Esto es bueno para asegurarnos de que el password viaje encriptado por la red y no nos lo puedan "piratear".


Certificado gratis para hacer pruebas::
https://www.sslforfree.com
Lo malo es que sólo dura 90 días. Por eso me he comprado uno.
Yo me lo he comprado de: c h e a p sslsecurity.com (he tenido que poner lo de c h e a p con espacios porque si lo ponía seguido, el foro me lo cambiaba a asteriscos, supongo que por algún filtro antispam o algo así)
Actualización: he probado el cert de sslforfree y también me ha funcionado OK.


Aver si alguien lo prueba y le funciona. La verdad es que está guay esto de tener el candadito verde reconocido oficialmente por el navegador para nuestro cacharro openwrt, le da más caché, más prestigio, jejejeje, además de pasar un buen rato aprendiendo. ;D

* También puede que nos lo muestren en pantalla, como una secuencia de filas de caracteres. Podemos copiar y pegar en el archivo, pero OJO. Al hacer esto desde Windows, cuando lo he pegado en un archivo, por ejemplo con el notepad++, me ha dado error el uhttpd. Creo que es por cosas del juego de caracteres de windows, o lo del fin de línea o algo de eso.
Lo que he hecho para que no me pase esto es:
Copiarlo desde la web y pegarlo en el putty conectado a open, en el archivo abierto.
nano certificado.crt
click derecho en el contenido del certificado en la web, seleccionar todo. Click derecho, copiar
Click derecho sobre el putty y directamente ya se pega.
Salir guardando el archivo y entonces lo coge ok.
(Y hacer lo mismo con el archivo key)
« Última modificación: 24-12-2019, 12:42 (Martes) por peperfus »

Desconectado peperfus

  • ******
  • Mensajes: 251
Re:[HOWTO] Luci con SSL oficial
« Respuesta #1 en: 19-03-2019, 00:03 (Martes) »
Problema que me ha pasado: al reiniciar el router, no me iba el uhttpd. Cosa rara. Entro por ssh, reinicio el demonio y va.
Para arreglarlo, he editado manualmente el archivo /etc/config/uhttpd y he borrado las líneas de listen de IPv6 (que no las utilizo y estaban vacíos los corchetes).
He salido guardando los cambios y al reiniciar ya va.

Desconectado peperfus

  • ******
  • Mensajes: 251
Re:[HOWTO] Luci con SSL oficial
« Respuesta #2 en: 26-03-2019, 14:41 (Martes) »
Welcome to Bonus Stage!!

Pasos para conseguir un certificado SSL wildcard oficial gratis* desde cero y configurarlo para tener conexión segura con el luci de cualquiera de nuestros cacharros openwrt.
(Así es como lo he hecho yo) (Tutorial para Windows, aunque prácticamente compatible con linux)

  • Compramos un dominio (si no lo tenemos ya). Son baratos. Yo compré el mío en namebright.com y me cuesta unos 10 euros al año. A cambio de lo que me ofrece, para mí no es dinero. Para este ejemplo usaré: "midominio.com"
  • Nos vamos a solicitar el certificado wildcard a sslforfree.com (utiliza certificados de letsencrypt, pero lo hace mucho más fácil) y en el recuadro le ponemos un asterisco delante del dominio. Quedaría: *.midominio.com. Le damos a "Create Free SSL Certificate"
  • Le damos a Manual Verify domain (DNS) y nos pedirá que creemos un registro de tipo TXT en la DNS de nuestro dominio.
  • En otra pestaña, nos vamos al panel de control de nuestro dominio y creamos el registro de tipo TXT que nos ha dicho en el paso anterior:
    Citar
    Tipo: TXT
    Subdominio: _acme-challenge (normalmente no se incluye la parte del dominio, sólo el subdominio)
    Valor: (el que nos diga, que será una cadena de caracteres)
    (Obviamente, sustituir midominio.com por vuestro dominio correspondiente)
    Asignar el TTL a 1 segundo. Si no nos dejan, lo ponemos al mínimo que nos deje (por ejemplo, 1 hora) y tendremos que esperar para continuar. A veces está listo antes de pasar la hora completa. En este caso y si no podemos terminar el proceso, no hay problema, ya que el registro de petición de certificado queda almacenado y se puede continuar más adelante, aunque apaguemos el ordenador. En dicho caso, habría que repetir los pasos y debería salirnos el mismo valor del campo TXT para el DNS.
  • Una vez haya pasado el tiempo necesario, le damos a Download SSL Certificate. Como es un certificado que valida únicamente dominios, no vale la pena aportar un CSR propio, ya que los demás datos son ignorados. Nos mostrará en pantalla el certificado, compuesto por 2 claves: la clave pública (certificado) y la privada key. Ahora debemos copiarlas a sus correspondientes archivos, pero cuidado con el método, porque si quedan caracteres especiales residuales (saltos de línea de Windows, por ejemplo), nos dará error y nos volveremos locos hasta que nos demos cuenta (me ha pasado). Yo lo hice de esta manera y no me dio problemas:
    • 1) Click derecho sobre la secuencia del certificado (parte pública), seleccionar todo. Click derecho, copiar
    • 2) Nos vamos a putty, conectamos con el router del luci a proteger, y editamos un archivo en blanco: nano midominio.com.crt
    • 3) Click derecho sobre la pantalla negra del putty, para que pegue el certificado.
    • 4) Salimos guardando los cambios.
    • 5) Click derecho sobre la secuencia del certificado (parte privada, la key), seleccionar todo. Click derecho, copiar
    • 6) Nos vamos a putty otra vez, y ahora creamos el archivo de la clave privada: nano midominio.com.key
    • 7) Click derecho sobre la pantalla negra del putty, para que pegue el certificado.
    • 8 ) Salimos guardando los cambios.
    • 9) Abrimos Winscp y copiarnos ambos archivos a Windows, por ejemplo al escritorio. De esta manera no deberían darnos problemas. (Sé que es un proceso algo tedioso, pero de esta manera garantizamos que funcionen y no tengan caracteres ocultos raros)
  • Instalamos en el router: luci-ssl-openssl y luci-app-uhttpd (si no lo habíamos hecho antes)
  • En luci, nos vamos a services, uHTTPd (Si no aparece services, refrescar la página, o ir por ejemplo a Status, overview para que refresque)
  • Pulsar el botón "Remove configuration for certificate and key". (Este paso no es imprescindible, aunque si se omite, luego habrá que reiniciar uhttpd)
  • Configurar el resto de opciones de la siguiente manera:
    • HTTP LISTENER: Si lo dejamos en 0.0.0.0:80 escuchará en todas las direcciones. Yo prefiero decirle que sólo use la IP de la interfaz LAN (por ejemplo 192.168.1.2 o la que tengáis).
    • HTTPS LISTENER: Lo mismo, pero en el puerto 443
    • Redirect all HTTP to HTTPS: marcado si queréis forzar uso del SSL.
    • Ignore private IPs on public interface: Según uséis el dns (local o público, eso ya depende de la configuración de cada uno). Yo lo tengo marcado.
    • HTTPS Certificate: Examinar.... y se le carga el archivo crt que habíamos guardado antes en el escritorio.
    • HTTPS Private Key: Examinar.... y se le carga el key.
  • Y ya como último paso: pulsar SAVE AND APPLY
Si se queda "colgado", basta reiniciar el servicio uhttpd:
Código: [Seleccionar]
/etc/init.d/uhttpd restart(o reiniciar el router)

Y ahora sólo faltaría configurar nuestro DNS para que nos resuelva loquesea.midominio.com a su IP correspondiente. Por ejemplo:
192.168.1.2 firewall.midominio.com
Esto se puede hacer de varias maneras, por ejemplo añadiendo dicha entrada al archivo /etc/hosts.

* (El certificado es gratis, lo que sí hay que tener es un dominio registrado en Internet, aunque no es caro)
Como parte negativa, indicar que la validez de este certificado dura 3 meses, teniendo que renovarlo cuando caduque.
« Última modificación: 11-11-2019, 22:13 (Lunes) por peperfus »

Desconectado peperfus

  • ******
  • Mensajes: 251
Re:[HOWTO] Luci con SSL oficial
« Respuesta #3 en: 31-03-2019, 17:43 (Domingo) »
WARNING: VERY HOT.
BONUS STAGE 2 !!

Generación e instalación AUTOMÁTICA de certificado LetsEncrypt. (Modo de validación por web. Requiere tener la web abierta a Internet)
Requisitos:
1) Ser conocedor de y asumir que no me hago responsable de cualquier daño que este script pueda ocasionar, ya sea por uso correcto o incorreco. Si no estás de acuerdo con esto, no sigas.
2) Tener un dominio en Internet.
3) Que dicho dominio apunte a nuestra IP.
4) O bien tener el router openwrt abierto a Internet (no suele ser el caso), o bien redirigir los puertos 80 y 443 del router principal al router openwrt de la red local (y habilitar el paso de dichos puertos en cualquier firewall intermedio y en el propio firewall openwrt) (Ojo: tener una contraseña fuerte y no hacer login al luci sin SSL mientras tanto.)
5) (Tener los paquetes necesarios instalados, previamente mencionados en el paso 1). Para un script totalmente automático desde cero, pasar al siguiente post del hilo.

Pasos:
1) "Descargar" este script al router openwrt:
(para pasarlo rápida y fácilmente al router: seleccionarlo todo, click derecho -> copiar, luego ir al router por ssh (Putty), editar un nuevo archivo y hacerle click derecho para pegarlo)
Código: [Seleccionar]
#!/bin/sh
# EDITAR:
DOMAIN=tudominio.com

if [ "$DOMAIN" == "tudominio.com"  ]; then
  echo Debes editar la variable DOMAIN a tu dominio ANTES de ejecutar el script.
  exit 1
fi

echo
sleep 1
echo
echo Este script instala AUTOMATICAMENTE y de forma desatendida la encriptación para luci con certificado SSL de LetsEncrypt.
echo Presione Ctrl + C ahora para cancelar la ejecución, otra tecla para omitir la espera
read -t16 -n1 -r -p "O espere 15 segundos para continuar... "
echo Alla vamos. . . .
sleep 3
clear
opkg update && opkg install luci-ssl-openssl  curl ca-bundle luci-app-uhttpd
sleep 1
echo
uci set uhttpd.main.redirect_https=1
echo
uci commit
echo
/etc/init.d/uhttpd restart
sleep 2
echo
curl https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh > acme.sh
sleep 2
echo
chmod a+x "acme.sh"
sleep 1
echo
./acme.sh --install
sleep 3
echo
cd /root/.acme.sh
sleep 1
# Abrimos los puerto de entrada al router: 80 y 443:
iptables -I input_rule -p tcp --dport 80 -j ACCEPT -m comment --comment ACME
iptables -I input_rule -p tcp --dport 443 -j ACCEPT -m comment --comment ACME
sleep 1
echo
./acme.sh --issue -d $DOMAIN -w /www
sleep 3
echo
#En caso de no querer cerrarlos, comentar las 4 siguientes lineas:
echo "Los puertos http (80) y https (443) quedan cerrados por seguridad."
echo Si el proceso ha tenido exito, puede abrirlos.
iptables -D input_rule -p tcp --dport 80 -j ACCEPT -m comment --comment ACME
iptables -D input_rule -p tcp --dport 443 -j ACCEPT -m comment --comment ACME
sleep 1
echo
uci set uhttpd.main.key="$(pwd)/$DOMAIN/$DOMAIN.key"
uci set uhttpd.main.cert="$(pwd)/$DOMAIN/$DOMAIN.cer"
uci commit uhttpd
sleep 1
echo
/etc/init.d/uhttpd restart
echo Script finalizado.
Modificar la línea que indica la variable DOMAIN=tudominio.com. Hay que cambiar tudominio.com por (efectivamente, esto es de sentido común, tu dominio  ^-^).
Guardar el archivo con el nomre que queráis, por ejemplo "instalarCertLetsEncrypt.sh" y salir.

2) Hacerlo ejecutable: chmod +x ./instalarCertLetsEncrypt.sh

3) Cruzar los dedos, coger aire, aguantar la respiración...
(Emoción, intriga, dolor de barriga....)

4) Ahora sí, ejecutar el script.

5) Si ha tenido éxito, abrirse una cocacola o una birrita fresquita y relajarse. En caso contrario, abrirse una cocacola o una birrita fresquita y relajarse.

Lo he probado 2 veces y me ha funcionado perfectamente, a la primera.
A ver si alguien lo prueba y confirma que también funciona.
Nota: si os sale un error como este:
Código: [Seleccionar]
crontab: can't open 'root': No such file or directory
crontab: can't open 'root': No such file or directory
Y luego os pone OK, no os preocupéis. Es porque no encuentra el archivo de crontabs de root, porque al principio no existe hasta que se crea la primera tarea programada. El programa la añade bien aunque salga el error.

Para renovar automáticamente el certificado, parece ser que el script de acme instala una línea en cron que lo hace, aunque según el autor del hilo de donde he sacado toda esta información, conviene editarlo de esta manera:

Citar
Step 4: Modify crontab (automatic renew)

Run crontab -e to edit your crontab (use something like export EDITOR="/usr/bin/nano" if vim isn't your style). Edit to:

0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --pre-hook "iptables -I input_rule -p tcp --dport 443 -j ACCEPT -m comment --comment ACME" --post-hook "iptables -D input_rule -p tcp --dport 443 -j ACCEPT -m comment --comment ACME" --reloadcmd "/etc/init.d/uhttpd restart" >> /root/.acme.sh/log.txt 2>&1
(Aquí lo que añade a la línea que instala acme, es el prehook y el posthook, para abrir y cerrar el puerto 443, aunque no sé muy bien qué sentido tiene cerrarlo  ???. Otra cosa que hace que sí le veo sentido es añadir la opcion reloadcmd para que uhttpd se reinicie y coja el nuevo certificado)

Un saludo !

Créditos para: el autor de https://github.com/Neilpang/acme.sh/wiki/How-to-run-on-OpenWRT, el muy honorable señor: xmax000. Lo he invitado a una cerveza porque se lo merece. Sí señor.  >:(
« Última modificación: 11-11-2019, 22:14 (Lunes) por peperfus »

Desconectado peperfus

  • ******
  • Mensajes: 251
Script que instala luci ssl, acme, solicita el certificado (modo de validación DNS), espera a que insertemos los TXT, lo valida y lo despliega a todos nuestros routers:
(ajustar según sea necesario)
Código: [Seleccionar]
#!/bin/sh

DOMINIO=midominio.com


if [ "$DOMINIO" == "midominio.com"  ]; then
  echo Debes editar la variable DOMINIO a tu dominio ANTES de ejecutar el script.
  exit 1
fi
clear
echo Instalando paquetes necesarios ...
sleep 1
opkg update && opkg install  luci-ssl-openssl luci-app-uhttpd curl ca-bundle socat
sleep 1
echo
echo Descargando acme ...
sleep 1
curl https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh > acme.sh
sleep 1
echo
echo Haciéndolo ejecutable ...
chmod +x "acme.sh"
sleep 1
echo
echo Parando y configurando el demonio uhttpd
sleep 1
/etc/init.d/uhttpd stop
uci set uhttpd.main.redirect_https=1
uci set uhttpd.main.cert='/etc/luci-uploads/cbid.uhttpd.main.cert'
uci set uhttpd.main.key='/etc/luci-uploads/cbid.uhttpd.main.key'
uci commit
echo
sleep 2
echo
echo
echo

# El modo DNS manual (no automatico por API) no admite renovacion automatica.
# Se debe hacer una nueva expedicion (solicitar la emision de un nuevo certificado) (issue)

echo "Instalador de certificado dominio y wildcard ($DOMINIO y *.$DOMINIO)"
echo "---------------------------------------------------------------------------------"
sleep 2
echo "Nota: SE PUEDE CREAR VARIOS REGISTROS TXT EN EL DNS CON EL MISMO VALOR EN HOST."
echo "En el caso de multidominio, hay que crearlos todos (ningun problema en que coexistan a la vez)"
echo "para que los valide todos de una."
echo
sleep 3

./acme.sh --issue --domain "$DOMINIO" --dns --domain "*.$DOMINIO" --dns --webroot /www --yes-I-know-dns-manual-mode-enough-go-ahead-please

# OJO: en el renew de varios dominios se debe especificar cada uno en el mismo orden que se solicitaron en el issue

echo "AHORA CREAR LOS REGISTROS TXT INDICADOS. OJO CON EL HOSTNAME, NO DEBE CONTENER EL DOMINIO, SOLO EL HOST"
read -p "Pulsar ENTER para continuar con el \"renew\" una vez creados los TXT"
echo
sleep 1
echo
sleep 1

./acme.sh --renew -d "$DOMINIO" --dns -d "*.$DOMINIO" --dns --webroot /www  --yes-I-know-dns-manual-mode-enough-go-ahead-please

sleep 2
echo
echo "Ahora se depliega el certificado a los routers..."
echo
sleep 1
echo
cert=/root/.acme.sh/$DOMINIO/$DOMINIO.cer
key=/root/.acme.sh/$DOMINIO/$DOMINIO.key

for router in router1.$DOMINIO router2.$DOMINIO router3.$DOMINIO routerN.$DOMINIO
do
  echo ROUTER $router:
  echo Parando y configurando uhttpd...
  ssh $router "\/etc\/init.d\/uhttpd stop"
  ssh $router "uci set uhttpd.main.redirect_https=1"
  ssh $router "uci set uhttpd.main.cert='/etc/luci-uploads/cbid.uhttpd.main.cert'"
  ssh $router "uci set uhttpd.main.key='/etc/luci-uploads/cbid.uhttpd.main.key'"
  ssh $router "uci commit"
  echo Instalando certificado...
  scp $cert $router:/etc/luci-uploads/cbid.uhttpd.main.cert
  scp $key  $router:/etc/luci-uploads/cbid.uhttpd.main.key
  echo Asignando permisos 600...
  ssh $router "chmod 600 \/etc\/luci\-uploads\/*.cert"
  ssh $router "chmod 600 \/etc\/luci\-uploads\/*.key"
  echo Arrancando uhttpd...
  ssh $router "\/etc\/init.d\/uhttpd start"
  echo ------------------------------------------------------
  sleep 1
  echo
done

echo ROUTER actual:

echo Instalando certificado y asignando permisos
mv $cert /etc/luci-uploads/cbid.uhttpd.main.cert
mv $key /etc/luci-uploads/cbid.uhttpd.main.key
chmod 600 /etc/luci-uploads/*.cert
chmod 600 /etc/luci-uploads/*.key
echo Arrancando uhttpd....
/etc/init.d/uhttpd start
echo --------------------------------------------------------
echo


(Se recomienda mucho configurar el router principal con passwordless login desde openwrt a openwrt para que el script acceda directamente sin preguntar login y password)

Espero que le sirva a alguien.

« Última modificación: 06-05-2019, 11:38 (Lunes) por peperfus »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
(Se recomienda mucho configurar el router principal con passwordless login desde openwrt a openwrt para que el script acceda directamente sin preguntar login y password)

Yo diría que ahora es la única forma de acceder de un router a otro sin contraseña. Antes existía un paquete llamado empty, que te permitía acceder a un ssh con contraseña, y realizar scripting dependiendo de la respuesta de los comandos (como expect), per lamentablemente dicho paquete ha desaparecido de las versiones de openwrt, y no me explico el por qué. Me era muy útil para automatizar scripts remotos en máquinas linux, aunque no era fácil de manejar, pero al menos desde openwrt te daban la posibilidad. Ahora ya no existe...  :P
« Última modificación: 05-05-2019, 09:28 (Domingo) por Tki2000 »

Desconectado raphik

  • *****
  • Mensajes: 102
Antes existía un paquete llamado empty, que te permitía acceder a un ssh con contraseña, y realizar scripting dependiendo de la respuesta de los comandos (como expect), per lamentablemente dicho paquete ha desaparecido de las versiones de openwrt, y no me explico el por qué. Me era muy útil para automatizar scripts remotos en máquinas linux, aunque no era fácil de manejar, pero al menos desde openwrt te daban la posibilidad. Ahora ya no existe...

He compilado el paquete empty para OpenWrt a partir del antiguo Makefile y del SDK brcm63xx: http://galeon.com/raphik/empty_0618.ipk.

EDITO: He compilado también la ultima versión disponible: http://galeon.com/raphik/empty_0620.ipk

http://manpages.ubuntu.com/manpages/disco/man1/empty.1.html

Saludos.
« Última modificación: 06-05-2019, 21:56 (Lunes) por raphik »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Antes existía un paquete llamado empty, que te permitía acceder a un ssh con contraseña, y realizar scripting dependiendo de la respuesta de los comandos (como expect), per lamentablemente dicho paquete ha desaparecido de las versiones de openwrt, y no me explico el por qué. Me era muy útil para automatizar scripts remotos en máquinas linux, aunque no era fácil de manejar, pero al menos desde openwrt te daban la posibilidad. Ahora ya no existe...

Acabo de compilar el paquete empty, versión 0.6.18b a partir del antiguo Makefile y del SDK para máquinas brcm63xx: http://galeon.com/raphik/empty_0618.ipk.

EDITO: He conseguido compilar la versión 0.6.20b, que es la última disponible: http://galeon.com/raphik/empty_0620.ipk

http://manpages.ubuntu.com/manpages/disco/man1/empty.1.html

Saludos.

Bueno, sigo un poco con el offtopic.
empty se basa en pasar los argumentos de la sesión telnet/ssh mediante ficheros temporales de tipo fifo.
Este script lo usaba para resetear un módem TP-LINK 8840 cuando detectaba que se había caído internet:

Código: [Seleccionar]
#!/bin/sh

telnet="telnet" # (/full/path/to/)telnet
target="192.168.2.2" # target telnet-host
login="root" # username (Change it!)
password="password" # password (Change it!)
fifo_in="/tmp/empty.in" # input fifo
fifo_out="/tmp/empty.out" # output
file_out="/tmp/empty.tmp" # tempfile to store result

# telnet command examples. Chose one:
#telnet_cmd="$telnet -K $target" # connect FreeBSD from FreeBSD (SRA)
telnet_cmd="$telnet $target" # All other OSes
# -----------------------------------------------------------------------------

echo "Telnetting to modem"
empty -f -i $fifo_in -o $fifo_out -L $file_out $telnet_cmd
if [ $? = 0 ]; then
if [ -w $fifo_in -a -r $fifo_out ]; then
echo "Waiting Welcome Message"
#empty -w -v -i $fifo_out -o $fifo_in -t 20 "Escape character is ''." ""
empty -r -t 20 -i $fifo_out
#echo "Sending Login"
sleep 2
empty -w -Sv -i $fifo_out -o $fifo_in -t 20 "username:" "$login\n"
#empty -s -o $fifo_in "$login\n"

#echo "Sending Password"
sleep 2
empty -w -Sv -i $fifo_out -o $fifo_in -t 5 "password:" "$password\n"
#empty -s -o $fifo_in "$password\n"

#echo "Sending Commands"
sleep 2
#empty -w -Sv -i $fifo_out -o $fifo_in -t 5 "TP-LINK(conf)" "dev version\n"
empty -s -o $fifo_in "dev version\n"
sleep 2
empty -w -v -i $fifo_out -o $fifo_in -t 5 "cmd:SUCC:" "dev serial show\n"
#empty -s -o $fifo_in "dev serial show\n"
sleep 2
empty -w -v -i $fifo_out -o $fifo_in -t 5 "cmd:SUCC:" "dev reboot"

echo "Sending exit"
sleep 2
empty -s -o $fifo_in ''
sleep 1
empty -w -v -i $fifo_out -o $fifo_in -t 5 "exit telnet" 'e\n'
#empty -s -o $fifo_in 'e\n'

echo "Check results:"
sleep 1
cat $file_out
rm -f $file_out
else
echo "Error: Can't find I/O fifos!"
return 1
fi
else
echo "Error: Can't start empty in daemon mode"
return 1
fi
echo "Done"

Desconectado peperfus

  • ******
  • Mensajes: 251
 :P
Ahora no sé qué "·$%·"%"·&$%&$" pasa, que no me va el acme con validación web.  :P

Se me queda en pending

Código: [Seleccionar]
[Fri May 17 21:59:34 CEST 2019] Create account key ok.
[Fri May 17 21:59:34 CEST 2019] Registering account
[Fri May 17 21:59:38 CEST 2019] Registered
[Fri May 17 21:59:38 CEST 2019] ACCOUNT_THUMBPRINT='uGiDpvxCJVS33quBFjkp8mEj-V8qWwOSYphBhd4OkyQ'
[Fri May 17 21:59:38 CEST 2019] Creating domain key
[Fri May 17 21:59:53 CEST 2019] The domain key is here: /root/.acme.sh/XXXXXXX.com/XXXXXXX.com.key
[Fri May 17 21:59:53 CEST 2019] Single domain='XXXXXXX.com'
[Fri May 17 21:59:54 CEST 2019] Getting domain auth token for each domain
[Fri May 17 21:59:56 CEST 2019] Getting webroot for domain='XXXXXXX.com'
[Fri May 17 21:59:56 CEST 2019] Verifying: XXXXXXX.com
[Fri May 17 22:00:01 CEST 2019] Pending
[Fri May 17 22:00:04 CEST 2019] Pending
[Fri May 17 22:00:08 CEST 2019] Pending
[Fri May 17 22:00:11 CEST 2019] XXXXXXX.com:Verify error:Fetching http://XXXXXXX.com/.well-known/acme-challenge/mmKkyPuWqzQOrofc3Do0OmKRT7kS57YSlJE7IutZsGk: Timeout during connect (likely firewall problem)
[Fri May 17 22:00:11 CEST 2019] Please add '--debug' or '--log' to check more details.
[Fri May 17 22:00:11 CEST 2019] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh

Tengo el router de internet con DMZ al router de open. Y en el de open, los puertos 80 y 443 abiertos.
El uhttpd escuchando a la interfaz wan.
La IP correcta en el DNS.

Y no sé qué está fallando  :-\
Cuando lo averigüe, lo postearé, porque valdrá la pena. Llevo toda la tarde rompiéndome la cabeza intentando ver qué pasa.

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Si tienes habilitado el soporte para IPv6, mira a ver si quitándolo funciona, tanto del router de internet como del open.
Aunque parezca mentira, en algunos routers, además de configurar el DMZ a una IP, he tenido que redirigir los puertos también a esa IP (me lo expliquen  ??? ). Mira a ver si el router aunque lo tengas en DMZ te está cortando el acceso por los puertos http y https comunes.
« Última modificación: 18-05-2019, 09:51 (Sábado) por Tki2000 »

Desconectado peperfus

  • ******
  • Mensajes: 251
He mirado lo del IPv6. Lo tengo desactivado en todas las opciones que he visto.
He mirado también si estoy en CG-NAT, pero parece ser que no.

Aunque, acabo de probar a poner un servidorcillo web en mi PC y he probado a ponerlo en el puerto 42000 y rula perfectamente. Al ponerlo en el puerto 80, nada. Le pasa lo mismo que al router de open. Así que tiene pinta de ser culpa del proveedor, que me está bloqueando ese puerto de alguna manera  :P

PD: también he probado lo que dices de redirigir los puertos 80 y 443 desde el router principal, aún teniendo DMZ, pero naranjas de la china.
Voy a llamar al SAT a ver qué me dicen, porque esto ya se pasa de castaño oscuro.
(Me falta el smiley de cara roja enfadada para poner)

Gracias por las ideas.

Está claro que no es culpa de mi configuración.... lo que sea, no tiene nada que ver con open, ni con el certificado ssl.....
pero en cuanto lo averigüe lo pondré, para que quede como referencia para el futuro, por si me vuelve a pasar o le pasa a alguien.


EDITO:
Acabo de llamar a Masmovil (mi ISP) y según me han dicho desde el SAT, el puerto 80 está reservado y no dejan redirigirlo. :P
Punto negativo. Al acabar la permanencia cambiaré.
« Última modificación: 18-05-2019, 15:43 (Sábado) por peperfus »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
EDITO:
Acabo de llamar a Masmovil (mi ISP) y según me han dicho desde el SAT, el puerto 80 está reservado y no dejan redirigirlo. :P
Punto negativo. Al acabar la permanencia cambiaré.

¿Reservado para quién? Con esa contestación me doy de baja sin dilaciones y digo que no cumplen especificaciones. Y les pongo una reclamación por no suministrar servicios y no dejarlo claro en contrato (¿o sí lo pone?). Yo es que lo del filtrado de puertos es lo primero que pregunto al firmar con una compañía.
Jamás fomentaré el uso de compañías que capan servicios de internet.

Pero, y entonces ¿cómo es que te funcionó antes?
« Última modificación: 18-05-2019, 17:52 (Sábado) por Tki2000 »

Desconectado peperfus

  • ******
  • Mensajes: 251
....
Pero, y entonces ¿cómo es que te funcionó antes?

Eso mismo le he preguntado a la chica que me ha atendido y según me ha hecho entender, por lo visto lo han empezado a restringir después. Pero he visto por ahí, en Internet, que parece ser configuración del router. Se puede hacer algún truquillo para recuperar esos puertos, que haciendo login con el usuario admin (reset a valores de fábrica y logeando antes de conectarlo a Internet para poder usar el password por defecto), se puede configurar ese puerto para que también sea redirigido.
Hombre, lo de que esté "reservado" tiene su lógica, porque para acceder a la web de configuración del router, hace falta el puerto 80. Y si pones DMZ, ese puerto deja de estar habilitado para el propio router, con lo que ellos ya no pueden acceder a su web (de hecho, es lo que le pasaba a la chica, mientras hablábamos por telf. He desactivado el DMZ y ha podido entrar).

Lo que estoy pensando ahora, me estoy preguntando.... si es posible configurar el router de open para conectarlo directamente a la ONT, sin tener que pasar por el router de masmovil y así poder ser amo y señor de toda la configuración. Creo que la vlan del puerto wan tiene que tener una ID concreta o algo así, me suena. Aunque no tengo prácticamente ni idea. ¿Sabes algo de esto o algún hilo dónde podría consultar?
Edito: acabo de intentarlo, cambiando la vlan id de la wan a 20 (se supone que es la de másmóvil) y protocolo IP a DHCP, pero nada. No me ha funcionado. No me da IPv4 (aunque sí IPv6, curiosamente. (No puedo navegar)). Como esto ya es otro tema, abro nuevo hilo al respecto.

Aparte de esto, respecto al tema del certificado, estoy mirando que acme.sh tiene opción de especificar otro puerto, así que se puede seguir usando método de validación web.

PD: en cuanto me cumpla la permanencia, miraré otras opciones.
(De momento, al haber conseguido lo que quería y no tener mejor alternativa.... seguiré con mi actual ISP)
« Última modificación: 21-05-2019, 01:12 (Martes) por peperfus »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Hombre, lo de que esté "reservado" tiene su lógica, porque para acceder a la web de configuración del router, hace falta el puerto 80. Y si pones DMZ, ese puerto deja de estar habilitado para el propio router, con lo que ellos ya no pueden acceder a su web (de hecho, es lo que le pasaba a la chica, mientras hablábamos por telf. He desactivado el DMZ y ha podido entrar).

¿"Su web"? Yo con una empresa contrato el servicio de acceso, no el aparataje dentro de mi casa que me dé la gana tener. Y siempre tengo que tener una opción para no dejar que nadie acceda si no me da la gana. ¿Quién te dice que están accediendo ellos y no terceros? Existen multitud de "grupos" que se dedican a analizar faltas de seguridad en dispositivos de compañías, porque son los que tienen estos puntos flacos, y si te entran ni te enteras... Registro cientos de intentos de entrada en el sistema y casi todos de IPs de estos grupos que se suponen que son "legales", pero que me río de ellos. Me da igual que sean legales y estén buscando puntos flacos en dispositivos o que sea un hacker y esté haciendo lo mismo. Lo que yo veo son intentos de entrada en un sistema privado y que no deberían de existir bajo ningún concepto (shadowserver.org, por ejemplo)

Y eso de que tienen que mirar "su configuración". ¡JA! Antes lo hacían a través de puertos y certificados, y era lo primero que capaba, y no sé por qué 1º, tiene que ser privativo, y 2º tiene que estar habilitado HTTP en WAN para que los de la compañía talycual lo miren, y de paso cualquiera que pase por ahí, como por ejemplo los de shadowserver.org... Para mí, eso es un agujero de seguridad como una CATEDRAL.

¿Y si ellos están accediendo a la página de configuración del router, no están accediendo también a datos personales de tu red que se puedan ver desde el router? ¿No debería estar esto protegido por la ley de protección de datos? ¿Les has dado permiso para eso? ¿Te han descrito qué procesos de monitorización tienen y te hacen cuando acceden a la página de configuración del router por el puerto 80?

Es que todo esto me pone "calentito". Lamento si alguien se ofende, pero hay cosas que realmente me tocan las "noses", por decirlo finamente y en inglés...


Yo no esperaría a terminar la permanencia, y alegaría motivos de seguridad.

Perdón por el offtopic y la pataleta, pero como digo, hay temas que me ponen calentito. Todos hablamos de seguridad, y el primer agujero te lo meten en casa a la fuerza si quieres tener internet. Y si encima haces un poquito de ingeniería inversa para descubrir sus fallos e intentar mejorar su "seguridad", te denuncian ellos. Hay gente aquí que ya ha sufrido ciertos acosos por parte de compañías, (¿verdad?  ;) ) Prohibido por ley tendría que estar...  :P
« Última modificación: 19-05-2019, 12:24 (Domingo) por Tki2000 »

Desconectado peperfus

  • ******
  • Mensajes: 251
Te entiendo perfectamente. E incuso comparto tu opinión. Los abusones siempre son este tipo de compañías y nosotros los que pagamos los platos rotos. Haces bien en desahogarte.
Voy a ver si consigo hacer lo de conectar el open directamente a la ont, sería un puntazo. Si no lo consigo.... pues cambiarse es una alternativa, pero..... ¿cuál compañía no comete este tipo de abusos? Estamos en su mar y encima, sometidos por la cobertura que hay, no hay mucho donde elegir  :(
Yo, particularmente soy antimovistar, por todos los abusos que comete (competencia desleal, monopolio, pactar precios, subida de precios, y todo eso), pero es que las demás.... bffff. El problema también es que si a alguna empresa se le ocurre ser legal, lo tiene prácticamente imposible competir en un mundo de mafia corruppta.