letztes Update: 26.05.2009 FreeBSD 7.2 Dies wächst hoffentlich halbwegs mit der konfiguration meines Homeservers, die letzte Version gibt es noch unter freebsd.lostpackets.de zu finden. Dieses Howto ist eigentlich mehr als Erinnerungsstütze für mich selber gedacht, es ist weder vollständig noch richtig!
FreeBSD installieren
-
ganze Platte für FreeBSD
-
BootManager Standard, da wir auf der ersten Platte installieren
-
default Partionierung OK
-
NO zur Ports-Collection (müssen eh mit portsnap einen komplette snapshot laden)
-
enable ssh
-
einen neuen User hinzufügen
Grundeinstellungen
Da wir die Copyright Bedingungen gelesen und verstanden haben und nicht bei jedem Einloggen zu sehen kriegen wollen:
defaultrouter in /etc/rc.conf festlegen:
defaultrouter="192.168.1.100"
und um nicht rebooten zu müßen:
# route add default 192.168.1.100
touch /etc/COPYRIGHT
Ports & Packages
Portstree installieren mit
`# portsnap fetch
portsnap extract`
in /etc/crontab folgende Zeile eintragen
0 3 * * * root portsnap -I cron update && pkg_version -vIL=
und anschließend vor jedem Port bauen ein
# portsnap update
währenddessen schonmal ein paar packages, die das weiter einrichten vereinfachen installieren: zsh, vim, screen
Ich brauch kein X11, daher WITHOUT_X11=true
in /etc/make.conf
ergänzen.
Harddisk verschlüsseln
Wir benutzen geli, welches erst ab FreeBSD 6 teil von FreeBSD ist.
in /boot/loader.conf setzen wir ein:
geom_eli_load=”YES”
und bei VIA C7 Prozessoren
padlock_load="YES"
Wer mag, darf stattdessen auch seinen Kernel neu kompilieren und zwar mit den Optionen
device crypto
options GEOM_ELI
und bei Bedarf:
device padlock
(wer noch isdn Support für Asterisk und AltQ braucht, bitte jetzt bereits daran denken) Erzeugen nun mittels
# dd if=/dev/random of=/root/ad2.key bs=64 count=1
einen Masterkey
geli-Partition initialisieren und das Passwort festlegen:
# geli init -s 4096 -K /root/ad2.key /dev/ad2
Enter new passphrase:
Reenter new passphrase:
Nun mit
# geli attach -k /root/ad2.key /dev/ad2
die Platte attachen und mit
# newfs /dev/ad2.eli
ein neues Dateisystem auf der Klartext-Partition /dev/ad2.eli erstellen.
Mittels
# dd if=/dev/random of=/dev/ad2.eli bs=1m
die Platte erstmal mit Zufallsdaten vollmüllen wie das FreeBSD Handbuch vorschlägt, mag zwar eine nette Idee sein, aber wenn man grosse Platten ( in meinem Fall 400GB ) benutzt praktisch unmöglich, falls man nicht über ein wirklich SCHNELLES System verfügt. Selbst mit /dev/urandom statt /dev/random schafft mein C3 Prozessor mit Hardware Random Number Generator (RNG) in einer Stunde nur etwa 2.9 GB, das wären fast 6 Tage für die ganze Platte.
ntpd
Damit die lokale Zeit immer akurat ist wollen wir den Network Time Protocoll Daemon starten.
Um den ntpd beim booten zu starten kommt nun in /etc/rc.conf die Zeile ntpd_enable="YES" . _Nun konfigurieren wir den ntpd durch editieren von /etc/ntp.conf_:
server de.pool.ntp.org
server europe.pool.ntp.org
server pool.ntp.org
driftfile /var/db/ntp.drift Drei Addressen als Fallback, das driftfile speichert die Abweichungen und die letzte Zeile sorgt dafür, dass unser Server keine Anfragen von aussen annimmt.
Anschliessend die Uhrzeit einmal auf den aktuellen Stand bringen:
# ntpd -qg
-q beendet ntpd nach einmal ausführen, mit -g werden auch beliebig grosse Abweichungen korrigiert.
freebsd-update
/etc/freebsd-update.conf editieren:
MailTo ändern, AllowAdd yes, Components src world kernel, da wir alles updaten lassen wollen. Schnell noch einen Eintrag ins crontab für das tägliche laufen lassen:
0 3 * * * root /usr/sbin/freebsd-update cron
und bei Bedarf mittels
# freebsd-update install
das System auf den neusten Stand bringen. Falls wichtige Systemkomponenten ersetzt wurden, diese (oder ganzes System) neustarten.
Mails an root forwarden
In /root/ die Datein .forward anlegen und beliebige Mailadresse angeben.
Portaudit
# cd /usr/ports/ports-mgmt/portaudit && make install clean
beim install wird direkt ein script in /usr/local/etc/periodic/security geschrieben, "known vulnerabilties" werden einem also täglich per eMail geschickt.
smartmontools
Da es sich unter anderem um einen NAS-Server handelt, Platten beobachten mit smartmontools (auch sonst nie eine schlechte Idee): `# cd /usr/ports/sysutils/smartmontools
make install clean`
dann die Zeile
smartd_enable="YES"
in /etc/rc.conf einfügen und
# mv /usr/local/etc/smartd.conf.sample /usr/local/etc/smartd.conf
ausführen. Anschließend
DEVICESCAN
auskommentieren
/dev/ad0 -a -o on -S on -s (S/../.././02|L/../../6/03) -m mail@domain.tld
für jede Festplatte einfügen.
denyhosts
den ssh-bruteforcern den Weg verlegen
`# cd /usr/ports/security/denyhosts && make install clean
echo 'denyhosts_enable="YES"' >> /etc/rc.conf
touch /etc/hosts.deniedssh
echo 'syslogd_flags="-c"' >> /etc/rc.conf
`
_ /etc/hosts.allow_ editieren und folgende auskommentieren `
ALL : ALL : allow
und diese Zeilen hinzufügen:
sshd : /etc/hosts.deniedssh : deny
sshd : ALL : allow
`