Aprenda a instalar um Jump Server com Apache Guacamole um gateway de desktop remoto Web
Introdução: vivemos em uma época onde “segurança” deixou de ser uma palavra qualquer, citada e questionada por alguns profissionais a diversos gestores, para se tornar algo realmente em evidência nas mídias. Segurança é um quesito importantíssimo para a continuidade de um negócio e muito ampla em diversos aspectos.
Aqui abordaremos um conceito e uma ferramenta que serão muito úteis para uma Organização. Vamos começar com algumas perguntas simples?
- Você necessita de acessar remotamente ativos dentro da empresa em que trabalha?
- Costuma deixar seus ativos acessíveis publicamente só para conectar de qualquer lugar?
- Você restringe esse acesso por pessoas e/ou grupos?
- Quando alguém com privilégios é demitido. Você tem que ir em diversos sistemas e equipamentos rapidamente, para remover os acessos?
- Você sente falta de um local centralizado e único, que contenha a definição de seus sistemas para trabalhar remotamente?
Se a resposta para essas perguntas foi um “SIM”, então esse artigo pode lhe ajudar a melhorar a forma como você acessa determinados ativos em sua rede.
Primeiramente vamos a um conceito que muitos acham que VPN (Virtual Private Network) é a forma mais segura de acessar uma Intranet e assim prestar suporte remotamente de qualquer lugar. Bem, não queria destruir seu conceito mas; a VPN sem determinados cuidados com o seu sistema pessoal, de nada vai te proteger de um incidente que possa parar sua empresa. Imagine uma situação em que você esteja conectado remotamente via VPN corporativa, acessando um compartilhamento de arquivos da empresa e em algum momento durante o trabalho você adquiriu um bem sucedido ransomware. Esse malware causará grande prejuízo para a empresa e para a sua reputação, mesmo estando usando a tal VPN.
Outros preferem usar recursos como os Jump Servers. Equipamentos com sistemas, por exemplo Windows, rodando serviços como RDP (Remote Desktop Protocol), ou Anydesk, ou Teamviewer, ou qualquer outro equivalente para permitir o acesso local e a partir dele conectar em outros sistemas dentro da empresa. Nada contra o sistema da Microsoft ou qualquer produto citado mas não me sinto confortável em deixá-los públicos na Internet. Lembrando que não existem sistemas 100% seguros. Em algum momento falhas podem surgir e alguém pode explorá-las. Pense em uma vulnerabilidade Zero Day.
Então o que venho sugerir nesse artigo é que juntem as duas soluções VPN e Jump Server mas de uma maneira, que na minha opinião, seria mais segura que ambas as soluções acima, construídas isoladamente.
Continuem usando a VPN mas também pensando na segurança dos sistemas pessoais de quem utiliza a VPN, para trabalhar remotamente. Não usem VPN PPTP em suas soluções corporativas, é insegura, obsoleta e não funciona bem com CGNAT, em sistemas que não possuem suporte ao ALG (Application Layer Gateway) PPTP.
Ao invés de deixarem públicos seus Jump Servers, mantenha-os com IPs privados RFC1918 e acessíveis somente através da VPN. Assim chegaremos a dois níveis de autenticação pelo menos. Crie um ou mais servidores Jump e crie ACLs nos equipamentos e sistemas que só permitam acesso dos IPs privados dos Jump Servers.
Dessa forma vai conseguir resolver boa parte daquelas perguntas que fiz, mas ainda não é o objetivo principal deste artigo. Esse artigo vai focar na ferramenta Apache Guacamole que é uma aplicação para construirmos um Jump Server mais inteligente e seguro.
Mas o que seria o Apache Guacamole? Ele é um clientless remote desktop gateway, ou seja, você não precisa de um programa cliente instalado no seu desktop de trabalho ou pessoal, para acessar sistemas que usem os protocolos: RDP, VNC e SSH. Isso é feito através de um browser apenas e usando HTML5.
O Guacamole é uma aplicação Java que roda embaixo do Apache Tomcat. É dividido em duas partes, o server e os clients que fazem a conexão propriamente dita usando RDP, VNC ou SSH, de acordo com o tipo de acesso. Possui suporte a diversas bases de dados como MySQL, MariaDB, PostgreSQL e também LDAP.
Sua arquitetura funciona assim:
Requisitos para o nosso artigo
Debian 11 (Bullseye) 64 bits. Instalação mínima. Sistema deve restringir o acesso apenas via VPN e/ou Rede de Gerência da empresa (utilize regras de firewall iptables ou nftables para essa tarefa).
– VM com 2 cores ou mais. Dependerá da quantidade de acessos simultâneos.
– 2Gb de ram. Sugiro 4Gb.
– 10G de disco. Dependerá do crescimento da base de dados, se for local.
– Interface de rede com IP privado e liberado para acesso aos sistemas remotos.
:: Instalação do MariaDB 10.5 ::
# apt install mariadb-server mariadb-client
Por padrão o pacote MariaDB no Debian usa unix_socket para autenticar o login do usuário, o que basicamente significa que você pode usar o nome de usuário e a senha do sistema operacional para efetuar login no console do MariaDB.
Assim, você pode logar diretamente sem fornecer a senha root do MariaDB, para aumentar a seguraça vamos definir uma senha para o usuário root do MariaDB, não esqueça de alterar ALTERE_3ST4_SENHA pela sua senha.
# mariadb -u root
USE mysql; ALTER USER 'root'@'localhost' IDENTIFIED BY 'ALTERE_3ST4_SENHA';
Ainda logado no MariaDB vamos criar nossa base de dados para o Guacamole, não esqueça de alterar S3NHA_GUACAMOL3_US3R por sua senha.
CREATE DATABASE guacamole; CREATE USER 'guacamole'@'localhost' IDENTIFIED BY 'S3NHA_GUACAMOL3_US3R'; GRANT ALL PRIVILEGES ON guacamole.* TO 'guacamole'@'localhost'; FLUSH PRIVILEGES; EXIT;
Apague seus rastros, em /root/.mysql_history temos um histórico com todos os comandos dado no terminal do MariaDB, então não é legal deixar lá em texto puro a senha que setamos!
# > /root/.mysql_history
:: Instalação Java JDK ::
# apt install openjdk-11-jdk libmariadb-java
Precisaremos configurar a variável de ambiente JAVA_HOME. No final do arquivo /etc/environment adicione o seguinte parâmetro JAVA_HOME=”/usr/lib/jvm/java-11-openjdk-amd64″
echo 'JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"' >> /etc/environment
Em seguida carregamos o /etc/environment:
# source /etc/environment
:: Instalação Tomcat::
# apt install tomcat9 tomcat9-admin tomcat9-docs tomcat9-examples tomcat9-user
Feito isso vamos criar um usuário de acesso ao Tomcat Web Application Manager. Vamos editar o arquivo /etc/tomcat9/tomcat-users.xml e no final antes de adicionar adicionar as 2 linhas, não esqueça de alterar S3NHA_FORT3:
# vim /etc/tomcat9/tomcat-users.xml
Arquivo /etc/tomcat9/tomcat-users.xml sem os comentários ficará:
:: Instalação Guacamole::
# apt install guacd
Os pacotes não criam os diretórios de configuração do Guacamole, então faremos conforme abaixo. Neles ficarão as extensions e o connector e que juntos integrarão o Java às bases de dados para funcionar a nossa autenticação e administração do Jump Server.
/etc/guacamole/ ├── extensions └── lib
# mkdir -p /etc/guacamole/lib /etc/guacamole/extensions
Crie um link simbólico do connector java do MariaDB no Guacamole:
# ln -s /usr/share/java/mariadb-java-client.jar /etc/guacamole/lib/
Vamos baixar e descompactar o pacote de extensão, para criação das tabelas e autenticação na base de dados. Detalhe que a versão tem que ser a mesma do pacote guacd que instalamos acima. Nesse caso é a versão 1.3.0 que vem no repositório do Debian 11.
# apt install wget # cd /tmp # wget -c https://archive.apache.org/dist/guacamole/1.3.0/binary/guacamole-auth-jdbc-1.3.0.tar.gz # tar -xzvf guacamole-auth-jdbc-1.3.0.tar.gz
Mova a extensão de autenticação via MySQL, para o lugar correto:
# mv /tmp/guacamole-auth-jdbc-1.3.0/mysql/guacamole-auth-jdbc-mysql-1.3.0.jar /etc/guacamole/extensions/
Populando a base de dados guacamole com as tabelas e algumas informações iniciais:
# cat /tmp/guacamole-auth-jdbc-1.3.0/mysql/schema/*.sql | mysql -u root -p guacamole
Informe a senha do usuário MariaDB root no nosso ex.: “ALTERE_3ST4_SENHA”
Se desejar certificar que as tabelas foram criadas acesse o terminal do MariaDB com o usuário e senha do guacamole
# mariadb -u guacamole -p
Enter password: S3NHA_GUACAMOL3_US3R
Use o comando show tables; para ver as tabelas.
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.5.12-MariaDB-0+deb11u1 Debian 11 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [guacamole]> show tables; +---------------------------------------+ | Tables_in_guacamole | +---------------------------------------+ | guacamole_connection | | guacamole_connection_attribute | | guacamole_connection_group | | guacamole_connection_group_attribute | | guacamole_connection_group_permission | | guacamole_connection_history | | guacamole_connection_parameter | | guacamole_connection_permission | | guacamole_entity | | guacamole_sharing_profile | | guacamole_sharing_profile_attribute | | guacamole_sharing_profile_parameter | | guacamole_sharing_profile_permission | | guacamole_system_permission | | guacamole_user | | guacamole_user_attribute | | guacamole_user_group | | guacamole_user_group_attribute | | guacamole_user_group_member | | guacamole_user_group_permission | | guacamole_user_history | | guacamole_user_password_history | | guacamole_user_permission | +---------------------------------------+ 23 rows in set (0.000 sec) MariaDB [guacamole]> exit; Bye
Criando o arquivo /etc/guacamole/guacamole.properties com as configurações de porta de acesso e os dados de conexão ao MariaDB.
# vim /etc/guacamole/guacamole.properties
Não esqueça de alterar S3NHA_GUACAMOL3_US3R
# Hostname and port of guacamole proxy guacd-hostname: localhost guacd-port: 4822 # MySQL properties mysql-driver: mariadb mysql-hostname: localhost mysql-port: 3306 mysql-database: guacamole mysql-username: guacamole mysql-password: S3NHA_GUACAMOL3_US3R
OBS: Embora MariaDB e MySQL tenham algumas coisas em comum (MariaDB é um fork do Mysql), mas nesse caso eles são diferentes aqui. Em muitos artigos espalhados pela Internet se fala no pacote libmysql-java mas este não existe mais no Debian 11. No lugar dele usamos o libmariadb-java.
Baixando e habilitando o Guacamole Web Application
# ln -s /etc/guacamole/ /var/lib/tomcat9/.quacamole # wget https://downloads.apache.org/guacamole/1.3.0/binary/guacamole-1.3.0.war -O /var/lib/tomcat9/webapps/guacamole.war # systemctl restart tomcat9 guacd
Se parássemos por aqui, já teríamos o Guacamole rodando e funcional em HTTP, mas vamos adicionar uma camada de criptografia nisso. Vamos habilitar o SSL no Apache Tomcat:
Vamos criar uma chave e uma senha com o próximo comando. Só seguir as instruções e preencher as perguntas:
# keytool -genkey -alias tomcat -keyalg RSA
Informe a senha da área de armazenamento de chaves: S3NHA_USADA_K3YTOOL Informe novamente a nova senha: S3NHA_USADA_K3YTOOL Qual é o seu nome e o seu sobrenome? [Unknown]: Marcelo Gondim Qual é o nome da sua unidade organizacional? [Unknown]: AMA Qual é o nome da sua empresa? [Unknown]: LinuxInfo Qual é o nome da sua Cidade ou Localidade? [Unknown]: Araruama Qual é o nome do seu Estado ou Município? [Unknown]: RJ Quais são as duas letras do código do país desta unidade? [Unknown]: BR CN=Marcelo Gondim, OU=AMA, O=LinuxInfo, L=Araruama, ST=RJ, C=BR Está correto? [não]: sim
Concluído precisaremos movê-la para o local certo e com as devidas permissões:
# mv /root/.keystore /var/lib/tomcat9/ # chown tomcat. /var/lib/tomcat9/.keystore # chmod 640 /var/lib/tomcat9/.keystore
Em /etc/tomcat9/server.xml:
# vim /etc/tomcat9/server.xml
Troque isso:
Por: (Não esqueça de alterar S3NHA_USADA_K3YTOOL)
# systemctl restart tomcat9 guacd
Para acessarmos nosso Jump Server:
https://[servidor]:8080/guacamole/
O usuário e senha são guacadmin. Crie um novo usuário com permissões de administrador e em seguida remova este usuário padrão.
Autor: Marcelo Gondim
Brasil Peering Fórum: https://wiki.brasilpeeringforum.org/w/Usuário:Gondim
Linkedin: https://www.linkedin.com/in/marcelo-gondim-sysadmin/
Telegram: @Marcelo_Gondim
Dicas extra do Remontti
Para complementar, tem algumas coisas que eu acho que podem serem aplicadas ao nosso Guacamole apresentado pelo nosso parceiro Marcelo Gondim
– Nginx fazendo Proxy reverso para acessar a aplicação com um subdomínio.
– Utilização do Let’s Encrypt para um certificado válido.
– Port knocking com Nftables, para não deixar totalmente exposto.
Proxy Nginx
Como a aplicação será acessada apenas pelo Nginx podemos deixar o tomcat9 ouvindo apenas em localhost, se você segui o procedimento anterio qual criou o certificado privado agora ele não é mais necessarios vamos desfazer para o que era antes porem vamos colocar o connector ouvindo apenas 127.0.0.1.
# vim /etc/tomcat9/server.xml
Altere para:
Reinicie o tomcat para que o mesmo rode apenas em localhost, assim não será mais possivel acesso pelo seu IP:8080
# systemctl restart tomcat9
Instalaremos o nginx e vamos remover a assinatura do nginx onde ele exibe a versão do mesmo.
# apt install nginx # sed -i 's/# server_tokens/server_tokens/' /etc/nginx/nginx.conf # systemctl restart nginx
Irei alterar direto no arquivo default do nginx as configurações, se achar melhor você pode criar um novo arquivo.
# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.original # vim /etc/nginx/sites-available/default
Adcione: (Altere server_name para seu subdomínio)
server { listen 80; listen [::]:80; server_name guacamole.remontti.com.br; location / { proxy_pass http://127.0.0.1:8080/guacamole/; proxy_buffering off; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_cookie_path /guacamole/ /; } }
# nginx -t # systemctl restart nginx
Let’s Encrypt
# apt install certbot python3-certbot-nginx
Para gerar o certificado use o comando:
# certbot
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): noc@remontti.com.br - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: n Account registered. Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: guacamole.remontti.com.br - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1 Requesting a certificate for guacamole.remontti.com.br Performing the following challenges: http-01 challenge for guacamole.remontti.com.br Waiting for verification... Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/default Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/default - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://guacamole.remontti.com.br - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/guacamole.remontti.com.br/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/guacamole.remontti.com.br/privkey.pem Your certificate will expire on 2022-04-17. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Não esqueça de colocar no seu cron para ele renovar o certificado, pois a cada 90 ele expira. Neste exemplo todo dia primeiro tento renovar.
# certbot -q renew
Exemplo:
# echo '00 00 1 * * root certbot -q renew' >> /etc/crontab # systemctl restart cron
Port knocking
Nftables já vem por padrão no Debian 11 então basta habilitá-lo. Temos um tutorial do se Port knocking
# systemctl enable nftables
O arquivo de configuração padrão do nftables fica em /etc/nftables.conf, então vamos edita-lo:
# vim /etc/nftables.conf
Neste exemplo vou estar liberando as portas 80 e 443 após “batermos” nas portas 52341, 28001, 60541, 30951, e por 2h (7200s) após bater nas portas teremos acesso as mesmas, caso fique mais que tempo definido será necessário bater novamente.
#!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority 0; } chain forward { type filter hook forward priority 0; } chain output { type filter hook output priority 0; } } define protege_portas = {80,443} table inet portknock { set clientes_ipv4 { type ipv4_addr flags timeout } set clientes_ipv6 { type ipv6_addr flags timeout } set toctoc_aberta_ipv4 { type ipv4_addr . inet_service flags timeout } set toctoc_aberta_ipv6 { type ipv6_addr . inet_service flags timeout } chain input { type filter hook input priority -10; policy accept; iifname "lo" return tcp dport 52341 add @toctoc_aberta_ipv4 {ip saddr . 28001 timeout 60s} tcp dport 52341 add @toctoc_aberta_ipv6 {ip6 saddr . 28001 timeout 60s} tcp dport 28001 ip saddr . tcp dport @toctoc_aberta_ipv4 add @toctoc_aberta_ipv4 {ip saddr . 60541 timeout 60s} tcp dport 28001 ip6 saddr . tcp dport @toctoc_aberta_ipv6 add @toctoc_aberta_ipv6 {ip6 saddr . 60541 timeout 60s} tcp dport 60541 ip saddr . tcp dport @toctoc_aberta_ipv4 add @toctoc_aberta_ipv4 {ip saddr . 30951 timeout 60s} tcp dport 60541 ip6 saddr . tcp dport @toctoc_aberta_ipv6 add @toctoc_aberta_ipv6 {ip6 saddr . 30951 timeout 60s} tcp dport 30951 ip saddr . tcp dport @toctoc_aberta_ipv4 add @clientes_ipv4 {ip saddr timeout 7200s} log prefix "Portknock bem-sucedido: " tcp dport 30951 ip6 saddr . tcp dport @toctoc_aberta_ipv6 add @clientes_ipv6 {ip6 saddr timeout 7200s} log prefix "Portknock bem-sucedido: " tcp dport { $protege_portas } ip saddr @clientes_ipv4 counter accept tcp dport { $protege_portas } ip6 saddr @clientes_ipv6 counter accept tcp dport { $protege_portas } ct state established,related counter accept tcp dport { $protege_portas } counter reject with tcp reset } }
Reinicie o nftables
# systemctl restart nftables
Neste tutorial de Port knocking tenho um modelinho web qual você pode usar, existe alguns clientes para celular Android, iPhone e Windows.
Agora deixamos mais seguro nosso servidor.
Exemplo de como adicionar um Windows Server ao seu guacamole
No canto superior direito, clique no nome de usuário e em seguida Settings.
Click em Connections em seguida New Connection
EDIT CONNECTION
Name: Insira um nome de identificação para a conexão
Location: Use o ROOT padrão se não houver requisitos específicos
Protocol: RDP
PARAMETERS
Network
Hostname: IP o Domínio do seu Servidor
Port: Podemos deixá-lo vazio se usar a porta padrão 3389, ou informe a porta alterada do RDP
Authentication
Username: Usuário
Password: Senha
Domain: Deixe em branco ou use o nome de domínio local do dispositivo Windows
Ignore server certificate: Marque esta opção se o certificado for autoassinado
Role para baixo até o final da página e clique no botão Save.
A interface é bem intuitiva, acredito que não terá dificuldades, você pode criar grupos e usuarios e restrigir o acesso apenas a alguns servidores.
Espero que tenha gostado! E mais uma vez deixo meu agradecimento ao parceio Marcelo Gondim. Para trocar uma ideia chega lá no telegram @remontticombr
Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!
Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.
Referências:
– https://wiki.debian.org/Guacamole
– https://computingforgeeks.com/install-and-use-guacamole-remote-desktop-on-debian/
– https://wiki.brasilpeeringforum.org/w/Configurando_um_gateway_de_acesso_remoto_com_Guacamole
– https://receitasdecodigo.com.br/web/configurando-ssl-no-tomcat-8
Para quem efetuou os passos iniciais e tentou testar a página de login antes mesmo de gerar os certificados, mas não abre. Consegui resolver inserindo em /etc/guacamole/guacamole.properties o paramentro: mysql-ssl-mode: disabled
nao consigo fazer rdp, só ssh.
comfigurei o meu computador para rdp e testei com outro e funciona mas o guacamole da-me sempre erro, fiz igual ao tutorial alguem me pode ajudar?
Remontti sempre trazendo novidade e agregação de conhecimento e valores..
Obrigado!!
Pessoal, alguém conseguiu converter a gravação?
Aqui está dando esse erro:
# guacenc -s 1920×1080 -r 20000000 -f srvetebd001jag_s
bash: guacenc: command not found
Bom Dia, segui o procedimento tudo certinho e na hora de logar pela primeira vez na https://[servidor]:8080/guacamole/ com o login e senha guacadmin, vem a mensagem que o login e senha estão incorretas. Alguém pode me ajudar?
Olá,
Segui o seu tutorial e não consigo abrir a URL https://[servidor]:8080/guacamole/
Opa o que baixei foi o TightVNC. https://www.tightvnc.com/download.php
Buenas Ricardo,
Tentei instalar o RealVNC aqui pra testar e pra te dizer a verdade tive problemas inclusive pra fazer ele rodar no Windows. Não subia a porta 5900 por nada e aí realmente no Guacamole não conectava via VNC. Abri o shell do Windows e chequei com o netstat -an|more
Baixei um outro o TinyVNC, instalei e esse levantou a porta 5900 e consegui acessar normalmente pelo Guacamole.
@Marcelo Gondim muito obrigado pela dica já testei aqui e deu certo também.
Disponha e mão na massa. 😀
cara primeiramente parabéns como sempre impecável nas instruções, só que pra mim não foi de jeito nem um no VNC eu estava com o realvnc 5.2
e testei com o 6 e nada o que pode ser ?
obrigado.