Einen Webserver unter Debian zu installieren ist nicht besonders schwer, hier eine kurze Anleitung.
Beachten Sie jedoch dringend noch folgende Ratschläge:
- Stellen Sie ihr System so ein, das es sich automatisch aktuell hält oder halten Sie ihr System aktuell.
- Stellen Sie ihren Server nicht direkt ins Internet, nutzen Sie eine Firewall davor und veröffentlichen Sie nur die entsprechend benötigten Dienste.
- Wählen Sie komplexe Kennwörter.
- Erlauben sie keinen direkten Root Zugriff.
- Setzen Sie Richtlinien zum härten ihres Webservers um.
Los geht:
Downloaden sie die aktuelle Version (derzeit 9.3) Netzwerkinstall herunter und kopieren Sie sie in einen Datenspeicher auf dem Host.
Erstellen Sie eine VM (z.B. Version 6.5, 4 Porzessoren, 8 GB Ram, 60 GB Thin, Netzwerkkarte, CD Laufwerk mit dem entsprechenden ISO).
Starten Sie die Installation (z.B. alles abgewählt bis auf SSH Server und Systemtools).
Nach der Installation loggen Sie sich ein mit dem erstellten User und holen sich die IP mit „ip addr show“.
Verbinden Sie sich mit SSH (unter OSX oder *nix mit Terminal oder unter Windows mit z.B. Putty) und wecheln sie zu root mit „su“.
Sollten sie einen virtuellen Server verwenden (ESX oder ESXI), so sollten Sie als erstes die Open VM Tools installieren und den Server neu starten:
apt-get install open-vm-Tools init 6
Nun werden wir dem Server eine feste IP zurordnen:
cd /etc/network/interfaces
Editieren Sie den folgenden Eintrag (z.B. mit VI oder Nano):
iface ens192 inet dhcp (Achtung, statt ens192 kann hier auch was anderes stehen wie z.B. eth0)
Ändern sie ihn wie folgt (verwenden Sie bitte natürlich ihre eigenen Daten):
iface ens192 inet static address 192.168.123.10/24 gateway 192.168.123.254 dns-nameservers 192.168.123.254 dns-search domain.tld
Starten Sie die Installation vom Webserverteil wie folgt:
apt-get update apt-get upgrade apt install apache2 apache2-utils
Wenn Sie ihre Seite mit SSL sichern wollen (ich verwende mittlerweile oft ssls.com, dort bekommt man ein einfaches Zertifikat für ca. 15$ für 3 Jahre und dies erhält man in wenigen Minuten), gehen Sie wie folgt im Terminal vor:
cd /etc/ssl/private openssl genrsa -out servername.domain.tld.key 2048 openssl req -new -key servername.domain.tld.key -out servername.domain.tld.csr -sha256
Dieses CSR verwenden Sie bitte um das Zertifikat zu beantragen. Ich hole es mir einfach in dem ich folgendes im Terminal eingebe:
cat servername.domain.tld.csr
Dieses dann rauskopieren zum beantragen.
Sollten Sie das Zertifikat haben, benötigen Sie das entsprechend auf dem Server. Dazu muss der inhalt vom servername.domain.tld.crt und servername.domain.tld.ca-bundle auf dem Server in eine Datei servername.domain.tld.crt kopiert werden – dies mache ich mit dem VI:
vi servername.domain.tld.crt
i drücken, den Inhalt aus servername.domain.tld.crt reinkopieren und in der nächsten Zeile dann den Inhalt aus servername.domain.tld.ca-bundle und das ganze dann mit „ESC“, „:wq“ speichern.
Nun die Rechte anpassen:
chown root:ssl-cert servername.domain.tld.*
Dann noch die Zertifikate in /etc/apache2/sites-available/default-site.conf ändern auf die neuen Dateien:
SSLCertificateFile /etc/ssl/private/servername.domain.tld.crt
SSLCertificateKeyFile /etc/ssl/private/servername.domain.tld.key
Nun die alte Site entladen, die neue laden und danach die Konfiguration neuladen – sollte Apache danach immer noch keine SSL Seite zeigen, noch mal den Dienst neu starten:
a2dissite default-ssl.conf a2ensite defaultssl.conf systemctl reload apache2 systemctl restart apache2
Habt ihr nun den Namen des Servers schon im DNS oder mindestens in der Hosts eingerichtet, so könnt ihr schon den Server aufrufen. Vergesst auch bitte nicht in der Firewall den Port forzuwarden (Port 80 und 443).
Möchte man später mehrere virtuelle Webserver auf dem Server installieren empfiehlt es sich schon jetzt die Verzeichnisse entsprechend anzupassen:
cd /var/www mkdir ordnername chown -R www-data:www-data ordnername chmod -R 755 ordnername
Dann noch die Ordnerpfade und eigene Adminemailadresse anpassen in der /etc/apache2/sites-available/000-default-site.conf und default-ssl.conf und wieder die Sites neulade sowie den Apache:
a2dissite 000-default.conf a2dissite default-ssl.conf a2ensite 000-default.conf a2ensite default-ssl.conf systemctl reload apache2
Nun kommt die PHP Installation:
apt install php7.0 libapache2-mod-php7.0 php7.0-mysql php-common php7.0-cli php7.0-common php7.0-json php7.0-opcache php7.0-readline a2enmod php7.0 a2enmod rewrite systemctl restart apache2
Kontrolliert nun ob PHP funktioniert – erstellt z.B. in dem Ordner oben eine Datei index.php mit dem folgenden Inhalt:
<?php phpinfo(); ?>
Sollten Sie nun auch ihre Seite nur noch über HTTPS aufrufen wollen, dann können sie in dem Verzeichnis eine Datei .htaccess erstellen mit folgenden Inhalt:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https:
//
%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule
>
Anschließend noch mal die Rechte anpassen:
chown -R www-data:www-data ordnername chmod -R 755 ordnername
Weiterhin muss noch /etc/apache2/sites-available/000-default.conf erweitert werden (unterhalb von Documentroot) mit dem folgendem Eintrag:
<Directory /var/www/servicecenter> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>
Weiterhin muss noch /etc/apache2/sites-available/000-default.conf erweitert werden (unterhalb von Documentroot) mit dem folgendem Eintrag:
<Directory /var/www/servicecenter> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch>
Anschließend müssen natürlich wieder die Konfigurationen neu geladen werden:
a2dissite 000-default.conf a2dissite default-ssl.conf a2ensite 000-default.conf a2ensite default-ssl.conf systemctl reload apache2
Rufen Sie die Seite auf und kontrollieren Sie bitte ob die Seite erreichbar ist und auch PHP funktioniert. Löschen Sie bitte jedoch nach der erfolgreichen Installation wieder die Datei index.php oder ändern sie den Inhalt , da sie viele Informationen über ihr System preisgibt.
Nun installieren wir den SQL Server, statt MySQL wird jedoch mittlerweile MariaDB verwendet, welches kompatibel ist jedoch Open Source und somit frei zur Nutzung. Mit dem weiteren Befehl machen wir MariDB zum Standard und anschließend kontrollieren wir ob der Server gestartet ist. Starten Sie dazu wieder im Terminal wie folgt:
apt install mariadb-server mariadb-client apt install mysql-server mysql-client systemctl status mariadb
Nachdem der Server läuft, kommen die Nacharbeiten (Autostart einrichten und Security härten):
systemctl enable mariadb mysql_secure_installation
Wollte ihr mehrere Seiten auf dem Server hosten, erstellt bitte pro Seite einen Ordner:
cd /var/www mkdir ordnername chown -R www-data:www-data ordnername chmod -R 755 ordnername
Passt wieder in /etc/apache2/sites-available die Dateien wie folgt an:
Default-ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/ssl/private/seite1.crt SSLCertificateKeyFile /etc/ssl/private/seite1.key Servername "www.seite1.de" ServerAlias "seite1.de" DocumentRoot "/var/www/seite1" ServerAdmin admin@seite1.de ErrorLog ${APACHE_LOG_DIR}/ssl-error.log CustomLog ${APACHE_LOG_DIR}/ssl-access.log combined <Directory /var/www/seite1> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/ssl/private/seite2.crt SSLCertificateKeyFile /etc/ssl/private/seite2.key Servername "www.seite2.de" ServerAlias "seite2.de" DocumentRoot "/var/www/seite2" ServerAdmin admin@seite2.de ErrorLog ${APACHE_LOG_DIR}/seite2-ssl-error.log CustomLog ${APACHE_LOG_DIR}/seite2-ssl-access.log combined <Directory /var/www/seite2> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
000-default.conf
<VirtualHost *:80> ServerName www.seite1.de ServerAlias seite1.de ServerAdmin admin@seite1.de DocumentRoot /var/www/seite1/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/seite1> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost> <VirtualHost *:80> ServerName www.seite2.de ServerAlias seite2.de ServerAdmin admin@seite2.de DocumentRoot /var/www/seite2/ <Directory /var/www/seite2> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/seite2-error.log LogLevel warn CustomLog /var/log/apache2/seite2-access.log combined ServerSignature On </VirtualHost>
Danach natürlich wie immer alles entladen und neuladen:
a2dissite 000-default.conf a2dissite default-ssl.conf a2ensite 000-default.conf a2ensite default-ssl.conf systemctl reload apache2
Widmen wir uns nun dem Teil der Datenübertragung – dies realisieren wir mit ProFTP. Da der Server in der DMZ steht und nur meine eigenen Seiten gehostet werden sowie nur über VPN Zugegriffen wird werde ich das Documentroot auf /var/www/ stellen, da ich dort alle Seiten anlege und kein TLS verwenden. Der Server übers Internet nur über HTTP und HTTPS veröffentlicht. SSH, FTP und SQL wird nur über verschlüsseltes VPN genutzt.
apt-get install proftp
Datei /etc/proftpd/conf.d/custom.conf erstellen (bei benutzername bitte den Namen des Zugriffkontos eintragen, nicht root):
<Global>
RequireValidShell off
</Global>
# If desired turn off IPv6
UseIPv6 off
# Default directory is ftpusers home
DefaultRoot /var/www benutzername
# Limit login to the ftpuser group
<Limit LOGIN>
DenyGroup !ftpuser
</Limit>
Gruppe ftpuser und www-data hinzufügen, Benutzer hinzufügen und Dienst neustarten:
addgroup ftpuser usermod -a -G ftpuser benutzername usermod -a -G www-data benutzername systemctl restart proftpd
Solltet ihr Dateien nicht löschen oder ändern können, so kontrolliert bitte die Rechte und passt diese gegebenenfalls an mit:
chown -R benutzername /var/www/ordnername
chmod -R 755 /etc/www/ordnername
Somit ist der Server bereitgestellt und einsatzbereit.
Erweiterung: Python installation
Kontrollieren Sie ob Python installiert ist und in welcher Version:
python3 --version
Installieren Sie noch PIP und binden Sie Python in Apache ein:
apt-get install python3-pip pip3 install mod_wsgi apt-get install libapache2-mod-python
Nun muss noch der Publisher Handler eingerichtet werden – diese werden wieder in den Sitekonfigurationen erstellt – erweitert dazu die 000-default.conf und default-ssl.conf unterhalb des bestehenden der:
<Directory /var/www/seite1> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all AddHandler mod_python .py PythonHandler mod_python.publisher PythonDebug On </Directory>
Anschließend wieder die Sites und Apache neu laden:
a2dissite 000-default.conf a2dissite default-ssl.conf a2ensite 000-default.conf a2ensite default-ssl.conf systemctl reload apache2
Weitere Schritte folgen noch …