warpgate/README.md

129 lines
6.8 KiB
Markdown
Raw Normal View History

2022-07-06 18:31:27 +08:00
<br/>
2022-08-08 21:22:48 +08:00
<p align="center">
2022-07-06 04:38:10 +08:00
<img src="warpgate-web/public/assets/logo.svg" width="100" />
2022-08-08 21:22:48 +08:00
</p>
2022-07-06 04:38:10 +08:00
<br/>
2022-08-08 21:22:48 +08:00
<p align="center">
<a href="https://github.com/warp-tech/warpgate/releases/latest"><img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/warp-tech/warpgate/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge"></a> &nbsp; <a href="https://nightly.link/warp-tech/warpgate/workflows/build/main"><img src="https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge"/></a> &nbsp; <a href="https://twitter.com/eugeeeeny"><img alt="Twitter" src="https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue"></a>
</p>
2022-04-13 01:06:09 +08:00
2022-04-11 04:58:58 +08:00
2022-08-08 21:25:27 +08:00
<p align="center">
<a href="https://ko-fi.com/J3J8KWTF">
<img src="https://cdn.ko-fi.com/cdn/kofi3.png?v=2" width="150">
</a>
</p>
2022-07-06 04:38:10 +08:00
---
2022-07-27 06:45:28 +08:00
Warpgate is a smart SSH, HTTPS and MySQL bastion host for Linux that doesn't need special client apps.
2022-04-11 04:58:58 +08:00
2022-07-06 04:38:10 +08:00
* Set it up in your DMZ, add user accounts and easily assign them to specific hosts and URLs within the network.
2022-07-27 06:45:28 +08:00
* Warpgate will record every session for you to view (live) and replay later through a built-in admin web UI.
2022-04-11 05:33:58 +08:00
* Not a jump host - forwards your connections straight to the target instead.
2022-08-08 21:24:29 +08:00
* Native 2FA and SSO support (TOTP & OpenID Connect)
2022-06-24 16:41:13 +08:00
* Single binary with no dependencies.
2022-04-11 04:58:58 +08:00
* Written in 100% safe Rust.
2022-08-08 22:03:35 +08:00
![](docs/banner.png)
2022-04-12 04:12:34 +08:00
## Getting started & downloads
2022-04-11 04:58:58 +08:00
2022-07-06 03:32:05 +08:00
* See the [Getting started](https://github.com/warp-tech/warpgate/wiki/Getting-started) wiki page (or [Getting started on Docker](https://github.com/warp-tech/warpgate/wiki/Getting-started-on-Docker)).
2022-04-13 01:28:24 +08:00
* [Release / beta binaries](https://github.com/warp-tech/warpgate/releases)
* [Nightly builds](https://nightly.link/warp-tech/warpgate/workflows/build/main)
2022-04-11 04:58:58 +08:00
2022-05-30 22:35:03 +08:00
<center>
<img width="783" alt="image" src="https://user-images.githubusercontent.com/161476/162640762-a91a2816-48c0-44d9-8b03-5b1e2cb42d51.png">
</center>
<table>
<tr>
<td>
2022-07-06 04:38:10 +08:00
<img width="500" alt="image" src="https://user-images.githubusercontent.com/161476/177408495-80268a91-1a21-43bf-b171-2a563a322f5f.png">
2022-05-30 22:35:03 +08:00
</td>
<td>
2022-07-06 04:38:10 +08:00
<img width="500" alt="image" src="https://user-images.githubusercontent.com/161476/177410749-cf029df7-223e-4c9c-827a-bb96dbe0a7c8.png">
2022-05-30 22:35:03 +08:00
</td>
</tr>
</table>
2022-04-11 04:58:58 +08:00
## Project Status
2022-05-30 16:38:14 +08:00
The project is currently in **alpha** stage and is gathering community feedback. See the [official roadmap](https://github.com/orgs/warp-tech/projects/1/views/2) for the upcoming features.
2022-04-11 04:58:58 +08:00
In particular, we're working on:
2022-07-27 06:45:28 +08:00
* Requesting admin approvals for sessions
* Support for tunneling PostgreSQL connections,
2022-04-11 04:58:58 +08:00
* and much more.
2022-04-16 03:38:59 +08:00
## How it works
2022-07-27 06:45:28 +08:00
Warpgate is a service that you deploy on the bastion/DMZ host, which will accept SSH, HTTPS and MySQL connections and provide an (optional) web admin UI.
2022-04-23 18:29:56 +08:00
Run `warpgate setup` to interactively generate a config file, including port bindings. See [Getting started](https://github.com/warp-tech/warpgate/wiki/Getting-started) for details.
2022-04-16 03:38:59 +08:00
2022-07-27 06:45:28 +08:00
It receives connections with specifically formatted credentials, authenticates the user locally, connects to the target itself, and then connects both parties together while (optionally) recording the session.
2022-04-16 03:38:59 +08:00
2022-07-06 04:38:10 +08:00
When connecting through HTTPS, Warpgate presents a selection of available targets, and will then proxy all traffic in a session to the selected target. You can switch between targets at any time.
2024-02-21 02:02:20 +08:00
You manage the target and user lists and assign them to each other through the admin UI, and the session history is stored in an SQLite database (default: in `/var/lib/warpgate`).
2022-04-16 03:38:59 +08:00
2024-02-21 02:02:20 +08:00
You can also use the admin web interface to view the live session list, review session recordings, logs and more.
2022-04-16 03:38:59 +08:00
2022-04-11 04:58:58 +08:00
## Contributing / building from source
2022-06-27 02:50:04 +08:00
* You'll need Rust, NodeJS and Yarn
2022-04-11 04:58:58 +08:00
* Clone the repo
* [Just](https://github.com/casey/just) is used to run tasks - install it: `cargo install just`
* Install the admin UI deps: `just yarn`
* Build the frontend: `just yarn build`
* Build Warpgate: `cargo build` (optionally `--release`)
2022-04-13 00:56:13 +08:00
2022-07-06 04:38:10 +08:00
The binary is in `target/{debug|release}`.
### Tech stack
* Rust 🦀
* HTTP: `poem-web`
* Database: SQLite via `sea-orm` + `sqlx`
2022-08-08 22:05:10 +08:00
* SSH: `russh`
2022-07-06 04:38:10 +08:00
* Typescript
* Svelte
* Bootstrap
### Backend API
* Warpgate admin and user facing APIs use autogenerated OpenAPI schemas and SDKs. To update the SDKs after changing the query/response structures, run `just openapi-all`.
2022-04-13 00:56:13 +08:00
## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
2024-03-24 04:59:52 +08:00
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Eugeny"><img src="https://avatars.githubusercontent.com/u/161476?v=4?s=100" width="100px;" alt="Eugeny"/><br /><sub><b>Eugeny</b></sub></a><br /><a href="https://github.com/Eugeny/warpgate/commits?author=Eugeny" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://the-empire.systems/"><img src="https://avatars.githubusercontent.com/u/18178614?v=4?s=100" width="100px;" alt="Spencer Heywood"/><br /><sub><b>Spencer Heywood</b></sub></a><br /><a href="https://github.com/Eugeny/warpgate/commits?author=heywoodlh" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/apiening"><img src="https://avatars.githubusercontent.com/u/2064875?v=4?s=100" width="100px;" alt="Andreas Piening"/><br /><sub><b>Andreas Piening</b></sub></a><br /><a href="https://github.com/Eugeny/warpgate/commits?author=apiening" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Gurkengewuerz"><img src="https://avatars.githubusercontent.com/u/10966337?v=4?s=100" width="100px;" alt="Niklas"/><br /><sub><b>Niklas</b></sub></a><br /><a href="https://github.com/Eugeny/warpgate/commits?author=Gurkengewuerz" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/notnooblord"><img src="https://avatars.githubusercontent.com/u/11678665?v=4?s=100" width="100px;" alt="Nooblord"/><br /><sub><b>Nooblord</b></sub></a><br /><a href="https://github.com/Eugeny/warpgate/commits?author=notnooblord" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://shea.nz/"><img src="https://avatars.githubusercontent.com/u/51303984?v=4?s=100" width="100px;" alt="Shea Smith"/><br /><sub><b>Shea Smith</b></sub></a><br /><a href="https://github.com/Eugeny/warpgate/commits?author=SheaSmith" title="Code">💻</a></td>
</tr>
</tbody>
2022-04-13 00:56:13 +08:00
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
2022-04-13 01:06:09 +08:00
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!