SSH a las computadoras del hogar

21

Tengo varias máquinas en casa a las que me gustaría acceder desde la escuela usando SSH y VNC. Para hacer eso, les di IP estáticas:

  • 192.168.1.50: Windows
  • 192.168.1.51: Ubuntu
  • 192.168.1.52: Raspberry Pi / Raspbian

Sé que SSH usa el puerto 22, por lo que puedo reenviar este puerto a 192.168.1.51:22 en mi enrutador, pero de esta manera no podré SSH a mi Raspberry Pi. ¿Hay alguna forma de que pueda configurar esto para poder acceder a ambas máquinas?

acourchesne
fuente
10
Puede usar diferentes puertos ssh. No sé lo difícil que es en Windows, pero en Linux es realmente fácil cambiarlo a un puerto no estándar . De esta manera, puede reenviar el puerto 22 para ganar la máquina (sin cambios allí), y el otro puerto (no estándar) al RaspberryPi.
bistoco
2
@Melebius, es viejo pero sigue siendo una buena lectura, la parte clave para mí es "El argumento básico que he tratado de hacer: no hagas la seguridad a través de la oscuridad", se trata de una necesidad y de resolverla fácilmente . Dicho esto, tal vez no tenga que cambiar los puertos ubuntu o pi, solo reenviar diferentes puertos de enrutador a cada puerto de la máquina.
bistoco
1
@bistoco De acuerdo. Sin embargo, el OP está a punto de exponer el acceso SSH al mundo exterior y la seguridad siempre debe considerarse en tal caso. Además, configurar diferentes puertos en las computadoras no resuelve el problema del OP ya que necesita habilitar diferentes puertos (= reenvío de puertos) en su enrutador.
Melebius
66
@Melebius Fuera de tema, pero nunca uso 22, solo porque los robots automatizados no afectarán mi servidor las 24 horas, los 7 días de la semana. No mantendrá alejado a un atacante real (o un script bien escrito), pero reduce el número de mis entradas de registro.
Kaz Wolfe
44
Simplemente puede conectarse a uno de ellos (el que es de acceso público) y luego conectarse desde este usando la dirección local a los otros.
tkausl

Respuestas:

32

Si tiene IPv6, ¡ni siquiera necesita el reenvío de puertos! Simplemente obtenga su dirección IPv6 permanente (basada en su dirección MAC, por lo que se garantiza que permanecerá igual a menos que su ISP no sepa cómo funciona IPv6) y úsela para hacer un túnel. Como su dirección IPv6 es pública y permite que el mundo para acceder a usted sin tener que pasar por su NAT local, no necesita molestarse en habilitar el reenvío de puertos a ningún lado. "Simplemente funcionará".

Sin embargo, tenga en cuenta que IPv6 todavía no es realmente compatible a nivel mundial, y tanto su conexión a Internet doméstica como la conexión a Internet remota deben tener IPv6 totalmente funcional para poder hacerlo.

Sin embargo, si eres como la mayoría de las personas y solo tienes IPv4, ¡todavía hay una manera! Algunos enrutadores le permiten reenviar puertos de origen específicos a puertos de destino específicos, de esta manera:

ingrese la descripción de la imagen aquí

En este ejemplo, el puerto 22se pasa directamente a mi máquina sheepdog, mientras que el puerto 292se reenvía al puerto 22activado coyote.

Por último, si su enrutador no tiene esta función, puede cambiar el puerto, ya que SSH no se limita a ejecutarse en el puerto 22. Puede configurarlo para lo que desee (que no se está utilizando).

En /etc/ssh/sshd_config(necesita raíz para editar, entonces sudo nano /etc/ssh/sshd_config), hay una línea en la parte superior del archivo:

# What ports, IPs and protocols we listen for
Port 22

Cambia esto a lo que quieras:

# What ports, IPs and protocols we listen for
Port 2992

Reinicie el servidor SSH con sudo service ssh restarty reenvíe el puerto en el enrutador.


Sin embargo, para este caso de uso, consideraría si los túneles SSH son lo correcto. ¿Quizás debería configurar un servidor VPN dedicado en su red doméstica? Esto le permitirá acceder a toda su red doméstica desde cualquier lugar, siempre que tenga las credenciales de seguridad adecuadas que necesita la VPN. Además, hay un poco menos de gastos generales con una VPN; normalmente solo necesitaría reenviar un puerto para una máquina.

Kaz Wolfe
fuente
2
Puede usar un intermediario de túnel IPv6 para obtener direcciones IPv6 si su ISP no es compatible con IPv6.
André Borie
1
Con "esta característica", ¿quiere decir que reenvía un puerto a un puerto diferente?
Liu Siyuan
@LiuSiyuan Sí. Sé que es extraño, pero he visto algunos enrutadores que no pueden manejarlo. Mi antiguo enrutador proporcionado por el ISP ni siquiera podía intentarlo.
Kaz Wolfe
No conseguí esa parte de IPv6. ¿Suponemos que todos los ISP que proporcionan direcciones IPv6 le dan una (coherente) diferente para cada dispositivo en la red?
jjmontes
1
@jjmontes Si su ISP es competente, obtendrá un total de / 64 (o tal vez menos, pero aún lo suficiente como para asignar uno a cada máquina)
Kaz Wolfe
19

Una manera fácil de resolver este problema es asignar diferentes puertos desde su enrutador al puerto 22 de sus máquinas. Por ejemplo, puede tener las siguientes configuraciones en su enrutador (suponiendo que su enrutador tenga IP 1.2.3.4)

1. 1.2.3.4:22   --> ubuntu:22
2. 1.2.3.4:8888 --> raspberrypi:22
3. 1.2.3.4:9999 --> windows:22 (or some other port)

Luego, cuando use ssh, especifique el puerto que desea usar escribiendo

$ ssh <username>@<router ip> -p <your port>

Ahora debería poder conectarse a todas sus máquinas.

Liu Siyuan
fuente
11

Si sabe que una de sus computadoras siempre está activa, también tiene la posibilidad de usarla como un proxy ssh.

supongamos que tiene una configuración de nombre de dominio para su dirección IP externa (es decir, myhome.dyndns.com o lo que sea), lo que hará es conectarse a una computadora (digamos que la frambuesa siempre está activa y reenvía el puerto desde su enrutador a it), sus conexiones ssh serán:

escuela -> (enrutador, transparente aquí) -> frambuesa -> ubuntu o windows

ahora, en su ~ / .ssh / config en la escuela, agregue las líneas:

Host ubuntu 192.168.1.51
    Hostname ubuntu (change to match your setup)
    User myraspberryuser  (change it ;-) )
    IdentityFile ~/.ssh/id_rsa   (The path to your private key, on the school computer, better on an usb key if public computer)
    ForwardAgent yes
    RequestTTY yes
    ProxyCommand ssh -W %h:%p %[email protected]

Para conectar entonces:

ssh-add ~/.ssh/id_rsa # to do only once per session
ssh myuser@ubuntu (login without password)

A partir de ahora, si escribe ssh ubuntu, la computadora se conectará primero a la frambuesa y luego iniciará una sesión ssh en la computadora ubuntu.

Le recomiendo, sea cual sea el puerto que elija reenviar, que desactive la contraseña en /etc/sshd.conf para permitir solo iniciar sesión a través de la clave ssh. De esta manera, si configura la clave en la frambuesa y en ubuntu, con el parámetro 'ForwardAgent', solo tendrá que desbloquear la clave y luego no se requiere contraseña para conectarse. De esta manera, incluso si los bots intentan iniciar sesión en su ssh, nunca podrán iniciar sesión ya que no permite el inicio de sesión con contraseña.

Bono, esto también funciona con scp, scp foo ubuntu: / tmp / foo usará la misma configuración sin más parámetros. Bono 2, esta configuración no requiere ningún cambio en el hogar, si mañana usted y otra computadora, simplemente copie / pegue el código en su configuración ssh, cambie el host y la ip, eso es todo, no es necesario abrir un nuevo puerto en el enrutador

potens
fuente
¿Hay alguna desventaja de usar una máquina como intermediario para SSH? Digamos que uso mi Raspberry Pi para conectarme a otras computadoras dentro de la red, ¿afectará su rendimiento a la tarea?
acourchesne
1
Sí, la frambuesa podría limitar el rendimiento ya que debe servir como servidor y cliente. Si tiene la confianza suficiente, puede lograr el mismo resultado con los túneles ssh. De esta manera, la frambuesa actúa solo como un servidor, pero la PC de tu escuela debe hacer dos clientes.
potencia el
4

Hago esto: dejo el rpi encendido y enchufado directamente en el enrutador todo el tiempo (ya que es el más barato de ejecutar) y simplemente lo conecto, luego reboto de él a los demás, nunca necesita mucha atención.

También es posible VNC / RDP una GUI a través de una tubería ssh, algo divertido, o reenviar un puerto que le permite navegar a un servidor en su computadora de escritorio mientras lo mantiene privado.

La razón por la que agregué esta respuesta es para darte algunas sugerencias.

1) Use un puerto diferente al 22. Puede dejarlo 22 en el PI, pero cambie el puerto entrante en su enrutador a algo más de 10,000 ... De lo contrario, recibirá decenas a cientos de ataques por día, y una vez que Se sabe que está ejecutando un host SSH en el segundo en que se encuentra un exploit, usted es propietario.

2) Use certificados en lugar de nombre de usuario / contraseña: deshabilite completamente el inicio de sesión de nombre de usuario / contraseña.

3) Si su dirección IP puede cambiar, use un servicio tipo Dyndns para obtener un host DNS (uso noip, es gratis y admite un cliente Linux para actualizar su dirección IP; creo que puede instalarlo) el pi ahora). Todavía hay algunas otras compañías que ofrecen esto de forma gratuita.

4) Mantenga su pi (o lo que sea que le interese) actualizado (sudo apt-get update). Creo que ssh ya está bastante bien examinado, pero también creí que https ...

Bill K
fuente
3

Estaba dudando si esto encajaría mejor como un comentario en lugar de una respuesta, pero lo publicaré aquí de todos modos.

Algunas cosas que debes pensar antes de hacer esto:

  1. Abrirá sus sistemas a Internet, por lo que será mejor que se asegure de que estén bien parcheados y que su configuración de seguridad se fortalezca (por ejemplo, no permita el inicio de sesión de root y use pubkeys en lugar de contraseñas).
  2. Su IP pública (vea whatismyip.com) puede cambiar, dependiendo de su ISP podría cambiar diariamente o casi nunca. Esto significa que tendrá que encontrar una manera de averiguar su IP pública. Puede visitar whatismyip.com desde su red doméstica diariamente, crear alguna aplicación o usar DNS dinámico (DynDNS) para asignar su IP pública cambiante a un nombre de dominio estático.
  3. Si desea utilizar IPv6 para evitar todas las molestias relacionadas con IPv4 y NATing, necesitará que sus dispositivos, enrutador, ISP, ... también hablen de IPv6. Hay algunos servicios que pueden ayudarlo cuando su ISP no es compatible con IPv6, pero sus dispositivos y enrutador tendrán que hablar de todos modos.
  4. Cuantos más puertos y dispositivos abra en Internet, mayor será su área de ataque. Sugeriría usar un jump-box en su red, y solo permitir el acceso SSH a ese dispositivo desde Internet. La caja de salto sería básicamente un sistema muy resistente que harías avanzar a través de tu enrutador a Internet. Una vez conectado a ese cuadro, podrá SSH a su red interna a través de él. La caja de salto podría ser básicamente otra Raspberry Pi. Sugeriría usar un dispositivo dedicado para poder endurecerlo tanto como sea posible (entre otros ejecutando la menor cantidad de servicios posible).
  5. (4a) En lugar de tener una caja de salto en la que SSH, también puede configurar un servidor VPN que le permita navegar por su red doméstica desde su dispositivo en la escuela (si se permiten conexiones VPN salientes).
BlueCacti
fuente