# 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>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mysther.gitbook.io/knowledge-base/ataques/tools/ngrok.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
