StuRa:Server/FreeBSD: Unterschied zwischen den Versionen
K (Postfix UCE HOWTO) |
K (ArturasMiller verschob die Seite Server/FreeBSD nach StuRa:Server/FreeBSD) |
||
(39 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Dies ist die [[Server/ | Dies ist die Dokumentation für den Betrieb der [[Server]] mit [[FreeBSD]]. | ||
{{Achtung| | |||
Diese Artikel bezieht sich auf den Betrieb von [[srs2342]] mindestens einschließlich 2015.<br />Er gilt nicht für den Betrieb von [[srs1337]], wo seit 2015 [[FreeNAS]] betrieben wird und daher durch die [[Intern:Server/Aktualisierung/2015|Aktualisierung]] wesentliche Änderungen vorgenommen wurden. | |||
}} | |||
== Sicherheit == | == Sicherheit == | ||
; Ports aktuell halten: | |||
: <code>portsnap /var/db/portsnap/INDEX</code> | |||
: <code>/etc/crontab</code> anpassen | |||
<pre> | |||
0 13 * * * root portsnap -I cron fetch && portsnap update && pkg_version -vIL= | |||
</pre> | |||
; tägliches Audit der (installierten) Ports: | |||
: <code>portaudit /var/db/portaudit/auditfile.tbz</code> | |||
: <code>/etc/crontab</code> anpassen | |||
<pre> | |||
0 14 * * * root portaudit -Fda | |||
</pre> | |||
; sich (Mensch) auf dem aktuellen Stand halten: | |||
* [http://www.vuxml.org/freebsd/ VuXML] abonnieren | * [http://www.vuxml.org/freebsd/ VuXML] abonnieren | ||
* [http://security.freebsd.org/ http://security.freebsd.org/] mal durchlesen | * [http://security.freebsd.org/ http://security.freebsd.org/] mal durchlesen | ||
Zeile 15: | Zeile 24: | ||
=== Paketfilter === | === Paketfilter === | ||
; [http://www.openbsd.org/faq/pf/ OpenBSD pf] | |||
* | * Paketfilter einrichten | ||
*: <code>/etc/rc.conf</code> anpassen | |||
<pre> | |||
pf_enable="YES" | |||
pf_rules="/etc/pf.conf" | |||
pflog_enable="YES" | |||
# host system is gateway for jails | |||
gateway_enable="YES" | |||
</pre> | |||
* syslogd an Hauptmaschine binden | * syslogd an Hauptmaschine binden | ||
* | *: <code>/etc/rc.conf</code> anpassen | ||
<pre> | |||
syslogd_flags="-b $MAIN_IP" | |||
</pre> | |||
*:: (Eventuell) funktioniert auch eine andere (alternative) Möglichkeit. | |||
<pre> | |||
syslogd_flags="-ss" | |||
</pre> | |||
* Paketfilter starten: | * Paketfilter starten: | ||
*: <code>/etc/rc.d/pf start</code> | |||
*: <code>/etc/rc.d/pflog start</code> | |||
* | * <code>/etc/pf.conf</code> (Konfigurationsdatei für den Paketfilter) anpassen | ||
<pre> | |||
### MAKROS | |||
thishost = "$MAIN_IP" | |||
# portsnap5 204.9.55.80 | |||
portsnap_freebsd = "{ 204.109.56.116 204.9.55.80 }" | |||
# auditfile.tbz is beeing fetched from portaudit.freebsd.org | |||
portaudit_freebsd = "69.147.83.36" | |||
# dnsserver from resolv.conf | |||
dnsserver = "{ 85.214.73.63 217.79.186.148 27.110.120.30 204.152.184.76 194.150$ | |||
### RULES | |||
# default deny | |||
block in all | |||
block out all | |||
# lokales interface darf ohne einschränkungen | |||
pass in quick on lo0 all | |||
pass out quick on lo0 all | |||
## HOST | |||
# allow ssh | |||
pass in on bce0 proto tcp from any to $thishost port $SSH_PORT | |||
pass out on bce0 proto tcp from $thishost port $SSH_PORT to any | |||
## allow outbound icmp | |||
# echo request | |||
pass out inet proto icmp icmp-type 8 code 0 keep state | |||
# echo reply | |||
pass in inet proto icmp icmp-type 0 code 0 keep state | |||
# destination unreachable | |||
pass in inet proto icmp icmp-type 3 keep state | |||
# allow DNS lookups {also via tcp?} port 53 | |||
# what about traversal??? | |||
pass out on bce0 proto udp from $thishost to $dnsserver port 53 keep state | |||
# allow portsnap to fetch from freebsd.org (ports?) | |||
pass in on bce0 proto tcp from $portsnap_freebsd to $thishost | |||
pass out on bce0 proto tcp from $thishost to $portsnap_freebsd | |||
# allow portaudit to fetch auditfile.tbz via http | |||
pass in on bce0 proto tcp from $portaudit_freebsd port 80 to $thishost | |||
pass out on bce0 proto tcp from $thishost to $portaudit_freebsd port 80 | |||
## JAIL Beispiel (uneingeschränkt -> '''dumme Idee''', ports dienstabhänging freigeben | |||
pass in on bce0 proto { tcp udp icmp } from any to $jail_srs14 | |||
pass out on bce0 proto { tcp udp icmp } from $jail_srs14 to any | |||
* | </pre> | ||
** prüfen (lassen) der eingetragene Regeln (aka "sanity check") (inzwischen veraltet) | |||
**: <code>pfctl -vnf /etc/pf.conf</code> | |||
==== Paketfilter bedienen ==== | ==== Paketfilter bedienen ==== | ||
* anschalten: <code>pfctl -e</code> | * anschalten | ||
* ausschalten: <code>pfctl -d</code> | *: <code>pfctl -e</code> | ||
* sanity check: <code>pfctl -vnf /etc/pf.conf</code> | * ausschalten | ||
* alte Regeln ins Klo und neue in die Auslage: <code>pfctl -Fa -f /etc/pf.conf</code> | *: <code>pfctl -d</code> | ||
* sanity check | |||
*: <code>pfctl -vnf /etc/pf.conf</code> | |||
* alte Regeln ins Klo und neue Regeln in die Auslage | |||
*: <code>pfctl -Fa -f /etc/pf.conf</code> | |||
==== | ==== Paketfilter Weblinks ==== | ||
* [[FreeBSD-Handbuch:firewalls.html | Das FreeBSD-Handbuch: Kapitel 31. Firewalls]] | |||
** [[FreeBSD-Handbuch:firewalls-pf.html | Das FreeBSD-Handbuch: 31.4. Paket Filter (PF) von OpenBSD und ALTQ]] | |||
* [http://openbsd.org/faq/pf/de/index.html PF: Der OpenBSD Packet Filter] | * [http://openbsd.org/faq/pf/de/index.html PF: Der OpenBSD Packet Filter] | ||
* [http://www.amazon.com/Building-Firewalls-OpenBSD-PF-2nd/dp/8391665119 Jacek Artymiak - Building Firewalls with OpenBSD and PF, 2nd edition] | * [http://www.amazon.com/Building-Firewalls-OpenBSD-PF-2nd/dp/8391665119 Jacek Artymiak - Building Firewalls with OpenBSD and PF, 2nd edition] | ||
Zeile 84: | Zeile 110: | ||
* faschistoides Logging von Systemcalls | * faschistoides Logging von Systemcalls | ||
* präventiv wirkungslos, aber in der post-mortem Analyse extrem hilfreich | * präventiv wirkungslos, aber in der post-mortem Analyse extrem hilfreich | ||
* [ | * [[FreeBSD-Handbuch:audit.html | Das FreeBSD-Handbuch: Kapitel 17. Security Event Auditing]] | ||
* | * <code>/etc/rc.conf</code> anpassen | ||
<pre> | |||
* | auditd_enable="YES" | ||
* | </pre> | ||
* | * auditd starten: | ||
*: <code>/etc/rc.d/auditd start</code> | |||
* <code>/etc/security/audit_control</code> anpassen | |||
<pre> | |||
* cronjob für die logs: /etc/crontab | flags:lo,aa,ex | ||
policy:cnt,argv | |||
synchronize config: audit -s | |||
</pre> | |||
* cronjob für die logs | |||
*: <code>/etc/crontab</code> anpassen | |||
<pre> | |||
0 */12 * * * root /usr/sbin/audit -n | |||
</pre> | |||
== [[port:sudo|sudo]] == | |||
===== <code>sudo</code> höchstens sorgfältig verwenden ===== | |||
Durch den Mainstream wird <code>sudo</code> häufig inflationär und grob verwendet. Es gibt ja aber Tutorials <!--<ref>-->[https://www.bsdcan.org/2014/schedule/attachments/283_2014-04-29%20sudo%20tutorial%20-%20bsdcan%202014.pdf]<!--</ref>-->. Anwendungsfälle für <code>sudo</code>, die eine gewisse Absicht haben, sollten entsprechend dokumentiert sein. | |||
=== Rechenzentrum === | |||
* Port 25 geschlossen | |||
* Port 135 geschlossen | |||
* Port 137-139 geschlossen | |||
== Jails == | == Jails == | ||
Jails dienen der Virtualisierung von Betriebssysteminstanzen. Näheres dazu im [ | Jails dienen der Virtualisierung von Betriebssysteminstanzen. Näheres dazu im [[FreeBSD-Handbuch:jails.html | Das FreeBSD Handbuch: Kapitel 15 - Jails]. | ||
=== Jail Verzeichnis mit ZFS anlegen === | === Jail Verzeichnis mit ZFS anlegen === | ||
* beim ersten Mal | * beim ersten Mal | ||
*: <code>zfs create zpool/jails</code> | |||
*: <code>zfs set mountpoint=/usr/home/jails zpool/jails</code> | |||
* ansonsten reicht es | * ansonsten reicht es | ||
*: <code>zfs create zpool/jails/$JAILNAME</code> | |||
=== Anlegen einer Jail === | |||
; auf dem Hauptsystem | |||
*: <code>cd /usr/src</code> | |||
* falls notwendig, müssen erst Sources installiert werden | |||
=== Anlegen | *: <code>sysinstall</code> | ||
* <code> | *:* <code>Configure</code> wählen | ||
* | *:* <code>Distributions</code> wählen | ||
* | *:* <code>Sources</code> anwählen | ||
* Jails liegen unter /home/jails/$JAILNAME | * falls notwendig, müssen die Systemanwendungen neu erstellt werden | ||
* System für | *: <code>make buildworld</code> | ||
<code> | * Jails liegen unter <code>/home/jails/''$JAILNAME''</code> | ||
* System für Jail bauen: | |||
*: <code>make installworld DESTDIR=/home/jails/''$JAILNAME''</code> | |||
</code> | *: <code>make distribution DESTDIR=/home/jails/''$JAILNAME''</code> | ||
* device nodes ins | * device nodes ins Jail packen | ||
* | *: <code>mount -t devfs devfs /home/jails/''$JAILNAME''/dev</code> | ||
* resolv.conf | * <code>/etc/resolv.conf</code> kopieren | ||
* | *: <code>cp /etc/resolv.conf /home/jails/''$JAILNAME''/etc/resolv.conf</code> | ||
* rc.conf | * Vermerk (der Existenz) der Jails im Hauptsystem | ||
** <code>/etc/rc.conf</code> anpassen | |||
<pre> | |||
jail_enable="YES" | |||
jail_list="$JAILNAME" | |||
ifconfig_bce0_alias0="$JAIL_IP netmask 255.255.255.0" | |||
jail_$JAILNAME_rootdir="/path/to/jails/$JAILNAME" | |||
jail_$JAILNAME_hostname="$JAILNAME.domain.tld" | |||
jail_$JAILNAME_ip="$JAIL_IP" | |||
* | jail_$JAILNAME_devfs_enable="YES" | ||
* | jail_$JAILNAME_devfs_ruleset="devfsrules_jail" | ||
* | </pre> | ||
** <code> | * Jail starten | ||
* | *: <code>/etc/rc.d/jail start</code> | ||
* | *:* Es wurde eine Jail gestartete, die eine ''$JAIL_ID'' erzeugte. | ||
*:* Die ''$JAIL_ID'' kann ermittelt werden. | |||
*:*: <code>jls</code> | |||
* Shell (tcsh), als Prozess, in der Jail starten | |||
*: <code>jexec ''$JAIL_ID'' tcsh</code> | |||
; in der Jail | |||
* Defaultrouting einstellen | * Defaultrouting einstellen | ||
** etc/rc.conf | ** <code>/etc/rc.conf</code> anpassen | ||
** | **: ''$IP'' ist dabei eine ''IP'' oder ein ''interfacename''. | ||
<pre> | |||
defaultrouting="<$IP:network>" | |||
</pre> | |||
* portscollection installieren | * portscollection installieren | ||
** <code> | ** <code>portsnap fetch extract </code> | ||
* portscollection updaten | * portscollection updaten | ||
** <code> | ** <code>portsnap fetch update </code> | ||
* | * falls noch notwendig, ssh (erstmal einmalig) anschalten | ||
*: <code>service sshd onestart</code> | |||
* /etc/ | * falls noch notwendig, ssh (dauerhaft) anschalten | ||
** <code>/ect/rc.conf</code> anpassen | |||
<pre> | |||
sshd_enable="YES" | |||
</pre> | |||
* | |||
** <code>/etc/hosts</code> anpassen | |||
<pre> | |||
#.#.#.# $JAILNAME.stura.htw-dresden.de | |||
</pre> | |||
=== Löschen eines Jails === | === Löschen eines Jails === | ||
* | ; auf dem Hauptsystem | ||
<code> | * in (Root-)Verzeichnis der Jail wechseln | ||
*: <code>cd /home/jails/''$JAILNAME''</code> | |||
* alles in der Jail '''kaputt''' machen | |||
*: <code>chflags -R noschg *</code> | |||
</code> | *: <code>rm -rf *</code> | ||
* Jail '''kaputt''' machen | |||
** ohne ZFS | |||
**: <code>cd .. && rm -r ''$JAILNAME''</code> | |||
** mit ZFS | |||
**: <code>cd .. && zfs destroy tank/PATH/''$JAILNAME''</code> | |||
=== Tricks, Probleme etc. === | === Tricks, Probleme etc. === | ||
* sich evtl. ezjail mal anschauen (war damals kaputt) | * sich evtl. [http://svnweb.freebsd.org/ports/head/sysutils/ezjail/ ezjail] mal anschauen (war damals kaputt) | ||
* ping aus jails heraus erlauben | * ping aus jails heraus erlauben | ||
** host: allow_raw_socket=1 via | ** host: allow_raw_socket=1 via | ||
** | **: <code>sysctl security.jail.allow_raw_sockets=1</code> | ||
*** bzw. in /etc/sysctl.conf setzen | *** bzw. in <code>/etc/sysctl.conf</code> setzen | ||
*** [http://www.cyberciti.biz/faq/freebsd-jail-allow-ping-tracerouter-commands/ Quelle] | *** [http://www.cyberciti.biz/faq/freebsd-jail-allow-ping-tracerouter-commands/ Quelle] | ||
* ssh | * ssh | ||
** etc/ssh/sshd_config | ** <code>etc/ssh/sshd_config</code> anpassen | ||
<pre> | |||
ListenAddress 0.0.0.0 | |||
</pre> | |||
* [http://www.freebsd.org/cgi/url.cgi?ports/ports-mgmt/jailaudit/pkg-descr jailaudit] | * [http://www.freebsd.org/cgi/url.cgi?ports/ports-mgmt/jailaudit/pkg-descr jailaudit] | ||
* Apache [http://www.freebsd.org/cgi/url.cgi?ports/www/mod_jail/pkg-descr mod_jail] als Alternative zu mod_chroot | * Apache [http://www.freebsd.org/cgi/url.cgi?ports/www/mod_jail/pkg-descr mod_jail] als Alternative zu mod_chroot | ||
Zeile 179: | Zeile 244: | ||
== ssh == | == ssh == | ||
; [http://openssh.com/ openssh] | |||
* ssh auf anderen | * ssh auf anderen Port legen | ||
* Vorschläge | * Vorschläge | ||
< | ** <code>/etc/ssh/sshd_config</code> anpassen | ||
<pre> | |||
VersionAddendum | |||
Port $SSH_PORTNUMMER | |||
ListenAddress $JAIL_IP | |||
Protocol 2 | |||
SyslogFacility AUTH | |||
LogLevel INFO | |||
LoginGraceTime 1m | |||
PermitRootLogin no | |||
StrictModes yes | |||
MaxAuthTries 4 | |||
MaxSessions 5 | |||
AllowUsers $DER_COOLE_LEUTE_CLUB #einzelne user nur mit leerzeichen trennen | |||
PermitEmptyPasswords no | |||
X11Forwarding no | |||
</ | Banner none | ||
* immer schön manpage lesen und mit dem Feinkamm durchgehen | </pre> | ||
* keys + | * immer schön manpage [[freebsd-man:ssh|ssh]] (und ähnliche [[man:ssh]]) lesen und mit dem Feinkamm durchgehen | ||
* in | * keys + Passwörter zur Authentifizierung | ||
* in Jails: | |||
** <code>/etc/ssh/sshd_config</code> anpassen | |||
<pre> | |||
ListenAddress 0.0.0.0 | |||
</pre> | |||
==== ssh Weblinks ==== | |||
* [http://openssh.com/ Homepage OpenSSH] <small>[http://openssh.com/de/index.html (deutschsprachig)</small>] | |||
* [[FreeBSD-Handbuch:openssh.html | Das FreeBSD-Handbuch: 15.10. OpenSSH]] | |||
== Email == | == Email == | ||
Zeile 257: | Zeile 331: | ||
mail_spool_directory = /var/spool/mail | mail_spool_directory = /var/spool/mail | ||
relay_domains = stura.htw-dresden.de | relay_domains = stura.htw-dresden.de | ||
smtpd_sender_restrictions = reject_unknown_sender_domain, | |||
reject_non_fqdn_sender | |||
smtpd_recipient_restrictions = reject_invalid_hostname, | smtpd_recipient_restrictions = reject_invalid_hostname, | ||
reject_unknown_recipient_domain, | reject_unknown_recipient_domain, | ||
Zeile 268: | Zeile 344: | ||
==== Links ==== | ==== Links ==== | ||
* [http://chains.ch/docs/postfix-UCE-HOWTO-de.html Postfix UCE HOWTO] | * [http://www.postfix.org/ The Postfix Home Page] | ||
* [http://chains.ch/docs/postfix-UCE-HOWTO-de.html Postfix UCE HOWTO] (Spamkontrolle) | |||
=== IMAP-Server dovecot === | === IMAP-Server dovecot === | ||
Zeile 298: | Zeile 375: | ||
* maildir in users homeverzeichnis anlegen | * maildir in users homeverzeichnis anlegen | ||
maildirmake Mail | maildirmake Mail | ||
* im homeverzeichnis die Datei . | * im homeverzeichnis die Datei .mailfilter anlegen: | ||
MAILBOX="$HOME/Mail" | MAILBOX="$HOME/Mail" | ||
DEFAULT="$MAILBOX" | DEFAULT="$MAILBOX" | ||
Zeile 327: | Zeile 404: | ||
# . | # . | ||
# QUIT</code> | # QUIT</code> | ||
* SMTP über mehrere eMails testen: | |||
<code> | |||
# num=0 | |||
# for ABSENDER in <user>@stura.htw-dresden.de noreplay@stura.htw-dresden.de test@stura.htw-dresden.de; do | |||
# ABSENDERDOMAIN=`echo "${ABSENDER#*@}"` | |||
# for EMPFAENGER in test@stura.htw-dresden.de; do | |||
# num=$((num + 1)) | |||
# nc $JAIL_IP 25 | |||
# HELO $ABSENDERDOMAIN | |||
# MAIL FROM:<$ABSENDER> | |||
# RCPT TO:<$EMPFAENGER> | |||
# DATA | |||
# From: <$ABSENDER> | |||
# To: <$EMPFAENGER> | |||
# Subject: TEST$num | |||
# Dies ist die Testmail. | |||
# Nummer $num | |||
# von $ABSENDER | |||
# ueber $ABSENDERDOMAIN | |||
# an $EMPFAENGER | |||
# . | |||
# QUIT | |||
# done | |||
# done | |||
</code> | |||
== Plone == | == Plone == | ||
Zeile 339: | Zeile 441: | ||
* [http://plone.org/documentation/kb/freebsdploneapache/preparefreebsd http://plone.org/documentation/kb/freebsdploneapache/preparefreebsd] | * [http://plone.org/documentation/kb/freebsdploneapache/preparefreebsd http://plone.org/documentation/kb/freebsdploneapache/preparefreebsd] | ||
* [http://plone.org/products/plone/releases http://plone.org/documentation/kb/freebsdploneapache/preparefreebsd] | * [http://plone.org/products/plone/releases http://plone.org/documentation/kb/freebsdploneapache/preparefreebsd] | ||
== [[freebsd-handbuch:updating-upgrading.html | FreeBSD aktualisieren]] == | |||
=== [[FreeBSD-Handbuch:updating-upgrading-freebsdupdate.html | Aktualisierungen an Haupt- und Unterversionen]] === | |||
Dieser Prozess entfernt alte Objekt-Dateien und Bibliotheken, was dazu führt, dass die meisten Anwendungen von Drittherstellern nicht mehr funktionieren. Es wird empfohlen, dass alle installierten Ports entweder entfernt und neu installiert oder zu einem späteren Zeitpunkt mittels ports-mgmt/portupgrade aktualisiert werden. Die meisten Anwender werden wahrscheinlich einen Testlauf mittels des folgenden Kommandos durchführen wollen: | |||
: <code>portupgrade -af</code> | |||
Dies sorgt dafür, dass alles korrekt neu installiert wird. Beachten Sie, dass das Setzen der BATCH-Umgebungsvariable auf yes während dieses Prozesses auf jede Eingabe mit ja antwortet, was es nicht mehr notwendig macht, manuell eingreifen zu müssen. | |||
… | |||
; weiter Informationen | |||
: [[FreeBSD-Handbuch:updating-upgrading-freebsdupdate.html | Das FreeBSD-Handbuch: 25.2.3. Aktualisierungen an Haupt- und Unterversionen]] | |||
== DNS == | == DNS == | ||
Zeile 361: | Zeile 477: | ||
=== USB-Stick bauen === | === USB-Stick bauen === | ||
* auf einem FreeBSD | * auf einem FreeBSD | ||
* Image runterladen: | * Image runterladen | ||
*:<code>wget ftp://ftp.de.freebsd.org/pub/FreeBSD/ISO-IMAGES-amd64/9.2/FreeBSD-9.2-RELEASE-amd64-memstick.img</code> | |||
* Image auf Stick dumpen | * Image auf Stick dumpen | ||
*:<code>dd if=FreeBSD-9.2-RELEASE-amd64-memstick.img of=/dev/da0 bs=64k</code> | |||
=== Troubelshooting === | |||
* In order to fix this, you should reboot from the installer CD, and choose the "Live CD" option. You first need to mount the zpool under /mnt. First list the available pools: | |||
*:<code>zpool list</code> | |||
*: | |||
<pre> | |||
no pools available | |||
</pre> | |||
* and | |||
*:<code>zpool import</code> | |||
<pre> | |||
pool: zroot | |||
id: 128742958409357345692345 | |||
state: ONLINE | |||
action: The pool can be imported using its name of numeric identifier. | |||
config: | |||
zroot ONLINE | |||
ada1p2 ONLINE | |||
</pre> | |||
* Now import the zroot pool, and mount under <code>/mnt</code>: | |||
*: <code>zpool import -R /mnt zroot</code> | |||
==== System neubauen ==== | |||
* Von Live-CD oder stick booten! | |||
* System unter <code>/mnt</code> einmounten (vollständig, also '''alle'' datasets)! | |||
*:<code>zpool import</code> | |||
*:<code>zpool import -R /mnt zroot</code> | |||
* Mit nullfs mounten! | |||
** <code>/mnt/usr/obj</code> an <code>/usr/obj</code> | |||
**:<code>mount_nullfs /mnt/usr/obj /usr/obj</code> | |||
** <code>/mnt/usr/src</code> an <code>/usr/src/</code> | |||
**:<code>mount_nullfs /mnt/usr/src /usr/src</code> | |||
* Update! | |||
*:<code>cd /usr/src</code> | |||
*:<code>make installkernel DESTDIR=/mnt</code> | |||
*:<code>make installworld DESTDIR=/mnt</code> | |||
*:<code>mergemaster -UFi -D /mnt/</code> | |||
* Neustaren! | |||
*:<code>reboot</code> | |||
==== Siehe auch fuer weitere Tips & Tricks ==== | |||
* http://daemon-notes.com/tips | |||
== Server Setup Beschreibung == | == Server Setup Beschreibung == | ||
Zeile 384: | Zeile 544: | ||
gpart set -a active -i 1 ad0 | gpart set -a active -i 1 ad0 | ||
== | == Siehe auch == | ||
* [http://www.freebsd.org FreeBSD.org] - [http://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/ Handbuch] | * [[Server/Hauptsystem]] | ||
== Weblinks == | |||
* [http://www.freebsd.org FreeBSD.org] - [http://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/ Handbuch] (auch durch [[Spezial:Interwikitabelle]] per <nowiki>[[</nowiki><code>freebsd-handbuch:</code>Bezeichnung (URL) der Seite<nowiki>]]</nowiki> als Namensraum verfügbar) | |||
* [http://www.freebsdwiki.net/ FreeBSD-wiki] | * [http://www.freebsdwiki.net/ FreeBSD-wiki] | ||
* [http://cb.vu/unixtoolbox.xhtml Unix Toolbox] | * [http://cb.vu/unixtoolbox.xhtml Unix Toolbox] | ||
* [http://openbsd.org/faq/pf/de/index.html PF: Der OpenBSD Packet Filter] | * [http://openbsd.org/faq/pf/de/index.html PF: Der OpenBSD Packet Filter] | ||
=== | === Weblinks für Bücher === | ||
* [http://nostarch.com/abs_bsd2.htm Absolute FreeBSD, 2nd Edition] | * [http://nostarch.com/abs_bsd2.htm Absolute FreeBSD, 2nd Edition] | ||
* [http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470376031.html BSD UNIX Toolbox: 1000+ Commands for FreeBSD, OpenBSD and NetBSD] | * [http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470376031.html BSD UNIX Toolbox: 1000+ Commands for FreeBSD, OpenBSD and NetBSD] |
Aktuelle Version vom 23. Februar 2020, 17:29 Uhr
Dies ist die Dokumentation für den Betrieb der Server mit FreeBSD.
- Achtung
Diese Artikel bezieht sich auf den Betrieb von srs2342 mindestens einschließlich 2015.
Er gilt nicht für den Betrieb von srs1337, wo seit 2015 FreeNAS betrieben wird und daher durch die Aktualisierung wesentliche Änderungen vorgenommen wurden.
Sicherheit[Bearbeiten]
- Ports aktuell halten
portsnap /var/db/portsnap/INDEX
/etc/crontab
anpassen
0 13 * * * root portsnap -I cron fetch && portsnap update && pkg_version -vIL=
- tägliches Audit der (installierten) Ports
portaudit /var/db/portaudit/auditfile.tbz
/etc/crontab
anpassen
0 14 * * * root portaudit -Fda
- sich (Mensch) auf dem aktuellen Stand halten
- VuXML abonnieren
- http://security.freebsd.org/ mal durchlesen
- National Vulnerability Database (NVD RSS) abonnieren
Paketfilter[Bearbeiten]
- Paketfilter einrichten
/etc/rc.conf
anpassen
pf_enable="YES" pf_rules="/etc/pf.conf" pflog_enable="YES" # host system is gateway for jails gateway_enable="YES"
- syslogd an Hauptmaschine binden
/etc/rc.conf
anpassen
syslogd_flags="-b $MAIN_IP"
- (Eventuell) funktioniert auch eine andere (alternative) Möglichkeit.
syslogd_flags="-ss"
- Paketfilter starten:
/etc/rc.d/pf start
/etc/rc.d/pflog start
/etc/pf.conf
(Konfigurationsdatei für den Paketfilter) anpassen
### MAKROS thishost = "$MAIN_IP" # portsnap5 204.9.55.80 portsnap_freebsd = "{ 204.109.56.116 204.9.55.80 }" # auditfile.tbz is beeing fetched from portaudit.freebsd.org portaudit_freebsd = "69.147.83.36" # dnsserver from resolv.conf dnsserver = "{ 85.214.73.63 217.79.186.148 27.110.120.30 204.152.184.76 194.150$ ### RULES # default deny block in all block out all # lokales interface darf ohne einschränkungen pass in quick on lo0 all pass out quick on lo0 all ## HOST # allow ssh pass in on bce0 proto tcp from any to $thishost port $SSH_PORT pass out on bce0 proto tcp from $thishost port $SSH_PORT to any ## allow outbound icmp # echo request pass out inet proto icmp icmp-type 8 code 0 keep state # echo reply pass in inet proto icmp icmp-type 0 code 0 keep state # destination unreachable pass in inet proto icmp icmp-type 3 keep state # allow DNS lookups {also via tcp?} port 53 # what about traversal??? pass out on bce0 proto udp from $thishost to $dnsserver port 53 keep state # allow portsnap to fetch from freebsd.org (ports?) pass in on bce0 proto tcp from $portsnap_freebsd to $thishost pass out on bce0 proto tcp from $thishost to $portsnap_freebsd # allow portaudit to fetch auditfile.tbz via http pass in on bce0 proto tcp from $portaudit_freebsd port 80 to $thishost pass out on bce0 proto tcp from $thishost to $portaudit_freebsd port 80 ## JAIL Beispiel (uneingeschränkt -> '''dumme Idee''', ports dienstabhänging freigeben pass in on bce0 proto { tcp udp icmp } from any to $jail_srs14 pass out on bce0 proto { tcp udp icmp } from $jail_srs14 to any
- prüfen (lassen) der eingetragene Regeln (aka "sanity check") (inzwischen veraltet)
pfctl -vnf /etc/pf.conf
- prüfen (lassen) der eingetragene Regeln (aka "sanity check") (inzwischen veraltet)
Paketfilter bedienen[Bearbeiten]
- anschalten
pfctl -e
- ausschalten
pfctl -d
- sanity check
pfctl -vnf /etc/pf.conf
- alte Regeln ins Klo und neue Regeln in die Auslage
pfctl -Fa -f /etc/pf.conf
Paketfilter Weblinks[Bearbeiten]
- Das FreeBSD-Handbuch: Kapitel 31. Firewalls
- PF: Der OpenBSD Packet Filter
- Jacek Artymiak - Building Firewalls with OpenBSD and PF, 2nd edition
- Peter N. M. Hansteen: The Book of PF, 2nd Edition - A No-Nonsense Guide to the OpenBSD Firewall
FreeBSD audit[Bearbeiten]
- faschistoides Logging von Systemcalls
- präventiv wirkungslos, aber in der post-mortem Analyse extrem hilfreich
- Das FreeBSD-Handbuch: Kapitel 17. Security Event Auditing
/etc/rc.conf
anpassen
auditd_enable="YES"
- auditd starten:
/etc/rc.d/auditd start
/etc/security/audit_control
anpassen
flags:lo,aa,ex policy:cnt,argv synchronize config: audit -s
- cronjob für die logs
/etc/crontab
anpassen
0 */12 * * * root /usr/sbin/audit -n
sudo[Bearbeiten]
sudo
höchstens sorgfältig verwenden[Bearbeiten]
Durch den Mainstream wird sudo
häufig inflationär und grob verwendet. Es gibt ja aber Tutorials [1]. Anwendungsfälle für sudo
, die eine gewisse Absicht haben, sollten entsprechend dokumentiert sein.
Rechenzentrum[Bearbeiten]
- Port 25 geschlossen
- Port 135 geschlossen
- Port 137-139 geschlossen
Jails[Bearbeiten]
Jails dienen der Virtualisierung von Betriebssysteminstanzen. Näheres dazu im [[FreeBSD-Handbuch:jails.html | Das FreeBSD Handbuch: Kapitel 15 - Jails].
Jail Verzeichnis mit ZFS anlegen[Bearbeiten]
- beim ersten Mal
zfs create zpool/jails
zfs set mountpoint=/usr/home/jails zpool/jails
- ansonsten reicht es
zfs create zpool/jails/$JAILNAME
Anlegen einer Jail[Bearbeiten]
- auf dem Hauptsystem
cd /usr/src
- falls notwendig, müssen erst Sources installiert werden
sysinstall
Configure
wählenDistributions
wählenSources
anwählen
- falls notwendig, müssen die Systemanwendungen neu erstellt werden
make buildworld
- Jails liegen unter
/home/jails/$JAILNAME
- System für Jail bauen:
make installworld DESTDIR=/home/jails/$JAILNAME
make distribution DESTDIR=/home/jails/$JAILNAME
- device nodes ins Jail packen
mount -t devfs devfs /home/jails/$JAILNAME/dev
/etc/resolv.conf
kopierencp /etc/resolv.conf /home/jails/$JAILNAME/etc/resolv.conf
- Vermerk (der Existenz) der Jails im Hauptsystem
/etc/rc.conf
anpassen
jail_enable="YES" jail_list="$JAILNAME" ifconfig_bce0_alias0="$JAIL_IP netmask 255.255.255.0" jail_$JAILNAME_rootdir="/path/to/jails/$JAILNAME" jail_$JAILNAME_hostname="$JAILNAME.domain.tld" jail_$JAILNAME_ip="$JAIL_IP" jail_$JAILNAME_devfs_enable="YES" jail_$JAILNAME_devfs_ruleset="devfsrules_jail"
- Jail starten
/etc/rc.d/jail start
- Es wurde eine Jail gestartete, die eine $JAIL_ID erzeugte.
- Die $JAIL_ID kann ermittelt werden.
jls
- Shell (tcsh), als Prozess, in der Jail starten
jexec $JAIL_ID tcsh
- in der Jail
- Defaultrouting einstellen
/etc/rc.conf
anpassen- $IP ist dabei eine IP oder ein interfacename.
defaultrouting="<$IP:network>"
- portscollection installieren
portsnap fetch extract
- portscollection updaten
portsnap fetch update
- falls noch notwendig, ssh (erstmal einmalig) anschalten
service sshd onestart
- falls noch notwendig, ssh (dauerhaft) anschalten
/ect/rc.conf
anpassen
sshd_enable="YES"
-
/etc/hosts
anpassen
#.#.#.# $JAILNAME.stura.htw-dresden.de
Löschen eines Jails[Bearbeiten]
- auf dem Hauptsystem
- in (Root-)Verzeichnis der Jail wechseln
cd /home/jails/$JAILNAME
- alles in der Jail kaputt machen
chflags -R noschg *
rm -rf *
- Jail kaputt machen
- ohne ZFS
cd .. && rm -r $JAILNAME
- mit ZFS
cd .. && zfs destroy tank/PATH/$JAILNAME
- ohne ZFS
Tricks, Probleme etc.[Bearbeiten]
- sich evtl. ezjail mal anschauen (war damals kaputt)
- ping aus jails heraus erlauben
- host: allow_raw_socket=1 via
sysctl security.jail.allow_raw_sockets=1
- bzw. in
/etc/sysctl.conf
setzen - Quelle
- host: allow_raw_socket=1 via
- ssh
etc/ssh/sshd_config
anpassen
ListenAddress 0.0.0.0
ssh[Bearbeiten]
- ssh auf anderen Port legen
- Vorschläge
/etc/ssh/sshd_config
anpassen
VersionAddendum Port $SSH_PORTNUMMER ListenAddress $JAIL_IP Protocol 2 SyslogFacility AUTH LogLevel INFO LoginGraceTime 1m PermitRootLogin no StrictModes yes MaxAuthTries 4 MaxSessions 5 AllowUsers $DER_COOLE_LEUTE_CLUB #einzelne user nur mit leerzeichen trennen PermitEmptyPasswords no X11Forwarding no Banner none
- immer schön manpage ssh (und ähnliche man:ssh) lesen und mit dem Feinkamm durchgehen
- keys + Passwörter zur Authentifizierung
- in Jails:
/etc/ssh/sshd_config
anpassen
ListenAddress 0.0.0.0
ssh Weblinks[Bearbeiten]
Email[Bearbeiten]
- MTA: postfix
- MDA: maildrop
- IMAP server: dovecot
- MUA (clientseitig) empfohlen:
- Mozilla Thunderbird
- sup
- rubygems installieren
- archiv runterladen und entpacken
- z.B.
wget http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz
- in den entpackten ordner wechseln
- als root:
ruby setup.rb
- rubygems updaten:
gem18 update --system
gem18 install rake
gem18 install ncursesw
... broken?- sup aus den gems installieren:
gem18 install sup
- als user im home verzeichnis:
sup-config
- aufruf:
sup-mail
... und schön durch die emails pflügen
- mutt
- config file "~/.muttrc"
set mbox_type=Maildir set folder="~/Mail" set mask="!^\\.[^.]" set mbox="~/Mail" set spoolfile="~/Mail" set editor="mg" set charset="utf-8" set realname="XXX (StuRa HTW Dresden)" set from="XXX@stura.htw-dresden.de" set use_from=yes set mime_forward=yes set mime_forward_rest=yes
MTA: postfix[Bearbeiten]
- in the email jail
# cd /usr/ports/mail/postfix
# make install clean
- postfix added to group mail -> y
- Would you like to activate Postfix in /etc/mail/mailer.conf -> y
- Einstellungen (Auszug + aliases)
- edit /usr/local/etc/postfix/main.cf:
local_recipient_maps = $alias_maps unknown_local_recipient_reject_code = 550 mynetworks = 127.0.0.0/8 myhostname = mail.stura.htw-dresden.de mydomain = stura.htw-dresden.de myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain inet_interfaces = all alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases home_mailbox = Maildir/ mail_spool_directory = /var/spool/mail relay_domains = stura.htw-dresden.de smtpd_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender smtpd_recipient_restrictions = reject_invalid_hostname, reject_unknown_recipient_domain, reject_unauth_destination, reject_rbl_client sbl.spamhaus.org, permit smtpd_helo_restrictions = reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname smtpd_client_restrictions = reject_rbl_client dnsbl.sorbs.net
Links[Bearbeiten]
- The Postfix Home Page
- Postfix UCE HOWTO (Spamkontrolle)
IMAP-Server dovecot[Bearbeiten]
- dovecot
- optionen: kqueue, ssl, managesieve, mysql
# echo 'dovecot_enable="YES"' >> /etc/rc.conf
# cp /usr/local/share/examples/dovecot/dovecot.conf /usr/local/etc/dovecot/dovecot.conf
# cp /usr/local/share/examples/dovecot/dovecot-sql.conf /usr/local/etc/dovecot/dovecot-sql.conf
- dovecot2
- optionen: kqueue, ssl, mysql
# cp /usr/local/share/doc/dovecot/example-config/dovecot.conf /usr/local/etc/dovecot/dovecot.conf
# cp /usr/local/share/doc/dovecot/example-config/dovecot-sql.conf /usr/local/etc/dovecot/dovecot-sql.conf
- in /usr/local/etc/dovecot.conf: (vorerst zum testen)
protocols = imap pop3
disable_plaintext_auth = no
ssl = no
mail_location = mbox:~/mail/:INBOX=/var/mail/%u
mail_privileged_group = mail
protocol imap {
imap_client_workarounds = delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep
}
- Krypto drankleben (imap -> imaps, pop3 -> pop3s)
MDA: maildrop[Bearbeiten]
- maildir in users homeverzeichnis anlegen
maildirmake Mail
- im homeverzeichnis die Datei .mailfilter anlegen:
MAILBOX="$HOME/Mail" DEFAULT="$MAILBOX"
- chmod 600 .mailfilter
- maildrop in postfix main.cf einarbeiten
mailbox_command = /usr/local/bin/maildrop -d ${USER}
Tricks etc.[Bearbeiten]
- alias-Adressen anlegen
- edit: /usr/local/etc/postfix/main.cf:
alias_maps = hash:/etc/aliases, hash:/etc/aliases.stura alias_database = hash:/etc/aliases,hash:/etc/aliases.stura
- edit /etc/aliases.stura
- in das Postfix laden:
# newaliases
# postfix reload
# usr/local/etc/rc.d/postfix restart
- SMTP testen:
# nc $JAIL_IP 25
# HELO microsoft.com
# MAIL FROM:<bill@microsoft.com>
# RCPT TO:<test@stura.htw-dresden.de>
# DATA
# From: <bill@microsoft.com>
# To: <stest@stura.htw-dresden.de>
# Subject: hui
# das hätte nicht passieren sollen
# .
# QUIT
- SMTP über mehrere eMails testen:
- num=0
- for ABSENDER in <user>@stura.htw-dresden.de noreplay@stura.htw-dresden.de test@stura.htw-dresden.de; do
- ABSENDERDOMAIN=`echo "${ABSENDER#*@}"`
- for EMPFAENGER in test@stura.htw-dresden.de; do
- num=$((num + 1))
- nc $JAIL_IP 25
- HELO $ABSENDERDOMAIN
- MAIL FROM:<$ABSENDER>
- RCPT TO:<$EMPFAENGER>
- DATA
- From: <$ABSENDER>
- To: <$EMPFAENGER>
- Subject: TEST$num
- Dies ist die Testmail.
- Nummer $num
- von $ABSENDER
- ueber $ABSENDERDOMAIN
- an $EMPFAENGER
- .
- QUIT
- done
- done
Plone[Bearbeiten]
- JoSch damals gebaut, zwischenzeitlich grundsaniert
- Apache installiert
- apache 22 optionen:
- mod_ssl
- mod_rewrite
- mod_deflate
- ipv6
- apr ohne berkeley db und gnu db
- http://plone.org/documentation/kb/freebsdploneapache/preparefreebsd
- http://plone.org/documentation/kb/freebsdploneapache/preparefreebsd
FreeBSD aktualisieren[Bearbeiten]
Aktualisierungen an Haupt- und Unterversionen[Bearbeiten]
Dieser Prozess entfernt alte Objekt-Dateien und Bibliotheken, was dazu führt, dass die meisten Anwendungen von Drittherstellern nicht mehr funktionieren. Es wird empfohlen, dass alle installierten Ports entweder entfernt und neu installiert oder zu einem späteren Zeitpunkt mittels ports-mgmt/portupgrade aktualisiert werden. Die meisten Anwender werden wahrscheinlich einen Testlauf mittels des folgenden Kommandos durchführen wollen:
portupgrade -af
Dies sorgt dafür, dass alles korrekt neu installiert wird. Beachten Sie, dass das Setzen der BATCH-Umgebungsvariable auf yes während dieses Prozesses auf jede Eingabe mit ja antwortet, was es nicht mehr notwendig macht, manuell eingreifen zu müssen. …
- weiter Informationen
- Das FreeBSD-Handbuch: 25.2.3. Aktualisierungen an Haupt- und Unterversionen
DNS[Bearbeiten]
- genutzt werden DNS Server des FoeBuD und des CCC
- zusätzlich (für OpenNIC)
- DE,NRW 217.79.186.148 ns1.nrw.de.dns.opennic.glue Günter Grodotzki yes (no logs kept)
- NZ 27.110.120.30 ns1.nz.dns.opennic.glue Dean Gardiner yes (24 hrs)
Tipps, Tricks etc.[Bearbeiten]
- die Änderungen an Konfigurationsdateien (z.b. in /etc) via git tracken
- disk quotas für jails einrichten
- systemweite make.conf bauen
- rc.conf bzw. /etc/rc neu laden ohne reboot
- Achtung: über Konsole direkt am Gerät (single user mode verliert Netzwerkzugriff!)
# shutdown now (Note: without -r or -h) # return # exit
- netzwerk (services) über ssh neu starten:
# /etc/rc.d/netif restart && /etc/rc.d/routing restart
USB-Stick bauen[Bearbeiten]
- auf einem FreeBSD
- Image runterladen
- Image auf Stick dumpen
dd if=FreeBSD-9.2-RELEASE-amd64-memstick.img of=/dev/da0 bs=64k
Troubelshooting[Bearbeiten]
- In order to fix this, you should reboot from the installer CD, and choose the "Live CD" option. You first need to mount the zpool under /mnt. First list the available pools:
zpool list
no pools available
- and
zpool import
pool: zroot id: 128742958409357345692345 state: ONLINE action: The pool can be imported using its name of numeric identifier. config: zroot ONLINE ada1p2 ONLINE
- Now import the zroot pool, and mount under
/mnt
:zpool import -R /mnt zroot
System neubauen[Bearbeiten]
- Von Live-CD oder stick booten!
- System unter
/mnt
einmounten (vollständig, also 'alle datasets)!zpool import
zpool import -R /mnt zroot
- Mit nullfs mounten!
/mnt/usr/obj
an/usr/obj
mount_nullfs /mnt/usr/obj /usr/obj
/mnt/usr/src
an/usr/src/
mount_nullfs /mnt/usr/src /usr/src
- Update!
cd /usr/src
make installkernel DESTDIR=/mnt
make installworld DESTDIR=/mnt
mergemaster -UFi -D /mnt/
- Neustaren!
reboot
Siehe auch fuer weitere Tips & Tricks[Bearbeiten]
Server Setup Beschreibung[Bearbeiten]
- /boot UFS, der Rest ZFS
- irgendwas zum booten nehmen (USB, DVD) und ab in die Fixit shell
- MBR Geometrie baun
gpart create -s mbr ad4
- nachschauen, ob es geklappt hat
gpart show ad4
- den Rest der Platte mit FreeBSD belegen
gpart add -s (aus gpart show Größe -1 )GB -t freebsd ad4
- riesigen BSD-slice anlegen
gpart create -s BSD ad4s1
- partitionen anlegen
gpart add -s 1G -t freebsd-ufs ad4s1 gpart add -s 4G -t freebsd-swap ad4s1 gpart add -t freebsd-zfs ad4s1
- Partition als aktiv markieren (falls andere schon drauf sind und von denen gebootet werden soll)
gpart set -a active -i 1 ad0
Siehe auch[Bearbeiten]
Weblinks[Bearbeiten]
- FreeBSD.org - Handbuch (auch durch Spezial:Interwikitabelle per [[
freebsd-handbuch:
Bezeichnung (URL) der Seite]] als Namensraum verfügbar) - FreeBSD-wiki
- Unix Toolbox
- PF: Der OpenBSD Packet Filter
Weblinks für Bücher[Bearbeiten]
- Absolute FreeBSD, 2nd Edition
- BSD UNIX Toolbox: 1000+ Commands for FreeBSD, OpenBSD and NetBSD
- Building a Server with FreeBSD 7
- Book of PF, 2nd Edition
- Jacek Artymiak - Building Firewalls with OpenBSD and PF, 2nd edition
- Ending Spam
- Network Know-How - An Essential Guide for the Accidental Admin
- Charles M. Kozierok: TCP/IP Guide - A Comprehensive, Illustrated Internet Protocols Reference
- Dave Taylor: Wicked Cool Shell Scripts - 101 Scripts for Linux, Mac OS X, and UNIX Systems