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
1-7/7