Freebsd auf Hetzner installieren

Ich habe mich an die Anleitung von Hetzner gehalten:
http://wiki.hetzner.de/index.php/FreeBSD_installieren

Erstmal muss man ins Hetzner Rescue System von freebsd.
Dazu muss man das rescue system im Hetzner Robot auswählen und den Server neustarten.

Anschliessend per ssh auf den Server connecten.
Von hier aus sieht das ziemlich einfach aus.
Wir führen installimage aus und wählen die geeigneten Optionen (64bit, zfs) aus.

Danach den Server neustarten und mit den gewählten Daten einloggen:
FreeBSD 9.1-RELEASE-p2 (GENERIC) #4 r249506M: Tue Apr 16 09:42:12 CEST 2013

Nun erstmal das System updaten

freebsd-update fetch
freebsd-update install

Bei mir gab das nen kleinen File not found, wofür ich einen Workaround brauchte.
Installing updates...install: ///usr/src/crypto/openssl/ssl/s3_cbc.c: No such file or directory
In dem muss einfach das Verzeichnis angelegt werden: mkdir -p /usr/src/crypto/openssl/ssl

Unter Freebsd gibt es die bekannten Ports, welche die sehr angenehme möglichkeit bereitstellen drittsoftware zu installieren und zu updaten.

portsnap fetch
portsnap extract

danach nochmal zur Sicherheit updaten

portsnap fetch
portsnap update

Nun änder ich noch schnell meine shell zu zsh.

cd /usr/ports/shell/zsh
make install clean

Ich hab einfach die default einstellungen übernommen.
Dann noch schnell auch root mit chsh -s /usr/local/bin/zsh auf zsh umstellen.

Doch erstmal installieren wir uns ein tool um ports einfach zu installieren: Portmaster.

cd /usr/ports/ports-mgmt/portmaster
sudo make install clean

Dann können wir vim installieren:

sudo portmaster -d editors/vim

Die Einstellungen lasse ich erstmal auf default. Vielleicht muss man da später noch was ändern, das ist aber noch nicht abzusehen und sollte dann keine Umstände bereiten.

Security

Jetzt legen wir uns endlich unseren eigenen benutzer an:

adduser

Wichtig ist hier das der User zusätzlich in die Gruppe wheel kommt, damit man root rechte erlangen kann.

Jetzt loggen wir uns mit dem neu angelegten Benutzer ein und testen su.
Nun noch schnell den public key auf den server kopieren:

scp ~/.ssh/id_rsa.pub user@server:
ssh user@server
mkdir -p ~/.ssh
chmod 700 .ssh
cat id_rsa.pub >> .ssh/authorized_keys
rm id_rsa.pub
chmod 600 .ssh/*

So ab jetzt brauchen wir kein Passwort mehr beim Login.

Im Userbereich brauche ich dann noch sudo.

portmaster security/sudo

Jetzt muss sudo noch konfiguriert werden.
Dies muss auf jedenfall mit root & visudo geschehen.
Hier löschen wir das Kommentarzeichen vor # %wheel ALL=(ALL) ALL
Ab jetzt können wir mit exit aus root ausloggen und Administrationsaufgaben mit sudo ausführen.

 

weitere Security (Hier sind nur “Ideen” gelistet. Selber lesen bildet.

Ändern des sshd_config

#/etc/ssh/sshd_config
Port 8xxx
ClientAliveInterval 600
PermitRootLogin no #su mit anderem user muss funktionieren sonst sperrt man sich aus
IgnoreRhosts yes
HostbasedAuthentication no
PermitEmptyPasswords no
AllowUsers unewochialat

http://forums.freebsd.org/showthread.php?t=4108

sudo portmaster security/denyhosts
sudo portmaster security/sshguard-pf
sudo portmaster security/sshblock
sudo portmaster security/sshit
sudo portmaster ports-mgmt/portaudit
sudo portaudit -F
sudo portaudit -a

Und dann leiten wir noch die Emails von root auf unseren Benutzeraccount um.

sudo vi /etc/mail/aliases

# root: unewochialat zu root: unewochialat
nun noch die aliase aktualisieren: sudo newaliases

Da ich auf der Konsole immer mit vim arbeite, auf Freebsd standardmäßig nur vi installiert ist müssen wir es über ports nachinstallieren.

Falls updates zur verfügung stehen möchte ich informiert werden, deshalb schreiben wir folgende Zeilen in sudo crontab -e

0   3   *   *   *   root    portsnap -I cron update && pkg_version -vIL=
5   5   *   *   *   root    freebsd-update cron

Weitere Grundsoftware installieren:

sudo postmaster sysutils/screen

Mehr Einstellungen:
Zeitsynchronisierung Systemstart & cron

#/etc/rc.conf
ntpd_enable="YES"
ntpdate_hosts="de.pool.ntp.org"

crontab -e

0   *   *   *   *   root    /usr/sbin/ntpdate de.pool.ntp.org > /dev/null

/tmp aufräumen

//TODO: Hier weitere Grundsachen hinzufügen.

Firewall

pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"

Ab jetzt darauf achten das ssh weiter funktioniert
d.H. statt 22 den gewählten ssh port eintragen

#/etc/pf.conf
# interfaces
if="{ lo0, rl0 }"


# settings
set block-policy drop

# open ports
tcp_pass="{ 53 22 }"
udp_pass="{ 53 22 }"
icmp_types="echoreq"

# normalisation
scrub in all

antispoof for $if

# tables
table <bruteforce> persist

# rules
set skip on lo0
block all
block quick from <bruteforce>
pass in on $if proto tcp from any to any port $tcp_pass flags S/SA keep state (max-src-conn 100, max-src-conn-rate 15/5, overload <bruteforce> flush global)
pass in on $if proto udp to any port $udp_pass keep state
pass out quick all keep state

# ping
pass in on $if inet proto icmp all icmp-type $icmp_types keep state

# traceroute
pass in on $if inet proto udp from any to any port 33433 >< 33626 keep state

 

Leave a Reply

Your email address will not be published. Required fields are marked *