{"id":6088,"date":"2019-09-30T08:20:00","date_gmt":"2019-09-30T06:20:00","guid":{"rendered":"https:\/\/www.commander1024.de\/wordpress\/?p=6088"},"modified":"2020-04-17T09:09:53","modified_gmt":"2020-04-17T07:09:53","slug":"secure-webhosting-1x1","status":"publish","type":"post","link":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/","title":{"rendered":"(Secure) Webhosting 1\u00d71"},"content":{"rendered":"\n<p class=\"has-drop-cap wp-block-paragraph\">Dieser Artikel zeigt wie man auf Basis von einem Debian Linux einen Shared-Webhosting Server aufsetzt und konfiguriert. Der Fokus wird hierbei auf der Sicherheit liegen. So sollen nur moderne Verschl\u00fcsselungstechnologien (wie TLS1.3 \/ TLS 1.2 mit PFS und modernen Crypto-ciphern) zum Einsatz kommen. Die einzelnen Webpr\u00e4senzen werden voneinander isoliert laufen. Die Zertifikate werden kostenlos und automatisch von <a rel=\"noreferrer noopener\" aria-label=\"Let's Encrypt (\u00f6ffnet in neuem Tab)\" href=\"https:\/\/letsencrypt.org\" target=\"_blank\">Let&#8217;s Encrypt<\/a> ausgestellt. <\/p> \n\n\n\n\n\n<h2 class=\"wp-block-heading\">Installation des Grundsystems<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vermutlich wird der Server \/ die VM \/ der Raspberry Pi bereits existieren, wenn Du Dir Gedanken zu Webhosting machst. Daher werde ich auch keine Step-by-Step Anleitung f\u00fcr eine Debian (10\/Buster) Installation geben. Dieser Guide funktioniert nat\u00fcrlich auch mit jedem anderen Linux \/ BSD Derivat. Unterschiede gibt es m\u00f6glicherweise bei der Ordnerstruktur der von der Paketverwaltung installierten Konfigurationsdateien und den genauen Versionen der Pakete.  <\/p> \n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/debian_soft_sel.png\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/debian_soft_sel.png\" alt=\"Debian Softwareauswahl mit ausgew\u00e4hltem &quot;SSH Server&quot; und &quot;Standard-Systemwerkzeuge&quot;\" class=\"wp-image-6100\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/debian_soft_sel.png 800w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/debian_soft_sel-300x225.png 300w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/debian_soft_sel-768x576.png 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/debian_soft_sel-150x113.png 150w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/debian_soft_sel-600x450.png 600w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bei der Installation von Debian Buster brauchen wir uns noch nicht darum zu k\u00fcmmern, welche Softwarepakete wir sp\u00e4ter ben\u00f6tigen. Eine Grundinstallation mit den Software-Sammlungen &#8222;SSH Server&#8220; und &#8222;Standard-Systemwerkzeuge&#8220; reicht vollkommen als Grundlage. <\/p> \n\n\n\n<h3 class=\"wp-block-heading\">Ben\u00f6tigte Komponenten<\/h3>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">Ich muss zugeben, ich werde nicht nur langsam alt, sondern bin auch etwas oldschool in meiner Softwarepr\u00e4ferenz. So verwende ich tats\u00e4chlich bis zum heutigen Tage gerne den Apache Webserver. Und wegen seiner \u00c4hnlichkeit in der Konfiguration auch den ProFTPd f\u00fcr den Dateizugriff via FTPS. Beides sind vergleichsweise fette und langsame Softwareprodukte, daf\u00fcr aber sehr m\u00e4chtig zu konfigurieren. Da die Hauptworkload allerdings auf den Code-Interpreter und die Datenbank entfallen werden, kann man die Webservergeschwindigkeit schon fast vernachl\u00e4ssigen. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\">Nat\u00fcrlich kann man auch einen nginx oder lighttpd oder auch ganz was Anderes verwenden, dann wird sich die Konfiguration in Nuancen unterscheiden. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\">PHP, wie viele es sicherlich benutzen wollen, hole ich von <a rel=\"noreferrer noopener\" aria-label=\"sury.org (\u00f6ffnet in neuem Tab)\" href=\"https:\/\/deb.sury.org\/\" target=\"_blank\">sury.org<\/a>, da diese Pakete deutlich aktueller sind als im Debian Repository. Als process manager verwende ich php-fpm. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\">Als Datenbank verwende ich MariaDB. Postgres geht nat\u00fcrlich auch. Man k\u00f6nnte sie sogar parallel betreiben, allerdings d\u00fcrfte dies bei gro\u00dfen Datenbanken etwas speicherhungrig werden, wenn die Ressourcen knapp sind. <\/p> \n\n\n\n<h2 class=\"wp-block-heading\">Webhosting-Software installieren<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Zuerst einmal werden alle sp\u00e4ter ben\u00f6tigten Paketquellen und Pakete installiert: <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">root@debian:~<span class=\"hljs-comment\"># apt -y install apt-transport-https lsb-release ca-certificates<\/span>\nroot@debian:~<span class=\"hljs-comment\"># wget -O \/etc\/apt\/trusted.gpg.d\/php.gpg https:\/\/packages.sury.org\/php\/apt.gpg<\/span>\nroot@debian:~<span class=\"hljs-comment\"># sh -c 'echo \"deb https:\/\/packages.sury.org\/php\/ $(lsb_release -sc) main\" &gt; \/etc\/apt\/sources.list.d\/php.list'<\/span>\nroot@debian:~<span class=\"hljs-comment\"># apt update<\/span>\nroot@debian:~<span class=\"hljs-comment\"># apt upgrade<\/span>\nroot@debian:~<span class=\"hljs-comment\"># apt install apache2 apache2-utils acmetool mariadb-server mariadb-client php7.3-bcmath php7.3-cgi php7.3-cli php7.3-common php7.3-curl php7.3-fpm php7.3-gd php7.3-imap php7.3-intl php7.3-json php7.3-mbstring php7.3-mysql php7.3-opcache php7.3-pspell php7.3-readline php7.3-xml php7.3-zip ccze proftpd<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Software konfigurieren<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Apache2 konfigurieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fr\u00fcher musste man f\u00fcr das (nach wie vor nicht threadsichere) PHP den mpm-prefork verwenden. Dieses Vorgehen ist leider sehr ressourcenhungrig. Insbesondere der RAM wird hierbei exzessiv genutzt. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\">Verwendete man dann jedoch PHP im fastcgi \/ FPM Modus, lautete die Empfehlung lange Zeit den mpm-worker zu verwenden. Neu seit Apache 2.4 ist der mpm-event handler. Dieser macht im Prinzip das gleiche wie der worker, soll aber noch h\u00f6here Arbeitslasten bew\u00e4ltigen k\u00f6nnen und wird somit auch empfohlen. <\/p> \n\n\n\n<h4 class=\"wp-block-heading\">Apache Webserver Module aktivieren<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Ferner aktivieren wir noch einige zus\u00e4tzliche Module, die wir sp\u00e4ter noch ben\u00f6tigen. <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">root@debian:~<span class=\"hljs-comment\"># a2enmod rewrite mpm_event http2 proxy_fcgi proxy ssl headers<\/span>\nEnabling module rewrite.\nConsidering conflict mpm_worker <span class=\"hljs-keyword\">for<\/span> mpm_event:\nConsidering conflict mpm_prefork <span class=\"hljs-keyword\">for<\/span> mpm_event:\nModule mpm_event already enabled\nEnabling module http2.\nConsidering dependency proxy <span class=\"hljs-keyword\">for<\/span> proxy_fcgi:\nEnabling module proxy.\nEnabling module proxy_fcgi.\nModule proxy already enabled\nConsidering dependency setenvif <span class=\"hljs-keyword\">for<\/span> ssl:\nModule setenvif already enabled\nConsidering dependency mime <span class=\"hljs-keyword\">for<\/span> ssl:\nModule mime already enabled\nConsidering dependency socache_shmcb <span class=\"hljs-keyword\">for<\/span> ssl:\nEnabling module socache_shmcb.\nEnabling module ssl.\nSee \/usr\/share\/doc\/apache2\/README.Debian.gz on how to configure SSL <span class=\"hljs-keyword\">and<\/span> create <span class=\"hljs-keyword\">self<\/span>-signed certificates.\nEnabling module headers.\nTo activate the <span class=\"hljs-keyword\">new<\/span> configuration, you need to run:\n  systemctl restart apache2\nroot@debian:~<span class=\"hljs-comment\"># systemctl restart apache2<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 32%\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"373\" height=\"450\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-08-45-18-373x450.png\" alt=\"Debian Apache Default Website\" class=\"wp-image-6117\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-08-45-18-373x450.png 373w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-08-45-18-498x600.png 498w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-08-45-18-249x300.png 249w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-08-45-18-768x926.png 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-08-45-18-124x150.png 124w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-08-45-18-187x225.png 187w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-08-45-18-600x723.png 600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-08-45-18.png 808w\" sizes=\"auto, (max-width: 373px) 100vw, 373px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"has-regular-font-size wp-block-paragraph\">Jetzt lauscht der Webserver bereits auf allen (IPv4\/IPv6) IPs und liefert die Debian\/Apache2 landing page aus. Allerdings brauchen wir diese nicht, und deaktivieren sie daher.  <\/p> \n<\/div><\/div>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">root@debian:~<span class=\"hljs-comment\"># a2dissite 000-default<\/span>\nroot@debian:~<span class=\"hljs-comment\"># a2dissite default-ssl<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">NameVirtualHost konfigurieren<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Au\u00dferdem soll er nur auf den vorgesehenen IPs Webseiten ausliefern. Daher erstellen wir die Datei <code>\/etc\/apache2\/conf.d\/namevirtualhost.conf<\/code> mit folgendem Inhalt: <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">NameVirtualHost<\/span> 10<span class=\"hljs-selector-class\">.222<\/span><span class=\"hljs-selector-class\">.3<\/span><span class=\"hljs-selector-class\">.52<\/span><span class=\"hljs-selector-pseudo\">:80<\/span>\n<span class=\"hljs-selector-tag\">NameVirtualHost<\/span> 10<span class=\"hljs-selector-class\">.222<\/span><span class=\"hljs-selector-class\">.3<\/span><span class=\"hljs-selector-class\">.52<\/span><span class=\"hljs-selector-pseudo\">:443<\/span>\n<span class=\"hljs-selector-tag\">NameVirtualHost<\/span> 2<span class=\"hljs-selector-tag\">a02<\/span><span class=\"hljs-selector-pseudo\">:f08<\/span><span class=\"hljs-selector-pseudo\">:e<\/span><span class=\"hljs-selector-pseudo\">:1344<\/span><span class=\"hljs-selector-pseudo\">:a00<\/span><span class=\"hljs-selector-pseudo\">:27ff<\/span><span class=\"hljs-selector-pseudo\">:fe05<\/span><span class=\"hljs-selector-pseudo\">:6023<\/span><span class=\"hljs-selector-pseudo\">:80<\/span>\n<span class=\"hljs-selector-tag\">NameVirtualHost<\/span> 2<span class=\"hljs-selector-tag\">a02<\/span><span class=\"hljs-selector-pseudo\">:f08<\/span><span class=\"hljs-selector-pseudo\">:e<\/span><span class=\"hljs-selector-pseudo\">:1344<\/span><span class=\"hljs-selector-pseudo\">:a00<\/span><span class=\"hljs-selector-pseudo\">:27ff<\/span><span class=\"hljs-selector-pseudo\">:fe05<\/span><span class=\"hljs-selector-pseudo\">:6023<\/span><span class=\"hljs-selector-pseudo\">:443<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">TLS h\u00e4rten<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Hierzu die Datei <code>\/etc\/apache2\/mods-available\/ssl.conf<\/code> bearbeiten: <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">&lt;IfModule mod_ssl.c&gt;\n\t<span class=\"hljs-comment\"># Pseudo Random Number Generator (PRNG):<\/span>\n\t<span class=\"hljs-comment\"># Configure one or more sources to seed the PRNG of the SSL library.<\/span>\n\t<span class=\"hljs-comment\"># The seed data should be of good random quality.<\/span>\n\t<span class=\"hljs-comment\"># WARNING! On some platforms \/dev\/random blocks if not enough entropy<\/span>\n\t<span class=\"hljs-comment\"># is available. This means you then cannot use the \/dev\/random device<\/span>\n\t<span class=\"hljs-comment\"># because it would lead to very long connection times (as long as<\/span>\n\t<span class=\"hljs-comment\"># it requires to make more entropy available). But usually those<\/span>\n\t<span class=\"hljs-comment\"># platforms additionally provide a \/dev\/urandom device which doesn't<\/span>\n\t<span class=\"hljs-comment\"># block. So, if available, use this one instead. Read the mod_ssl User<\/span>\n\t<span class=\"hljs-comment\"># Manual for more details.<\/span>\n\t<span class=\"hljs-comment\">#<\/span>\n\tSSLRandomSeed startup builtin\n\tSSLRandomSeed startup file:\/dev\/urandom <span class=\"hljs-number\">512<\/span>\n\tSSLRandomSeed connect builtin\n\tSSLRandomSeed connect file:\/dev\/urandom <span class=\"hljs-number\">512<\/span>\n\t<span class=\"hljs-comment\">##<\/span>\n\t<span class=\"hljs-comment\">##  SSL Global Context<\/span>\n\t<span class=\"hljs-comment\">##<\/span>\n\t<span class=\"hljs-comment\">##  All SSL configuration in this context applies both to<\/span>\n\t<span class=\"hljs-comment\">##  the main server and all SSL-enabled virtual hosts.<\/span>\n\t<span class=\"hljs-comment\">##<\/span>\n\t<span class=\"hljs-comment\">#<\/span>\n\t<span class=\"hljs-comment\">#   Some MIME-types for downloading Certificates and CRLs<\/span>\n\t<span class=\"hljs-comment\">#<\/span>\n\tAddType application\/x-x509-ca-cert .crt\n\tAddType application\/x-pkcs7-crl\t.crl\n\t<span class=\"hljs-comment\">#   Pass Phrase Dialog:<\/span>\n\t<span class=\"hljs-comment\">#   Configure the pass phrase gathering process.<\/span>\n\t<span class=\"hljs-comment\">#   The filtering dialog program (`builtin' is a internal<\/span>\n\t<span class=\"hljs-comment\">#   terminal dialog) has to provide the pass phrase on stdout.<\/span>\n\tSSLPassPhraseDialog  exec:\/usr\/share\/apache2\/ask-<span class=\"hljs-keyword\">for<\/span>-passphrase\n\t<span class=\"hljs-comment\">#   Inter-Process Session Cache:<\/span>\n\t<span class=\"hljs-comment\">#   Configure the SSL Session Cache: First the mechanism <\/span>\n\t<span class=\"hljs-comment\">#   to use and second the expiring timeout (in seconds).<\/span>\n\t<span class=\"hljs-comment\">#   (The mechanism dbm has known memory leaks and should not be used).<\/span>\n\tSSLSessionCache\t\tshmcb:${APACHE_RUN_DIR}\/ssl_scache(<span class=\"hljs-number\">512000<\/span>)\n\tSSLSessionCacheTimeout  <span class=\"hljs-number\">300<\/span>\n\t<span class=\"hljs-comment\">#   Semaphore:<\/span>\n\t<span class=\"hljs-comment\">#   Configure the path to the mutual exclusion semaphore the<\/span>\n\t<span class=\"hljs-comment\">#   SSL engine uses internally for inter-process synchronization. <\/span>\n\t<span class=\"hljs-comment\">#   (Disabled by default, the global Mutex directive consolidates by default<\/span>\n\t<span class=\"hljs-comment\">#   this)<\/span>\n\t<span class=\"hljs-comment\">#Mutex file:${APACHE_LOCK_DIR}\/ssl_mutex ssl-cache<\/span>\n\t<span class=\"hljs-comment\">#   SSL Cipher Suite:<\/span>\n\t<span class=\"hljs-comment\">#   List the ciphers that the client is permitted to negotiate. See the<\/span>\n\t<span class=\"hljs-comment\">#   ciphers(1) man page from the openssl package for list of all available<\/span>\n\t<span class=\"hljs-comment\">#   options.<\/span>\n\t<span class=\"hljs-comment\">#   Enable only secure ciphers:<\/span>\n\tSSLCipherSuite EECDH+AESGCM:EDH+AESGCM\n\t\n\tSSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1\n\t<span class=\"hljs-comment\"># SSL server cipher order preference:<\/span>\n\t<span class=\"hljs-comment\"># Use server priorities for cipher algorithm choice.<\/span>\n\t<span class=\"hljs-comment\"># Clients may prefer lower grade encryption.  You should enable this<\/span>\n\t<span class=\"hljs-comment\"># option if you want to enforce stronger encryption, and can afford<\/span>\n\t<span class=\"hljs-comment\"># the CPU cost, and did not override SSLCipherSuite in a way that puts<\/span>\n\t<span class=\"hljs-comment\"># insecure ciphers first.<\/span>\n\t<span class=\"hljs-comment\"># Default: Off<\/span>\n\tSSLHonorCipherOrder on\n\t<span class=\"hljs-comment\">#   The protocols to enable.<\/span>\n\t<span class=\"hljs-comment\">#   Available values: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2<\/span>\n\t<span class=\"hljs-comment\">#   SSL v2  is no longer supported<\/span>\n\tSSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1<span class=\"hljs-number\">.1<\/span>\n\t<span class=\"hljs-comment\">#   Allow insecure renegotiation with clients which do not yet support the<\/span>\n\t<span class=\"hljs-comment\">#   secure renegotiation protocol. Default: Off<\/span>\n\t<span class=\"hljs-comment\">#SSLInsecureRenegotiation on<\/span>\n\t<span class=\"hljs-comment\">#   Whether to forbid non-SNI clients to access name based virtual hosts.<\/span>\n\t<span class=\"hljs-comment\">#   Default: Off<\/span>\n\tSSLStrictSNIVHostCheck On\n\t\n\tHeader always set Strict-Transport-Security <span class=\"hljs-string\">\"max-age=63072000; includeSubDomains; preload\"<\/span>\n<span class=\"hljs-comment\">#\tProblems with (i)frames<\/span>\n<span class=\"hljs-comment\">#\tHeader always set X-Frame-Options DENY<\/span>\n<span class=\"hljs-comment\">#\tHeader always set X-Content-Type-Options nosniff<\/span>\n\t<span class=\"hljs-comment\"># Requires Apache &gt;= 2.4<\/span>\n\tSSLCompression off\n\tSSLUseStapling on\n\tSSLStaplingCache <span class=\"hljs-string\">\"shmcb:logs\/stapling-cache(150000)\"<\/span>\n\t<span class=\"hljs-comment\"># Requires Apache &gt;= 2.4.11<\/span>\n\tSSLSessionTickets Off\n&lt;\/IfModule&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">http2 konfigurieren<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Um http2 sinnvoll einzurichten, bearbeite ich die Datei <code>\/etc\/apache2\/mods-available\/http2.conf<\/code> und \u00e4ndere ihren Inhalt zu: <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># enable http2 for http and https<\/span>\nProtocols h2 h2c http\/<span class=\"hljs-number\">1.1<\/span>\n<span class=\"hljs-comment\"># configure push<\/span>\nH2Push          on\nH2PushPriority  *                       after\nH2PushPriority  text\/css                before\nH2PushPriority  image\/jpeg              after   <span class=\"hljs-number\">32<\/span>\nH2PushPriority  image\/png               after   <span class=\"hljs-number\">32<\/span>\nH2PushPriority  application\/javascript  interleaved<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Benutzer anlegen<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Soll der Server das Webhosting f\u00fcr mehrere Webpr\u00e4senzen \u00fcbernehmen, empfiehlt es sich, diese unter eigenen Benutzern laufen zu lassen. <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">root@debian:~<span class=\"hljs-comment\"># adduser --home \/var\/www\/www.theinterwebz.de\/docs --group --system web1<\/span>\nroot@debian:~<span class=\"hljs-comment\"># adduser web1 www-data<\/span>\nroot@debian:~<span class=\"hljs-comment\"># chown -R web1:web1 \/var\/www\/www.theinterwebz.de\/docs\/<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">https-redirect konfigurieren<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr die Weiterleitung von http:\/\/\u2026 auf https:\/\/\u2026 lege ich eine allgemeine Config-Datei an, die ich je nach Bedarf in VHosts inkludieren kann. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\"><code>\/etc\/apache2\/conf-available\/https-redirect.conf<\/code> <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">IfModule<\/span> <span class=\"hljs-attr\">mod_rewrite.c<\/span>&gt;<\/span>\n\tRewriteEngine On\n\tRewriteCond %{REQUEST_URI} !^\/\\.well\\-known\/acme\\-challenge\/\n\tRewriteCond %{HTTPS} off &#091;OR]\n\tRewriteCond %{HTTP_HOST} !^www\\. &#091;NC]\n\tRewriteCond %{HTTP_HOST} ^(?:www\\.)?(.+)$ &#091;NC]\n\tRewriteRule ^ https:\/\/www.%1%{REQUEST_URI} &#091;R=301,L]\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">IfModule<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">VirtualHost anlegen<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Der Webserver ist nun weitgehend fertig konfiguriert, lediglich die VirtualHosts fehlen noch. Ich erstelle hier gerne jeweils einen f\u00fcr http:\/\/ und einen f\u00fcr https:\/\/ und inkludiere die eigentliche, innere Konfiguration ausschlie\u00dflich im SSL-VHost. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\"><code>\/etc\/apache2\/sites-available\/www.theinterwebz.de.conf<\/code> <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">VirtualHost<\/span> <span class=\"hljs-attr\">10.222.3.52:80<\/span> <span class=\"hljs-attr\">2a02:f08:e:1344:a00:27ff:fe05:6023:80<\/span>&gt;<\/span>\n   ServerName www.theinterwebz.de\n   ServerAlias theinterwebz.de\n\n  IncludeOptional conf-available\/https-redirect.conf\n\n\tErrorLog \/var\/log\/apache2\/www.theinterwebz.de.error.log\n\tCustomLog \/var\/log\/apache2\/www.theinterwebz.de.access.log combined\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">VirtualHost<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Wie man sieht, macht dieser VHost nichts anderes, als von der aufgerufenen URL zu https:\/\/ samt aller Parameter umzuleiten &#8211; es sei denn, es wird eine Datei aus &#8222;\/.well-known\/acme-challenge\/&#8220; angefragt. Dann wird die Datei ausgeliefert. Ein Code Interpreter kann im http:\/\/ VHost nicht aufgerufen werden. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\">Beim SSL-VHost m\u00fcssen wir die Pfade f\u00fcr die Let&#8217;s Encrypt Zertifikate noch antizipieren, diese erstellen wir gleich erst. Daher aktivieren wir bis dahin auch nur den unverschl\u00fcsselten. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\"><code>\/etc\/apache2\/sites-available\/www.theinterwebz.de-ssl.conf<\/code> <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">&lt;VirtualHost <span class=\"hljs-number\">10.222<\/span><span class=\"hljs-number\">.3<\/span><span class=\"hljs-number\">.52<\/span>:<span class=\"hljs-number\">443<\/span> <span class=\"hljs-number\">2<\/span>a02:f08:e:<span class=\"hljs-number\">1344<\/span>:a00:<span class=\"hljs-number\">27<\/span>ff:fe05:<span class=\"hljs-number\">6023<\/span>:<span class=\"hljs-number\">443<\/span>&gt;\n\tSSLCertificateFile      \/<span class=\"hljs-keyword\">var<\/span>\/lib\/acme\/live\/www.theinterwebz.de\/cert\n\tSSLCertificateKeyFile   \/<span class=\"hljs-keyword\">var<\/span>\/lib\/acme\/live\/www.theinterwebz.de\/privkey\n\tSSLCertificateChainFile \/<span class=\"hljs-keyword\">var<\/span>\/lib\/acme\/live\/www.theinterwebz.de\/chain\n\tSSLOptions StrictRequire\n\tSSLEngine On\n\t&lt;IfModule mod_headers.c&gt;\n\t\tHeader always set Strict-Transport-Security <span class=\"hljs-string\">\"max-age=15768000; includeSubDomains; preload\"<\/span>\n\t&lt;\/IfModule&gt;\n\t\n\t<span class=\"hljs-keyword\">Include<\/span> \/etc\/apache2\/sites-available\/www.theinterwebz.de-base.conf\n\tErrorLog \/<span class=\"hljs-keyword\">var<\/span>\/log\/apache2\/www.theinterwebz.de.error.log\n\tCustomLog \/<span class=\"hljs-keyword\">var<\/span>\/log\/apache2\/www.theinterwebz.de.access.log combined\n&lt;\/VirtualHost&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Im https:\/\/ VHost definiere ich einen ProxyHandler, der auf den UNIX-Socket (oder wahlweise TCP-Socket an localhost) des PHP-FPM weist. Dateien deren Endung mit &#8222;php&#8220; beginnt, werden an diesen weitergeleitet. Sollen statt PHP, Python oder cgi-Skripte ausgef\u00fchrt werden, muss der Passus entsprechend angepasst werden. Au\u00dferdem setze ich noch einen &#8222;lustigen&#8220; HTTP-X-Header, den niemand sehen wird &#8211; es sei denn er inspiziert die HTTP-Header <span class=\"wp-font-emots-emo-wink\"><\/span> <\/p> \n\n\n\n<p class=\"wp-block-paragraph\"><code>\/etc\/apache2\/sites-available\/www.theinterwebz.de-base.conf<\/code> <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\tServerAdmin admin@theinterwebz.de\n\t\n\tServerName www.theinterwebz.de\n\tServerAlias theinterwebz.de\n\t\n\tDirectoryIndex index.htm index.html index.php\n\tDocumentRoot \/<span class=\"hljs-keyword\">var<\/span>\/www\/www.theinterwebz.de\/docs\/\n\t&lt;Directory \/&gt;\n\t\tOptions FollowSymLinks\n\t\tAllowOverride None\n\t&lt;\/Directory&gt;\n\t\n\t&lt;Directory \/<span class=\"hljs-keyword\">var<\/span>\/www\/www.theinterwebz.de\/docs\/&gt;\n\t\tOptions -Indexes +FollowSymLinks +MultiViews +Includes\n\t\tAllowOverride All\n\t\tOrder allow,deny\n\t\tallow from all\n\t&lt;\/Directory&gt;\n\t&lt;IfModule mod_proxy_fcgi.c&gt;\n\t\t&lt;Proxy <span class=\"hljs-string\">\"unix:\/var\/run\/php\/php7.3-fpm-theinterwebz.sock|fcgi:\/\/php7.3-fpm-theinterwebz\"<\/span>&gt;\n\t\t\t<span class=\"hljs-comment\"># we must declare a (any) parameter in here <\/span>\n\t\t\t<span class=\"hljs-comment\"># or it won't register the proxy ahead of time<\/span>\n\t\t\tProxySet connectiontimeout=<span class=\"hljs-number\">5<\/span> timeout=<span class=\"hljs-number\">180<\/span>\n\t\t&lt;\/Proxy&gt;\n\t\t&lt;FilesMatch <span class=\"hljs-string\">\".+\\.php$\"<\/span>&gt;\n\t\t\tSetHandler proxy:fcgi:<span class=\"hljs-comment\">\/\/php7.3-fpm-theinterwebz<\/span>\n\t\t&lt;\/FilesMatch&gt;\n\t&lt;\/IfModule&gt;\n\t&lt;IfModule mod_headers.c&gt;\n\t\tHeader always set X-CATS <span class=\"hljs-string\">\"All your base are belong to us\"<\/span>\n\t&lt;\/IfModule&gt;\n\t<span class=\"hljs-comment\"># Possible values include: debug, info, notice, warn, error, crit,<\/span>\n\t<span class=\"hljs-comment\"># alert, emerg.<\/span>\n\tLogLevel warn\n\tServerSignature On<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">PHP konfigurieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Das php7.3-fpm von sury kommt (wie auch die \u00e4lteren Debian Pakete) schon ganz brauchbar vorkonfiguriert, so m\u00fcssen wir eigentlich nur einen PHP-Pool definieren und ihm den bereits im VHost verwendeten Namen geben. Eine gut kommentierte Vorlage findet sich bereits in www.conf. Auch wenn wir diese l\u00f6schen werden, k\u00f6nnen wir sie als Kopiervorlage verwenden. Aufgrund der L\u00e4nge zeige ich die angepasste <code>\/etc\/php\/7.3\/fpm\/pool.d\/www.theinterwebz.de.conf<\/code> ohne Kommentarzeilen. <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">root@debian:\/etc\/php\/<span class=\"hljs-number\">7.3<\/span>\/fpm\/pool.d<span class=\"hljs-comment\"># cp www.conf www.theinterwebz.conf<\/span>\nroot@debian:\/etc\/php\/<span class=\"hljs-number\">7.3<\/span>\/fpm\/pool.d<span class=\"hljs-comment\"># rm www.conf<\/span>\nroot@debian:\/etc\/php\/<span class=\"hljs-number\">7.3<\/span>\/fpm\/pool.d<span class=\"hljs-comment\"># service php7.3-fpm restart<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><code>grep -Ev '^#|^;' \/etc\/php\/7.3\/fpm\/pool.d\/www.theinterwebz.de.conf<\/code> <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">&#091;theinterwebz]\nuser = web1\ngroup = web1\nlisten = \/<span class=\"hljs-keyword\">var<\/span>\/run\/php\/php7<span class=\"hljs-number\">.3<\/span>-fpm-theinterwebz.sock\nlisten.owner = www-data\nlisten.group = www-data\npm = dynamic\npm.max_children = <span class=\"hljs-number\">20<\/span>\npm.start_servers = <span class=\"hljs-number\">2<\/span>\npm.min_spare_servers = <span class=\"hljs-number\">1<\/span>\npm.max_spare_servers = <span class=\"hljs-number\">3<\/span>\nchdir = \/\nphp_admin_value&#091;error_log] = \/<span class=\"hljs-keyword\">var<\/span>\/log\/fpm-php.theinterwebz.log\nphp_admin_flag&#091;log_errors] = on\nphp_admin_value&#091;memory_limit] = <span class=\"hljs-number\">128<\/span>M\nphp_admin_value&#091;post_max_size] = <span class=\"hljs-number\">200<\/span>M\nphp_admin_value&#091;upload_max_filesize] = <span class=\"hljs-number\">200<\/span>M<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Let&#8217;s Encrypt einrichten<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zuerst muss die Grundkonfiguration erstellt werden. Dies geht am Einfachsten mit <code>acmetool quickstart --expert<\/code>. Es \u00f6ffnet sich ein ncurses-dialog, der nacheinander ein paar Angaben abfragt: <\/p> \n\n\n\n<ul class=\"wp-block-list\"><li>ACME Server: &#8218;Let&#8217;s Encrypt (Live)&#8216;<\/li><li>Key Type Selection: &#8218;ECDSA&#8216;<\/li><li>ECDSA Curve Selection: &#8218;NIST P-384&#8216;<\/li><li>Select Challenge Conveyance Method: Press &#8218;1&#8216; for WEBROOT<\/li><li>Enter Webroot Path: &#8218;\/var\/run\/acme\/acme-challenge&#8216;<\/li><li>Are you sure?: &#8218;Yes&#8216;<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Der Pfad <code>\/var\/run\/acme\/acme-challenge<\/code> ist derselbe, der auch schon vom acmetool Paket f\u00fcr den Indianer in <code>\/etc\/apache2\/conf-available\/acmetool.conf<\/code> als globaler Alias definiert wurde. <\/p> \n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">------------------------- Quickstart Complete ----------------------\nThe quickstart process is complete.\nEnsure your chosen challenge conveyance method is configured properly\nbefore attempting to request certificates. You can find more\ninformation about how to configure your system for each method in the\nacmetool documentation:\nhttps:\/\/github.com\/hlandau\/acme\/blob\/master\/_doc\/WSCONFIG.md\nTo request a certificate, run:\n    \n$ sudo acmetool want example.com www.example.com\nIf the certificate is successfully obtained, it will be placed in\n\/var\/lib\/acme\/live\/example.com\/{cert,chain,fullchain,privkey}.<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Zertifikat beantragen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Damit ein Zertifikat ausgeliefert werden kann, muss: <\/p> \n\n\n\n<ul class=\"wp-block-list\"><li>Der hostname &#8218;www.theinterwebz.de&#8216; korrekt im DNS aufgel\u00f6st werden k\u00f6nnen<\/li><li>Der Webserver auf Port 80 und\/oder 443 lauschen<\/li><li>Eine etwaige vorgeschaltete Firewall Traffic von Let&#8217;s Encrypt zum Webserver durchlassen<\/li><li>Das &#8218;acme-challenge&#8220; unter &#8218;http:\/\/www.theinterwebz.de\/.well-known\/acme-challenge&#8216; vom Webserver ausgeliefert werden (dies sollte durch die soeben get\u00e4tigte Config gegeben sein)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt sollte man erfolgreich mit <code>acmetool want www.theinterwebz.de<\/code> ein Zertifikat besorgen k\u00f6nnen. <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">root@debian:~<span class=\"hljs-comment\"># acmetool status<\/span>\nSettings:\n  ACME_STATE_DIR: \/<span class=\"hljs-keyword\">var<\/span>\/lib\/acme\n  ACME_HOOKS_DIR: \/etc\/acme\/hooks\n  <span class=\"hljs-keyword\">Default<\/span> directory URL: https:<span class=\"hljs-comment\">\/\/acme-staging.api.letsencrypt.org\/directory<\/span>\n  Preferred key type: ecdsa-nistp384\n  Additional webroots:\n    \/<span class=\"hljs-keyword\">var<\/span>\/run\/acme\/acme-challenge\nAvailable accounts:\n  Account(acme-staging.api.letsencrypt.org%<span class=\"hljs-number\">2<\/span>fdirectory\/grqffavzgeh477zs76k3a4n2ehiqjtxpt4dzmmo5b6ewjni4tz2a)\n    thumbprint: dW-sxyRozKl7YiKlN7O5mTkGZEyqwF4eYephyLdFACw\nTarget(www.theinterwebz.de;https:<span class=\"hljs-comment\">\/\/acme-staging.api.letsencrypt.org\/directory;0)<\/span>\n  best: Certificate(Wz8stnwW8kWSYhZR5BDAYZKENzYDtPnbDb1WYOPwimNF2F0LG8LRm)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">MariaDB konfigurieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Den MariaDB\/MySQL Server lasse ich weitgehend auf Standard-Debian Konfiguration. Vor allem soll er \u00fcberhaupt nicht von extern erreichbar sein, was durch <code>bind-address = 127.0.0.1<\/code> sichergestellt bleibt. Derart eingeschr\u00e4nkt bedarf es auch keiner SSL-Konfiguration, da alles auf der Maschine lokal verbleibt. Auf meinem Webserver befinden sich schon eine gewisse Anzahl an Webseiten, da musste ich der Datenbank etwas mehr Ressourcen geben. F\u00fcr den Anfang ist dies aber noch nicht notwendig. <\/p> \n\n\n\n<h4 class=\"wp-block-heading\">Administraton via mysql command line client<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Die Administation des MariaDB Servers mit dem Tool <code>mysql<\/code> funktioniert out-of-the-box. Hier sind keine Mehrarbeiten notwendig. Sinnvoll ist es nat\u00fcrlich den oder die Admin-User mit einem hinreichend sicheren Passwort zu versehen. <\/p> \n\n\n\n<h4 class=\"wp-block-heading\">Administration via phpMyAdmin<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Alternativ kann man auch analog zur <a href=\"#VirtualHost_anlegen\">Apache2 VHost Konfiguration<\/a> einen weiteren VirtualHost f\u00fcr den <a href=\"https:\/\/www.phpmyadmin.net\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"phpMyAdmin (\u00f6ffnet in neuem Tab)\">phpMyAdmin<\/a> anlegen. Z. B. auf den Hostnamen &#8217;server.theinterwebz.de&#8216;. Auch dieser sollte dann einen eigenen <a href=\"#PHP_konfigurieren\">PHP-Pool<\/a> bekommen. <\/p> \n\n\n\n<h3 class=\"wp-block-heading\">ProFTPd konfigurieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr den ProFTPd habe ich mir etwas recht pfiffiges ausgedacht. Und zwar forciere ich die Verschl\u00fcsselung der FTP Verbindung. Dabei wollte ich allerdings zus\u00e4tzlich noch in der Lage sein, anonym und unverschl\u00fcsselt Daten via FTP zu verteilen. Sogar anonymer Upload in ein designiertes Verzeichnis l\u00e4sst sich so realisieren. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\">Allerdings wird dieser gesamte Block und auch der Service selbst nur dann ben\u00f6tigt, wenn Dritte Zugriff auf ihren Webroot erhalten sollen &#8211; ohne direkt Shellzugang zu bekommen. Gibt es nur einen Administrator f\u00fcr alle gehosteten Webseiten, kann dieser Schritt ausgelassen werden. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\">Wird auf unverschl\u00fcsselter Verbindung ein Benutzername au\u00dfer &#8218;anonymous&#8216; angegeben, wird die Verbindung sofort getrennt. Dies passiert direkt nach Senden des Benutzernamens. Somit sollte sichergestellt sein, dass der Client das Passwort nicht mehr im Klartext hinterher schicken kann. Ganz \u00e4hnlich sch\u00fctzt auch mein Mailserver seine User. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\">Der user anonymous \/ ftp hat sein Verzeichnis in \/srv\/ftp und ist dort eingesperrt. Existierende Benutzer werden in ihrem Homeverzeichnis eingesperrt. <strong>Das setzt nat\u00fcrlich voraus, dass der User ein Passwort hat.<\/strong> <em>Weiter oben habe ich &#8218;web1&#8216; mit &#8211;system angelegt &#8211; also ohne Passwort<\/em>! <\/p> \n\n\n\n<p class=\"wp-block-paragraph\"><code>\/etc\/proftpd\/proftpd.conf<\/code> <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-comment\"># \/etc\/proftpd\/proftpd.conf -- This is a basic ProFTPD configuration file.<\/span>\n<span class=\"hljs-comment\"># To really apply changes, reload proftpd after modifications, if<\/span>\n<span class=\"hljs-comment\"># it runs in daemon mode. It is not required in inetd\/xinetd mode.<\/span>\n<span class=\"hljs-comment\"># <\/span>\n<span class=\"hljs-comment\"># Includes DSO modules<\/span>\n<span class=\"hljs-keyword\">Include<\/span> \/etc\/proftpd\/modules.conf\n<span class=\"hljs-comment\"># Set off to disable IPv6 support which is annoying on IPv4 only boxes.<\/span>\nUseIPv6\t\t\t\ton\n<span class=\"hljs-comment\"># If set on you can experience a longer connection delay in many cases.<\/span>\nIdentLookups\t\t\toff\nServerName\t\t\t<span class=\"hljs-string\">\"Debian\"<\/span>\nServerType\t\t\tstandalone\nDeferWelcome\t\t\toff\nMultilineRFC2228\t\ton\nDefaultServer\t\t\ton\nShowSymlinks\t\t\ton\nTimeoutNoTransfer\t\t<span class=\"hljs-number\">600<\/span>\nTimeoutStalled\t\t<span class=\"hljs-number\">600<\/span>\nTimeoutIdle\t\t\t<span class=\"hljs-number\">1200<\/span>\nDisplayLogin                welcome.msg\nDisplayChdir               \t.message <span class=\"hljs-keyword\">true<\/span>\nListOptions                \t<span class=\"hljs-string\">\"-l\"<\/span>\nDenyFilter\t\t\t\\*.*\/\n<span class=\"hljs-comment\"># Use this to jail all users in their homes <\/span>\nDefaultRoot\t\t\t~\n<span class=\"hljs-comment\"># Users require a valid shell listed in \/etc\/shells to login.<\/span>\n<span class=\"hljs-comment\"># Use this directive to release that constrain.<\/span>\nRequireValidShell\t\toff\n<span class=\"hljs-comment\"># Port 21 is the standard FTP port.<\/span>\nPort\t\t\t\t<span class=\"hljs-number\">21<\/span>\n<span class=\"hljs-comment\"># In some cases you have to specify passive ports range to by-pass<\/span>\n<span class=\"hljs-comment\"># firewall limitations. Ephemeral ports can be used for that, but<\/span>\n<span class=\"hljs-comment\"># feel free to use a more narrow range.<\/span>\n<span class=\"hljs-comment\"># PassivePorts                  49152 65534<\/span>\n<span class=\"hljs-comment\"># If your host was NATted, this option is useful in order to<\/span>\n<span class=\"hljs-comment\"># allow passive tranfers to work. You have to use your public<\/span>\n<span class=\"hljs-comment\"># address and opening the passive ports used on your firewall as well.<\/span>\n<span class=\"hljs-comment\"># MasqueradeAddress\t\t1.2.3.4<\/span>\n<span class=\"hljs-comment\"># This is useful for masquerading address with dynamic IPs:<\/span>\n<span class=\"hljs-comment\"># refresh any configured MasqueradeAddress directives every 8 hours<\/span>\n&lt;IfModule mod_dynmasq.c&gt;\n<span class=\"hljs-comment\"># DynMasqRefresh 28800<\/span>\n&lt;\/IfModule&gt;\n<span class=\"hljs-comment\"># To prevent DoS attacks, set the maximum number of child processes<\/span>\n<span class=\"hljs-comment\"># to 30.  If you need to allow more than 30 concurrent connections<\/span>\n<span class=\"hljs-comment\"># at once, simply increase this value.  Note that this ONLY works<\/span>\n<span class=\"hljs-comment\"># in standalone mode, in inetd mode you should use an inetd server<\/span>\n<span class=\"hljs-comment\"># that allows you to limit maximum number of processes per service<\/span>\n<span class=\"hljs-comment\"># (such as xinetd)<\/span>\nMaxInstances\t\t\t<span class=\"hljs-number\">30<\/span>\n<span class=\"hljs-comment\"># Set the user and group that the server normally runs at.<\/span>\nUser\t\t\t\tproftpd\nGroup\t\t\t\tnogroup\n<span class=\"hljs-comment\"># Umask 022 is a good standard umask to prevent new files and dirs<\/span>\n<span class=\"hljs-comment\"># (second parm) from being group and world writable.<\/span>\nUmask\t\t\t\t<span class=\"hljs-number\">022<\/span>  <span class=\"hljs-number\">022<\/span>\n<span class=\"hljs-comment\"># Normally, we want files to be overwriteable.<\/span>\nAllowOverwrite\t\t    on\nAllowRetrieveRestart            on\nAllowStoreRestart               on\n<span class=\"hljs-comment\"># Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:<\/span>\n<span class=\"hljs-comment\"># PersistentPasswd\t\toff<\/span>\n<span class=\"hljs-comment\"># This is required to use both PAM-based authentication and local passwords<\/span>\n<span class=\"hljs-comment\"># AuthOrder\t\t\tmod_auth_pam.c* mod_auth_unix.c<\/span>\n<span class=\"hljs-comment\"># Be warned: use of this directive impacts CPU average load!<\/span>\n<span class=\"hljs-comment\"># Uncomment this if you like to see progress and transfer rate with ftpwho<\/span>\n<span class=\"hljs-comment\"># in downloads. That is not needed for uploads rates.<\/span>\n<span class=\"hljs-comment\">#<\/span>\nUseSendFile\t\t\ton\nTransferLog \/<span class=\"hljs-keyword\">var<\/span>\/log\/proftpd\/xferlog\nSystemLog   \/<span class=\"hljs-keyword\">var<\/span>\/log\/proftpd\/proftpd.log\n<span class=\"hljs-comment\"># In order to keep log file dates consistent after chroot, use timezone info<\/span>\n<span class=\"hljs-comment\"># from \/etc\/localtime.  If this is not set, and proftpd is configured to<\/span>\n<span class=\"hljs-comment\"># chroot (e.g. DefaultRoot or &lt;Anonymous&gt;), it will use the non-daylight<\/span>\n<span class=\"hljs-comment\"># savings timezone regardless of whether DST is in effect.<\/span>\nSetEnv TZ :\/etc\/localtime\n&lt;IfModule mod_quotatab.c&gt;\nQuotaEngine off\n&lt;\/IfModule&gt;\n&lt;IfModule mod_ratio.c&gt;\nRatios off\n&lt;\/IfModule&gt;\n<span class=\"hljs-comment\"># Delay engine reduces impact of the so-called Timing Attack described in<\/span>\n<span class=\"hljs-comment\"># http:\/\/www.securityfocus.com\/bid\/11430\/discuss<\/span>\n<span class=\"hljs-comment\"># It is on by default. <\/span>\n&lt;IfModule mod_delay.c&gt;\nDelayEngine on\n&lt;\/IfModule&gt;\n&lt;IfModule mod_ctrls.c&gt;\nControlsEngine        off\nControlsMaxClients    <span class=\"hljs-number\">2<\/span>\nControlsLog           \/<span class=\"hljs-keyword\">var<\/span>\/log\/proftpd\/controls.log\nControlsInterval      <span class=\"hljs-number\">5<\/span>\nControlsSocket        \/<span class=\"hljs-keyword\">var<\/span>\/run\/proftpd\/proftpd.sock\n&lt;\/IfModule&gt;\n&lt;IfModule mod_ctrls_admin.c&gt;\nAdminControlsEngine off\n&lt;\/IfModule&gt;\n<span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-comment\"># This is used for FTPS connections<\/span>\n<span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-keyword\">Include<\/span> \/etc\/proftpd\/tls.conf\n<span class=\"hljs-comment\"># Include other custom configuration files<\/span>\n<span class=\"hljs-keyword\">Include<\/span> \/etc\/proftpd\/conf.d\/<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><code>\/etc\/proftpd\/tls.conf<\/code> <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-comment\"># Proftpd sample configuration for FTPS connections.<\/span>\n<span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-comment\"># Note that FTPS impose some limitations in NAT traversing.<\/span>\n<span class=\"hljs-comment\"># See http:\/\/www.castaglia.org\/proftpd\/doc\/contrib\/ProFTPD-mini-HOWTO-TLS.html<\/span>\n<span class=\"hljs-comment\"># for more information.<\/span>\n<span class=\"hljs-comment\">#<\/span>\n&lt;IfModule mod_tls.c&gt;\nTLSEngine                               on\nTLSLog                                  \/<span class=\"hljs-keyword\">var<\/span>\/log\/proftpd\/tls.log\nTLSProtocol                             TLSv1<span class=\"hljs-number\">.3<\/span> TLSv1<span class=\"hljs-number\">.2<\/span>\nTLSCipherSuite\t\t\t\tAES256+EECDH:AES256+EDH\n \nTLSRSACertificateFile       \/<span class=\"hljs-keyword\">var<\/span>\/lib\/acme\/live\/debian.theinterwebz.de\/cert\nTLSRSACertificateKeyFile    \/<span class=\"hljs-keyword\">var<\/span>\/lib\/acme\/live\/debian.theinterwebz.de\/privkey\n<span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-comment\"># CA the server trusts...<\/span>\nTLSCACertificateFile \t\/<span class=\"hljs-keyword\">var<\/span>\/lib\/acme\/live\/debian.theinterwebz.de\/chain\n<span class=\"hljs-comment\"># Per default drop connection if client tries to start a renegotiate<\/span>\n<span class=\"hljs-comment\"># This is a fix for CVE-2009-3555 but could break some clients.<\/span>\n<span class=\"hljs-comment\">#<\/span>\nTLSOptions\t\t\tAllowClientRenegotiations NoSessionReuseRequired AllowPerUser\n<span class=\"hljs-comment\"># Are clients required to use FTP over TLS when talking to this server?<\/span>\n<span class=\"hljs-comment\">#<\/span>\nTLSRequired                             on\n<span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-comment\"># Allow SSL\/TLS renegotiations when the client requests them, but<\/span>\n<span class=\"hljs-comment\"># do not force the renegotations.  Some clients do not support<\/span>\n<span class=\"hljs-comment\"># SSL\/TLS renegotiations; when mod_tls forces a renegotiation, these<\/span>\n<span class=\"hljs-comment\"># clients will close the data connection, or there will be a timeout<\/span>\n<span class=\"hljs-comment\"># on an idle data connection.<\/span>\n<span class=\"hljs-comment\">#<\/span>\nTLSRenegotiate                          required off\n<span class=\"hljs-comment\"># Anonymous config must be set from within the TLS module config block<\/span>\n<span class=\"hljs-comment\"># Include \/etc\/proftpd\/anonymous.conf<\/span>\n&lt;\/IfModule&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Die Zeile <code>Include \/etc\/proftpd\/anonymous.conf<\/code> aktiviert den (unverschl\u00fcsselten) anonymen Zugang zu Dateien in <code>\/srv\/ftp<\/code>. Diese m\u00fcsste dazu auskommentiert werden. Dabei wird die nachfolgende Konfigurationsdatei eingebunden, in der man sogar den Upload nach <code>\/srv\/ftp\/upload<\/code> aktivieren k\u00f6nnte. <\/p> \n\n\n\n<p class=\"wp-block-paragraph\"><code>\/etc\/proftpd\/anonymous.conf<\/code> <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">&lt;Anonymous ~ftp&gt;\n\tUser ftp\n\tGroup ftp\n\tUserAlias anonymous ftp\n\tRequireValidShell off\n\t<span class=\"hljs-comment\"># Note how TLSRequired is set to off here in the &lt;Anonymous&gt; context<\/span>\n\tTLSRequired off\n\t<span class=\"hljs-comment\"># We want 'welcome.msg' displayed at login, and '.message' displayed<\/span>\n\t<span class=\"hljs-comment\"># in each newly chdired directory.<\/span>\n\t<span class=\"hljs-comment\"># DisplayLogin\t\t\twelcome.msg<\/span>\n\t<span class=\"hljs-comment\"># DisplayChdir\t\t\t.message<\/span>\n\t<span class=\"hljs-comment\"># Limit WRITE everywhere in the anonymous chroot<\/span>\n\t&lt;Directory *&gt;\n\t\t&lt;Limit WRITE&gt;\n\t\t\tDenyAll\n\t\t&lt;\/Limit&gt;\n\t&lt;\/Directory&gt;\n\t\n\t<span class=\"hljs-comment\"># Uncomment this if you're brave.<\/span>\n\t<span class=\"hljs-comment\"># &lt;Directory upload&gt;<\/span>\n\t<span class=\"hljs-comment\"># Umask 022 is a good standard umask to prevent new files and dirs<\/span>\n\t<span class=\"hljs-comment\"># (second parm) from being group and world writable.<\/span>\n\t<span class=\"hljs-comment\"># Umask\t022\t022<\/span>\n\t<span class=\"hljs-comment\"># \t&lt;Limit READ WRITE&gt;<\/span>\n\t<span class=\"hljs-comment\"># \t\tDenyAll<\/span>\n\t<span class=\"hljs-comment\"># \t&lt;\/Limit&gt;<\/span>\n\t<span class=\"hljs-comment\"># \t&lt;Limit STOR&gt;<\/span>\n\t<span class=\"hljs-comment\"># \t\tAllowAll<\/span>\n\t<span class=\"hljs-comment\"># \t&lt;\/Limit&gt;<\/span>\n\t<span class=\"hljs-comment\"># &lt;\/Directory&gt;<\/span>\n&lt;\/Anonymous&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Man merkt schon am Kommentar (&#8222;Uncomment this if you&#8217;re brave.&#8220;) zum &#8218;upload&#8216;-Pfad, dass hier ein Verzeichnis f\u00fcr die gesamte Welt via FTP beschreibbar gemacht wird. Hier kann jedermann alles M\u00f6gliche &#8211; auch Viren oder Schadsoftware &#8211; hochladen. Darum habe ich auch das Herunterladen von Dateien aus dem &#8218;upload&#8216;-Verzeichnis eingeschr\u00e4nkt. Eigentlich dient dieser Pfad gar keinem besonderen Zweck, ich nutze ihn nur gelegentlich als &#8222;Dropbox&#8220; f\u00fcr Bekannte. <strong>Lasst es also im Zweifel aus!<\/strong> <span class=\"wp-font-emots-emo-happy\"><\/span> <\/p> \n\n\n\n<p class=\"wp-block-paragraph\">Dennoch w\u00fcrde ich in jedem Fall empfehlen, die Datei- und Verzeichnisberechtigungen von \/srv\/ftp einzuschr\u00e4nken: <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">root@debian:\/srv\/ftp<span class=\"hljs-comment\"># mkdir upload<\/span>\nroot@debian:\/srv\/ftp<span class=\"hljs-comment\"># mkdir download<\/span>\nroot@debian:\/srv\/ftp<span class=\"hljs-comment\"># chown -R ftp:nogroup .\/*<\/span>\nroot@debian:\/srv\/ftp<span class=\"hljs-comment\"># chmod -R 555 download<\/span>\nroot@debian:\/srv\/ftp<span class=\"hljs-comment\"># chmod -R 755 upload<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">TLS VHost aktivieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt, da alle Komponenten f\u00fcr das Webhosting bereit sind, kann man den SSL-VHost aktivieren und den Apache2 durchstarten. Um die Ausf\u00fchrung von PHP-Skripten zu testen erstellen wir uns eine <code>\/var\/www\/www.theinterwebz.de\/docs\/index.php<\/code>, welche wir durch Aufruf von <a href=\"https:\/\/www.theinterwebz.de\">https:\/\/www.theinterwebz.de<\/a> testen k\u00f6nnen. <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span>\nphpinfo();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">root@debian:\/<span class=\"hljs-keyword\">var<\/span>\/www\/www.theinterwebz.de\/docs<span class=\"hljs-comment\"># a2ensite www.theinterwebz.de-ssl.conf<\/span>\nroot@debian:\/<span class=\"hljs-keyword\">var<\/span>\/www\/www.theinterwebz.de\/docs<span class=\"hljs-comment\"># systemctl restart apache2<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"944\" height=\"967\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-13-17-38.png\" alt=\"Ausgabe von phpinfo() im Webbrowser\" class=\"wp-image-6134\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-13-17-38.png 944w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-13-17-38-586x600.png 586w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-13-17-38-293x300.png 293w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-13-17-38-768x787.png 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-13-17-38-146x150.png 146w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-13-17-38-220x225.png 220w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-13-17-38-439x450.png 439w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-13-17-38-600x615.png 600w\" sizes=\"auto, (max-width: 944px) 100vw, 944px\" \/><figcaption>Ausgabe von phpinfo() im Webbrowser<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Testen der Einstellungen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt kann das Setup mit Diensten wie dem <a rel=\"noreferrer noopener\" aria-label=\"Qualys SSL-Test (\u00f6ffnet in neuem Tab)\" href=\"https:\/\/www.ssllabs.com\/ssltest\/\" target=\"_blank\">Qualys SSL-Test<\/a> getestet werden. Das Ergebnis sollte \u00e4hnlich dem folgenden Screenshot aussehen. <\/p> \n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1060\" height=\"665\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-17-01-46.png\" alt=\"Qualys SSL Report mit A+ Bewertung\" class=\"wp-image-6150\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-17-01-46.png 1060w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-17-01-46-800x502.png 800w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-17-01-46-300x188.png 300w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-17-01-46-768x482.png 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-17-01-46-150x94.png 150w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-17-01-46-717x450.png 717w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-17-01-46-945x593.png 945w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/Bildschirmfoto-von-2019-09-25-17-01-46-600x376.png 600w\" sizes=\"auto, (max-width: 1060px) 100vw, 1060px\" \/><figcaption>So kann der Server in den produktiven Webhosting-Betrieb gestellt werden<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">TLS bei anderer Software h\u00e4rten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An dieser Stelle m\u00f6chte ich noch auf <a href=\"https:\/\/cipherli.st\/\">https:\/\/cipherli.st\/<\/a> hinweisen. Hier finden sich regelm\u00e4\u00dfig aktualisierte Snippets f\u00fcr vern\u00fcnftige TLS\/SSL-Einstellungen diverser Softwareprodukte, auch \u00fcber das reine Webhosting hinaus. Auch ich habe mich f\u00fcr den Apache2 und den ProFTPd dort bedient. Ebenso wie bei den f\u00fcr meinen Mailserver relevanten Diensten. <\/p> \n","protected":false},"excerpt":{"rendered":" <p> Dieser Artikel zeigt wie man auf Basis von einem Debian Linux einen Shared-Webhosting Server aufsetzt und konfiguriert. Der Fokus wird hierbei auf der Sicherheit liegen. So sollen nur moderne Verschl\u00fcsselungstechnologien (wie TLS1.3 \/ TLS 1.2 mit PFS und modernen Crypto-ciphern) zum Einsatz kommen. Die einzelnen Webpr\u00e4senzen werden voneinander isoliert laufen. Die Zertifikate werden kostenlos und&hellip; <\/p> \n","protected":false},"author":1,"featured_media":6091,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[12,95,87,3,94],"tags":[381,394,390,370,92],"class_list":["post-6088","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration","category-hosting","category-it","category-linux","category-website-it","tag-administration","tag-hosting","tag-it","tag-linux","tag-website","comments-open","has-comments"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>(Secure) Webhosting 1\u00d71 &#8211; Commander1024<\/title>\n<meta name=\"description\" content=\"Dieser Artikel zeigt wie man einen Shared-Webhosting Server mit Linux aufsetzt und konfiguriert. Der Fokus wird hierbei auf der Sicherheit liegen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcus Scholz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/\"},\"author\":{\"name\":\"Marcus Scholz\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#\\\/schema\\\/person\\\/aebb61d9f57867e2234becde6d99da8d\"},\"headline\":\"(Secure) Webhosting 1\u00d71\",\"datePublished\":\"2019-09-30T06:20:00+00:00\",\"dateModified\":\"2020-04-17T07:09:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/\"},\"wordCount\":1580,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#\\\/schema\\\/person\\\/aebb61d9f57867e2234becde6d99da8d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/www.commander1024.de_access.log_CRT.jpg\",\"keywords\":[\"Administration\",\"Hosting\",\"IT\",\"Linux\",\"Website\"],\"articleSection\":[\"Administration\",\"Hosting\",\"IT\",\"Linux\",\"Website\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/\",\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/\",\"name\":\"(Secure) Webhosting 1\u00d71 &#8211; Commander1024\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/www.commander1024.de_access.log_CRT.jpg\",\"datePublished\":\"2019-09-30T06:20:00+00:00\",\"dateModified\":\"2020-04-17T07:09:53+00:00\",\"description\":\"Dieser Artikel zeigt wie man einen Shared-Webhosting Server mit Linux aufsetzt und konfiguriert. Der Fokus wird hierbei auf der Sicherheit liegen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/www.commander1024.de_access.log_CRT.jpg\",\"contentUrl\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/www.commander1024.de_access.log_CRT.jpg\",\"width\":1919,\"height\":1080,\"caption\":\"Zufriedener Apache2 Webserver liefert diese Webseite aus\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/09\\\/secure-webhosting-1x1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"(Secure) Webhosting 1\u00d71\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/\",\"name\":\"Dem Commander1024 sein Blog\",\"description\":\"A Network Engineer&#039;s life\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#\\\/schema\\\/person\\\/aebb61d9f57867e2234becde6d99da8d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#\\\/schema\\\/person\\\/aebb61d9f57867e2234becde6d99da8d\",\"name\":\"Marcus Scholz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Underground-Tour-89-scaled.jpg\",\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Underground-Tour-89-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Underground-Tour-89-scaled.jpg\",\"width\":1707,\"height\":2560,\"caption\":\"Marcus Scholz\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Underground-Tour-89-scaled.jpg\"},\"description\":\"Seit Kindheitstagen ist der Computer sein Begleiter. Was mit Linux anfing, wurde 2005 ein\\\/e Beruf\\\/ung, die weit \u00fcber den Arbeitsplatz hinausgeht. Durch stetige Weiterentwicklung fasste er auch im *BSD Segment Fu\u00df und bietet mittlerweile professionelle L\u00f6sungen im Bereich Hosting, Networking und Infrastruktur an. Als Ausgleich besch\u00e4ftigt er sich neben Computerspielen mit der Fotografie.\",\"sameAs\":[\"https:\\\/\\\/www.commander1024.de\",\"https:\\\/\\\/www.facebook.com\\\/Commander1024\",\"https:\\\/\\\/x.com\\\/Commander1024\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCG_WzkCMycoSH7lEcvKHnmA\"],\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/author\\\/commander1024\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"(Secure) Webhosting 1\u00d71 &#8211; Commander1024","description":"Dieser Artikel zeigt wie man einen Shared-Webhosting Server mit Linux aufsetzt und konfiguriert. Der Fokus wird hierbei auf der Sicherheit liegen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/","twitter_misc":{"Verfasst von":"Marcus Scholz","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/#article","isPartOf":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/"},"author":{"name":"Marcus Scholz","@id":"https:\/\/www.commander1024.de\/wordpress\/#\/schema\/person\/aebb61d9f57867e2234becde6d99da8d"},"headline":"(Secure) Webhosting 1\u00d71","datePublished":"2019-09-30T06:20:00+00:00","dateModified":"2020-04-17T07:09:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/"},"wordCount":1580,"commentCount":3,"publisher":{"@id":"https:\/\/www.commander1024.de\/wordpress\/#\/schema\/person\/aebb61d9f57867e2234becde6d99da8d"},"image":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/www.commander1024.de_access.log_CRT.jpg","keywords":["Administration","Hosting","IT","Linux","Website"],"articleSection":["Administration","Hosting","IT","Linux","Website"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/","url":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/","name":"(Secure) Webhosting 1\u00d71 &#8211; Commander1024","isPartOf":{"@id":"https:\/\/www.commander1024.de\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/#primaryimage"},"image":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/www.commander1024.de_access.log_CRT.jpg","datePublished":"2019-09-30T06:20:00+00:00","dateModified":"2020-04-17T07:09:53+00:00","description":"Dieser Artikel zeigt wie man einen Shared-Webhosting Server mit Linux aufsetzt und konfiguriert. Der Fokus wird hierbei auf der Sicherheit liegen.","breadcrumb":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/#primaryimage","url":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/www.commander1024.de_access.log_CRT.jpg","contentUrl":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/09\/www.commander1024.de_access.log_CRT.jpg","width":1919,"height":1080,"caption":"Zufriedener Apache2 Webserver liefert diese Webseite aus"},{"@type":"BreadcrumbList","@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/09\/secure-webhosting-1x1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.commander1024.de\/wordpress\/"},{"@type":"ListItem","position":2,"name":"(Secure) Webhosting 1\u00d71"}]},{"@type":"WebSite","@id":"https:\/\/www.commander1024.de\/wordpress\/#website","url":"https:\/\/www.commander1024.de\/wordpress\/","name":"Dem Commander1024 sein Blog","description":"A Network Engineer&#039;s life","publisher":{"@id":"https:\/\/www.commander1024.de\/wordpress\/#\/schema\/person\/aebb61d9f57867e2234becde6d99da8d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.commander1024.de\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/www.commander1024.de\/wordpress\/#\/schema\/person\/aebb61d9f57867e2234becde6d99da8d","name":"Marcus Scholz","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2020\/11\/Underground-Tour-89-scaled.jpg","url":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2020\/11\/Underground-Tour-89-scaled.jpg","contentUrl":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2020\/11\/Underground-Tour-89-scaled.jpg","width":1707,"height":2560,"caption":"Marcus Scholz"},"logo":{"@id":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2020\/11\/Underground-Tour-89-scaled.jpg"},"description":"Seit Kindheitstagen ist der Computer sein Begleiter. Was mit Linux anfing, wurde 2005 ein\/e Beruf\/ung, die weit \u00fcber den Arbeitsplatz hinausgeht. Durch stetige Weiterentwicklung fasste er auch im *BSD Segment Fu\u00df und bietet mittlerweile professionelle L\u00f6sungen im Bereich Hosting, Networking und Infrastruktur an. Als Ausgleich besch\u00e4ftigt er sich neben Computerspielen mit der Fotografie.","sameAs":["https:\/\/www.commander1024.de","https:\/\/www.facebook.com\/Commander1024","https:\/\/x.com\/Commander1024","https:\/\/www.youtube.com\/channel\/UCG_WzkCMycoSH7lEcvKHnmA"],"url":"https:\/\/www.commander1024.de\/wordpress\/author\/commander1024\/"}]}},"_links":{"self":[{"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/posts\/6088","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/comments?post=6088"}],"version-history":[{"count":70,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/posts\/6088\/revisions"}],"predecessor-version":[{"id":6429,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/posts\/6088\/revisions\/6429"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/media\/6091"}],"wp:attachment":[{"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/media?parent=6088"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/categories?post=6088"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/tags?post=6088"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}