# Grundlegende Fragen zu Webserver mit Linux



## tmarsel (7. März 2005)

Hi Leute,

 ich hätte da ein paar Grundlegende Fragen zum Thema Webserver unter Linux. Und zwar habe ich vor, einen eigenen Webserver mit Apache und Linux einzurichten, der auch über das Internet erreichbar sein soll. Natürlich, mir ist bekannt, dass das mit einem Homeserver und normalen DSL nix besonderes werden kann, aber es solle ja auch nur dem Zeck des Lernens, Übens und Probierens dienen. Ich möchte einfach mehr über Linux in Verbindung mit Server-Diensten Lernen und dazu wäre mir ein Professioneller Root-Server zu teuer und zu riskant. Ich habe in Linux schon ein paar Jahre Erfahrung, in Bezug auf Webserver Installation & Konfiguration bin ich allerdings noch Anfänger.

 So, noch ein paar Grundlegende Infos zum Server:

 Prozessor: Intel Centrino 1,7GHZ
 Arbeitsspeicher: 384MB DDRAM
 Festplatte:  40GB
 Betriebssystem: Debian GNU/Linux 3.1 "sarge" mit Kernel 2.6.8
 Internet: XDSL mit 2Mbit/sec. Download und 384kbit/sec. Upload
 (für Testzwecke dürfte das meiner Meinung nach reichen)

 Meine Fragen, zu denen ich trotz langem Suchens keine wirklich brauchbaren Antworten finden konnte:

 1.) Ist ein LAMPP-Server von Apachefriends.org ausreichend was Performance und Sicherheit betrifft oder gilt so ein "Fix-und-Fertig-Sorglos-Paket" eher als Unprofessionell bzw. Unsicher?

 2.) In welches Verzeichnis Installiere ich den Server bzw. wo ist der Ordner am besten aufgehoben, in welchen die ganzen Websites kommen (im Fall von Apache "htdocs")? Standardmässig wird ja das LAMPP-Paket in /opt/lampp installiert und die Websites befinden sich dann in /opt/lampp/htdocs
 Kann man diese Konfiguration übernehmen oder wo speichert ein Professioneller Hoster seine Kunden-Websites?

 3.) Damit der Server inkl. den Diensten und Programmen läuft, muss man ja unter einem Benutzer-Account ständig eingeloggt sein - denke ich zumindest mal. Mit was für einem Account ist ein Webserver eines typischen Webhosters denn Online? Als root? Als eingeschränkter Benutzer?

 4.) Benötigt ein Webserver eine Firewall?

 OK, das war's vorerst. Entschuldigt bitte, falls die Fragen schon mal wo gestellt wurden, aber ich konnte auch mit SuFu nichts wirklich hilfreiches finden...
 Würde mich sehr über ein paar Antworten freuen, Vielen Dank im Voraus 

 Mfg
 tmarsel


----------



## Neurodeamon (8. März 2005)

Hi tmarsel!

Schön das Du erst mal auf einem lokalen System herumprobierst. Ich versuche mich mal an Deine Fragen heranzutasten:

1.) Da spalten sich die Meinungen. Theoretisch sollte ein LAMPP relativ sicher sein. Der Apachefriends LAMPP ist - wenn die letzten Versionen nicht viel an der Konfiguration geändert wurde - so konfiguriert, das man so viele Funktionen wie möglich hat. Das könnte ein Punkt sein, der dagegen spricht. Ein Purist wie ich bastelt sich dann lieber alles zusammen und benötigt dann auch höchstens ein Viertel des LAMPP-Speicherplatzes 
Im Grunde genommen kann man sich mit Debian aber ein eigenes LAMPP mit apt-get einrichten. Auch hier ist natürlich nachbessern angesagt, was die Konfiguration angeht. Ich empfehle immer http://www.debianhowto.de - hier wird so ziemlich alles geschildert, was man für einen (relativ sicheren) Webserver braucht und wie man das erreicht.

2.) Wo das htdocs-Verzeichnis sich befindet ist Jacke-wie-Hose. Du wirst wohl bei den meisten Webhostern eine eigene Verzeichnisstruktur finden. Als praktisch hat sich eine eigene Partition erwiesen, die man sehr einfach sichern kann.

3.) Das ist absoluter Schmarrn. Die Dienste besitzen entweder a) einen eigenen Besitzer, werden b) über die init.d (& Co. oder auch gerne über die daemontools) gestartet (also muss man sich nicht einloggen) und laufen c) am besten nie über root. Bis auf seltene Programme sollte immer ein Benutzer mit eingeschränkten Rechten den Dienst besitzen. Sollte man einen Dienst per Hand starten müssen, kann man mit dem Linux Befehl *nohup* dessen Priorität so erhöhen, das der Prozess nach dem ausloggen weiterläuft!

4.) Kommt darauf an. Theoretisch sollte jeder Server, der mit einem größeren Netzwerk (Internet z. B.) verbunden ist eine Firewall mit bestimmten Regeln haben. Das gilt dem Selbstschutz, wie auch dem Schutz für andere. Es ist nicht unbedingt notwendig, aber sehr, sehr zu empfehlen (und auch für Anfänger - leider - sehr schwer einzurichten).

Ich denke mal das wirft vielleicht weitere Fragen auf   
Also Petri Heil!


----------



## Dennis Wronka (8. März 2005)

Ich sag mal was zu Punkt 3 und 4.
3. Unter Linux werden Server-Prozesse in der Regel als Daemon gestartet, normalerweile beim Booten. Selbst wenn ein solcher Daemon manuell gestartet wird laeuft er in der Regel im Hintergrund und es muss nichts weiter unternommen werden damit er auch nach dem Logout des Users der den Dienst gestartet hat weiterhin laeuft.
4. Wie mein Vorredner schon sagte sollte jeder direkt mit dem Internet verbundene Server eine Firewall haben. Denn in der Regel laeuft mehr als nur der Webserver. Weiterhin ist es nicht allzu schwer eine Firewall einigermassen sicher zu konfigurieren, auch nicht fuer Anfaenger. Mit nur 4 Befehlen kannst Du alles bis auf den Zugriff auf den Webserver dicht machen. Wenn das nicht mal einfach ist.

Nachtrag: Man kann es auch auf 2 Befehle reduzieren. Also noch einfacher.


----------



## tmarsel (8. März 2005)

Vielen Dank für die Umfangreichen Erklärungen - haben sehr geholfen 

 zum Apache bzw. LAMPP-Server: Ich konnte bereits Erfahren, dass man als Professioneller Hoster eigentlich nur den Originalen Apache verwendet und kein "Fertig"-Paket. Naja, irgendwie auch logisch, da diese Pakete eigentlich nur für den Home-User gedacht sind um schnell mal was Probieren zu können.

 Wie du schon sagtest, sind beim LAMPP von apachefriends sehr viele Funktionen Standardmässig aktiviert, die nicht gerade als sicher gelten - Beispiel mod_rewrite.
 Ich habe jetzt aber trotzdem vorerst mal den LAMPP-Server installiert, aus folgendem Grund:

 Ich möchte mich langsam und behutsam vorantasten - die Erste Hürde die ich zu meistern habe ist erstmal, dass der Server überhaupt aus dem Internet erreichbar ist, weil das in meinem Fall noch die schwierigste Aufgabe ist (kann sich glaube ich jeder vorstellen, der die Nachteile von DSL mit dynamischer IP kennt ^^).
 Um das Testen zu können, brauche ich erstmal einen Test-Server, an dem ich sehen kann, ob er von Aussen erreichbar ist oder nicht.
 Wenn das mal geschafft ist, dann kann ich mich in die Feinheiten der Server-Konfiguration und Sicherheits-Einstellungen wagen.

 So, also LAMPP-Server mit PHP4 und MySQL funktioniert, zumindest im Lokalen Netzwerk. Ich konnte auch bereits die ganze Geschichte mit der Dynamischen IP und dem Automatischen Update meiner IP regeln (ich sage da jetzt nur no-ip.com), soweit scheint alles ohne Probleme zu funktionieren.
 Jetzt muss ich mich nur noch irgendwie vergewissern können, ob mein Server auch wirklich von aussen erreichbar ist - aber ohne, dass ich dauernd einen Kumpel um Hilfe bitten muss.

 Deswegen noch eine Frage von mir: Wie stelle ich das am besten an?

 Ich habe ein bisschen herumgetüftelt und probiert: Ich habe eine kleine Test-Website erstellt und hoste diese auf meinem Server. Jetzt habe ich mit einem Ladezeit-Check diese Website überprüfen lassen, mit der Domain die ich mir auf no-ip.com registriert habe. Er konnte die Website ohne Probleme auf die Ladezeit überprüfen.
 Hat das jetzt irgendwie eine Aussagekraft über die Erreichbarkeit meines Servers?

 Noch mal Danke für die Hilfe 

 Mfg
 tmarsel


----------



## Neurodeamon (8. März 2005)

@reptiler: Ich kenne User, die haben sich mit nur *einem* Befehl ausgesperrt 

@tmarsel: Deine Idee mit dem Ladezeitencheck ist schon mal sehr gut. Wenn Du bereits Webspace hast, z. B. mit Perl/PHP unterstützung, kannst Du eine Abfrage schreiben, die für Dich überprüft ob man den Server erreichen kann (dazu gibt es mehrere Beiträge - mit fertigen Scripten - im PHP-Forum). Sofern Du von einem anderem System als Deinem die Verbindung zu Deinem Webserver überprüfst, hat es definitiv Aussagekraft über die Erreichbarkeit von aussen =)


----------



## tmarsel (8. März 2005)

Danke für den Tip mit den PHP-Skripten, aber ich habe es mir dann doch etwas einfacher gemacht:

 Ich habe einfach einen Proxy benutzt. Wenn ich über einen Proxyserver auch auf meine Webseite gelange, die auf meinem Homeserver liegt, dann MUSS es ja funktionieren - und es hat funktioniert 
 Ich konnte ohne Probleme die Website aufrufen, sogar relativ schnell, wenn man bedenkt, dass es ein Homeserver ist und ich einen Proxy verwendet habe. Ohne Proxy geht es noch schneller 

 OK, dann Vielen Dank noch mal an euch, es hat alles wunderbar geklappt - dank eurer Hilfe 

 Mfg
 tmarsel


----------



## Dennis Wronka (9. März 2005)

Neurodeamon hat gesagt.:
			
		

> @reptiler: Ich kenne User, die haben sich mit nur *einem* Befehl ausgesperrt


Natuerlich:

```
iptables -A INPUT -j DROP
```

Aber mit einer Zeile mehr, also:

```
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j DROP
```
kann man alles bis auf den Webserver blocken.


----------



## Neurodeamon (9. März 2005)

Mit Deinen zwei Zeilen hättest Du aber auch jeglichen Zugriff über SSH ausgeschlossen 
Hier sollte man mit iptables ssh noch über port 22 (je nach konfiguration) freistellen (am besten mit 30 - 60 Sekunden delay nach 3 Fehlerhaften Loginversuchen gegen Bruterforceangriffe) 


```
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set \
--name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl \
 --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 \
 --hitcount 4 --rttl --name SSH -j DROP
```


----------



## Dennis Wronka (9. März 2005)

Ja gut, hast recht. Aber nicht jeder braucht unbedingt SSH. Wenn die Box direkt vor Dir steht brauchst Du's nicht zwingend.
Wir koennten natuerlich mit:

```
iptables -A INPUT -p tcp --dport smtp
iptables -A INPUT -p tcp --dport ftp
```
auch noch den Mail- und FTP-Server zugaenglich machen.
Ich denke mittlerweile haben wir auf jeden Fall genug Beispiele geliefert wie einfach es doch ist einen Paketfilter zu bauen.

Ich moechte zu unseren Beispielen mal anmerken, dass ich eigentlich kein Freund davon bin die Regeln direkt in die INPUT (etc.) Chain zu packen sondern lieber eigene Chains erstelle und die in den entsprechenden Chains verlinke.


----------



## Neurodeamon (9. März 2005)

reptiler hat gesagt.:
			
		

> Ja gut, hast recht. Aber nicht jeder braucht unbedingt SSH. Wenn die Box direkt vor Dir steht brauchst Du's nicht zwingend.


Ich möcht eigentlich auch keine große Diskussion starten, sondern nur darauf hinweisen, das jemand als Anfänger mit iptables eine Menge Schwachfug machen kann und es sehr einfach ist sich anhand eines Missverständnisses vom System auszuschließen. Deshalb hielt ich es für wichtig Dein Beispiel ein wenig zu erweitern um den wagemutigeren Lesern Fun mit dem Kundenservice einer Firma für Rootserver zu ersparen


----------



## Dennis Wronka (9. März 2005)

Ja okay.
Aber wir sind ja sowieso schon ueber's Ziel hinaus geschossen, er wollte ja nur wissen ob es schwer ist.  Und nicht wie man es macht.
Naja, jetzt hat er wenigstens ein paar kleine Beispiele wie es ungefaehr aussieht.
Bei weiteren Fragen kann er dann ja wieder um Hilfe rufen.
Bei den meisten Firewall-bezogenen Fragen kann ich glaub ich mittlerweile auf andere Threads verweisen, da ich hier, besonder in der letzten Zeit, soviel zu dem Thema gesagt hab wie wohl nie zuvor. Aber, ich liebe es (TM).


----------

