Open Source

Apache Guacamole – Open Source Remote Desktop Gateway

Apache Guacamole bir uzak masaüstü oturumu yönetmenizi sağlayan HTML5 VNC tabanlı bir uygulamadır. Kısaca Server-Client yapısından oluşur ve bu iki yapı birden aynı makinaya kurulması gerekmektedir. Son kullanıcıların tek yapması gereken desteklenen browserlar üzerinden bu uygulamanın web arayüzüne girmeleridir.
Kısaca mimari şu şekildedir:

Birden fazla kimlik doğrulama yöntemleri bulunmaktadır, bunlar:

  • Database Authentication
  • LDAP Authentication
  • TOTP Authentication
  • DUO Two-Factor Authentication
  • HTTP Header Authentication
  • CAS Authentication
  • OpenID Authentication

İstenildiği gibi kimlik doğrulama yöntemleri ayarlanabilmektedir.

Sistem gereksinimlerine gelecek olursak, klasik bir java web uygulamasını nasıl bir şartlarda çalıştırmanız gerekiyorsa o şartlara uygun bir Linux tabanlı sistem kurmanız yeterli olacaktır.

Bu yazımızda Tomcat üzerine kurup herhangi bir Proxy ayarlaması yapmayacağım. İnternet üzerinden istenildiği taktirde Nginx veya Apache2 Web Server ları ile Tomcat nasıl Proxy yapılıyor bunlara bakılabilir. İstenilirse sitemizde olmaması halinde Çözümpark olarak bunların da makalelerini sizlerle buluşturabiliriz.

Gereksinimler:

Kurduğumuz Sistemin Özellikleri:

Ubuntu Server 18.04 LTS

4 GB RAM

40 GB SSD DİSK

2 CPU

Sistem içerisine kurulması gereken bağımlılıklar:

Cairo: Libguac tarafından grafik çevirmeleri için kullanılmaktadır. Cairo yüklenmeden Guacamole çalışmayacaktır.

Zorunlu Bağımlılıklar
CairoLibguac tarafından grafik çevirmeleri için kullanılmaktadır. Cairo yüklenmeden Guacamole çalışmayacaktır.
libjpeg-turboLibguac tarafından JPEG desteği için kullanılır. Guacamole bu kütüphane yüklemeden build edilmeyecektir.
libpngLiguac tarafından PNG desteği için kullanılır. Bu asıl core özelliği olan PNG olmacan Guacamole çalışmayacaktır.
libtoolLibtool derleme sırasında kullanılmaktadır. Libtool Guacamole için gereken derlenmiş kütüphaneleri oluşturmaktadır.
OSSP UUIDLibguac tarafından herbir Guacamole bağlantısında Unique ID lerin oluşturulması için kullanılmaktadır.
Opsiyonel Bağımlılıklar
FFmpeglibavcodec, libavutil, libswscale kütüphaneleri FFmpeg tarafından kullanılmaktadır. FFmpeg guacenc tarafından Guacamole oturumlarının grafiksel kaydını aldıktan sonra bunları encode etmek amacıyla kullanılmaktadır.
FreeRDPFreeRDP 2.0.0 ve sonra RDP desteğ için gereklidir.
PangoPango metin düzeni kütüphanesidir. SSH, Telnet, Kubernetes gibi terminal uygulamalarında text dönüşümü için kullanılmaktadır.
libssh2SSH desteği için gereklidir.
libtelnetTelnet desteği için gereklidir.
libVNCServerVNC desteği için gereklidir.
libwebsocketsKubernetes desteği için gereklidir.
PulseAudioVNC nin sağladığı ses için daha deneyimsel kalite sağlamaktadır.
OpenSSLSSL ve TLS bağlantıları sağlanması için gereklidir.
libvorbisOgg Vorbis olarak bilinen ücretsiz ve açık kaynak ses sıkıştırması için kullanılmaktadır.
libwebpLibguac tarafından WebP resimlerini yazmak için kullanılmaktadır.
Kaynak Link: https://guacamole.apache.org/doc/gug/installing-guacamole.html#required-dependencies

Öncelikle repoları güncelleyelim:

#$ sudo apt-get update

Şimdi bağımlıklıkları yükleyelim:

Burada ben tüm destekleri açmak için bütün bağımlıkları yükleyeceğim;

Önemli Uyarı: Burda libpng12-dev olarak vermiş sitesinde fakat ubuntu 16.04 sonrası bir OS kullanıyorsanız artık libpng-dev olarak geçmektedir. Aşağıda yeni repo adı yazılmıştır.

#$ sudo apt-get install libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev libavcodec-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libwebsockets-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev

Yükleme:

Bağımlılıklar yüklendikten sonra kendi sitesi üzerinden stable sürümü indiriyoruz. Git üzerinden kodu çekerseniz stable olmayacaktır.

#$ mkdir apache-guacamole

#$ cd apache-guacamole

#$ wget “http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.1.0/source/guacamole-server-1.1.0.tar.gz” -O guacamole-server-1.1.0.tar.gz

#$ tar xf guacamole-server-1.1.0.tar.gz

#$ cd guacamole-server-1.1.0/

Artık derleme adımlarına geçebiliriz. Dokümantasyonunda verilen default dizine kurulum yapacağız.

#$ sudo ./configure --with-init-dir=/etc/init.d

Yüklediğiniz bağımlılıklara göre aşağıdaki gibi konsol çıktısı ile karşılaşmanız gerekmektedir.

#$ sudo make 

Artık derledik.

Şimdi yükleme zamanı:

#$ sudo make install

#$ sudo ldconfig

Tomcat ve JAVA Yüklemesi:

Sıra geldi Apache Guacamole Client kurmaya;

Client kurmadan önce yüklememiz gerekenler:

  • OpenJDK
  • Tomcat

#$ sudo apt-get install openjdk-8-jdk

User haklarını ayarlayalım:

#$ sudo groupadd tomcat

#$ sudo useradd –M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat

Tomcat yüklemesine geçelim:

#$ wget https://kozyatagi.mirror.guzel.net.tr/apache/tomcat/tomcat-8/v8.5.53/bin/apache-tomcat-8.5.53.tar.gz
#$ sudo mkdir /opt/tomcat
#$ sudo tar xvf apache-tomcat-8*.tar.gz -C /opt/tomcat --strip-components=1
#$ cd /opt/tomcat
#$ chgrp -R tomcat /opt/tomcat
#$ chmod -R g+r conf
#$ chmod g+x conf
#$ chown -R tomcat webapps/ work/ temp/ logs/ 

Gerekli ayarları yapalım:

#$ nano ~/.bashrc

Ctrl – V ile son satıra gidin.

Aşağıdaki satırları yapıştırın,

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export CATALINA_HOME=/opt/tomcat

Ctrl – X ile kaydedip Y deyip çıkın.

Aşağıdaki komutu çalıştırın.

#$ . ~/.bashrc

Kontrol edelim:

#$ echo $JAVA_HOME

#$ echo $CATALINA_HOME 

Tomcat servisini oluşturalım:

#$ sudo nano /etc/systemd/system/tomcat.service

Aşağıdaki satırları yapıştırın.

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target

Ctrl – X ile kaydedip Y deyip çıkın.

Servisi enable edelim.

#$ systemctl enable tomcat.service

Servisi başlatalım:

#$ sudo service tomcat start

Artık clientı indirip çalıştırabiliriz.

#$ cd
#$ wget "http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.1.0/binary/guacamole-1.1.0.war" -O guacamole-1.1.0.war
#$ sudo mv guacamole-1.1.0.war guacamole.war
#$ sudo cp guacamole.war /opt/tomcat/webapps/
#$ cd /opt/tomcat
#$ sudo chown -R tomcat webapps/ work/ temp/ logs/ 

Tüm servisleri başlatabiliriz:

#$ sudo service tomcat restart

#$ sudo /etc/init.d/guacd start

http://IP:8080/guacamole/ adresine gidin.

Şuanda herhangi bir giriş yapılamayacaktır çünkü herhangi bir kimlik doğrulama yöntemi eklemedik.

Apache Guacamole Kısaca:

GUACAMOLE_HOME (/etc/guacamole):

  • guacamole.properties
  • logback.xml
  • extensions/
  • lib/

dosya ve dizinlerinden oluşmalıdır.

Bunları ellle oluşturmamız gerekmektedir.

#$ sudo mkdir -p /etc/guacamole/{extensions,lib}
#$ cd /etc/guacamole
#$ sudo touch guacamole.properties logback.xml
#$ echo "export GUACAMOLE_HOME=/etc/guacamole" >> ~/.bash_profile
#$ source ~/.bash_profile

Bu noktadan sonra yapacağımız tüm ayarları guacamole.properties dosyasına yazacağız. Diğer ayarlar için lütfen kaynak adresi ziyaret ediniz. https://guacamole.apache.org/doc/gug/configuring-guacamole.html

Eğer çalıştırırken hata verirse aşağıdaki satırları uygulayınız.

#$ sudo sed -i 's/enforcing/disabled/g' /etc/selinux/config

#$ sudo setenforce 0

Kimlik Doğrulama

MariaDB(Mysql) Yüklenmesi ve Ayarları:

#$ sudo apt-get install mariadb-server

#$ sudo mysql_secure_installation

Root parolası belirleyin ve geri kalan tüm sorulara Y deyin. Bu önerilen ayarları yapmaktadır.

#$ sudo mysql -u root -p

Hem sudo hem de mysql parolaları girilir.

MariaDB > CREATE DATABASE guacdb;
MariaDB > CREATE USER 'guacdb-user'@'localhost' IDENTIFIED BY 'C0zump4rkA!';
MariaDB > GRANT SELECT,INSERT,UPDATE,DELETE ON guacdb.* TO 'guacdb-user'@'localhost';
MariaDB > FLUSH PRIVILEGES;
MariaDB > exit

Mysl ve Java Web uygulamasının birbiriyle haberleşmesi için mysql sitesinden java connector u indirmemiz gerekmektedir.

#$ cd /tmp

#$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.45.tar.gz

Dosyadan çıkartıp guacamole lib dizinine taşıyalım:

#$ tar xf mysql-connector-java-5.1.45.tar.gz

#$ sudo mv mysql-connector-java-5.*/mysql-connector-java-5.*.jar /etc/guacamole/lib/

Uygulamanın JDBC eklentisini indirerek uygulamanın mysql bağlantısını kurmasını sağlayacağız.

#$ cd /tmp

#$ wget "http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.1.0/binary/guacamole-auth-jdbc-1.1.0.tar.gz" -O guacamole-auth-jdbc-1.1.0.tar.gz

#$ tar xf guacamole-auth-jdbc-1.1.0.tar.gz

#$ sudo mv guacamole-auth-jdbc-1.1*/mysql/guacamole-auth-jdbc-mysql-1.1*.jar /etc/guacamole/extensions/

#$ cd /tmp/guacamole-auth-jdbc-1.1.0/mysql/schema
#$ cat *.sql | sudo mysql -u root -p guacdb
#$ sudo nano /etc/guacamole/guacamole.properties

Aşağıdaki satırları ekleyiniz.

# MySQL properties
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacdb
mysql-username: guacdb-user
mysql-password: C0zump4rkA!
mysql-default-max-connections-per-user: 0
mysql-default-max-group-connections-per-user: 0

#$ sudo /etc/init.d/guacd restart

#$ sudo service tomcat restart

Eğer yeni bir user eklemek isterseniz:

-- Generate salt
SET @salt = UNHEX(SHA2(UUID(), 256));
 
-- Create base entity entry for user
INSERT INTO guacamole_entity (name, type)
VALUES ('cozumpark', 'USER');
 
-- Create user and hash password with salt
INSERT INTO guacamole_user (
    entity_id,
    password_salt,
    password_hash,
    password_date
)
SELECT
    entity_id,
    @salt,
    UNHEX(SHA2(CONCAT('cozumparkpass', HEX(@salt)), 256)),
    CURRENT_TIMESTAMP
FROM guacamole_entity
WHERE
    name = 'cozumpark'
    AND type = 'USER';

Defualt username/password: guacadmin/guacadmin

Giriş yaptıktan sonra lütfen DEĞİŞTİRİN!

Temel Ayarlar:

SSH Bağlantısı Oluşturma:

New Connection’a tıklanır,

Enable SFTP derseniz seçeceğiniz dizine yükleme yapabilirsiniz.

Save deyip kaydedin.

Baştaki simgeye tıkladığınız zaman giriş yapacaktır.

Aşağıdaki gri alana bir kere tıklamanız gerekmektedir. Diğer türlü ekrana tıkladığınızda komutu almamaktadır.

O alana tıkladıktan sonra istediğiniz girişi verebilirsiniz.

Exit diyerek komut satırından ssh i sonlandırabilirsiniz.

RDP Bağlantısı Oluşturma:

HISTORY:

Makalenin Session Recording kısmı ve AD-LDAP Authentication kısımları daha sonradan gelecektir. Umarım herkese faydalı olmuştur/olacaktır.

Saygılarımla.

Kadir YAPAR

GICSP, OSCP, CEH, TSE, Cyber Security Professional

İlgili Makaleler

9 Yorum

  1. kadir bey merhaba;

    Bugune kadar hep open source pprojelerde calıstım.

    Bazı sunumlarda guacamole yaklasımının vdi yada daas olarak anlatıldıgını görüyorum!
    Nasıl yorumluyorsunuz?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu