PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigener Server in der DMZ... Apache-Konfiguration für zwei Seiten...



smartysmart34
30.07.18, 19:20
Hallo zusammen,

nachdem mein Netzanschluss nun schnell genug für einen eigenen Server ist, möchte ich mir eine kleine Box zuhause hinstellen, von der aus ich zwei Dinge hosten möchte:
- Einen Reise-Blog (Wordpress)
- Nextcloud

Vor einiger Zeit hatte ich in meinem lokalen Netz mal eine Entwicklungsmaschine auf der ich verschiedene CMSse gehosted habe. Damals über virtuelle IP Adressen.
Ich bin halt irgendwie Apache-Fan. Und soweit ich weiß, kann Apache verschiedene Seiten entweder anhand der gerufenen IP-Adresse unterscheiden, oder anhand des Servernamen. Im lokalen Netz machbar, jetzt habe ich mit einem extern zugänglichen Server aber folgendes Problem:

Mein Kabelinternet-Anschluss hat nur eine IP-Adresse. Und unter DynDNS habe ich der genau einen Namen zugewiesen: Soltauhome.de.
Ich kann da also nicht mit verschiedenen IP adressen arbeiten, und auch nicht mit verschiedenen Servernamen.

Was ich möchte sind zwei seiten:
- Soltauhome.de/Blog
- Soltauhome.de/Nextcloud

Und diese würde ich gerne beide extern erreichen. Und mit Apache ausliefern.
Kennt sich damit jemand aus und kann mir einen Tip geben?

Ich habe Beträge im etz gefunden, dass das im Grunde mit nginx und einem dort konfigurierten Gateway-Host geht. Würde aber gerne Apache nutzen.

Bin für jeden Hinweis dankbar.

Danke und Gruß,
Martin

Dukel
30.07.18, 20:10
Das ist doch einfach machbar.
Entweder im Dokument Root beide Seiten in Unterordner ablegen oder zwei Location Blöcke in der Konfig definieren.

nopes
30.07.18, 21:15
Für verschiedene VHosts brauchst du dann den Name-based Virtual Host Support (https://httpd.apache.org/docs/current/vhosts/name-based.html). Beispiel Konfiguration aus der Dokumentation:

<VirtualHost *:80>
# This first-listed virtual host is also the default for *:80
ServerName www.example.com
ServerAlias example.com
DocumentRoot "/www/domain"
</VirtualHost>

<VirtualHost *:80>
ServerName other.example.com
DocumentRoot "/www/otherdomain"
</VirtualHost>

Kein Ahnung ob DynDNS "Subsubdomains" erlaubt, aber das wäre wohl am einfachsten...

smartysmart34
02.08.18, 16:57
Hallo nochmal,

also ich gebe zu, meine letzte Serverkonfiguration ist eine ganze Weile her und bezog sich glaube ich noch auf Suse 12. Derzeit nutze ich Suse Leap 15.0 und komme nicht weiter. Vielleicht stehe ich auch nur auf dem Schlauch.

Ich habe unter /srv/www folgende Verzeichnisse:

# ls -l
insgesamt 8
drwxr-xr-x 2 wwwrun wwwrun 6 7. Jun 20:45 cgi-bin
drwxr-xr-x 3 wwwrun wwwrun 79 6. Jul 22:32 htdocs
drwxr-xr-x 13 wwwrun wwwrun 4096 8. Jul 10:21 Nextcloud
drwxr-xr-x 5 wwwrun wwwrun 4096 6. Jul 22:39 Wordpress

Wohin setze ich jetzt das Document Root? /srv/www? Oder muss ich die beiden Verzeichnisse Nextcloud und Wordpress nuch unter htdocs verschieben?

Außerdem wird ja in der Konfiguration auch ein cgi-bin Verzeichnis gesetzt um anzuzeigen, wo ausführbare Scripte liegen. Die liegen ja aber sowohl in Nextcloud als auch in Wordpress. Setze ich diese Angabe dann auch auf /srv/ww oder auf /htdocs?

Da ich das Meiste mit Yast2 mache versuche ich manuelle Änderungen an den FIles zu vermeiden.

Ich nehme an, die oben gelisteten Beispiele für vhosts gehen in das Unterverzeichnis /etc/apache2/vhost.d und dort in ein zu benennendes Blabla.conf?
Wenn ich sie nämlich einfach in die Konfiguration der Default page packe, wirft Yast sie wieder raus...

Ihr seht, ein kleines bisschen Hilfe brauche ich noch :-(

Danke und Gruß,
Martin

Dukel
02.08.18, 20:33
Ja. Die beiden Ordner gehören in den Ordner htdocs und der Serverroot auf .../htdocs.
Dann ist http://server/Nextcloud -> /srv/www/htdocs/Nextcloud und http://server/Wordpress -> /srv/www/htdocs/Wordpress.
Mit cgi-bin bin ich überfragt. Brauchen beide nicht Php und kein CGI?

root666
07.08.18, 23:40
Du kannst auch mal schauen ob dein dyndns wildcards kann. Dann sollte alles vor .Soltauhome.de weitergereicht werden. Intern auf deinem Server kannst du dann z.B. für die Anfragen blog.Soltauhome.de und nextcloud.Soltauhome.de unter /etc/apache2/sites-available/ folgende 2 dateien anlegen:

blog.Soltauhome.de.conf (das gleiche dann nochmal für nextcloud.Soltauhome.de / ACHTUNG USER und GROUP noch anpassen und ggf. Verzeichnisse)


<VirtualHost *:80>
ServerAdmin webmaster@blog.Soltauhome.de
ServerName blog.Soltauhome.de
ServerAlias www.blog.Soltauhome.de
DocumentRoot /var/www/virtual/blog.Soltauhome.de/htdocs
DirectoryIndex disabled
LogLevel error
ErrorLog /var/log/apache2/blog.Soltauhome.de/error.log
Alias /errors/ /var/www/virtual/blog.Soltauhome.de/errors/
SuexecUserGroup DEINWWWUSER DEINWWWUSERGROUP
<Directory /var/www/virtual/blog.Soltauhome.de/htdocs>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
DirectoryIndex index.html index.xhtml index.htm
Require all granted
</Directory>
Alias /cgi-bin/ /var/www/virtual/blog.Soltauhome.de/cgi-bin/
<Directory /var/www/virtual/blog.Soltauhome.de/cgi-bin>
AllowOverride AuthConfig Indexes Limit Options=Indexes,MultiViews \
Fileinfo=RewriteEngine,RewriteOptions,RewriteBase, RewriteCond,RewriteRule Nonfatal=Override
DirectoryIndex index.cgi index.pl index.py index.rb
Options FollowSymLinks ExecCGI
AddHandler cgi-script .cgi .pl .py .rb
Require all granted
</Directory>
</VirtualHost>


Danach noch mit a2ensite die beiden configs aktivieren und apache2 reloaden oder restarten.

Ach und kleiner Tip noch. Weil ich in der Überschrift DMZ lese. Nutzt du den Server nur als Webserver? Falls ja dann lass das mit der DMZ und leite nur den Port 80 von der WAN-Seite auf die Interne IP deines Servers um. Musst ja deswegen nicht gleich den ganzen Server ans Netz hängen wenn nur Port 80 benötigt wird. Das schmälert schon mal die Angriffsfläche. ;)

smartysmart34
21.08.18, 18:22
Hallo zusammen,

Ich melde mich wieder, weil ich es jetzt endlich geschafft habe, mich mal wieder drum zu kümmern :-|

Vorab: Ich möchte den Server schon grundsätzlich vom Rest des Netzwerkes getrennt haben. Da bin ich paranoid. Ich kann ja an dem ersten Router ebenso genau nur Port 80 über Weiterleitung freigeben. BZW. den https-Port. Ich sehe nicht, wo da die Angriffsfläche größer wird, im Vergleich zu Port 80 ohne DMZ.

Momentan habe ich folgendes erreicht:
Beide Verzeichnisse (Nextcloud und Travelblog) hängen unter /srv/www/htdocs.
Wenn ich aber die jeweiligen Verzeichnisse aufrufe, bekomme ich die PHP files zum Download angeboten bzw. kann sie mit einem Editor öffnen:

In Yast (ich habe die Konfiguration bisher weitestgehend über Yast gemacht) ist in den Einstellungen zum HTTP-Server bisher Port 80 geöffnet.
Als Module habe ich PHP5, PHP7 und PHP7.0. Ich habe keine Ahnung, wieso 7 und 7.0 da stehen, angeblich sind beide aktiv. PHP5 ist IMMER inaktiv, wenn ich in den Dialog gehe. Wenn ich PHP5 aktivieren will fordert er Dateien zur Installation an, zieht die dann auch und beendet den Dialog wieder. Aber PHP5 bleibt inaktiv.

Zusätzlich habe ich einen Screenshot von der Hauptseitenkonfiguration gemacht.

Kann mir mit diesen Informationen jemand weiter helfen? Irgendwas übersehe ich...

Danke und Gruß,
Martin

smartysmart34
21.08.18, 18:24
Den letzten Screenshot kann ich nicht hochladen...

strcat
21.08.18, 21:09
Wenn PHP nicht installiert ist, kann es serverseitig nicht verarbeitet werden und wird runtergeladen. Installier einfach PHP.

smartysmart34
22.08.18, 03:33
Hallo Strcat,

ich bin mir nicht sicher ob ich verstehe, was Du meinst. Wie Du in der Übersicht der Module sehen kannst (Screenshot), ist PHP 7 installiert und aktiviert.
Und wenn ich PHP5 aktiviere, dann lädt er es runter. Aber er aktiviert es nicht.
Ich bin mir also nicht sicher, was ich zu Deinem Vorschlag "Instalier PHP" anderes machen sollte, als ich eh getan habe?

Gruß,
Martin

marce
22.08.18, 09:52
Keine Ahnung was YAST da alles automatisch macht - aber Du musst dem Apache natürlich auch noch sagen, was er mit den .php-Files machen soll... Das geschieht in der Apache-Server-Konfig. Ich vermute mal, da fehlt bei Dir noch was.

Dukel
22.08.18, 12:32
Mach einen Schritt nach dem anderen.
Apache muss laufen (ist wohl der Fall), Php muss laufen (am einfachsten mit einer einfachen phpinfo Datei zu testen)
Dann beide Applikationen installieren und testen und danach die Veröffentlichung angehen.

smartysmart34
27.08.18, 18:05
Hallo zusammen,

kurzes Update. Ich hatte letzte Woche tatsächlich die Handler für PHP vergessen (SetHandler application/x-httpd-php). Nachdem ich das in die Konfiguration aufgenommen hatte funktionierten meine drei Unterverzeichnisse unter htdocs (Wordpress, Nextcloud, phpMyAdmin) hervorragend unter angabe der Server-IP gefolgt vom Verzeichnis (192.168.2.3/Nextcloud - zum Beispiel).

Am Ende soll der Server aber ins Netz, und zwar mit einem gültigen SSL-Zertifikat. Zu dem Zweck wollte ich Certbot verwenden.
Allerdings funktioniert Certbot nur mit einem vHost.
Also habe ich in Yast einen vHost definiert und dem als Document Root ebenfalls /strv/www/htdocs gegeben.

Wenn ich nun aber die Seiten aufrufen möchte, dann erhalte ich im Browser:

[an error occurred while processing this directive] You don't have permission to access the requested object. It is either read-protected or not readable by the server. [an error occurred while processing this directive]

Die Verzeichnisse haben sich aber weder weg bewegt noch haben sie die Rechte geändert.

Worauf muss ich achten, wenn ich die entsprechende Verzeichnisstruktur in einem vHost unterbringen will?

Danke und Gruß,
Martin

nopes
27.08.18, 20:23
Halt mal die Rechte prüfen, ggf. vhost und ls -lah /strv/www/htdocs zeigen; Typo? meinst vermutlich /srv/

Jedenfalls meint Google, chmod heilt es, ich finde das aber auch nicht plausibel, also weiter buddeln ;)

[edit]wenn ich so drüber sinne, würde ich auf den Typo tippen, vermutlich versucht php Dateien in einem nicht vorhanden Pfad zu finden und teilt dir so mit, dass das nicht geht - ist aber geraten.

smartysmart34
28.08.18, 10:41
Hallo zusammen.

Abschließend: Ich hatte in der hhtp.conf vor Unzeiten mal zu TEstzwecken den include für die vhost *.conf auskommentiert. Kaum hab ich das wieder aktiviert und dem vhost noch einen passenden Alias Servername verpasst, klappt es.
Jetzt habe ich auch mit certbot ein SSL-Zertifikat gezogen und installiert.

Eine neue Frage habe ich und bin nicht sicher, ob ich die hier stellen oder einen neuen Thread aufmachen soll. Ich versuchs mal hier:
Unter dem htdocs habe ich jetzt drei Unterverzeichnisse:
- Nextcloud
- Wordpress
- phpMyAdmin

Ich möchte, dass NExtcloud und Wordpress extern verfügbar sind, phpMyAdmin aber nur im lokalen Netz.
Muss ich phpMyAdmin jetzt in einen eigenen vhost auslagern?
Dann würde ich unterhalb von /htdocs ein Unterverzeichnis /publicapps machen, und das als Document root für den ersten vhost nehmen, htdocs/phpMyAdmin wäre dann Document root für den zweiten?
Könnte das so klappen?
Und wie beschränke ich den zweiten dann auf mein lokales Netz?

Danke und Gruß,
Martin

pucki
02.09.18, 23:08
Hi,

ssl ist ja schon mal net.

Anmerkung:
Das ist ja ganz nett, wenn du eine der Anwendungen direkt ins Hauptverzeichnis legst, so dass das deine Default webseite ist.
Das Dokument root sollte dann aber auch genau auf diesen Pfad zeigen
e.g.
Worpress als default anwendung unter https://domain.de/ - > DocumentRoot /../../../Wordpress-Ordner/

Nextcloud und insbesondere phpmyadmin würde ich auf keinen Fall als Unterverzeichnis sondern parallel dazu ablegen und den
Zugriff über Aliase ermöglichen. Eine Abweichung von den standard - aliasen, insbesondere bei phpmyadmin würde ich dir
sehr nahelegen. Security by obscurity hat zwar nicht wirklich was mit Sicherheit zu tun, aber man muss ja nicht zwingend Angriffs-
punkte für diverse Skripte liefern. Aliase haben auch den Vorteil, configzeile raus und weg ist der Service ... Zertifikate haben auch
keine Probleme mit Aliasen ...

Für die Rechte kannst du aussuchen ob du location oder directory verwenden möchtest, Unterschied:
https://serverfault.com/questions/196957/difference-between-location-and-directory-apache-directives
Rest s. Doku von apache

Frage:
wenn dann mal alles läuft, wie oft denkst du, dass du phpmyadmin noch benötigst?
Tip:
lege dir ein skript an, mit dem du den alias de-/aktivieren kannst, apache neu starten.
Deaktivieren könnte man auch täglich via Cron machen, am besten bevor logrotate anläuft ...

Grüße und viel Spass damit ... und bitte updates nicht vergessen ... insbesondere Wordpress ist ein gern gesehenes Ziel!

achso ...
- ich hoffe die signatur stimmt nicht mehr ...
- und in den letzten Jahren hat sich die Ordnerstruktur und die Aufteilung der Konfiguration etwas geändert,
zumindest unter debian ... ob opensuse da mitgezogen hat, weiss ich nicht. Ob deine alte conf noch
zeitgemäß ist, solltest du prüfen ...

smartysmart34
09.09.18, 23:11
Hallo Pucki,

ich bin an Apache verzweifelt und hab das Ganze jetzt basierend auf einer guten Anleitung via nginx umgesetzt. Dort habe ich einen Gatewayhost, der die Kommunikation mit der Außenwelt abwickelt und intern je nach gerufenem Pfad die Applikationen weiterleitet. Mittels allow/deny habe ich phpMyAdmin ausschließlich im lokalen Netzwerk verfügbar. Von außen ist die phpMyAdmin-Seite nicht erreichbar.
Über die jeweiligen Logfiles wacht ein Fail2Ban für Nextcloud und Wordpress.
Wordpress hat sicherheitshalber ein "Limit Login-Plugin" aktiv und fast alle Benutzer (alle Admins - Wordpress und Nextcloud) sind mittels 2-Faktor-Authentisierung gesichert.
Backupskript läuft regelmäßig und seit heute sichert Fail2Ban auch noch den mit Zertifikat konfigurierten ssh-Zugang.

Natürlich muss ich regelmäßig Updates einspielen, das mach ich aber eh schon immer.
Zumindest denke ich, dass ich das in meinem Rahmen Mögliche getan habe. Wenn jetzt noch was schief geht... dann isses halt so.
Immerhin habe ich den Server zwischen zwei Firewalls in eine DMZ gepackt.

Gruß,
Martin