Giter Club home page Giter Club logo

bluebycode / stuk Goto Github PK

View Code? Open in Web Editor NEW
2.0 3.0 1.0 27.58 MB

Stuk is a solution for securely managing SSH on remote computers using Port knocking mechanism. Enables automatic provisioning of SSH keys and access with a multiple access control (MFA) and/or Universal (U2F) authentication factor. Scalable solution and applicable to cloud and physical IT infrastructures.

License: MIT License

Ruby 66.57% JavaScript 0.64% CSS 1.55% HTML 15.97% Python 15.27%
servicios python ssh totp port-knocking port-forwarding ruby qrcode supervisor

stuk's Introduction

Stuk

Stuk es una solución para la gestión segura de ssh en equipos remotos mediante mecanismo de Port Knocking. Permite aprovisionamiento automático de claves SSH y acceso con un factor de autenticación por control de acceso múltiple (MFA) y/o universal (U2F). Solución escalable y aplicable a infraestructuras IT en la nube o físicas.

Metodología

Sigue el desarrollo bajo un tablero de tareas (Trello)

https://trello.com/b/xQixdEBY/stuk

New demo approaching - Working in progress

Stuk cliente. Cliente SSH encapsulado con mecanismo de Port-Knocking (Python).

  • Auto gestión de claves públicas/privadas (virtuales y/o físicas) para dominios/servicios (GPG,Yubico keys..)
  • Petición de habilitado de acceso a sistemas en la infrastructura por SSH (mecanismo Port-Knocking)

Stuk supervisor. Servicio instalado en la red privada de la infrastructura cercano a los sistemas que supervisa y administra (Python.)

  • Identificación. El cliente de Stuk envía token de identificación del remitente al sistema de supervisión.
  • Autenticación. A traves del authenticator se verifica por usuario/dominio que la clave de un solo TOTP sea la correcta y realizar la gestión de supervisión sobre los sistemas finales.
  • Escalado. El supervisor administra a los sistemas que supervisa de forma distribuida y como solución escalable a varios niveles.

Stuk authenticator. Un servicio de autenticación (Ruby+Firebase) proporciona mecanismo autenticación sobre el identificado. Siendo necesario un repositorio para el aprovisionamiento de "salt"s(Redis).

  • Identificación. Identificación de la plataforma vinculada a un factor 2FA mediante TOTP. Se genera un salt por cada usuario o se genera uno común para la plataforma. Para el primer caso debería existir un repositorio para su aprovisionamiento.
  • Autenticación. El cliente de Stuk envía token cifrado basado en la clave de un solo uso (TOTP) y clave privada.

Casos de uso

A partir de la plataforma ofrecida por una universidad, laboratorios http://172.16.64.77:3000, el usuario mediante un vínculo con ayuda de la aplicación Google Authenticator, obtiene una versión cliente de stuk junto con una plantilla de preconfiguración/o perfil de acceso, con el fin de agilizar el inicio de sesión.

Google authenticator te da el token: 345321
$ stuk 345321

Habilita acceso SSH sobre los sistemas {a.domain.net, b.domain.net} reactivando la clave pública en ambas máquinas tras la secuencia toc-toc (port-knocking). Al final accede por ssh en ambos sistemas en un marco de tiempo marcado por la administración.

Google authenticator te da el token: 345321
$ stuk 345321 a.domain.net b.domain.net
  • Distintos dominios o servicios, distintas claves.

Roles del sistema

La aplicación se encuentra preparada para que en el sistema participen los siguientes roles de componentes del sistema:

  • Supervisor: administra los perfiles de servicios, da de alta a usuarios en el servidor final vía SSH y se encarga de la apertura de puertos en los servidores finales

  • Autenticador: servicio web mediante el cual se registran los usuarios y por el cual enlazan con Google Authenticator el factor de doble autenticación. Tambien genera las claves públicas y privadas de los usuarios finales.

  • Máquinas finales: redirigen todo el tráfico que reciben al supervisor por defecto. Únicamente cuando el supervisor reconoce una secuencia de port-knocking, con un usuario y un OTP correcto, permite la conexión directa El supervisor se encarga de toda la gestión de claves SSH

  • Usuario final: toda aquella persona o servicio que haga uso del sistema mediante stuk. Al usuario final se le proporciona un fichero de configuración y el cliente de conexión para que el proceso sea cómodo. En todo caso debe iniciar el proceso con la contraseña generada mediante Google Authenticator.

Instalación del servidor de registro y autenticación

Para lanzar el servidor de registro y autenticación es necesario contar con una máquina en la que se encuentre instaladas las últimas versiones de Ruby y Rails a fecha de 2018-11-30. Recomendamos seguir la siguiente guía https://gorails.com/setup/ubuntu/18.10

  • Ruby 2.5.3
  • Rails 5.2.1.1

Para lanzar el servidor una vez descargado el código, ejecutar en terminal:

$ bundle install

$ rails db:reset

$ rails server

Con ello se lanzará el servidor en nuestra dirección local en el puerto 3000 (puerto por defecto).

Recursos utilizados

Dado que la solución será llevada a cabo sobre una infrastructura virtualizada como prueba de concepto, necesitaremos de maquinas virtuales para ello:

  • Una máquina Ubuntu 18.04 (auth) 172.16.64.77
  • Dos máquinas Centos 7.x (sistema final y supervisor)

Colaboradores

  • Iván Jímenez
  • Álvaro López (@vrandkode)
  • Guillermo Mora (@guillermijas)

stuk's People

Contributors

bluebycode avatar ivanjim avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

mariohackathon

stuk's Issues

Buenas prácticas para proyectos OSS

Sería deseable seguir las buenas prácticas para proyectos OSS publicados.

Se puede encontrar un guía en: https://opensource.guide

A modo de resumen, sería deseable que el proyecto tuviera los siguientes archivos, en caso de no tenerlos, (con el contenido adecuado):

  • CONTRIBUTING
  • LICENSE
  • README
  • .gitignore
  • ISSUE_TEMPLATE/issue_template.md
  • TODO

Del mismo modo, sería deseable (en caso de no tenerlo) que el repositorio tuviera:

  • labels a modo de palabras clave del mismo.
  • Una descripción del proyecto

Port knocking usando nft. Propuesta de futuro.

¡Saludos equipo!

Como ya hablamos en los primeros días, es posible la implementación de port knocking sobre nft, llevandolo a una capa más baja y en una etapa más temprana con menos recursos.

Nos gustaría proporcionaros el siguiente ejemplo de configuración y recomendaros para que mas allá del hackathon podáis implementarlo.

https://wiki.nftables.org/wiki-nftables/index.php/Port_knocking_example

También indicaros las necesidades para poder llegar a implementarlo:

Un equipo debian con almenos versión Buster o posterior.
Descargar y compilar la última versión de nft del repositorio oficial.

Saludos.

Considerar roles y responsabilidades en la documentación

Tener identificados los roles que intervienen y tener claras las funciones de cada uno de ellos. Se podría incluir en la documentación para ayudar a entender el funcionamiento.

Por ejemplo, a nivel de roles:

  • Un perfil de supervisor (administración de perfiles de servicios, alta de usuarios en el servidor final vía SSH, apertura de puertos en los servidores finales, etc.),
  • Un perfil de usuario (inicialmente, se descarga la plantilla de servicio que desea utilizar junto a las características asociadas: puerto, secuencia de port knocking, etc.)
  • Un servidor final (monitoriza si se establece la secuencia definida para conectar con el servicio y, en dicho caso, le envía la petición al supervisor para que sea él quien abra el puerto mediante comandos SSH)

Deseable quick starter

Sería deseable que el proyecto tuviera un quick starter para saber cómo poder empezar a usarse

Python environment en github

No debería de estar el entorno virtual de Python en GitHub. Es código innecesario en el repositorio del proyecto.

stuk_client_env_at_master_ _vrandkode_stuk

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.