Acceso remoto a una máquina Linux detrás de un firewall


11

Voy a implementar una máquina Linux como una especie de terminal pública en una ubicación remota. Me gustaría poder acceder de forma remota a través de SSH para el mantenimiento, pero no quiero mantener un puerto abierto en el firewall remoto para las raras ocasiones en que necesito acceder a esta máquina. Pensé en una secuencia de comandos simple para crear un túnel SSH inverso a una máquina en el exterior, pero prefiero no tener que hacer que un usuario haga nada cuando necesito acceder a él. ¿Algunas ideas?

Actualización: he decidido seguir mi plan original de un script para crear un túnel ssh inverso. Mientras que otras soluciones sugeridas, como el bloqueo de puertos, estarían más en la línea de lo que realmente quiero hacer, en este caso, no tengo ningún acceso para configurar el enrutador que no sea guiar a un usuario a través de una configuración. estremecimiento


No tiene que configurar el enrutador. Linux tiene un firewall iptables que es suficiente para la seguridad del firewall. Y hacer un túnel ssh siempre en el servidor lo hace vulnerable a los ataques que arroja al host al que está conectado.
Kazimieras Aliulis

1
Sin embargo, tendría que abrir un puerto en el enrutador para pasar todo lo que necesitaba a la caja de Linux. El túnel ssh no está siempre encendido. Será iniciado por un usuario en ese momento cuando necesite el acceso a la máquina.
baudtack

Respuestas:


5

Tiene menos que ver con preocuparse de que un puerto esté abierto y más con no querer caminar con un usuario a través del proceso de abrir un puerto. Desafortunadamente, no tengo acceso a este enrutador.

Si cambiar el enrutador está completamente fuera de discusión, es posible que deba buscar una solución P2P o VPN como Hamachi . Si configura el sistema para establecer automáticamente la conexión VPN al inicio, entonces debería poder conectarse cuando lo necesite. Hamachi hace toda la negociación del firewall por usted. El único inconveniente es que debe confiar en que los servidores de Hamachi estén activos y en funcionamiento cuando necesite conectarse.

Si tiene un servidor que siempre está activo, puede configurar autossh para que el sistema remoto siempre mantenga un túnel abierto y conectado a su servidor. El único inconveniente es que el sistema remoto está comprometido, el atacante obtendrá las claves que se usaron para establecer la sesión ssh. Sería muy importante mantener su sistema que acepta la conexión ssh realmente bloqueado.


A continuación se muestra mi respuesta original, supuse que actualizar el enrutador era una opción.

Una solución que quizás desee investigar si su firewall lo admite, es la eliminación de puertos . Con algunos cortafuegos debería ser posible enviar un conjunto especial de paquetes que el cortafuegos advierte y luego abre temporalmente el agujero a través del cortafuegos.

Hay muchas implementaciones, algunas mejores que otras. Algunos usan criptografía sólida para hacer que sea casi imposible que una persona sin las teclas correctas envíe el golpe correcto.


¡Suena como una gran idea! Desafortunadamente, el firewall en cuestión es solo un simple Linksys de grado de consumidor o algún equivalente.
baudtack

1
Si puede instalar dd-wrt puede usar knockd ( dd-wrt.com/wiki/index.php/Knockd )
Zoredache

@Zoredache True, pero esto está en una ubicación remota. No tengo acceso a este enrutador y me estremecería ante la idea de tratar de guiar a un usuario a través de una instalación dd-wrt.
baudtack

Estoy de acuerdo en que esta es probablemente la forma correcta de configurar esto, siempre que tenga acceso físico al enrutador para instalar dd-wrt.
baudtack

Hamachi, desde que fue adquirida por LogMeIn, ha mostrado una consideración abismal a los usuarios de Linux. Considero que el producto no es confiable cuando las máquinas Linux son parte de mi red hamachi.
bmb

6

No estaría tan preocupado por dejar el puerto 22 accesible a Internet, pero tomaría algunas medidas para asegurarlo.

En primer lugar, deshabilite la autenticación interactiva del teclado y vaya a las teclas ssh.

En segundo lugar, instale algo como fail2ban en su servidor remoto en direcciones IP de blackball que prueben repetidamente su máquina. Debido a que ha configurado claves ssh, no debería haber fallas de autenticación para usuarios autorizados.

Alternativamente, si puede, siga los consejos de WerkkreW y configure el cortafuegos frente a la máquina para terminar una conexión vpn, luego solo permita que el demonio ssh en el servidor remoto acepte conexiones que cruzan ese vpn.

Alternativamente, si su cortafuegos no puede terminar la conexión vpn, probablemente pueda reenviar los paquetes GRE o IPSEC a su máquina Linux, y terminarlo allí.


Tiene menos que ver con preocuparse de que un puerto esté abierto y más con no querer caminar con un usuario a través del proceso de abrir un puerto. Desafortunadamente, no tengo acceso a este enrutador.
baudtack

Entiendo y simpatizo con tu dolor.
Dave Cheney

2
El primer paso en esta solución sería configurar sshd para que se ejecute en un puerto no estándar. Hay muchos bots que tocan el puerto 22. Elija un puerto que no aparezca en / etc / services y "nmap HOST" no lo encuentre.
hayalci

4

Parece que estás buscando knockd

Puede instalar eso en el servidor Linux en sí, con iptables para que sea como un firewall de segundo nivel. Incluso con el puerto 22 abierto en el cortafuegos frontend, no estaría abierto en el servidor, por lo que los escaneos de puertos no verían ningún puerto abierto. Luego, cuando envía el "golpe secreto", de repente tiene un camino abierto al puerto 22.

¿Tiene sentido?


A menos que me equivoque, tendría que reenviar todos los puertos de descarga también, ¿verdad? ¿No sería obvio cuando alguien escanea el enrutador? No sabrían el orden, pero dejar caer las posibles combinaciones a 6, si recuerdo cómo hacer las permutaciones correctamente, les da una gran ventaja. ¿O estoy pensando en esto mal?
baudtack

Si bien los puertos utilizados para el golpe deberían ser reenviados, el host que ejecuta knockd en realidad no necesita responder a la fuente del golpe de ninguna manera.
Zoredache

correcto: los puertos abiertos en el primer firewall no se abrirán en el segundo, por lo que para el escáner todos parecen cerrados. No hay forma de distinguir los puertos de golpe de no golpear.
Brent

3

Para resumir todas las respuestas:

use ssh, pero hágalo más oscuro y seguro.

Por seguridad:

  • Asegúrese de que el inicio de sesión raíz no esté permitido (PermitRootLogin no).
  • Limite los usuarios, que pueden iniciar sesión mediante la opción de configuración AllowUsers o AllowGroups.
  • Asegúrese de que solo use el protocolo ssh de 2 versiones (Protocolo 2).
  • Es aconsejable usar solo claves de autenticación, pero la contraseña es más conveniente, cuando puede haber una necesidad de conectarse al servidor de vacaciones donde no tiene acceso a las claves de autenticación.

Para la oscuridad:

  • Cambie el puerto ssh a algún puerto alto aleatorio que recuerde, como 20486. Esto eliminaría la mayoría de los fuerza bruta automáticos, pero no lo ocultaría de todos los escaneos de puertos en el servidor.
  • Ocultar la capacidad de conectarse al puerto. Una forma es la eliminación de puertos mencionada en otras respuestas, pero necesita un software especial, al que no se puede acceder en todas partes. Otra opción simple es usar el firewall de iptables con un módulo reciente para crear una regla, que permitiría conectarse solo en el segundo o tercer intento. Entonces sabe que tiene que intentar varias veces para conectarse con éxito, pero la exploración simple de todos los puertos no revelará el puerto ssh. Las reglas serían similares a las siguientes:


iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW -m recent --set
iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW  -m recent --rcheck --seconds 60 --hitcount 2 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 20486 -j DROP


+1 resumen agradable e idea interesante sobre el truco de múltiples intentos.
David Z

2

Tarea programada el script para su túnel ssh inverso, o abra el puerto del firewall.

Si le preocupa que SSH esté abierto al mundo, podría programar la tarea cuando su período de mantenimiento con scripts de iptables y solo tenga el puerto disponible en ese momento.


1
Convenido. A menos que tenga una forma de VPN, la única solución real es básicamente abrir un puerto. Si está nervioso al respecto, siempre puede usar un puerto no estándar.
WerkkreW

2

Mire a los puertos para abrir su túnel SSH.

Además, ejecute denyhosts para bloquear a las personas después de demasiadas solicitudes incorrectas.

Ambos paquetes están disponibles en los repositorios estándar de Ubuntu, Fedora y RHEL.


1

Continúe y abra un puerto, solo hágalo fuera del rango normal. Lo convertiría en un puerto aleatorio sobre 1024. De esa manera, es poco probable que los hackers lo busquen.


0

No hay razón para no hacer el agujero en el firewall si necesita acceso a la máquina de forma remota, aunque con poca frecuencia.

Sin embargo, si aún prefiere no abrir (o no puede) abrir el puerto, un simple script de shell podría monitorear algunos recursos disponibles en Internet que usted controla y escucha el comando para iniciar el túnel inverso. Las cuentas de correo electrónico, los canales IRC y las páginas web vienen inmediatamente a la mente como dispositivos de activación.

Por supuesto, esto es mucho más frágil y menos seguro que simplemente abrir el puerto. Pero estoy seguro de que tienes tus razones.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.