- chalblog - http://blog.is-a-geek.org -

Linux Konsole im Internet-Browser mit der Ajaxterm auf Ubuntu

Linux Konsole im Internet-Browser mit der Ajaxterm auf Ubuntu [1]Ajaxterm stellt mit Python und Ajax ein vollwertiges Linux Terminal im Browser zur Verfügung. Eine Linux Shell Konsole im Browser hat schon seine Vorteile, kann bei falscher Konfiguration aber auch eine erhebliche Erleichterung für Eindringlinge darstellen. Aus diesem Grund wird in diesem Tutorial auch ausführlich auf die Absicherung dieser eingegangen.

 

Achtung: Ich übernehme KEINE Verantwortung für eventuell auftretende Probleme. Beachtet unbedingt den Abschnitt der Absicherung und verwendet dieses Script nicht unbedingt auf einem Produktivserver mit sensiblen Daten.

 

Installation

Ajaxterm befindet sich in den Repositories und lässt sich somit mit diesem Befehl installieren:

sudo apt-get install ajaxterm openssl

Nach der Installation wird der Dienst auch automatisch gestartet. Ajaxterm ist mit der Standardkonfiguration nur lokal auf dem Port 8022 erreichbar und das ist auch gut so. Wir werden später eine Weiterleitung mit erzwungenem SSL und Passwort über den Apache Webserver einrichten.

Zuerst überprüfen wir sicherheitshalber ob die jetzige Konfiguration auch wirklich nur lokale Verbindungen zulässt, indem wir von einem anderen Rechner versuchen diese Konsole zu öffnen.

http://SERVERIP:8022

Start/Stop und Autostart

Ajaxterm kann wie jeder andere Service in Ubuntu gestartet bzw. gestoppt werden:

sudo service ajaxterm start/stop

Der Dienst wird nach der Installation auch bei jedem Neustart automatisch gestartet. Will man dies verhindern, führt man folgendes Kommando aus:

sudo update-rc.d -f ajaxterm remove

Um ihn wieder automatisch zu starten:

sudo update-rc.d -f ajaxterm defaults

Installation Apache2 mit SSL und Proxy-Modul

Solltet ihr Apache mit den benötigten Modulen schon installiert haben, könnt ihr diesen Abschnitt überspringen.

Apache2 installieren:

sudo apt-get install apache2

Die benötigten Module aktivieren:

sudo a2enmod ssl
sudo a2enmod proxy_http

Danach erstellen wir ein Verzeichnis für das SSL-Zertifikat:

sudo mkdir /etc/apache2/ssl

SSL-Zertifikat erstellen:

sudo openssl req $@ -new -x509 -days 3650 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem

In der “ports.conf” …

sudo nano /etc/apache2/ports.conf

… muss man Apache dazu bringen, auch am Port 443 zu lauschen. Dazu wird der nachfolgende Part einkommentiert oder eingefügt, wenn er dies nicht schon ist.

# Alter the <IfModule mod_ssl.c> section:
<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    NameVirtualHost *:443
    Listen 443
</IfModule>

(nano: speichern mit “Strg+o“, schließen nano mit “Strg+x”) Jetzt aktiviert man die “default-ssl” Konfiguration:

sudo a2ensite default-ssl

Die Konfigurationsdatei wird anschließend zur Verwendung unseres soeben erstellten Zertifikates angepasst.

sudo nano /etc/apache2/sites-available/default-ssl

Dort kommentieren wir folgende zwei Zeilen aus (“#” davor setzen)…

# SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
# SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

… und fügen diese stattdessen ein:

SSLCertificateFile /etc/apache2/ssl/apache.pem

Zum Abschluss wird Apache neu gestartet:

sudo service apache2 restart

Um die SSL-Einstellungen zu testen, geben wir die Serverip mit einem vorangestellten “https://” in die Adresszeile des Browsers ein. Erscheint ein Dialog um das Zertifikat zu akzeptieren funktioniert unser SSL.

https://SERVERIP

SSL Firefox [2]

SSL Firefox

SSL Internetexplorer [3]

SSL Internetexplorer

 

Umleitung und erzwungene Verschlüsselung

Da wir Ajaxterm nur über SSL betreiben wollen, fügen wir die Http-Proxy Einstellungen auch nur in die SSL-Konfigurationsdatei ein.

Öffnet die “default-ssl” Datei …

sudo nano /etc/apache2/sites-enabled/default-ssl

… und fügt am Ende des Virtualhostblocks die Proxyeinstellungen ein.

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
.
.
.
# Proxy Ajaxterm -------------------------------------

    ProxyRequests Off
    <Proxy *>
        AddDefaultCharset off
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /ajaxterm/ http://localhost:8022/
    ProxyPassReverse /ajaxterm/ http://localhost:8022/

# Ende Proxy Ajaxterm --------------------------------

</VirtualHost>
</IfModule>

Damit unverschlüsselte Zugriffe nicht in einer “Seite nicht gefunden” Meldung enden, sondern auf die HTTPS Adresse weitergeleitet werden, richten wir mittels Rewrite-Mod in Apache eine Weiterleitung auf diese ein.

Dazu aktivieren wir den Mod:

sudo a2enmod rewrite

Danach fügen wir die Weiterleitung in der Standartkonfigurationsdatei hinzu.

sudo nano /etc/apache2/sites-enabled/000-default

Die Zeilen werden ebenfalls wieder am Ende des Virtualhost-Blocks eingefügt.

<VirtualHost *:80>
.
.
.
# Ajaxterm Rewrite ----------------------------

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^/ajaxterm(.*) https://%{SERVER_NAME}/ajaxterm/$1 [R,L]

# Ende Ajaxterm Rewrite -----------------------

</VirtualHost>

Ebenfalls erstellen wir den Ordner “ajaxterm” im Apache Verzeichnis, da der Rewrite-Mod ansonsten immer einen “/” am Ende der Adresse verlangt.

sudo mkdir /var/www/ajaxterm

Nach einem Neustart von Apache …

sudo service apache2 restart

… ist das Terminal über folgende Variationen erreichbar (natürlich alle auf HTTPS umgeleitet):

http://SERVERIP/ajaxterm
http://SERVERIP/ajaxterm/
https://SERVERIP/ajaxterm
https://SERVERIP/ajaxterm/

Zusätzlicher Passwortschutz

Eine zusätzliche Passwortabfrage beim Aufruf des Links ist sicherlich keine schlechte Idee, da dies zusätzliche Sicherheit bietet und nicht durch sofortige Anzeige des Terminalfensters die Neugier gewisser “User” weckt.

Dazu erstellen wir einen Ordner für die Passwortdateien und ein File mit den gewünschten Anmeldeinformationen (USERNAME ersetzen!).

sudo mkdir /etc/apache2/pass
sudo htpasswd -c /etc/apache2/pass/htpasswd.ajaxterm USERNAME

Die Proxyeinstellung in der SSL Konfigurationsdatei …

sudo nano /etc/apache2/sites-enabled/default-ssl

… wird wie folgt angepasst:

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
.
.
.
# Proxy Ajaxterm -------------------------------------

    ProxyRequests Off
    <Proxy *>
        AddDefaultCharset off
        Order deny,allow
        Allow from all

           AuthType Basic
           AuthName "Bitte einloggen!"
           AuthUserFile /etc/apache2/pass/htpasswd.ajaxterm
           Require valid-user

    </Proxy>
    ProxyPass /ajaxterm/ http://localhost:8022/
    ProxyPassReverse /ajaxterm/ http://localhost:8022/

# Ende Proxy Ajaxterm --------------------------------

</VirtualHost>
</IfModule>

Nach einem Neustart von Apache wird bei Aufruf des Links sofort nach Benutzernamen und Passwort verlangt.

sudo service apache2 restart

Screenshots

Ajaxterm Passwortabfrage [4]

Bild 1

Ajaxterm 1 [5]

Bild 2

Ajaxterm 2 [6]

Bild 3

 

Viel Spaß mit Der Konsole und ein großes Danke an die Entwickler!