Passo a passo instalação Apache Guacamole.

Recentemente resolvi testar o Apacha Guacamole e documentar o processo de instalação.

O Guacamole é um software de código aberto que permite o acesso remoto a desktops e servidores através de um navegador web.

A opção que achei mais fácil foi usando Docker, segue link para documentação oficial.

Os procedimentos a seguir foram executados em um Debian.

Install Docker

Documentação Docker

Adicionando repositório Docker

1
2
3
4
5
6
7
8
9
10
11
12
13
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Instalando pacotes Docker:

1
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Podemos verificar se a instalação ocorreu com sucesso executando:

1
 docker -v

Adicionaremos o usuário atual ao grupo Docker para evitar executar comandos como sudo.

1
sudo usermod -aG docker $USER

Nesse caso estou instalando as imagens mais recentes, mas se for utilizar em produção, seria interessante instalar a imagem com a tag da versão, para evitar possíveis problemas de compatibilidade em upgrade, migração…

Pode verificar as imagens no DockerHub Guacamole

1
2
3
docker pull guacamole/guacd
docker pull guacamole/guacamole
docker pull mariadb

Podemos verificar as imagens com o comando

1
 docker images

Docker Images

Agora que estamos com as imagens baixadas, precisamos iniciar o banco de dados com o comando:

1
docker run --rm guacamole/guacamole:latest /opt/guacamole/bin/initdb.sh --mysql > initdb.sql

InitDbSql

Devemos criar um arquivo .env onde colocaremos as credenciais de acesso.

1
nano .env
1
2
3
4
MYSQL_ROOT_PASSWORD=SuperSecretP@sswr0rd!@#$%^&*
MYSQL_DATABASE=guacamole_db
MYSQL_USER=guacamole_user
MYSQL_PASSWORD=SecretP@sswr0rd!@#$%^&*

Env

Criaremos o nosso docker-compose.yml

1
nano docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3"
services:
  guacdb:
    container_name: guacamoledb
    image: mariadb:latest
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - "./db-data:/var/lib/mysql"
volumes:
  db-data:

docker_compose

Após isso podemos iniciar com docker compose:

1
docker compose up -d

docker-compose up -d se tiver instalado docker-compose ao ínves de docker-compose-plugin.

mariadb_up

Em seguida, vamos precisar copiar nosso arquivo initdb.sql para dentro do container.

1
docker cp initdb.sql guacamoledb:/initdb.sql

Teremos que instalar o mysql client dentro do docker guacamoledb.

1
docker exec -it guacamoledb bash
1
2
3
apt-get update && apt-get install -y default-mysql-client
cat /initdb.sql | mysql -u root -p guacamole_db
exit

dbinit

Após isso podemos derrubar o guacamoledb.

1
docker compose down

db_down

Como boa prática, recomenda-se salvar o arquivo de inicialização do banco.

1
mv docker-compose.yml docker-compose.yml.bak

docker-compose-backup

Iremos criar o novo docker-compose.yml com todas as informações necessárias.

1
nano docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
version: "3"
services:
  guacdb:
    container_name: guacamoledb
    image: mariadb:latest
    restart: unless-stopped
    user: mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - "./db-data:/var/lib/mysql"
  guacd:
    container_name: guacd
    image: guacamole/guacd:latest
    restart: unless-stopped
  guacamole:
    container_name: guacamole
    image: guacamole/guacamole:latest
    restart: unless-stopped
    ports:
      - 8080:8080
    environment:
      GUACD_HOSTNAME: "guacd"
      MYSQL_HOSTNAME: "guacdb"
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      TOTP_ENABLED: "true"
    depends_on:
      - guacdb
      - guacd
volumes:
  db-data:

Agora podemos iniciar nosso serviço Guacamole.

1
docker compose up -d

guacamoelup

Acesso ao guacamole

Devemos acessar usando http://meuip:8080/guacamole

Dica

O Guacamole não é acessível diretamente pela raiz, é necessário adicionar /guacamole ao endereço.

login_guacamole

Perigo

As credenciais padrão são guacadmin/guacadmin

Aviso

No nosso docker-compose habilitamos o TOTP, assim será necessário um aplicativo como authy, 2fas, google authenticator para iniciar nossas credenciais. Caso deseje, pode remover a linha TOTP_ENABLED: "true"

totp

Lembrando de liberar o tráfego de entrada na porta 8080:

1
2
3
4
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
sudo iptables -L

Referência:




    Gostou de Ler este Artigo?

    Aqui estão alguns artigos relacionados que você pode gostar de ler:

  • Step-by-step Apache Guacamole Installation.
  • CyberDefenders Qradar101 Write up.
  • FnStegoCrypt - Encrypted Data in Images
  • Detection CVE-2024-35250
  • Exposing Local Applications with FNLocalCloud.
  • Script for enabling Windows Audit and Sysmon.