BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Sendmail mit SASL-Authentifizierung und SSL-Verschlüsselung

Möchte man einen Mailserver einrichten, über den Mails versenden werden können, man sich dazu aber authentifizieren muss und die Verbindung mit SSL geschützt ist, so muss zuerst der cyrus-sasl2-saslauthd Port installiert werden:

# cd /usr/ports/security/cyrus-sasl2-saslauthd/ && make install clean

Danach werden die benötigten Einträge in der rc.conf gemacht:

# echo 'saslauthd_enable="YES"' >> /etc/rc.conf
# echo 'sendmail_enable="YES"' >> /etc/rc.conf

Nun kann der saslauthd gestartet werden:

# /usr/local/etc/rc.d/saslauthd start

Damit der sendmail-Daemon nun mit der SASL2 Unterstützung gebaut werden kann, müssen folgende Einträge in der /etc/make.conf gemacht werden:

# with SASLv2:
SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

Danach kann sendmail neu gebaut werden:

# cd /usr/src/lib/libsmutil
# make cleandir && make obj && make
# cd /usr/src/lib/libsm
# make cleandir && make obj && make
# cd /usr/src/usr.sbin/sendmail
# make cleandir && make obj && make && make install

Nun können die Konfigurationsdateien für den sendmail-Daemon erstellt werden:

cd /etc/mail && make

Dabei wurden zwei neue Konfigurationsdateien erstellt, welche den Hostnamen im Dateinamen haben: <hostname>.mc und <hostname>.submit.mc. In die <hostname>.mc werden nun folgende Zeilen eingefügt:

dnl SASL auth
define(`confAUTH_MECHANISMS',`PLAIN LOGIN')dnl
TRUST_AUTH_MECH(`PLAIN LOGIN')dnl

dnl SSMTP
define(`CERT_DIR', `/etc/mail/certs')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/mycert.pem')dnl
define(`confSERVER_CERT', `CERT_DIR/mycert.pem')dnl
define(`confSERVER_KEY', `CERT_DIR/mykey.pem')dnl
define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')dnl
define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')dnl
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl

Nun müssen noch, falls nicht schon vorhanden, die entsprechenden Zertifikate für den sendmail-Daemon erstellt werden:

# mkdir /etc/mail/certs
# cd /etc/mail/certs
# openssl dsaparam 1024 -out dsa1024.pem
# openssl req -x509 -nodes -newkey dsa:dsa1024.pem -out mycert.pem -keyout mykey.pem
# chmod 600 /etc/mail/certs/*

Als Letztes muss die neue Konfiguration aktiviert und sendmail neu gestartet werden:

# cd /etc/mail
# make all install restart

Danach lässt sich auf TCP -Port 465 eine SSL-verschlüsselte Verbindung aufbauen, wobei der Benutzer gegen die auf dem Server vorhanden Benutzerkonten authentifiziert wird. Zum Testen des Mailservers kann swaks aus dem FreeBSD Portbaum verwendet werden. Mehr Informationen zur SMTP Authentifikation findet man im FreeBSD Handbuch: http://www.freebsd.org/doc/en/books/handbook/smtp-auth.html.

 Permalink

FreeBSD Jails mit NAT betreiben

Möchte man auf einem FreeBSD System mehrere Jails betreiben, ohne jedoch weitere öffentlichen IP-Adressen zur Verfügung zu haben, können die Jails an das Loopback-Interface gebunden werden und mit Hilfe der pf-Firewall ein NAT für die Jails erstellt werden. Dazu muss auf dem Hostsystem in der /etc/rc.conf die pf-Firewall und das IP-Forwarding aktiviert und die Jail entsprechend konfiguriert sein. Im folgenden Beispiel wird die Jail mit der IP 127.0.0.10 an die Schnittstelle lo0 gebunden:

pf_enable="YES
gateway_enable="YES"
ifconfig_lo0_alias0="inet 127.0.0.10 netmask 255.255.255.255"
jail_enable="YES"
jail_list="test"
jail_test_rootdir="/usr/jails/test.chruetertee.ch"
jail_test_hostname="test.chruetertee.ch"
jail_test_ip="127.0.0.10"
jail_test_exec="/bin/sh /etc/rc"
jail_test_devfs_enable="YES"
jail_test_devfs_ruleset="devfsrules_jail"

Danach muss das IP-Forwarding auf dem Hostsystem aktiviert werden:

# sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1

Nun kann die pf-Konfiguration so ergänzt werden, dass gewisse UDP und/oder TCP-Ports der Jail von aussen erreichbar sind und die Jail per NAT nach aussen zugreifen kann. Im folgenden Beispiel wird der Zugriff mit UDP auf Port 53 und mit TCP auf Port 53 und 465 von aussen (Schnittstelle bge0) zugelassen:

ext_if="bge0"

testjail_tcp = "{ 53, 465 }"
testjail_udp = "{ 53 }"

testjail = 127.0.0.10

set skip on lo0

rdr pass on $ext_if proto tcp from any to $ext_if port $testjail_tcp -> $testjail
rdr pass on $ext_if proto udp from any to $ext_if port $testjail_udp -> $testjail
nat on $ext_if proto {tcp udp} from $testjail to any -> ($ext_if)

[...] (weitere pf-Konfiguration des Hostsystemes)

Danach muss die neue pf-Konfiguration geladen werden:

# pfctl -f /etc/pf.conf

Nun kann in der /etc/rc.conf der Jail als Default-Gateway die IP-Adresse (in diesem Beispiel die IP-Adresse von bge0) des Hostsystemes angegeben werden:

defaultrouter="<IP-Adresse des Hostsystemes>"

Nun lässt sich aus der Jail via NAT durch die pf-Firewall nach aussen zugreifen.

Comments (8)  Permalink

Kernelausgaben auf Multiprozessor-Rechner synchronisieren

Auf Multiprozessoren-Rechnern können manchmal Kernelausgaben mit anderen Meldungen vermischt dargestellt werden, wodurch die Ausgaben unleserlich werden. Beispielsweise kann dies beim Herunterfahren eines Systems während der Ausgabe von "syncing disks" auftreten. Soll dies verhindert werden, kann folgende Option in der Kernelkonfiguration hinzugefügt werden:

options     PRINTF_BUFR_SIZE=128

Danach muss der Kernel neu gebaut werden. Nach einem Neustart des Systems werden die Meldungen korrekt angezeigt.

 Permalink

Informationen zu einem UFS-Dateisystem anzeigen

Möchte man herausfinden, mit welchen newfs-Optionen ein UFS-Dateisystem angelegt wurde, so kann die -m Option von dumpfs verwendet werden:

# dumpfs -m /tmp
newfs command for /tmp (/dev/ad4s3e)
newfs -O 2 -U -a 8 -b 16384 -d 16384 -e 2048 -f 2048 -g 16384 -h 64 -m 8 -o time -s 262144 /dev/ad4s3e

Ruft man dumpfs ohne Optionen auf, werden ausführliche Informationen zu allen Zylindergruppen und zum Superblock angezeigt. Im FreeBSD Basissystem ist dumpfs bereits enthalten. Mehr Informationen zu dumpfs findet man in der Manpage dumpfs(8).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

Änderungen eines Patches übersichtlich darstellen

Mit Hilfe von diffstat lassen sich die Änderungen eines Patches übersichtlich darstellen. Im FreeBSD Portbaum findet man diffstat unter textproc/diffstat:

# cd /usr/ports/textproc/diffstat && make install clean

Nun kann diffstat aufgerufen werden, wobei die Informationen zum Patch dargestellt werden. So wird zum Beispiel die Anzahl Änderungen pro Datei angezeigt und ein Histogramm zeigt an, wie die Anzahl der hinzugefügten und entfernten Zeilen verteilt sind.

# diffstat logfile_markup.patch
 Makefile                                        |   27 +--
 sql/genschema                                   |    4 
 sql/schema.mysql.pre                            |    9 +
 sql/schema.pgsql.pre                            |    9 +
 sql/values.lp                                   |   22 +++
 webui/core/LogfilePattern.php                   |   67 +++++++++
 webui/core/PortFailPattern.php                  |   62 ++++++++
 webui/core/TinderboxDS.php                      |   24 +++
 webui/index.php                                 |   14 +
 webui/module/moduleLogs.php                     |  174 ++++++++++++++++++++++++
 webui/module/modulePorts.php                    |    3 
 webui/templates/default/describe_port.tpl       |    1 
 webui/templates/default/display_markup_log.tpl  |  162 ++++++++++++++++++++++
 webui/templates/default/failed_buildports.tpl   |    1 
 webui/templates/default/latest_buildports.tpl   |    1 
 webui/templates/default/list_buildports.tpl     |    1 
 webui/templates/default/tinderstyle.css         |    3 
 webui/templates/paefchen/describe_port.tpl      |    1 
 webui/templates/paefchen/display_markup_log.tpl |  156 +++++++++++++++++++++
 webui/templates/paefchen/failed_buildports.tpl  |    3 
 webui/templates/paefchen/latest_buildports.tpl  |    1 
 webui/templates/paefchen/list_buildports.tpl    |    1 
 webui/templates/paefchen/tinderstyle.css        |    9 +
 23 files changed, 739 insertions(+), 16 deletions(-)

Soll anstelle des Histogramms die Anzahl hinzugefügter, entfernter oder geänderter Zeilen angezeigt werden, so kann die -f 0 Option verwendent werden:

# diffstat -f 0 mem_info.patch 
 core/functions.php                  |    7     7 +     0 -     0 !
 inc_tinderbox.php.dist              |    1     1 +     0 -     0 !
 module/moduleBuildPorts.php         |   33     30 +    3 -     0 !
 module/moduleLogs.php               |   12     11 +    1 -     0 !
 module/modulePortFailureReasons.php |   11     10 +    1 -     0 !
 module/modulePorts.php              |   11     10 +    1 -     0 !
 templates/paefchen/footer.inc.tpl   |    1     1 +     0 -     0 !
 7 files changed, 70 insertions(+), 6 deletions(-)

Mehr Informationen zu diffstat findet man in der Manpage diffstat(1).

 Permalink

An- und Abmelden von Benutzern beobachten

Mit Hilfe von wuzzah kann beobachtet werden, wann sich Benutzer an einem System an- und wieder abmelden. Im FreeBSD Portbaum findet man wuzzah unter sysutils/wuzzah:

# cd /usr/ports/sysutils/wuzzah && make install clean

wuzzah kann mit der -a Option gestartet werden, wonach man sofort alle angemeldeten Benutzer sieht. Meldet sich nun ein Benutzer an oder ab, so wird dies sofort angezeigt:

# wuzzah -a
(20:13:07)  beat logged on  :0       from hostname
(21:27:05)  beat logged on  ttyp4    from hostname
(21:42:55)  beat logged on  ttyp3    from hostname
(22:04:07)  beat logged on  ttyp2    from hostname
(22:49:13)  beat logged on  ttyp1    from hostname
(22:47:13)  test logged on  ttyp5    from hostname
(23:17:16)  test logged off ttyp5    from hostname

Möchte man nur bestimmte Benutzer beobachten, kann dazu die Datei ~/.wuzzah angelegt werden und jeder Benutzername, der beobachtet werden soll, in einer eigenen Zeile aufgeführt werden. Nun kann wuzzah ohne eine Option aufgerufen werden, wobei man nur noch die gewählten Benutzer sieht:

# who
beat             ttyp1    12 Dez 19:32 (:0.0)
beat             ttyp2    12 Dez 20:27 (:0.0)
test             ttyp4    12 Dez 21:35 (:0.0)
# cat ~/.wuzzah
test
guest
# wuzzah
(23:21:11)  test logged on  ttyp4    from hostname

Durch das Drücken von Ctrl+C wird wuzzah beendet. Mehr Informationen zu wuzzah findet man in der Manpage wuzzah(1).

 Permalink

Fehlende Shared-Libraries identifizieren

Mit Hilfe von libchk können Programme identifiziert werden, die gegen Shared-Libraries gelinkt sind, welche jedoch nicht mehr existieren. Im FreeBSD Portbaum findet man libchk unter sysutlis/libchk:

# cd /usr/ports/sysutils/libchk && make install clean

Standardmässig durchsucht libchk zur Zeit auch noch Verzeichnisse unter dem Verzeichnis /usr/X11R6, welches auf neueren Systemen nach /usr/local gelinkt ist. Dies kann mit der -x Option ausgeschlossen werden. Führt man libchk nun aus, werden alle Programme angezeigt, bei welchen Shared-Libraries fehlen. Auch werden dabei alle Shared-Libraries aufgelistet, welche von keinem Programm benötigt werden. Jedoch sollten diese nicht einfach deinstalliert werden ohne dass vorher genau überprüft wird, dass diese wirklich nicht mehr gebraucht werden.

# libchk -x /usr/X11R6
Will look into:
        /bin
        /lib
        /sbin
        /usr/bin
        /usr/games
        /usr/lib
        /usr/libexec
        /usr/local/bin
        /usr/local/lib
        /usr/local/libexec
        /usr/local/sbin
        /usr/sbin
Unresolvable link(s) found in: /usr/lib/libssh.so.3
        libasn1.so.8
        libroken.so.8
        libkrb5.so.8
Unresolvable link(s) found in: /usr/local/bin/mutt
        libasn1.so.8
        libroken.so.8
        libkrb5.so.8
Unreferenced library: /usr/local/lib/gcc-4.2.3/libffi.so.4
Unreferenced library: /usr/local/lib/gcc-4.2.3/libgfortran.so.2
Unreferenced library: /usr/local/lib/gcc-4.2.3/libgomp.so.1
Unreferenced library: /usr/local/lib/gcc-4.2.3/libmudflap.so.0
Unreferenced library: /usr/local/lib/gcc-4.2.3/libmudflapth.so.0
Unreferenced library: /usr/local/lib/gcc-4.2.3/libobjc.so.2
Unreferenced library: /usr/local/lib/gcc/i386-portbld-freebsd7.1/3.4.6/libg2c.so.0

Das Fehlen der Shared-Libraries kann danach mit ldd(1) verifiziert werden und diese können danach gegebenenfalls wieder installiert werden:

# ldd /usr/local/bin/mutt
/usr/local/bin/mutt:
        libncursesw.so.5.6 => /usr/local/lib/libncursesw.so.5.6 (0x2810b000)
        libgssapi.so.8 => /usr/lib/libgssapi.so.8 (0x28130000)
        libkrb5.so.8 => not found (0x0)
        libasn1.so.8 => not found (0x0)
        libcrypto.so.4 => /lib/libcrypto.so.4 (0x28147000)
        libroken.so.8 => not found (0x0)
        libcrypt.so.3 => /lib/libcrypt.so.3 (0x2823f000)
        libcom_err.so.3 => /usr/lib/libcom_err.so.3 (0x28258000)
        libssl.so.4 => /usr/lib/libssl.so.4 (0x2825a000)
        libz.so.3 => /lib/libz.so.3 (0x28289000)
        libintl.so.8 => /usr/local/lib/libintl.so.8 (0x2829a000)
        libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x282a3000)
        libc.so.6 => /lib/libc.so.6 (0x28398000)
        libtinfow.so.5.6 => /usr/local/lib/libtinfow.so.5.6 (0x2847a000)

Mehr Informationen zu libchk findet man in der Manpage libchk(1).

Comments (1)  Permalink

Inhalt eines ISO-Images auslesen

Mit Hilfe von isoinfo lässt sich der Inhalt eines ISO-Images anzeigen. Im FreeBSD Portbaum findet man isoinfo im Port sysutils/cdrtools:

# cd /usr/ports/sysutils/cdrtools && make install clean

Benutzt man isoinfo mit der -f Option, so werden alle Dateien des ISO-Images angezeigt, als wenn ein find . -print im Image durchgeführt werden würde. Mit der -i Option wird das ISO-Image angegeben, welches ausgelesen werden soll:

# isoinfo -f -i 2.2.8-RELEASE.iso
/ABOUT.TXT
/BIN
/CATPAGES
/CDROM.INF
/COMPAT1X
/COMPAT20
/COMPAT21
/DES
/DICT
/DOC
[...]

Mit der -l Option wird der Inhalt des Images angezeigt, als wenn ein ls -lR im Image ausgeführt werden würde:

#  isoinfo -l -i 2.2.8-RELEASE.iso | head

Directory listing of /
d---------   0    0    0            4096 Mar 31 2006 [     24 02]  . 
d---------   0    0    0            4096 Mar 31 2006 [     24 02]  .. 
----------   0    0    0            8723 Mar 31 2006 [    804 00]  ABOUT.TXT 
d---------   0    0    0           10240 Mar 31 2006 [     28 02]  BIN 
d---------   0    0    0            4096 Mar 31 2006 [     35 02]  CATPAGES 
----------   0    0    0              27 Mar 31 2006 [    809 00]  CDROM.INF 
d---------   0    0    0            2048 Mar 31 2006 [     43 02]  COMPAT1X 
d---------   0    0    0            2048 Mar 31 2006 [     44 02]  COMPAT20
[...]

Durch die -x Option lässt sich eine Datei des Images auf der Standardausgabe ausgeben:

# isoinfo -x /README.TXT -i 2.2.8-RELEASE.iso
   -----------------------------------------
      FreeBSD 2.2.8  ---  RELEASE Version              ,        ,
   -----------------------------------------          /(        )`
                                                      \ \___   / |
Welcome to the 2.2.8-RELEASE version of FreeBSD!      /- _  `-/  '
                                                     (/\/ \ \   /\
This is a full release to follow 2.2.7-RELEASE,      / /   | `    \
which was released in July, 1998.  Many bugs         O O   ) /    |
[...]

Mehr Informationen und weitere Optionen von isoinfo findet man in der Manpage isoinfo(8).

Comments (3)  Permalink

Netzwerkstatistiken anzeigen

Mit Hilfe der -s Option von netstat können Statistiken zu verschiedenen Netzwerkprotokollen angezeigt werden. Wird die -s Option zweimal verwendet, so werden alle Zähler die auf 0 stehen nicht angezeigt:

# netstat -s -s
tcp:
        20131319 packets sent
                7987509 data packets (3819885096 bytes)
                25265 data packets (20575251 bytes) retransmitted
                1608 data packets unnecessarily retransmitted
                6985545 ack-only packets (551074 delayed)
                25 window probe packets
                4018034 window update packets
                1115356 control packets
        22627937 packets received
                6801128 acks (for 3754613339 bytes)
                511098 duplicate acks
                16166251 packets (1581592327 bytes) received in-sequence
                9474 completely duplicate packets (1610688 bytes)
                112 old duplicate packets
                79 packets with some dup. data (7143 bytes duped)
                249755 out-of-order packets (313240610 bytes)
                462004 window update packets
                29378 packets received after close
                30 discarded for bad checksums
                10468 discarded due to memory problems
        275397 connection requests
        624094 connection accepts
        20132 ignored RSTs in the windows
[...]

Wird die -s Option zusammen mit der -r Option verwendet, so werden verschiedene Zähler zum Routing angezeigt. Auch hier kann die -s Option zweimal verwendet werden, um alle Zähler die auf 0 stehen nicht anzuzeigen:

# netstat -r -s 
routing:
        213 bad routing redirects
        0 dynamically created routes
        0 new gateways due to redirects
        13 destinations found unreachable
        0 uses of a wildcard route
        0 routes not in table but not freed

Mehr Informationen zu netstat findet man in der Manpage netstat(1).

 Permalink

Zugriff auf Systemmeldungen verbieten

Mit Hilfe von dmesg(8) können standardmässig alle Benutzer die Systemmeldungen abrufen:

# dmesg
Copyright (c) 1992-2008 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 7.1-PRERELEASE #0: Fri Sep  5 22:34:11 CEST 2008
[...]

Durch die sysctl-Variable security.bsd.unprivileged_read_msgbuf kann unprivilegierten Benutzern der Zugriff auf die Systemmeldungen verboten werden:

# sysctl security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_read_msgbuf: 1 -> 0

Unprivilegierte Benutzer erhalten fortan eine Fehlermeldung beim Aufruf von dmesg:

# dmesg
dmesg: sysctl kern.msgbuf: Operation not permitted

Soll die Option dauerhaft gesetzt werden, kann folgender Eintrag in der /etc/sysctl.conf eingefügt werden:

security.bsd.unprivileged_read_msgbuf=0

 Permalink
Next1-10/84