Kategorien
Infrastruktur seafolly.ch Shared Hosting

Mit Cron-Jobs via cPanel immer aktuell sein

Unter Cron-Jobs versteht man das zeitbasierte Ausführen von Prozessen um wiederkehrende Aufgaben zu automatisieren.

Diese Aufgaben werden dem Betriebssystem gestellt und bestehen normalerweise aus dem Aufruf von Skripten, die wiederum entfernte Server auf Aktualisierungen untersuchen. Das kann beispielsweise nützlich sein, um die gespeicherten RSS Feeds im News Reader Selfoss zu aktualieren oder in einen Content Management System wie Drupal nach Modulaktualisierungen zu automatisch zu suchen.

Wenn Sie einen eigenen Server betreiben, müssen Sie alle Aufgaben in die sogenannte Crontab des Betriebssystems eintragen.

Wenn Sie ein Webhosting mit dem Verwaltungtools cPanel haben (wie bei uns), können Sie Cron-Jobs auch über die Browseroberfläche einrichten.

cPanel - Cron-Jobs
cPanel – Cron-Jobs
Es erscheint eine Seite auf der eine recht deutliche Warnung zu lesen ist

Warnung: Sie müssen sich gut mit Linux-Befehlen auskennen, um Cronjobs effektiv verwenden zu können. Prüfen Sie Ihr Skript mit Ihrem Hostingadministrator, bevor Sie einen Cronjob hinzufügen.

Nehmen Sie den Hinweis durchaus ernst. Cron-Jobs die vergeblich versuchen, Dinge zu tun, oder gar vergessen werden nutzen keinem.

Ziel in meinem Fall ist, alle 30 Minuten die Feeds der Selfoss Installation zu aktualisieren.

Auf der Kommandozeile würde man folgende Befehl in die die crontab schreiben.

*/30 * * * * wget --quiet --delete-after http://seafolly.ch/news/update

Die Sterne stehen für Minuten, Stunden, Tage , Monate, und Wochentage. Der Befehl wget läd eine URL, in meinem Fall

http://seafolly.ch/news/update. Die Parameter –quiet sorgt dafür, das der Befehl keine Ausgabe an der Konsole erzeugt und –delete-after sorgt dafür, das die heruntergeladene Seite nach dem Laden wieder gelöscht wird.

Wenn man die Bedeutung der Elemente des Befehls kennt, sieht die das Formular im cPanel plötzlich logisch und sehr hilfreich aus.

cPanel - Cron-Job Formular
cPanel – Cron-Job Formular
Im ersten Feld werden bereits häufig genutzte Zeit-Kombinationen vorgegeben. Nach dem Hinzufügen des neuen Cron-Job sehen Sie eine Auflistung all Ihrer Cron-Jobs.
Sie können beliebig viele Cron-Jobs anlegen und natürlich auch bearbeiten und wieder löschen.

Sie können sich auch per E-Mail über einen gelaufenen Cron-Job informieren lassen. Im beschriebenen Fall ist das nicht notwendig, aber wenn beispielsweise Ihr Cronjobs immer nur an einem bestimmten Wochentag läuft, kann die Benachrichtigung durchaus hilfreich sein.


tl;dr: Mit cPanel können Sie auch Cron-Jobs komfortabel verwalten

Kategorien
Infrastruktur Server Verschlüsselung

Ein virtuelles privates Netzwerk – VPN

Wenn ein Computer mit dem Internet verbunden ist, ist er ein Teil des „ihn umgebenden Netzes“. Nimmt er eine Verbindung zu einem Virtual Private Network (VPN) auf, so erhält er eine andere IP-Adresse und wird damit auch ein Teil dieses anderen Netzes. Der Vorgang ist vergleichbar mit dem Umstecken des Netzwerkkabels oder der Auswahl eines anderen WiFi Netzes. Meistens werden VPN sinnbildlich als „Verlängerung“ eines Firmen-Netzwerkkabels für Mitarbeiter genutzt, die Zuhause oder beim Kunden auf das Firmennetz zugreifen müssen. Ein Szenario gewinnt allerdings mehr und mehr an Bedeutung.

Bei einem web-basiertes VPN wird kein virtuelles „Verlängerungskabel“ gelegt, sondern ein gesicherter Zugriff auf bestimmte Dienste des VPN (z.B. Firmennetz) realisiert. Diese Dienste müssen als Webanwendung oder Proxy aufgebaut sein.

  • Lokale Zugriffsbeschränkungen. Sie sind mit einem Netz verbunden, in dem Zugriffsbeschränkungen herrschen, beispielsweise in Ländern, Hotels oder Umgebungen, die bestimmte Websites/Services blocken. Wenn im VPN-Netz die gewünschten Services erreichbar sind, können Sie sie nutzen.
  • Schutz Ihrer Privatsphäre: Sie sind in einem öffentlichen Funknetz mit Ihrem Handy, Tablet oder PC und wollen nicht, dass Ihre Netzwerkanfragen vom Betreiber des öffentlichen Netzes mitgelesen werden können. Wenn das VPN-Netz vertrauenswürdig ist, ist Ihre Privatsphäre besser geschützt.

Ihr Computer muss in der Lage, über das Internet eine Verbindung mit einem VPN-Gateway aufzubauen und alle Netzwerkanfragen über dieses Gateway zu leiten. Der Kontakt zu einem VPN-Gateway sollte über verschlüsselte Verbindungen, sogenannte „VPN-Tunnel“, erfolgen, um eine weitgehend abhör- und manipulationssichere Verbindung durch das ungesicherte, eingeschränkte Netz hindurch zu ermöglichen.

Die Verbindung ist allerdings nur „weitgehend“ sicher, weil die Anzahl und Grösse der Datenpakete Rückschlüsse auf die Daten zulassen. Der VPN-Tunnel ist also an manchen Stellen ein bisschen „durchsichtig“. Sie ist auch nicht wirklich „abhörsicher“, da der Traffic ab dem VPN-Server Standort ja vermutlich unverschlüsselt übertragen wird.

Verbindungsarten

Technisch teilen sich die Verbindungen in

  • Site-to-Site: Die Netze der Niederlassungen einer Firma sind untereinander verbunden
  • End-to-Site: Sie verbinden sich mit dem einem VPN-Gateway um die gewünschten Services zu nutzen und/oder Ihre Privatsphäre zu schützen. Der Mitarbeiter beim Kunden verbindet sich mit dem VPN des Firmennetzes.
  • End-to-End: Der Mitarbeiter verbindet sich nicht direkt mit dem VPN des Firmennetzes, sondern zunächst mit einem VPN-Gateway auf einem anderen Server. Dieser Server stellt dann eine ebenfalls getunnelte Verbindung zum gewünschten Netz her.
  • Host-to-Host: Ist der Teil der End-to-End Verbindung, der zwischen zwei Servern stattfindet.

Protokolle

Sicherheit spielt bei der Authentifizierung gegenüber dem VPN und bei der Übertragung der Netzwerkpakete eine Rolle. Wichtig dabei ist die Verschlüsselng der Kommunikationsinhalte und die Authentifizierung aller beteiligten Partner untereinander.

Gängige Protokolle sind beispielsweise IPsec, TLS/SSL und SSH. Diese Protokolle werden auf unterschiedliche Art implementiert.

Eine verbreitete Implementierung ist OpenVPN. In diesem Artikel wollen wir das Open Source Programm auf unserem Root-Server unter Ubuntu 14.04 installieren, mit dem Laptop (MacBook) und Handy (Android) darauf zugreifen und unseren gesamten Netzwerktraffic über diesen Server leiten. Wir müssen dazu den OpenVPN Server auf dem Root-Server installieren und konfigurieren, Zertifikate für Server und Clients erzeugen, sowie die entsprechenden Clients auf Laptop und Telefon installieren und konfigurieren. Als Client nutzen wir auf dem Laptop das Programm Tunnelblick und auf dem Telefon openVPN Connect.

OpenVPN auf Root-Server installieren

Wir installieren folgende Pakete:

sudo apt-get install openvpn
sudo apt-get install easy-rsa

In den Paketen sind Beispielkonfigurationen sowie das Verzeichnis für die Schlüsselerzeugung enthalten. Dieses müssen an einen geeigneten Ort entpackt werden:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gunzip /etc/openvpn/server.conf.gz
sudo cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa2

Schlüssel und Zertifikate generieren

Die Schlüssel und Zertifikate sollten auf Ihrem lokalen Rechner generiert und dann auf den Root-Server übertragen werden. Ich mache es in diesem Blogeintrag auf dem Server.

Die Datei vars muss entsprechend Ihrer Daten angepasst werden

nano /etc/openvpn/easy-rsa2/vars

Passen Sie diese Vorlagen in der Datei auf Ihre Daten an

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=changeme
export KEY_ALTNAMES=changeme

Bei mir sieht es dann so aus:

export KEY_COUNTRY="CH"
export KEY_PROVINCE="ZU"
export KEY_CITY="Wallisellen"
export KEY_ORG="NOVATREND"
export KEY_EMAIL="hagen@novatrend.ch"
export KEY_OU="blogvpn"
export KEY_ALTNAMES="blogvpn"
export KEY_NAME="blogvpn"
export KEY_CN="blogvpn"

Aufgrund eines Fehlers wird das Unterverzeichnis für die Keys nicht erstellt (weiterhin in /etc/openvpn/easy-rsa2/):

mkdir keys

Die neueste openssl-x.x.x.cnf muss in openssl.cnf kopiert werden.

cp openssl-1.0.0.cnf openssl.cnf

Die Datei vars muss den Umgebungsvariablen hinzugefügt werden

source ./vars

Nach dieser erstellen wir den Master-Schlüssel und werden eine Certificate Authority (CA)

./clean-all

./build-ca

Wir sind jetzt eine CA und im Verzeichnis /keys wurden die Dateien ca.crt und ca.key erzeugt.

Als nächstes erzeugen wir die Schlüssel für unseren Server

./build-key-server server [name_des_servers]

Nun müssen die Schlüssel für die Clients erzeugt werden, in meinem Fall einen für den PC und einen für das Telefon. Das kann man mit oder ohne Passwort machen. Mit Passwort muss das Passwort bei jedem Anmelden eingegeben werden.

Ohne Passwort:

./build-key client1
./build-key client2

Mit Passwort:
./build-key-pass client1
./build-key-pass client2

Jetzt müssen die Diffie-Hellman-Parameter generiert werden. Diese sind nötig, um kryptografische Schlüssel sicher über unsichere Kanäle auszuhandeln.

./build-dh

Alle benötigten Dateien liegen nun im Ordner /keys. Die Dateien mit der Endung .key sind die geheimen Schlüssel, die auf dem Rechner liegen sollten, zu dem sie gehören. Die .crt Dateien sind nicht geheim. server.key bleibt auf dem Server, ca.key muss vom Server entfernt werden und kann auf einem USB Stick gespeichert werden. Jeder Client benötigt noch die Datei ca.crt, damit er den Server identifizieren kann.

Hinweis: Es muss darauf geachtet werden, dass die Dateien nie im ASCII-Modus übertragen werden. Dies kann dazu führen, dass die Datei nicht mehr entschlüsselt werden kann und somit ein Verbinden mit dem openVPN-Server nicht möglich ist. Fehlermeldung: „Error: private key password verification failed“. Man umgeht das Problem, indem man alle zu übertragenden Dateien in ein .tar- oder .rar-Archiv packt.

Konfiguration des openvpn Servers

Die Server-Konfigurationsdatei /etc/openvpn/server.conf muss mit den richtigen Namen der Schlüssel versehen werden.

nano /etc/openvpn/server.conf

Diese Zeilen mit den Schlüsselverweisen müssen angepasst werden:

ca ca.crt
cert server1.crt
key server1.key  
dh dh2048.pem     

Diese Zeilen müssen auskommentiert werden

push "redirect-gateway def1 bypass-dhcp"
user nobody
group nogroup

Als letztes muss noch die Datei /etc/rc.local um diese sechs Befehle ergänzt werden

sudo -E nano /etc/rc.local
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Danach muss der Server neugestartet werden

reboot

Jetzt können Sie den openVPN Server starten

/etc/init.d/openvpn restart

Dann können Sie nachsehen, ob der openVPN Server läuft. So sollte es aussehen

root@server1:~# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1 ...

Client Einrichtung auf Apple OS X

Als Erstes müssen Sie die Dateien ca.crt, client1.crt und client1.key auf Ihrem Max. Zippen Sie die Dateien am besten mit dem Befehl

zip client1.zip ca.crt client1.crt client1.key

Sie müssen nun openVPN auf Ihrem Mac installieren. Es gibt ein Softwarepaket, namens Tunnelblick, das genau das sehr komfortabel tut. Laden Sie es von https://code.google.com/p/tunnelblick/ und installieren Sie es.

Welcome to Tunnelblick
Welcome to Tunnelblick
Klicken Sie auf „I DO NOT have configuration files“
Create and Edit a Sample Configuration?
Create and Edit a Sample Configuration?
Erstellen Sie sich eine Konfigurationsdatei. Tunnelblick erstellt einen Ordner mit dem Namen „Sample Tunnelblick VPN Configuration“ ,erzeugt dort die Datei config.ovpn und öffnet sie in einem Editor.

Passen Sie diesen Befehl auf die IP-Adresse Ihres Servers an

remote [IP des Root-Servers] 1194

Dann speichern Sie die Datei und entpacken die client1.zip in diesen Ordner, so dass nun die Dateien

ca.crt
client1.crt
client1.key
config.ovpn

enthalten sind. Benennen den Ordner um. Wichtig bei der Umbenennung ist die Endung .tblk.

Aus „Sample Tunnelblick VPN Configuration“ wird so beispielsweise vpn_serverblogger_ch.tblk.

Diese Datei müssen Sie nun doppelt anklicken und Tunnelblick liest die Konfiguration.

Konfiguration Tunnelblick
Konfiguration Tunnelblick

Ich wähle Only me

Konfiguration installiert
Konfiguration installiert
Der Installer erledigt seine Arbeit und in der oberen rechte Ecke des Bildschirms erscheint das Tunnelblick Symbol
Tunnelblick
Tunnelblick
Atmen Sie mal durch und klicken auf connect. Wenn alles gut geht, werden Sie mit dem openVPN Server Ihres Root-Servers verbunden …
Verbunden
Verbunden
Auf Ihrem Mac müsste nun ebenfalls ein tun Device sein

grunzi:~ hagengraf$ ifconfig
...
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 10.8.0.6 --> 10.8.0.5 netmask 0xffffffff

Besonders deutlich sehen Sie die Änderung, wenn Sie myipaddress.com aufrufen. Wenn Sie mit dem VPN verbunden sind, sollte dort die IP-Adresse Ihres Root-Servers erscheinen.

Client Einrichtung auf dem Android Telefon

Laden Sie sich die OpenVPN Connect App auf Ihr Android Telefon. Mein grösstes Problem war nun „Wie bekomme ich die Zertifikats- und Konfigurationsdateien auf mein Telefon?

Ich beschreibe dann mal meinen Weg: Ich habe ein Nexus 5 Android Telefon mit Cyanogenmod. Meine Idee war nun einfach ein zip Archiv der vier benötigten Daten auf dem Server zusammenzustellen und dann per Browser vom Telefon herunterzuladen.

Als erstes habe ich mir eine config.ovpn angelegt mit folgendem Inhalt:

client
dev tun
proto udp
remote 46.232.178.78 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client2.crt
key client2.key
comp-lzo
verb 3

Dann habe ich die vier Dateien in ein Archiv verpackt

root@server1:/etc/openvpn/easy-rsa/keys# zip client2.zip config.ovpn ca.crt client2.crt client2.key

Auf dem Telefon habe ich mir das Archiv geladen und entpackt

Dateimanager Android
Dateimanager Android
In der openVPN App habe ich dann Import von SD Card ausgewählt (Ich habe keine SD-Card am/im Telefon).
Auswahl der config.ovpn
Auswahl der config.ovpn
Jetzt die config.ovpn auswählen
Das Profil wird erfolgreich importiert
Profile imported
Profile imported
… und ich kann mich verbinden, muss allerdings vorher bestätigen, dass ich der App vertraue … Nunja …
I trust this application
I trust this application
Ich habe beschlossen der App zu vertrauen und kann mich problemlos mit dem Root-Server verbinden.
OpenVPN: Connected
OpenVPN: Connected
Die Verbindung kann ich nun bei Bedarf herstellen
OpenVPNConnect
OpenVPNConnect
Hilfreiche Quellen:

tl;dr: Es ist nicht schwer, ein virtuelles privates Netzwerk auf einem Root-Server, dem PC und dem Mobiltelefon einzurichten und damit ohne Einschränkungen zu arbeiten.

Kategorien
Infrastruktur Server Shared Hosting Webserver

Viele virtuelle Server auf einem Root-Server

Nachdem wir in den letzten Beiträgen etwas über Ubuntu 14.04., den LAMP Stack und die Installation von OwnCloud erfahren haben, ist vermutlich bereits viel vom „Schrecken“ eines Root-Servers verschwunden. Wenn das mit der Installation und Nutzung von OwnCloud so einfach geht, dann könnten Sie ja nun weitere webbasierte Anwendungen, wie beispielsweise eine Website mit einem Content Management System installieren.

An dieser Stelle sollten Sie ein wenig inne halten und überlegen, was Sie noch alles mit Ihrem Rootserver vorhaben. So grundsätzlich gibt es zwei Möglichkeiten:

  1. Nur Sie haben Zugang zum Server: Dann haben Sie vermutlich einen User Account und einen Root Account
  2. Auch andere Kollegen, Kunden oder Freunde haben Zugang zum Server: Dann gibt es vermutlich mehrere User Accounts und einen Root Account

Im ersten Fall können Sie sich Gedanken über virtuelle Webserver machen, im zweiten Fall müssen Sie es vermutlich. Bevor wir uns genauer mit den Benutzerkonten und den Zugriffsrechten beschäftigen, lassen Sie uns zunächst einen virtuellen Webserver einrichten.

Anwendungsfall

Ein Kollege aus der Firma, der für eine Fachabteilung zuständig ist (oder ein Kunde Ihrer Webagentur) möchte eine Website mit einem Content Management System betreiben. Er/Sie ist nicht an der Serverkonfiguration interessiert, sondern möchte mit dem Browser arbeiten und hin und wieder eine Datei hochladen. Es gibt mehrere Kunden wie diesen, die jeweils Ihre eigene „Umgebung“ benötigen.

Lösung

Wir benötigen auf unserem Root-Server einen virtuellen Webserver (vhost), evtl. einen zusätzlichen User-Account, evtl. einen File Transfer Protokoll (FTP)-Server und natürlich ein Content Management System. Der vhost soll exclusiv für diese Fachabteilung zur Verfügung stehen.

Loggen Sie sich als root User auf Ihrem Server ein.

1. Einrichten eines virtuellen Servers

Der Apache Webserver besitzt eine Konfigurationsdatei, von der aus weitere Konfigurationsdateien aufgerufen werden können. Unser virtueller Server ist so eine weitere Konfigurationsdatei. Diese zusätzlichen Konfigurationsdateien werden in bestimmten Ordnern gespeichert und können aktiviert und deaktiviert werden. Bevor sie den virtuellen Server anlegen, sollten Sie den Domainnamen kennen. Das macht die spätere Verwaltung erheblich einfacher, denn sie können die Verzeichnisstruktur mit dem gleichen Namen einrichten.

Nehmen wir an, ihr Kunde hat die Domain meinewebsite.ch.

Legen Sie eine Datei an (ich mache das hier mit dem Editor nano)

sudo nano /etc/apache2/sites-available/meinewebsite.ch.conf

und kopieren Sie die folgenden Anweisungen hinein

<VirtualHost *:80>
      ServerAdmin webmaster@meinewebsite.ch
      ServerName meinewebsite.ch
      ServerAlias www.meinewebsite.ch
      DocumentRoot /var/www/meinewebsite.ch/public_html/    
      ErrorLog /var/www/meinewebsite.ch/logs/error.log
      CustomLog /var/www/meinewebsite.ch/logs/access.log combined
</VirtualHost>
  • VirtualHost *:80 bedeutet, dass ihr Server auf dem Port 80 „lauscht“. Normalerweise müssten sie den URL Ihrer Website in dieser Form in Ihren Browser eingeben: http://meinewebsite.ch:80. Da der Port 80 standardmässig für Webserver genutzt wird, muss er im Browser nicht explizit eingegeben werden. Wenn Sie Ihren Webserver auf einem anderem Port betreiben, bespielweise 8080, dann müssen Sie ihn auch im Browser mit angeben (http://meinewebsite.ch:8080). Der Vorteil unterschiedlicher Ports ist, dass Sie den gleichen Domainname nutzen können.
  • ServerAdmin sollte die erreichbare E-Mail Adresse des „echten“ Admins sein.
  • ServerName der Domainname ohne www und ServerAlias der Domainname mit www
  • DocumentRoot ist das Verzeichnis auf Ihrem Root-Server in dem das gewünschte CMS liegen soll
  • ErrorLog ist der Platz an dem die Fehler aufgezeichnet werden und CustomLog der Platz an den das Zugriffslogs aufbewahrt werden. Das combined am Ende der Zeile ist ein Parameter, der ein bestimmtes Format in den Log-Dateien vorgibt.

Verzeichnisse erstellen

Die Verzeichnisse können mit dem Befehl mkdir (make directory) erstellt werden

sudo mkdir -p /var/www/meinewebsite.ch/public_html
sudo mkdir -p /var/www/meinewebsite.ch/logs

Der Parameter -p sorgt dafür, dass die Verzeichnisse „in einem Rutsch“ angelegt werden. Normalerweise müsste man erst das Verzeichnis meinewebsite.ch anlegen und dann das Verzeichnis public_html. Mit -p werden die fehlenden übergeordneten Verzeichnisse automatisch angelegt. Probieren Sie den obigen Befehl mal ohne -p und Sie werden sofort verstehen, was ich meine :).

Virtuelle Server aktivieren

Nun müssen Sie die vhost-Konfigurationsdatei aktivieren und den Apache2 Webserver neu starten.

sudo a2ensite meinewebsite.ch.conf
sudo service apache2 reload

Hinweis: Der Befehl zum deaktivieren lautet a2dissite meinewebsite.ch.conf. Der Webserver muss dann ebenfalls wieder gestartet werden.

Wo ist den nun die Website?

Auf dem Root-Server liegen die Dateien der Website im Verzeichnis /var/www/meinewebsite.ch/public_html. Momentan kann dort nur der user root zugreifen und momentan ist das Verzeichnis auch leer. Beim Aufruf würde eine Fehlermeldung angezeigt werden.

Um im Browser etwas zu sehen, müssen Sie den gewünschten Domainnamen auf Ihre Root-Server IP-Adresse linken. Je nachdem, welchen Domain-Provider sie nutzen, gibt es unterschiedliche Arten, diesen Link einzurichten.

NOVATREND empfiehlt für die Domainverwaltung Firma Amenic. Dort können Sie über ein Webinterface die Domains einfach auf Ihren Server linken.

Zum Ausprobieren können Sie auch die Domainauflösung auf Ihrem lokalen PC/MAC in der /etc/htdocs Datei einrichten. Hier ein Beispiel auf meinem MacBook (falls jemand die Befehle für ein Windows-System als Kommentar posten könnte, wäre ich sehr dankbar. Ich habe keinen Windows PC zum testen). Vergessen Sie nicht, den Eintrag später wieder zu entfernen ;).

grunzi:~ hagengraf$ sudo nano /etc/hosts
Password:

In der Datei die folgende Zeile eintragen

46.232.178.78   meinewebsite.ch

Danach können Sie mit einem ping nachsehen on die Auflösung funktioniert

grunzi:~ hagengraf$ ping meinewebsite.ch
PING meinewebsite.ch (46.232.178.78): 56 data bytes
64 bytes from 46.232.178.78: icmp_seq=0 ttl=55 time=64.910 ms
64 bytes from 46.232.178.78: icmp_seq=1 ttl=55 time=66.829 ms
64 bytes from 46.232.178.78: icmp_seq=2 ttl=55 time=62.607 ms
^C
--- meinewebsite.ch ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 62.607/64.782/66.829/1.726 ms
grunzi:~ hagengraf$

Der virtuelle Webserver funktioniert nun, aber es fehlt noch das Content Management System. Wenn Sie die Website im Browser anrufen, wird noch nichts dargestellt und in der error.log Datei steht die folgende Fehlermeldung

[Sun Nov 23 19:50:22.587837 2014] [autoindex:error] [pid 13803] [client 83.159.24.111:61370] AH01276: Cannot serve directory /var/www/meinewebsite.ch/public_html/: No matching DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm) found, and server-generated directory in$

Der Webserver erhört Ihren Wunsch, etwas zu sehen, allein, es nichts vorhanden.

Damit Sie etwas sehen, erstellen sich einfach eine kleine Website mit ein paar Zeilen HTML und PHP um die Funktion des Webservers zu testen.

sudo nano /var/www/meinewebsite.ch/public_html/index.php

Fügen Sie den folgenden Text ein und speichern die Datei ab

<html>
<body>
<h1>Oh, es funktioniert! Das ist gut :)</h2>
Heute ist der <?php print(date("d-m-Y")); ?>
</body>
</html>

Wenn Sie nun im Browser die Domain meinewebsite.ch aufrufen sehen Sie das aktuelle Datum.

Testdatei index.php
Testdatei index.php
Im access.log finden Sie nun die folgende Zeile:

83.159.24.111 – – [23/Nov/2014:20:02:17 +0100] „GET / HTTP/1.1“ 200 362 „-“ „Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:33.0) Gecko/20100101 Firefox/33.0“

Ergebnis

So grundsätzlich haben wir einen virtuellen Server angelegt. Auf dieser Basis könnten Sie nun das Content-Management-System installieren, eine Datenbank und einen Datenbank-User anlegen. Das alles könnte mit den Berechtigungen des Apache 2 Users www-data laufen. Je nach Anforderung ist das unter Umständen gar nicht mal die schlechteste Lösung. Der Anwender hätte dann nur per Browser Zugriff auf das Content-Management-System.

Alternativ dazu könnten wir auch einen zusätzlichen User Account für unseren Kunden anlegen und einen FTP-Server einrichten. Für heute wollen wir es allerdings beim virtuellen Server belassen.

ACHTUNG

Sie können mit dieser Methode dutzende oder auch tausende von vhosts auf Ihrem Root-Server anlegen. Denken Sie daran, dass die Ressourcen Ihres Root-Servers durch einen endlichen Festplattenplatz und einen endlichen Hauptspeicherinhalt beschränkt sind.

Wieviele vhosts problemlos möglich sind, hängt von zahlreichen Parametern ab und kann nicht pauschal beantwortet werden. Probieren Sie es aus.


tl:dr Mit einem Root-Server können Sie zahlreiche Websites hosten

Kategorien
Betriebssysteme Infrastruktur Server Webserver

LAMP einrichten

LAMP ist eine Abkürzung für Programme, die Sie benötigen um dynamische Websites von Ihrem Root-Server aus anzubieten. Die Buchstaben stehen für das Betriebssystem Linux, den Webserver Apache, die Datenbank MySQL und die Programmiersprache PHP. Man nennt diese Kombination von Programmen auch Stapel (engl. Stack), weil ein Programm auf dem anderen aufbaut, bzw. die Programme eng zusammenarbeiten. Der Begriff wurde 1998 durch einen Artikel der Zeitschrift c’t geprägt. 16 Jahre später ist der LAMP-Stack immer noch sehr populär und der de facto Standard für das Anbieten einer Website. In diesem Beitrag wollen wir den LAMP Stack auf einem Root-Server mit Linux Ubuntu 14.04 einrichten. Das L für Linux ist schon erledigt, der Apache Webserver, die MySQL Datenbank und die Programmiersprache PHP fehlen noch. Nach der Installation können Sie beliebig viele Websites auf Ihrem Root-Server hosten.

Installation von Apache, MySQL und PHP

Vor 16 Jahren war die Installation noch eine kleine Herausforderung. Heute ist Sie mit einem Befehl auf der Konsole erledigt. Installiert werden müssen die folgenden Programmepakete. Das geht in einem Befehl

sudo apt-get install apache2 php5 
     php5-mysql mysql-client mysql-server

Nach drücken der Enter Taste erscheinen viele Installationsmeldungen auf dem Bildschirm. Die Datenbank MySQL benötigt ein Root-Passwort, das im Laufe der Installation abgefragt wird.

Root Passwort für MySQL Server setzen
Root Passwort für MySQL Server setzen
Wenn Sie sich diese Meldungen näher anschauen, sehen Sie, dass viel installiert wird und Sie erhalten einige Hinweise, Warnungen und teilweise auch Fehlermeldungen: Beispiel für Hinweise:

Setting up apache2 (2.4.7-1ubuntu4.1) ...
Enabling module mpm_event.
Enabling module authz_core.
Enabling module authz_host.
Enabling module authn_core.
Enabling module auth_basic.

Der Webserver wird konfiguriert und etwa 20 Module des Webservers werden aktiviert. Sie können später weitere Module bei Bedarf hinzufügen. Eine Liste aller Module und deren Funktion finden Sie im Module Index auf httpd.apache.org/docs/2.4/mod/. Beispiel Warnung: Auf meinem Root-Server gab es folgende Warnung:

140827 15:30:03 [Warning] Using unique option prefix key_buffer 
            instead of key_buffer_size is deprecated and will 
            be removed in a future release. 
            Please use the full name instead.

Ubuntu nutzt MySQL in der Version 5.5. Die Installationsoptionen key_buffer ist „deprecated“. Deprecated heisst, dass es momentan noch funktioniert, aber in zukünftigen MySQL Versionen nicht mehr funktionieren wird. Die Warnung enthält auch die Lösung des Problems. In der Zukunft heisst der Befehl key_buffer_size. Sie können alles belassen, wie es ist, da es ja funktioniert. Sie können auch die MySQL Installation anpassen (Lösung). Ich würde nichts an der Konfiguration ändern, mir die Sache aber irgendwie merken, damit ich mich später dran erinnere. Beispiel Fehlermeldungen: Diese Fehlermeldung kam ein paarmal:

 locale: Cannot set LC_CTYPE to default locale: No such file or directory
 locale: Cannot set LC_ALL to default locale: No such file or directory

Locale enthält die Einstellungen für bestimmte Gebiete, beispielsweise die Sprache, das Land, die Zahlen-, Währungs-, Datums- und Zeitformate. In Linux werden diese Informaton in Variablen abgelegt und können von User zu User und von Programm zu Programm unterschiedlich sein. Mit dem Befehl locale sehen Sie Ihre aktuellen Einstellungen (und die beiden Fehlermeldungen).

novatrend@server1:~$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=UTF-8
...
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

LC_ALL und LANGUAGE sind tatsächlich nicht gesetzt. Lösen lässt sich das Problem, indem Sie die Werte der Variablen mit den folgenden Befehlen setzen.

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8
dpkg-reconfigure locales

Die Fehlermeldung verschwindet beim nächsten Aufruf von locale.

Was wurde nun installiert?

Auf Ihrem Root-Server System gibt es nun zwei zusätzliche Server. Einen Webserver, der Webseiten ausliefert und einen Datenbankserver der über die Programmiersprache PHP angeforderte Daten in diese Webseiten integriert. Mit den Befehlen

novatrend@server1:~$ service apache2 status
 * apache2 is running
novatrend@server1:~$ service mysql status
mysql start/running, process 9455

können Sie nachsehen, ob die Server laufen. Die selbsterklärenden Parameter start, stop, restart, reload, force-reload starten entsprechende Aktionen. Beide Server sind nun unter einer bestimmten Portnummer erreichbar. Der Apache-Server belegt Port 80, der MySQL-Server Port 3306. Beim Apache können Sie das leicht nachprüfen, wenn Sie in einem Browser diese URL

http://[Root-Server-IP-Adresse]:80/

eingeben. Sie erhalten eine freundliche Begrüssungsseite Ihres Webserver (It works!) mit einem Überblick über die Konfiguration. Lesen Sie diese Seite!

Ubuntu Apache 2 Default Page
Ubuntu Apache 2 Default Page
Da ausser Ihnen nun jeder, der mit dem Internet verbunden ist, diese Seite lesen kann (wenn er denn Ihre IP-Adresse) kennt, sollten Sie aus Sicherheitsgründen, bevor Sie weitermachen, diese Begrüssungsmeldung von Ihrem Server entfernen oder umbenennen (Entfernen ist sicherer 🙂 ). Um den Inhalt zu erinnern, können Sie die Seite ausdrucken oder lokal speichern.

novatrend@server1:$ sudo rm /var/www/html/index.htm

Nachdem Sie die Seite entfernt haben, wird ein leeres Verzeichnis angezeigt, sowie Informationen über Ihren Root-Server angezeigt.

Leeres Verzeichnis mit Serverinformationen
Leeres Verzeichnis mit Serverinformationen
Alle Dateien, die in diesem Verzeichnis liegen, können von jedem gelesen werden. Wenn Sie beispielsweise eine PDF- oder Zip-Datei in dieses Verzeichnis legen, kann jeder sie herunterladen. Wenn sich im /var/www/html/ Verzeichnis eine Datei index.html befindet, wird das Verzeichnis nicht angezeigt, sondern die index.html Datei an Ihren Browser geschickt. Mit der Begrüssungsseite funktionierte das so, bevor wir sie gelöscht haben. Um sicher zu gehen, dass niemals der Inhalt eines Verzeichnisses angezeigt wird, können Sie dieses Verhalten auch ausschalten. Die sicherste Variante ist, wenn Sie in der Datei /etc/apache2/apache2.conf den folgenden Befehl einfügen und danach den Server neu starten Editoraufruf

sudo vi /etc/apache2/apache2.conf

mit i Einfügemodus einschalten, runterscrollen bis Zeile 165 (siehe Screenshot) und die Zeile mit dem Inhalt

Options Indexes FollowSymLinks

ersetzen durch

Options -Indexes +FollowSymLinks
Konfiguration Apache
Konfiguration Apache
Mittels Escape Taste den Einfügemodus und VI mit :wq und Enter beenden und den Webserver neu starten

sudo service apache2 reload

Die Verzeichnisanzeige ist nun verschwunden. Was man aber immer noch sieht ist folgendes:

Apache/2.4.7 (Ubuntu) Server at 46.232.178.78 Port 80

Diese Information steht in der Datei /etc/apache2/conf-enabled/security. Rufen Sie die Datei auf und ändern Sie die Werte für ServerTokens und ServerSignature

sudo vi /etc/apache2/conf-enabled/security.conf

...
ServerTokens Prod
...
...
ServerSignature Off
...

Sie können auch ohne Browser mit dem Befehl curl schnell nachsehen, was der Webserver an Informationen ausliefert. In meinem Fall sieht es so aus

novatrend@server1:/var/www/html$ sudo curl -I http://46.232.178.78/
HTTP/1.1 403 Forbidden
Date: Wed, 27 Aug 2014 17:02:12 GMT
Server: Apache
Content-Type: text/html; charset=iso-8859-1

Jetzt gibt es weder Verzeichnisse noch Versions- und Distributionshinweise.

PHP

Sie können auf einfache Art feststellen, ob PHP angesprochen wird. Legen Sie sich eine Datei info.php im öffentlichen Dokumenten Verzeichnis an, und rufen die Funktion phpinfo() auf. Anlegen der Datei:

novatrend@server1:$ sudo touch /var/www/html/info.php
novatrend@server1:$ sudo vi /var/www/html/info.php

Fügen Sie die folgenden Befehle ein und speichern Sie die Datei

<?php
phpinfo();
?>

Rufen Sie im Browser

http://46.232.178.78/info.php

auf . Sie erhalten eine lange Liste mit Infomationen über Ihren LAMP Stack

PHP Info
PHP Info

MySQL

Ihr MySQL Server läuft und Sie können nun daran gehen, eine Anwendung zu installieren, die auf PHP und MySQL aufsetzt, wie beispielsweise die Content Management Systeme WordPress, Joomla und Drupal. oder die Dropbox Alternative ownCloud.


tl:dr Sie können mit einem Befehl eine Umgebung für eine Website wie beispielweise ein Content Management System auf Ihrem Root-Server installieren. Mit ein paar mehr Handgriffen können Sie auch noch die Sicherheit erhöhen.