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 | |
Cairo | Libguac tarafından grafik çevirmeleri için kullanılmaktadır. Cairo yüklenmeden Guacamole çalışmayacaktır. |
libjpeg-turbo | Libguac tarafından JPEG desteği için kullanılır. Guacamole bu kütüphane yüklemeden build edilmeyecektir. |
libpng | Liguac tarafından PNG desteği için kullanılır. Bu asıl core özelliği olan PNG olmacan Guacamole çalışmayacaktır. |
libtool | Libtool derleme sırasında kullanılmaktadır. Libtool Guacamole için gereken derlenmiş kütüphaneleri oluşturmaktadır. |
OSSP UUID | Libguac tarafından herbir Guacamole bağlantısında Unique ID lerin oluşturulması için kullanılmaktadır. |
Opsiyonel Bağımlılıklar | |
FFmpeg | libavcodec, 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. |
FreeRDP | FreeRDP 2.0.0 ve sonra RDP desteğ için gereklidir. |
Pango | Pango metin düzeni kütüphanesidir. SSH, Telnet, Kubernetes gibi terminal uygulamalarında text dönüşümü için kullanılmaktadır. |
libssh2 | SSH desteği için gereklidir. |
libtelnet | Telnet desteği için gereklidir. |
libVNCServer | VNC desteği için gereklidir. |
libwebsockets | Kubernetes desteği için gereklidir. |
PulseAudio | VNC nin sağladığı ses için daha deneyimsel kalite sağlamaktadır. |
OpenSSL | SSL ve TLS bağlantıları sağlanması için gereklidir. |
libvorbis | Ogg Vorbis olarak bilinen ücretsiz ve açık kaynak ses sıkıştırması için kullanılmaktadır. |
libwebp | Libguac tarafından WebP resimlerini yazmak için kullanılmaktadır. |
Ö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.
Elinize sağlık, harika bir makale.
Teşekkürler hocam.
Eline sağlık kardeşim, çok güzel bir makale olmuş.
Elinize sağlık.
@hakanuzuner sağolun hocam.
@korhankoseoglu teşekkürler.
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?
Çok Güzel Bir Yazı olmuş emeğinize sağlık
harikasınız
Güncelleme geçeyim, Guacamole 1.5.0 özelliği ile beraber kaydedilen video kayıtlarının izlenmesi de getirilmiştir.