> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/ataques/tools/ngrok.md).

# Ngrok

### Configuração Inicial

Registrando chave

```bash
ngrok config add-authtoken <key>
```

Ao realizar o comando acima, irá salvar sua chave em `/home/mysther/.config/ngrok/ngrok.yml`.

### Criando Túneis

Ao criar um túnel, será possíve acessar o seu host (mesmo em uma rede interna, como na empresa ou casa), em alguma porta (que pode ser escolhida) de forma externa.  Em resumo, basta apenas ter internet para que possa acessar a sua máquina. Quando criar um túnel, verifique o valor de `Forwarding`, que indicará algo como `https://741s54ded2a.ngrok.app -> http://localhost:8080`. Isso significa que, quando acessar a URL externa `https://741s54ded2a.ngrok.app`, irá ser redirecionado para o seu localhost na porta 8080 (que obviamente estará rodando algum serviço/listener).

#### HTTP

Abrindo um túnel para que seja possível acessar <http://localhost:8080> de forma externa.&#x20;

```
ngrok http 8080
```

Por padrão o redirecionamento é feito para o localhost, porém é possível personalizar esse redirecionamento. Note que você pode até mesmo redirecionar para um site externo qualquer.

```bash
ngrok http localhost:8080
ngrok http site-externo.com.br:443
```

Configurando senha de acesso no Ngrok.

```bash
ngrok http http://localhost:8080 --basic-auth '<user>:<pass>'
```

Configurando ranges de IP que podem e não podem acessar o Ngrok

```bash
ngrok http 80 --cidr-allow 110.0.0.0/8 --cidr-allow 220.12.0.0/16 --cidr-deny 110.2.3.4/32
```

#### TCP

De forma semalhante ao HTTP, aqui iremos mudar o Protocolo e obviamente o motivo disso ser feito. Acima utilizamos para páginas web, já no TCP podemos trabalhar com SSH, RDP, Reverse Shell etc. Caso queira utilizar SSH, verifique nas configurações do próprio Ngrok para fazer isso.

### Domínio Personalizado

Até então o ngrok está definindo aleatoriamente a URL externa. Temos dois modos de alterar isso, sendo a primeira, disponível na versão free do Ngrok. Note que só é possível alterar os subdomínios de `.ngrok-free.app`.

```bash
ngrok http 8080 --domain <qualquer-coisa>.ngrok-free.app
```

Segue abaixo um tabela com os Domínios que podemos utilizar

| DOMÍNIO                             | DESCRIÇÃO                                             |
| ----------------------------------- | ----------------------------------------------------- |
| `ngrok.app` / `ngrok.dev`           | Disponível para contas pagas                          |
| `ngrok-free.app` / `ngrok-free.dev` | Disponíível para contas gratuitas                     |
| `ngrok.io`                          | Descontinuado e disponível apenas para contas legadas |

Já para definir uma URL personalizdas é preciso estar com a versão paga, ir painel administrativo do ngrok, adicionar um Dominio e então executar o comando abaixo. Para que isso dê certo, é preciso também ir no painel adminsitrativo do Domínio (por exemplo, o <https://registro.br/>) e configurar um registro DNS do tipo CNAME para o host do Ngrok.

```bash
ngrok http http://localhost:8080 --domain=<domain.com>
ngrok http 8080 --domain <domain.com>
```

Utilizando um Domínio personalizado, podemos utilizar o HTTP, porém não podemos utilizar o TCP.

### Múltiplos Túneis

Edite o arquivo de configuração localizado em `/home/mysther/.config/ngrok/ngrok.yml` e deixe-o no padrão abaixo. Remova o campo `domain` caso esteja utilizando a versão free e altere os demais valores de acordo com sua necessidade.

```yaml
version: "2"
authtoken: <token>
tunnels:
  <name-tunnel-1>:
    domain: <seu-dominio.com.br>
    addr: 8000
    proto: http
  <name-tunnel-2>:
    addr: 22
    proto: tcp
```

Agora execute com o comando abaixo para iniciar todos os tunéis de uma só vez

```bash
ngrok start --all
```

Caso quira executar somente um dos túneis, basta especificar o nome do túnel

```bash
ngrok start <name-tunnel-1>
```
