Aufbau eines ISP Servers auf FreeBSD Basis

Berufspenner

Well-Known Member
Hi@all

Kennt jemand einen Artikel oder kann mir Tipps geben, wie ich einen "sicheren" (ISP) Server auf FreeBSD Basis aufbauen kann? Wichtig dabei sind mir Themen wie: ordentliches und sinnvolles partitionieren, Dateisystemverschlüsselung (wie, womit?), eine sichere und durchdachte Userverwaltung, Quota, absichern von typischen Serverdiensten (HTTPd, FTPd, etc.) und Sachen, die mir jetzt grade nicht einfallen. Das System soll als Sever und teilzeit, aufgrund mangelnder Kapazitäten, als Router fungieren. Einige Fragen werden sich evlt. mit Hilfe der FreeBSD Docs. klären lassen. Dennoch wären mir evtl. Erfahrungen wichtig.

Cu
André
 
Kurz Antwort: man jail
Damit kanns Du dann jedem User sein "eigenes" FreeBSD zur Verfügung stellen.

Also für mich ist ein ISP ein Internet Sevice Provider. Der neben Einwahl auch allerlei Dienste bereitstellt. Was es dann wieder zu einem "grossen" Ding wachsen lässt.

Dateisystemverschlüsselung: man gbde, man geom

Sichern Serverdienste: man jail, wenn keine jails dann die sichersten der jewieligen Dienste raussuchen und in einer chroot Umgebung rennen lassen

Ansonsten, was willst Du genau machen?
 
Der neben Einwahl auch allerlei Dienste bereitstellt.
Du sagst es ja schon: "allerlei Dienste". Dann werde ich mich mal durch die Manpages durcharbeiten. Ich denke mal, dass das gute Ansätze sind, mit denen sich das weiter ausarbeiten lässt.
Ansonsten, was willst Du genau machen?
Ich möchte eigentlich "nur" ein von Grund auf sicheres Serversystem aufbauen und dabei so gut wie alle mir von FreeBSD gestellten Möglichkeiten ausschöpfen.

Cu
André
 
Original geschrieben von Berufspenner
[...]
Ich möchte eigentlich "nur" ein von Grund auf sicheres Serversystem aufbauen und dabei so gut wie alle mir von FreeBSD gestellten Möglichkeiten ausschöpfen.

Ahso. Na, da sieht die Welt dann schon wieder ganz anders aus und Deine Frage bezüglich eines ISP ist etwas komisch gestellt.

Um die Sicherheit zu erhöhen empfehle ich Dir folgendes:

1. Serverdienste
Lasse Serverdienste ala http, smtp, pop, DNS, FTP in einer jail laufen, sind diese gedacht.
Sollte es einem Eindringling nun gelingen über einen bug des Dienstes in Dein System zu kommen, so findet er sich in einer jail wieder, das Hostsystem ist davon nicht betroffen. Der Vorteil liegt auf der Hand.
Man weiss nie genau was der Eindringling alles "angefasst" haben könnte, daher wäre es immer das sichereste das System neu aufzusetzen. Ouch bei einem ganzen System, bei einer Jail in Kinderspiel. Einfach die BackupJail die man von der frisch eingerichtet Jail gemacht hat an die Stelle der alten Jail kopieren (diese wird einfach davor gelöscht). Gut ist.

2. Das System abschotten
Um das System von aussen abzuschotten eine Firewall Deiner Wahl einsetzen und diese anständig konfigurieren.
Daneben lässt Du dann noch Programme wie "tripwire" oder "aide" laufen. Mit diesen hast Du dann die Möglichkeit zu sehen was evtl. geändert wurde wenn man einer reinkommt.
Auch "portsentry" würde ich Dir empfehlen da es forensisch arbeitet und evtl. scans nach Sicherheitslücken erkennt und den Host mit einer IPFW Rule aussperrt.

3. Das System an sich härten
Fahre des System im securelevel mindestens auf "1". Dann setze noch das "schg" flag oder "sappnd" flag. Siehe dazu "man chflags". Setze das Flag auf Deine binaries in /bin /sbin,... . Ein Eindringling hat dann keine Möglichkeit diese Dateien zu löschen, oder mit Trojaner auszutauschen die Dein Passwort loggen. Ebenso setze das "schg" flag auf Deine configurationsdateien (auch die unter /usr/local/etc/rc.d). Denn darüber könnte der Eindringling ja den Befehl einpflanzen beim nächsten reboot den securelevel auf 0 bzw. -1 zu setzen und die Sicherheit wäre hinfällig. So kann auch dies nicht passieren.
Das hat natürlich zur Folge, das Du bei Veränderungen auch in den single user mode musst, aber bei einem System was gut eingerichtet ist, sollte das so oder so kaum vorkommen.
Deine logfiles, sollten auch mit dem "sappnd" flag versehen werden, oder "schg". Gerade diese nehmen sich hacker als erstes vor um ihre Spuren zu verwischen. Gerade .history wird von diesen, so lange diese im System sind, gerne auf /dev/null umgeleitet. Du kannst nicht nachvollziehen was diese gemacht haben. Ist es aber vor Eingriffen (auch vor root) geschützt, beissen die sich die Zähne daran aus.

GANZ WICHTIG.
Mache Dir einen sauberen Plan, Sicherheit ist nicht mal eben aus dem Ärmel geschüttelt und die Konfiguration muss gut dokumentiert sein, dass Du auch noch Monate später weisst was Du wo wie gedreht hast.
Arbeite eine Strategie aus, überdenke alles zweimail, dreimal, viermal.

Wenn Du weitere Fragen zu Sicherheit hast, dann helfe ich Dir gerne weiter.

Hoffe das hilft Dir etwas weiter.
 
Hoffe das hilft Dir etwas weiter.
Auf jeden Fall :) Ich werde das System eh von Grundauf neu einrichten. Eine Verständnisfrage hätte ich aber noch zu Jail: ich weise jedem Jail ja eine IP zu. Wie sieht es aber in Falle einer dynamischen IP-Zugewiesen aus? Gebe ich da dann einfach nur das Interface an?

Cu
André
 
Original geschrieben von Berufspenner
Eine Verständnisfrage hätte ich aber noch zu Jail: ich weise jedem Jail ja eine IP zu. Wie sieht es aber in Falle einer dynamischen IP-Zugewiesen aus? Gebe ich da dann einfach nur das Interface an?

Gegenfrage, warum willst Du mit dynamischen IPs hantieren?
Eine Jail kann immer nur eine IP haben, korrekt, es gibt wilde hacks da gehen dann auch mehr, ich weiss aber nicht wie sich das mit der Sicherheit verträgt...
Dann muss natürlich die netmask noch richtig gesetzt werden, /32 (255.255.255.255).
Einige Dienste müssen dann explizit an einen Port und IP gebunden werden, sonst läuft der Kram "Amok" (ssh, http,...).

Was nun die dynamische IP Zuweisung angeht, so habe ich das bei einer jail noch nie probiert, sollte aber irgendwie gehen. ABER, wie machst Du Deinem natd dann klar auf welche interne IP der Port 80 gemappt werden soll? Oder ssh, oder smtp, oder oder...

Geb den Jails eine feste interne IP.

Du kannst auch eine "DMZ" basteln, indem Du den jails eine IP aus 10.x gibst und Dein internes Netz unter 192.x rennt. Und die Jail dann nur vom Hostsystem und von aussen erreichbar ist, nicht aber vom internen Netz, oder von der Jail ins Interne Netz. Nochmals etwas mehr Sicherheit.

Ansonsten ist "man jail" wirklich sehr zu empfehlen, da eine der besten manpages die ich kenne.
 
Hi@all

Ich hätte da noch ein paar Verständnisfragen:

Ich erstelle also ein Jail und gebe ihm eine statische, lokale IP und das wahrscheinlich für jeden Dienst (HTTPd, FTPd, DNSd, DBd, etc.). Also pro Dienst ein Jail. Somit können dann diese Dienste, wenn nötig, via Jail IP aufeinander zugreifen, z.B. HTTPd auf DBd. Angenommen ich hätte diese Situation,

1. können dann alle Jails, wenn es benötigt wird, über die durch das Basissystem hergestellte Internetverbindung mit der Aussenwelt komunizieren?

2. ist es überhaupt sinnvoll, für jeden Dienst ein kleines Jail einzurichten?


3. wenn die Antwort von 1.2 'ja' ist, wie umgehe ich es dann, für jedes Jail die Ports einzelln upzudaten bzw. wie halte ich dann die installiereten Programme auf dem neuesten Stand bezüglich Sicherheitsupdates, Bugfixes, etc. ?

So das wäre es für den Moment. Sorry, wenn die Frage ein wenig doof sind und sich wohl auch recht schnell selber beantworten lassen. Ich arbeite mich aber erste in dieses Thema ein und bitte deswegen um Nachsehen.

Cu
André
 
Original geschrieben von Berufspenner
1. können dann alle Jails, wenn es benötigt wird, über die durch das Basissystem hergestellte Internetverbindung mit der Aussenwelt komunizieren?

Ja, die Jails können natürlich über das Hostsystem nach draussen gelangen, oder auch andersrum (da dann via NATD welches auf dem Hostsystem rennt).
Einfach die interne IP des Hostsystems als defaultrouter in der /etc/rc.conf der Jail eintragen.
Merke, eine Jail ist zu konfigurieren wie jedes andere FreeBSD System auch, mit ein paar Ausnahmen was die Funktion mancher Programme angeht.

2. ist es überhaupt sinnvoll, für jeden Dienst ein kleines Jail einzurichten?

Das muss jeder selbst wissen.
Eine Jail im Rohzustand verbraucht ~140 MB. Vieles kann man aber auch in der Jail löschen, so das man deutlich unter 100 MB kommt pro Jail.
Eine Jail ist mittels "cpdup" auch schnell verfielfältigt.
Es spricht aber auch nichts dagegen dem Mailserver und den Webserver in einer Jail rennen zu lassen.
Oder noch mehr in einer solchen. Das muss jeder für sich selbst entscheiden.

3. wenn die Antwort von 1.2 'ja' ist, wie umgehe ich es dann, für jedes Jail die Ports einzelln upzudaten bzw. wie halte ich dann die installiereten Programme auf dem neuesten Stand bezüglich Sicherheitsupdates, Bugfixes, etc. ?

Da eine Jail auch nur ein eigenes System ist, müssen die Programm in dieser auch einem update unterzogen werde wie es bei dem Hostsystem der Fall wäre.
/usr/ports kann dabei vom Hostsystem via "mount_nullfs" oder einem NFS loopback in die Jail gemountet werden. Das kann dauerjaft geschehen oder immer dann manuell wenn man etwas updaten möchte.

Auszug aus meinem Kapitel über Jails:
Code:
[...]
Folgende Prozedur ist für ein update einer Jail erforderlich (ich gehe
davon aus, dass der Pfad zu jail /jail/test ist). Alle Befehle sind auf
dem Hostsystem der Jail durchzuführen:

nummer1# cd /usr/src
nummer1# mergemaster -p -D /jail/test

Ein make buildworld auf dem Hostsystem ist an dieser Stelle nur nötig,
wenn Sie dieses noch nicht im Rahmen eines updates des Hostsystems
gemacht haben. 

nummer1# make installworld DESTDIR=/jail/test
nummer1# mergemaster -D /jail/test

Damit wäre der update einer Jail auch schon abgeschlossen. 
[...]

So das wäre es für den Moment. Sorry, wenn die Frage ein wenig doof sind und sich wohl auch recht schnell selber beantworten lassen. Ich arbeite mich aber erste in dieses Thema ein und bitte deswegen um Nachsehen.

Gehe einfach immer davon aus das eine Jail ein komplettes FreeBSD ist, auf das Du via ssh zugreifst.
Dann sind einige Fragen keine Fragen mehr.
 
Hi BP,

du erstellst nicht pro Dienst eine Jail.

Eine Jail ist quasi ein "Spiegelbild" Deines Hostsystems (inkl. aller Dienste). Wenn Du die Jail erstellst hast, bekommt jede eine eigene IP und die Benutzer/Kunden können über ihre IP auf ihre Jail zugreifen. Innerhalb dieser Jails stehen den Benutzern alle Dienste zur Verfügung. Die Jails können nicht direkt untereinander kommunizieren sondern nur via Netzwerk über ihre IP.

Somit hat jeder Benutzer seine eigene Umgebung (eben die Jails), aber du brauchst nur ein Hostsystem - und somit auch nur einmal die entsprechende Hardware.

@asg: Ich hoffe, es war alles richtig ;)

Gruß
RW
 
Hi@all

Vielen Danke für die ausführlichen Antworten. Jetzt ist mir das ganze schon um ein Vielfaches verständlicher :)

Cu
André
 
Zuletzt bearbeitet:
Original geschrieben von ReinerWein
du erstellst nicht pro Dienst eine Jail.

Sicherheitsfetischisten und Paranoide Menschen würden das sogar machen....

Eine Jail ist quasi ein "Spiegelbild" Deines Hostsystems (inkl. aller Dienste).
[...]

Vorsicht mit "Spiegelbild", der geneigte nicht wissende Leser könnte nun denken das in der Jail automatisch der Apache rennt nur weil dieser auf dem Hostsystem war als die Jail installiert wurde.
Man bekommt eine FreeBSD Basis Installation ist da nicht so "verwirrend".

Ansonsten weiss ReinerWein ja auch schon alles über jails.

Viele haben irgendwie Berührungsängste da es "Jail" heisst, wenn man erstmal germerkt hat das das eigentlich ein ganz normales System ist, mit ein paar Einschränkungen, dann geht man damit um wie mit jedem anderen "vollwertigen" System auch.
 
Sobald es fertig ist ;-)
Muss noch überarbeitet werden, und, in bezug auf devfs ist da gerade einiges in der Mache.
Ansonsten würde ich die hervorragende manpage zu jail empfehlen.
 
Hallo asg.

Stimmt die man-page ist hervorragend.

Sobald es fertig ist ;-)
Muss noch überarbeitet werden, und, in bezug auf devfs ist da gerade einiges in der Mache
Ich warte :D

Wieviel Arbeitsspeicher muß man pro jail veranschlagen?
Ist es sinnvoll für jede jail eine Platte (ca. 4GB, SCSI) zu veranschlagen?

Grüße

Jürgen
 
Eine Jail braucht in etwa 140 MB Plattenplatz wenn diese frisch installiert ist. Du kannst aber vieles davon löschen, all das was man nicht verwenden soll/darf,... bis auf ein paar Ausnahmen.
Eine ganze Platte pro Jail finde ich doch etwas überzogen. Viele haben die Jails einfach unter /usr:
/usr/jail/1
/usr/jail/2
...
Oder, wie ich, auf einer extra Partition Namens "jail" (so kann mir schon nicht /usr zugeballert werden, worauf ich sonst mit quotas achten müsste wenn die jails unter /usr liegen würden).

Was den RAM angeht, die Prozesse die inner Jail laufen fressen den RAM, wie wenn diese auf dem Hostsystem laufen würden, das wär es dann auch schon, also nichts neues.
 
Zurück
Oben