diff --git a/index.rst b/index.rst index 943b92d..ba5b718 100644 --- a/index.rst +++ b/index.rst @@ -8,45 +8,47 @@ Free Documentation License". .. toctree:: - :maxdepth: 2 - :hidden: - :glob: + :maxdepth: 2 + :hidden: + :glob: - sphinx/index.rst + sphinx/index.rst .. toctree:: - :maxdepth: 2 - :hidden: - :caption: Configuration côté utilisateur - :glob: + :maxdepth: 2 + :hidden: + :caption: Configuration côté utilisateur + :glob: - xorg/urxvt/* - xorg/vscodium/* - xorg/kvmwindowspartboot/* + xorg/urxvt/* + xorg/vscodium/* + xorg/kvmwindowspartboot/* .. toctree:: - :maxdepth: 2 - :hidden: - :caption: Configuration côté serveur - :glob: + :maxdepth: 2 + :hidden: + :caption: Configuration côté serveur + :glob: - server/* + server/gitlist/* + server/rutorrent/* + server/guacamole/* .. toctree:: - :maxdepth: 2 - :hidden: - :caption: Programmation - :glob: + :maxdepth: 2 + :hidden: + :caption: Programmation + :glob: - esp32/index.rst + esp32/index.rst .. toctree:: - :maxdepth: 2 - :hidden: - :caption: Sheat Sheet - :glob: + :maxdepth: 2 + :hidden: + :caption: Sheat Sheet + :glob: - sheatsheet/* + sheatsheet/* .. toctree:: :maxdepth: 2 diff --git a/server/gitlist.rst b/server/gitlist/gitlist.rst similarity index 100% rename from server/gitlist.rst rename to server/gitlist/gitlist.rst diff --git a/server/guacamole/architecture.png b/server/guacamole/architecture.png new file mode 100644 index 0000000..86fe709 Binary files /dev/null and b/server/guacamole/architecture.png differ diff --git a/server/guacamole/guacamole.rst b/server/guacamole/guacamole.rst new file mode 100644 index 0000000..5b20c94 --- /dev/null +++ b/server/guacamole/guacamole.rst @@ -0,0 +1,369 @@ +Installation d'Apache Guacamole +=============================== + +Apache Guacamole est un bastion d'administration qui permet depuis un +serveur web de se connecter en RDP, SSH, Telnet, VNC, etc à un ou plusieurs +serveurs depuis une interface centralisée. + +.. image:: ./interface.png + +Il est composé de plusieurs modules : + +#. guacamole-server, la partie serveur qui manage les connections aux clients + et qui gère la connection des utilisateurs. +#. guacamole-client, une webapp tomcat qui gère l'interface web. + +.. image:: ./architecture.png + :width: 400px + +| Pour réaliser cette installation, je me suis basé sur ces vidéos : +| `Installation `_ +| `Connection à LDAP `_ +| `Utilisation d'un reverse proxy `_ +| et sur ces liens : +| `compilation pour systemd `_ +| `corriger l'erreur de compilation `_ +| `Mise en place d'un utilisateur système pour guacd `_ + +La documentation officielle se trouve `ici `_. + +.. note:: L'interface web de guacamole ne marche pas encore sur tomcat 10. + Debian 12 ne proposant plus tomcat 9 dans ces dépots, nous allons + rester sur une debian 11 le temps que tomcat 10 soit pris en compte + par guacamole-client. + +Compilation et installation de guacamole-server +----------------------------------------------- + +Avant de compiler guacamole, il faut installer les librairies nécessaires. +Pour les dépendences et leurs explications, je vous renvoie à `la documentation +officielle `_. + +.. code-block:: bash + + apt install wget build-essential libcairo2-dev libjpeg62-turbo-dev libpng-dev libtool-bin uuid-dev libossp-uuid-dev libavcodec-dev libavformat-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 + +On se place ensuite dans le dossier /tmp pour le build du serveur + +.. code-block:: bash + + cd /tmp + +Les sources se trouvent `ici `_. + +.. code-block:: bash + :linenos: + + wget https://dlcdn.apache.org/guacamole/1.5.4/source/guacamole-server-1.5.4.tar.gz + tar -zxvf guacamole-server-1.5.4.tar.gz + cd guacamole-server-1.5.4/ + +On lance ensuite la configuration : + +.. code-block:: bash + + export LDFLAGS="-lrt" + ./configure --with-systemd-dir=/lib/systemd/system/ + +Si tout se passe bien, on à un message identique à celui la : + +.. code-block:: bash + :linenos: + + ------------------------------------------------ + guacamole-server version 1.5.4 + ------------------------------------------------ + + Library status: + + freerdp2 ............ yes + pango ............... yes + libavcodec .......... yes + libavformat.......... yes + libavutil ........... yes + libssh2 ............. yes + libssl .............. yes + libswscale .......... yes + libtelnet ........... yes + libVNCServer ........ yes + libvorbis ........... yes + libpulse ............ yes + libwebsockets ....... yes + libwebp ............. yes + wsock32 ............. no + + Protocol support: + + Kubernetes .... yes + RDP ........... yes + SSH ........... yes + Telnet ........ yes + VNC ........... yes + + Services / tools: + + guacd ...... yes + guacenc .... yes + guaclog .... yes + + FreeRDP plugins: /usr/lib/x86_64-linux-gnu/freerdp2 + Init scripts: no + Systemd units: /lib/systemd/system/ + + Type "make" to compile guacamole-server. + +On compile et on installe, et on execute un ldconfig pour appliquer les nouvelles +librairies au système : + +.. code-block:: bash + + make + make install + ldconfig + +On créer un compte système pour guacd : + +.. code-block:: bash + + useradd -M -d /var/lib/guacd/ -r -s /sbin/nologin -c "Guacd User" guacd + +Et on change l'usilisateur du service + +.. code-block:: bash + + vi /lib/systemd/system/guacd.service + + [Service] + #User=root + User=guacd + +On démmarre le service et on vérifie que tout tourne bien : + + systemctl daemon-reload + systemctl enable --now guacd.service + systemctl status guacd.service + +Installation et configuration de guacamole-client +------------------------------------------------- + +On installe d'abord tomcat 9 sur le serveur : + +.. code-block:: bash + + apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user + +On télécharge ensuite la webapp, et on la place dans les webapp tomcat : + +.. code-block:: bash + + cd /tmp + wget https://dlcdn.apache.org/guacamole/1.5.4/binary/guacamole-1.5.4.war + cp guacamole-1.5.4.war /var/lib/tomcat9/webapps/ + +Installation de MySQL +--------------------- + +.. code-block:: bash + + apt install mariadb-server + +On sécurise l'installation en supprimant les comptes locaux et en autorisant +l'accès root que depuis localhost. + +.. code-block:: bash + + mysql_secure_installation + + +On télécharge l'extension MySQL pour guacamole ainsi que le connecteur MySQL et on +les installe en tant qu'extensions : + +.. code-block:: bash + :linenos: + + mkdir -p /etc/guacamole/{extensions,lib} + cd /tmp + wget https://dlcdn.apache.org/guacamole/1.5.4/binary/guacamole-auth-jdbc-1.5.4.tar.gz + tar -zxvf guacamole-auth-jdbc-1.5.4.tar.gz + mv guacamole-auth-jdbc-1.5.4/mysql/guacamole-auth-jdbc-mysql-1.5.4.jar /etc/guacamole/extensions/ + wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.3.0.tar.gz + tar -zxvf mysql-connector-j-8.3.0.tar.gz + mv mysql-connector-j-8.3.0/mysql-connector-j-8.3.0.jar /etc/guacamole/lib/ + +On créer l'utlilisateur et la base de données pour guacamole : + +.. code-block:: bash + + mysql -u root -p + +.. code-block:: sql + :linenos: + + CREATE DATABASE guacdb; + CREATE USER 'guacasql'@'localhost' IDENTIFIED BY 'P@sswd'; + GRANT SELECT,INSERT,UPDATE,DELETE ON guacadb.* TO 'guacasql'@'localhost'; + FLUSH PRIVILEGES; + EXIT; + +On importe les schema de la base de donnée : + +.. code-block:: + + cd guacamole-auth-jdbc-1.5.4/mysql/schema/ + cat *.sql | mysql -u root -p guacadb + +On édite le fichier ``guacamole.properties`` pour le configurer pour la base de données + +.. code-block:: + :linenos: + + # MariaBD connection + mysql-hostname: 127.0.0.1 + mysql-port: 3306 + mysql-database: guacamoledb + mysql-username: guacamole_mysql + mysql-password: uu{Qu8oC)eva9bo;eh*aiZ5uo6yaeX + +On édite ``guacd.conf`` pour qu'il écoute en localhost + +.. code-block:: + + [server] + bind_host = 127.0.0.1 + bint_port = 4822 + +On redémarre les services pour que tout nos changements soient pris en compte : + +.. code-block:: bash + + systemctl restart mariadb.service tomcat9.service guacd.service + +Connection a un annuaire LDAP +----------------------------- + +On commence par créer un compte LDAP qui n'aura accès qu'en lecture seule au dommaine. +La gestion d'un annuaire LDAP n'étant pas le but de ce tutoriel, je ne m'étendrai pas +sur le sujet. `Voici la source dont je me suis inspiré `_. + +On installe l'extension ldap pour guacamole : + +.. code-block:: + :linenos: + + cd /tmp/ + wget https://dlcdn.apache.org/guacamole/1.5.4/binary/guacamole-auth-ldap-1.5.4.tar.gz + tar -zxvf guacamole-auth-ldap-1.5.4.tar.gz + mv guacamole-auth-ldap-1.5.4/guacamole-auth-ldap-1.5.4.jar /etc/guacamole/extensions/ + +On édite le fichier utilisateur pour les connetions LDAP, en y ajoutant les lignes suivantes : + +.. code-block:: bash + :linenos: + + # Connection AD + # Controleur de domaine + ldap-hostname: dc.domain.local + ldap-port: 389 + ldap-encryption-method: none + + # Utilisateur pour listiong ldap + ldap-search-bind-dn: readonly@domain.local + ldap-search-bind-password: MyP@sswd! + + # Recherche des utilisateurs + ldap-user-base-dn: ou=Admins,dc=domain,dc=local + ldap-username-attribute: sAMAccountName + ldap-user-search-filter: (objectclass=User) + + # Recherche des groupes + ldap-group-base-dn: ou=Admins,dc=domain,dc=local + ldap-group-search-filter: (objectclass=Group) + + # Prioriser l'autentification ldap + extension-priority: ldap + +Et enfin on relance le serveur tomcat pour prendre en compte les nouveaux paramètres : + +.. code-block:: bash + + systemctl restart tomcat9.service + +Si on se connecte avec notre compte LDAP, et qu'on va dans la section utilisateurs, on n'en voit aucun. +Cela vient du fait que le compte n'a aucun droit. Pour remédier à cela, il faut se reconnecter +avec notre compte administateur local et créer un compte local +aui porte le même nom que l'utilisateur, et lui donner tout les droits. + +.. image:: ./rights.png + :width: 400px + +Enregistrement des sessions +--------------------------- + +Tout d'abord, on télécharge l'extension, et on l'active en redémarrant tomcat. + +.. code-block:: bash + :linenos: + + cd /tmp/ + wget https://dlcdn.apache.org/guacamole/1.5.4/binary/guacamole-history-recording-storage-1.5.4.tar.gz + tar -zxf guacamole-history-recording-storage-1.5.4.tar.gz + mv guacamole-history-recording-storage-1.5.4/guacamole-history-recording-storage-1.5.4.jar /etc/guacamole/extensions/ + systemctl restart tomcat9.service + +Ensuite, on configure le dossier qui va recevoir les enregistrements. + + mkdir -p /var/lib/guacamole/recordings + chown guacd:tomcat /var/lib/guacamole/recordings + chmod 2750 /var/lib/guacamole/recordings + +On configure les connections pour qu'elles enregistrent. Dans les paramètres de connection il faut +renseigner les champs suivants : + +.. image:: ./recording_parameters.png + :width: 400px + +dans le ``recording path`` on renseigne absolument avec ``${GUAC_DATE}-${GUAC_TIME}-${GUAC_USERNAME}`` +car c'est grace à l'uuid que l'interface web retrouve la vidéo qui correspond à la session + +Et enfin. dans l'historique, on à un nouveau champ qui apparait qui nous permet de lire la +vidéo depuis le navigateur. + +.. image:: ./recording.png + +.. note:: Pour les connexions ssh, on a la possibilité de faire la même chose, mais d'enregistrer + les sessions au format texte. On y gagne en place, mais par contre pas de visionnage depuis + l'interface web. Il faut donc se connecter sur le serveur pour voir la session. + +Sécurisation +------------ + +Déjà, on peut sur le serveur désinstaller les paquets qui ne sont plus utiles : + +.. code-block:: bash + + apt autoremove wget build-essentials + +Ensuite, on peut définir sur les serveurs distants des règles ssh +pour qu'ils n'acceptent les connections que depuis guacamole avec +une autentification par mot de passe, et depuis des postes d'administration grâce +à une clé publique rsa. + +On peut faire cela en éditant le fichier ``etc/ssh/sshd_config.d/00-restrict.conf`` + +..code-block:: conf + + PasswordAutentification no + Match Address 127.0.0.1,192.168.0.1 + PasswordAuthentication yes + +Pour aller plus loin +-------------------- + +Il est vivement recommendé de mettre en place un reverse proxy pour sécuriser +la connetion à l'interface web, sans quoi les identifiants/mot de passe ldap +de la connexion seront visibles en clair sur le réseau. + +Je garde néanmoins ça pour plus tard, car je vais passer cette installation +en cluster avec haproxy pour la répartition de charge, et c'est lui qui +s'occupera du chiffrement TLS. + diff --git a/server/guacamole/interface.png b/server/guacamole/interface.png new file mode 100644 index 0000000..3f67f2f Binary files /dev/null and b/server/guacamole/interface.png differ diff --git a/server/guacamole/recording.png b/server/guacamole/recording.png new file mode 100644 index 0000000..31ca6a1 Binary files /dev/null and b/server/guacamole/recording.png differ diff --git a/server/guacamole/recording_parameters.png b/server/guacamole/recording_parameters.png new file mode 100644 index 0000000..d18bf8b Binary files /dev/null and b/server/guacamole/recording_parameters.png differ diff --git a/server/guacamole/rights.png b/server/guacamole/rights.png new file mode 100644 index 0000000..012d0ae Binary files /dev/null and b/server/guacamole/rights.png differ diff --git a/server/rutorrent.rst b/server/rutorrent/rutorrent.rst similarity index 100% rename from server/rutorrent.rst rename to server/rutorrent/rutorrent.rst