Datenhaufen zu IT und Elektronik.

Autor: kernel-error (Seite 27 von 48)

systemd und ntp

Man ist das hässlich… Da sitze ich hier an einem Sabayon System und bekomme keine saubere Uhrzeit. Zwar sollte ntpd.service beim Start die Uhrzeit abgleichen.. Der Dienst verkackt aber seinen Starten, weil er „noch“ kein Netzwerk hat. Dabei ist sogar hinterlegt dass es er erst nach dem Netzwerkmanager startet, denn noch scheint der Netzwerkmanager so schnell keine Verbindung zu bekommen. Der initiale Abgleich vom ntpd.service schlägt daher fehlt, der Dienst bleibt aus und es probiert es auch später nicht mehr. Grütze..

$ systemctl --failed
UNIT            LOAD   ACTIVE SUB    DESCRIPTION
ntpdate.service loaded failed failed Set time via NTP using ntpdate

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Ich lasse jetzt mal das Bughunting und setzte einfach auf chrony 😀 Nur für Zeitsync ist das ok für mich!

$ equo search chrony
╠  @@ Suche...
╠      @@ Paket: net-misc/chrony-1.29.1 Branch: 5, [sabayonlinux.org] 
╠          Verfügbar:      Version: 1.29.1 ~ tag: NoTag ~ Version: 0
╠          Installiert:    Version: Nicht installiert ~ tag: n/a ~ Version: n/a
╠          Slot:           0
╠          Homepage:       http://chrony.tuxfamily.org/ 
╠          Beschreibung:   NTP client and server programs 
╠          Lizenz:         GPL-2
╠   Schlüsselwörter:  chrony
╠   Gefunden:         1 Eintrag

Gefunde und dann  installieren….

$ equo install chrony
╠  @@ Berechne Abhängigkeiten...
╠  ## [N] [sabayonlinux.org] dev-libs/libedit-20130712.3.1|0
╠  ## [N] [sabayonlinux.org] net-misc/chrony-1.29.1|0
╠  @@ Pakete die installiert/aktualisiert/entfernt werden müssen: 2
╠  @@ Pakete die entfernt werden müssen: 0
╠  @@ Download Größe: 413.1kB
╠  @@ Benutzter Festplattenspeicher: 715.6kB
╠  @@ Du brauchst zumindest: 1.5MB freien Speicherplatz
╠  ::: >>>  (1/1) 2 Pakete
╠    ## downloaden: 2 Pakete
╠    ## ( mirror #1 ) [dev-libs:libedit-20130712.3.1.3556f679066ec7d787573f08ac74ef24922243b2~0.tbz2] @ http://na.mirror.garr.it
╠    ## ( mirror #1 ) [net-misc:chrony-1.29.1.98ee02f66d56c49e1fdc4d713b2cea5ff23d775e~0.tbz2] @ http://na.mirror.garr.it
╠   ## Sammeldownload: 2 Artikel
╠    # [1] na.mirror.garr.it => dev-libs:libedit-20130712.3.1.3556f679066ec7d787573f08ac74ef24922243b2~0.tbz2
╠    # [2] na.mirror.garr.it => net-misc:chrony-1.29.1.98ee02f66d56c49e1fdc4d713b2cea5ff23d775e~0.tbz2
╠    ## Überprüfe Paketprüfsumme...
╠    ## Überprüfe Paketprüfsumme...
╠       : [net-misc:chrony-1.29.1.98ee02f66d56c49e1fdc4d713b2cea5ff23d775e~0.tbz2] GPG validated
╠       : [dev-libs:libedit-20130712.3.1.3556f679066ec7d787573f08ac74ef24922243b2~0.tbz2] GPG validated
╠       : [net-misc:chrony-1.29.1.98ee02f66d56c49e1fdc4d713b2cea5ff23d775e~0.tbz2] SHA1 validated
╠       : SHA256 deaktiviert
╠       : [dev-libs:libedit-20130712.3.1.3556f679066ec7d787573f08ac74ef24922243b2~0.tbz2] SHA1 validated
╠       : SHA512 deaktiviert
╠       : SHA256 deaktiviert
╠       : SHA512 deaktiviert
╠    ## ( mirror #1 ) [dev-libs:libedit-20130712.3.1.3556f679066ec7d787573f08ac74ef24922243b2~0.tbz2] erfolgreich @ http://na.mirror.garr.it
╠    ## ( mirror #1 ) [net-misc:chrony-1.29.1.98ee02f66d56c49e1fdc4d713b2cea5ff23d775e~0.tbz2] erfolgreich @ http://na.mirror.garr.it
╠    ##  angehäufte Transferrate: 658.3kB/Sekunde
╠  +++ >>>  (1/2) dev-libs/libedit-20130712.3.1
╠    ## Entpacke: dev-libs:libedit-20130712.3.1.3556f679066ec7d787573f08ac74ef24922243b2~0.tbz2
╠    ## Installiere Paket: dev-libs/libedit-20130712.3.1
╠    ## [BSD replacement for libreadline.]
╠    ## Updating installed packages repository: dev-libs/libedit-20130712.3.1
>>> Regenerating /etc/ld.so.cache...
╠    ## Aufräumen: dev-libs/libedit-20130712.3.1
╠  +++ >>>  (2/2) net-misc/chrony-1.29.1
╠    ## Entpacke: net-misc:chrony-1.29.1.98ee02f66d56c49e1fdc4d713b2cea5ff23d775e~0.tbz2
╠    ## Installiere Paket: net-misc/chrony-1.29.1
╠    ## [NTP client and server programs]
╠    ## Updating installed packages repository: net-misc/chrony-1.29.1
╠    ## Aufräumen: net-misc/chrony-1.29.1
╠  @@ Installation vollständig.
╠  @@ No configuration files to update.

Beim Boot soll er in Zukunft gestartet werden!

$ systemctl enable chronyd.service
ln -s '/usr/lib64/systemd/system/chronyd.service' '/etc/systemd/system/multi-user.target.wants/chronyd.service'

Och ja, am besten sollte der Dienst direkt gestartet werde…

$ systemctl start chronyd.service

Bevor ich es vergesse, den hässlichen ntpd.service will ich beim Start nicht mehr sehen!

$ systemctl disable ntpd.service

DMARC Milter und Postfix auf Debian 7 Wheezy

Über DMARC selbst habe ich ja schon etwas geschrieben. Selbst eine DMARC Policy zu veröffentlichen und sich um die eingehenden Reports zu kümmern ebenfalls. Heute soll es nun darum gehen, mit seinem Postfix auf einem Debian 7 die DMARC Policys der Absender zu Prüfen und zu berücksichtigen.

Es gibt bereits einen fertigen Milter für DMARC. Dieser findet sich leider nicht im aktuellen stable Zweig eines Debian 7.4 Wheezy. Nun könnte man auf einen Backport zurückgreifen…. So etwas kann einem aber schon mal das System etwas mehr „umdrehen“ als man wirklich möchte. Nur für den openDMARC Milter ist das nicht nötig.

Die Installation ist sehr einfach und im folgenden beschrieben. Dabei gehe ich von einem funktionsfähigen Postfix, SPF und DKIM Filter aus. Für dieses Setup setzte ich auf postgrey sowie  postfix-policyd-spf-perl. Denn der openDMARC Milter „verlässt“ sich darauf, das diese Programme bereits die richtigen Informationen in die Mailheader geschrieben haben.

ACHTUNG
Wer zum Beispiel AMaViS als smtpd_proxy_filter einsetzte, wird feststellen dass es nie zum openDMARC Milter kommt. Das liegt daran, dass die Milter an einer Stelle kommen, an welcher die E-Mail nie mehr vorbei kommt, wenn sie einmal durch einen smtpd_proxy_filter gelaufen sind. Hier kann man nun also abwarten bis DMARC nicht mehr als Milter arbeitet oder AMaViS als content_filter einsetzten tongue-out.

Wie immer ist es eine Beschreibung die den Einstieg erleichtern soll und keine „so ist es perfekt“ Beschreibung. Nun also los…

Zuerst den openDMARC Milter direkt von der Projektseite herunterladen.

http://sourceforge.net/projects/opendmarc/

Für das spätere Kompilieren braucht man in jedem Fall die Entwicklerpakete für libmilter, daher installiere ich sie zuerst.

$ apt-get install libmilter-dev

Dann packen wir mal den Download aus..

$ tar xvzf opendmarc-1.2.0.tar.gz

Ins Verzeichnis wechseln und wie gewohnt kompilieren. Ich setzte dabei einfach mal das Prefix auf /usr, damit am Ende nicht alles unter /usr/local/ liegt. Bitte selbstdenkend nachmachen 🙂

$ ./configure --prefix=/usr
$ make && make install

Der Milter sollte aus Sicherheitsgründen nicht als root laufen, daher lege ich dafür einen Benutzer opendmarc an und lege seine Heimat direkt ins spätere „Arbeitsverzeichnis“. Als zweites werden die Rechte gesetzt, damit der Benutzer in seinem Zuhause arbeiten kann.

$ adduser --quiet --system --group --home /var/run/opendmarc opendmarc
$ chown opendmarc:opendmarc /var/run/opendmarc

Man sieht schon, ich versuche mich nahe am Debian Default zu orientieren. Das soll so weiter gehen um spätere Upgrades zu erleichtern und es muss nichts „Neue“ erfunden werden.. Wie im testing Zweig und beim openDKIM Milter wird der zu verwendende Socket/Port… in der Konfigurationsdatei /etc/default/opendmarc gesetzt. Das spätere INIT-Script wird diese Konfigurationsdatei einfach beim Start des Milters, in die eigentliche Konfigurationsdatei, inkludieren. Also:

$ SOCKET="inet:8893@localhost"' > /etc/default/opendmarc

Das INIT-Script greife ich mir aus dem Testing Zweig des kommenden Debian 8…

$ vi /etc/init.d/opendmarc   
#! /bin/sh
#
### BEGIN INIT INFO
# Provides:             opendmarc
# Required-Start:       $syslog $time $local_fs $remote_fs $named $network
# Required-Stop:        $syslog $time $local_fs $remote_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Start the OpenDMARC service
# Description:          Enable DMAR verification and reporting provided by OpenDMARC
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/opendmarc
NAME=opendmarc
DESC="OpenDMARC"
RUNDIR=/var/run/$NAME
USER=opendmarc
GROUP=opendmarc
SOCKET=local:$RUNDIR/$NAME.sock
PIDFILE=$RUNDIR/$NAME.pid

# How long to wait for the process to die on stop/restart
stoptimeout=5

test -x $DAEMON || exit 0

# Include LSB provided init functions
. /lib/lsb/init-functions

# Include opendkim defaults if available
if [ -f /etc/default/opendmarc ] ; then
        . /etc/default/opendmarc
fi

if [ -f /etc/opendmarc.conf ]; then
        CONFIG_SOCKET=`awk '$1 == "Socket" { print $2 }' /etc/opendmarc.conf`
fi

# This can be set via Socket option in config file, so it's not required
if [ -n "$SOCKET" -a -z "$CONFIG_SOCKET" ]; then
        DAEMON_OPTS="-p $SOCKET $DAEMON_OPTS"
fi

DAEMON_OPTS="-c /etc/opendmarc.conf -u $USER -P $PIDFILE $DAEMON_OPTS"

start() {
        # Create the run directory if it doesn't exist
        if [ ! -d "$RUNDIR" ]; then
                install -o "$USER" -g "$GROUP" -m 755 -d "$RUNDIR" || return 2
                [ -x /sbin/restorecon ] && /sbin/restorecon "$RUNDIR"
        fi
        # Clean up stale sockets
        if [ -f "$PIDFILE" ]; then
                pid=`cat $PIDFILE`
                if ! ps -C "$DAEMON" -s "$pid" >/dev/null; then
                        rm "$PIDFILE"
                        TMPSOCKET=""
                        if [ -n "$SOCKET" ]; then
                                TMPSOCKET="$SOCKET"
                        elif [ -n "$CONFIG_SOCKET" ]; then
                                TMPSOCKET="$CONFIG_SOCKET"
                        fi
                        if [ -n "$TMPSOCKET" ]; then
                                # UNIX sockets may be specified with or without the
                                # local: prefix; handle both
                                t=`echo $SOCKET | cut -d: -f1`
                                s=`echo $SOCKET | cut -d: -f2`
                                if [ -e "$s" -a -S "$s" ]; then
                                        if [ "$t" = "$s" -o "$t" = "local" ]; then
                                                rm "$s"
                                        fi
                                fi
                        fi
                fi
        fi
        start-stop-daemon --start --quiet --pidfile "$PIDFILE" --exec "$DAEMON" --test -- $DAEMON_OPTS || return 1
        start-stop-daemon --start --quiet --pidfile "$PIDFILE" --exec "$DAEMON" -- $DAEMON_OPTS || return 2
}

stop() {
        start-stop-daemon --stop --retry "$stoptimeout" --exec "$DAEMON"
        [ "$?" = 2 ] && return 2
}

reload() {
        start-stop-daemon --stop --signal USR1 --exec "$DAEMON"
}

status() {
    local pidfile daemon name status

    pidfile=
    OPTIND=1
    while getopts p: opt ; do
        case "$opt" in
            p)  pidfile="$OPTARG";;
        esac
    done
    shift $(($OPTIND - 1))

    if [ -n "$pidfile" ]; then
        pidfile="-p $pidfile"
    fi
    daemon="$1"
    name="$2"

    status="0"
    pidofproc $pidfile $daemon >/dev/null || status="$?"
    if [ "$status" = 0 ]; then
        log_success_msg "$name is running"
        return 0
    else
        log_failure_msg "$name is not running"
        return $status
    fi
}

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        stop
        echo "$NAME."
        ;;
  restart)
        echo -n "Restarting $DESC: "
        stop
        start
        echo "$NAME."
        ;;
  reload|force-reload)
        echo -n "Restarting $DESC: "
        reload
        echo "$NAME."
        ;;
  status)
        status $DAEMON $NAME
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
        exit 1
        ;;
esac

exit 0

Dieses nur noch an die richtige Stelle schieben, als ausführbar marken und bei jedem Booten mit starten lassen.

$ cp /pfad/opendmarc /etc/init.d/opendmarc
$ chmod +x /etc/init.d/opendmarc
$ update-rc.d opendmarc defaults

Das war schon fast das Schwerste… Jetzt kopiere ich die mitgelieferte Beispielkonfigurationsdatei für openDMARC nach /etc/.

$ cp /usr/share/doc/opendmarc/opendmarc.conf.sample /etc/

Diese passe ich nun wie folgt an:

$ vi /etc/opendmarc.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendmarc/examples/opendmarc.conf.sample.

##  AuthservID (string)
##      defaults to MTA name
#
AuthservID smtp.kernel-error.de

##  BaseDirectory (string)
##      default (none)
##
##  If set, instructs the filter to change to the specified directory using
##  chdir(2) before doing anything else.  This means any files referenced
##  elsewhere in the configuration file can be specified relative to this
##  directory.  It's also useful for arranging that any crash dumps will be
##  saved to a specific location.
#
# BaseDirectory /var/run/opendmarc

##  ChangeRootDirectory (string)
##      default (none)
##
##  Requests that the operating system change the effective root directory of
##  the process to the one specified here prior to beginning execution.
##  chroot(2) requires superuser access.  A warning will be generated if
##  UserID is not also set.
# 
# ChangeRootDirectory /var/chroot/opendmarc

##  ForensicReports { true | false }
##      default "false"
##
# ForensicReports false

##  IgnoreHosts path
##      default (internal)
##
# IgnoreHosts /usr/local/etc/opendmarc/ignore.hosts

##  IgnoreMailFrom domain[,...]
##      default (none)
##
# IgnoreMailFrom example.com

##  PidFile path
##      default (none)
##
##  Specifies the path to a file that should be created at process start
##  containing the process ID.
##
#
PidFile /var/run/opendmarc.pid

##  RejectFailures { true | false }
##      default "false"
##
RejectFailures false

##  Socket socketspec
##      default (none)
##
##  Specifies the socket that should be established by the filter to receive
##  connections from sendmail(8) in order to provide service.  socketspec is
##  in one of two forms: local:path, which creates a UNIX domain socket at
##  the specified path, or inet:port[@host] or inet6:port[@host] which creates
##  a TCP socket on the specified port for the appropriate protocol family.
##  If the host is not given as either a hostname or an IP address, the
##  socket will be listening on all interfaces.  This option is mandatory
##  either in the configuration file or on the command line.  If an IP
##  address is used, it must be enclosed in square brackets.
#
#Socket inet:8893@localhost

##  SoftwareHeader { true | false }
##      default "false"
##
##  Causes the filter to add a "DMARC-Filter" header field indicating the
##  presence of this filter in the path of the message from injection to
##  delivery.  The product's name, version, and the job ID are included in
##  the header field's contents.
#
SoftwareHeader true

##  Syslog { true | false }
##      default "false"
##
##  Log via calls to syslog(3) any interesting activity.
#
Syslog true

##  SyslogFacility facility-name
##      default "mail"
##
##  Log via calls to syslog(3) using the named facility.  The facility names
##  are the same as the ones allowed in syslog.conf(5).
#
# SyslogFacility mail

##  TemporaryDirectory path
##      default /var/tmp
##
##  Specifies the directory in which temporary files should be written.
#
# TemporaryDirectory /var/tmp

##  TrustedAuthservIDs string
##      default HOSTNAME
##
##  Specifies one or more "authserv-id" values to trust as relaying true
##  upstream DKIM and SPF results.  The default is to use the name of
##  the MTA processing the message.  To specify a list, separate each entry
##  with a comma.  The key word "HOSTNAME" will be replaced by the name of
##  the host running the filter as reported by the gethostname(3) function.
#
# TrustedAuthservIDs d


##  UMask mask
##      default (none)
##
##  Requests a specific permissions mask to be used for file creation.  This
##  only really applies to creation of the socket when Socket specifies a
##  UNIX domain socket, and to the HistoryFile and PidFile (if any); temporary
##  files are normally created by the mkstemp(3) function that enforces a
##  specific file mode on creation regardless of the process umask.  See
##  umask(2) for more information.
#
UMask 0002

##  UserID user[:group]
##      default (none)
##
##  Attempts to become the specified userid before starting operations.
##  The process will be assigned all of the groups and primary group ID of
##  the named userid unless an alternate group is specified.
#
UserID opendmarc

CopyFailuresTo postmaster@kernel-error.de
ForensicReports true
ForensicReportsBcc postmaster@kernel-error.de
ForensicReportsSentBy postmaster@kernel-error.de
HistoryFile /var/run/opendmarc/opendmarc.dat
MilterDebug 0

Nach der Konfiguration sollte sich der Milter bereits starten lassen. Das mache ich nun mal und kontrolliere ob er läuft!

$ /etc/init.d/opendmarc start
$ netstat -ltnp | grep :8893
tcp        0      0 127.0.0.1:8893          0.0.0.0:*               LISTEN      15974/opendmarc

Es muss nur noch Postfix darüber informiert werden, dass der Milter genutzt werden soll. Ich erweitere also einfach die folgenden Optionen. Dabei sollte der DMARC-Milter natürlich als letztes stehen:

$ vi /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:54321, inet:localhost:8893
non_smtpd_milters = inet:127.0.0.1:54321, inet:localhost:8893

Ich sag es ja, die grobe Konfiguration ist erstmal extrem einfach. Nun geht es nach dem Testen an einen Feinschliff und eine saubere Konfiguration. Tja…. Noch Fragen? Dann fragen 🙂

📧 E-Mail-Header: In-Reply-To & Message-ID einfach erklärt

LEUTE… am 13 August 1982 wurde von einem Herrn David H. Crocker das RFC 733 überarbeitet. Somit wurde das RFC 733 ersetzt durch das RFC 822.

In diesem nun knapp 32 Jahre alten Dokument wurden die Mailheader In-Reply-To und Message-ID definiert. Warum ich das schreibe? Ganz einfach… Weil es noch nicht bei allen angekommen zu sein scheint, was jetzt nicht böse zu verstehen ist!

Ich möchte es daher einmal kurz erklären. Sollte ich jemanden auf diesen Eintrag verweisen, also bitte lesen smile

Wenn ich eine E-Mail an Klaus schreibe, dann erhält meine E-Mail automatisch eine einmalige Message-ID. Diese landet dann, für den Anwender unsichtbar im Mailheader. Antwortet Klaus nun auf diese E-Mail, bekommt seine Antwort natürlich ebenfalls eine MessageID, zusätzlich wird noch das Feld In-Reply-To gefolgt von der MessageID der Nachricht auf welche er gerade geantwortet hat in die E-Mail Header geschrieben.

Was bringt dieses? Nun, viele E-Mail Clients (japp Outlook seit ein paar Jahren auch) können E-Mail Nachrichten in der Form eines Gesprächsverlaufes anzeigen. Selbst wenn sich Betreff oder E-Mail-Inhalt komplett ändern. Dieses macht einem nicht nur das nachträgliche Verfolgen der E-Mail Kommunikation einfacher, sondern erleichtert einem extrem die Übersicht zu behalten. Da die E-Mail ja an eine völlig falsche Stelle einsortiert wird.

Alles funktioniert perfekt bis zu dem Moment in welchem jemand in einem völlig anderem Zusammenhang auf eine E-Mail antwortet. Also irgendeine alte E-Mail heraussuchen, auf antworten klicken, Betreff und Hinhalt löschen und eine „neue“ E-Mail schreiben. Das verbrennt nicht nur die Übersicht, sondern sorgt dafür das E-Mails sehr spät oder überhaupt nicht gelesen/beantwortet werden.

Habe ich dich auf diesen Text verwiesen, dann möchte ich dich (aus dem genannten Grund) mit Nachdruck darum bitte, mit bei neuen Themen eine neue E-Mail zu schreiben. Alle anderen nehmen es bitte als Information auf!

Für Detail bitte im RFC 822 besonders den Punkt 4.6.2.  IN-REPLY-TO lesen: http://www.ietf.org/rfc/rfc0822.txt und natürlich RTFM beim eigenen MUA betreiben. Bei Fragen, einfach fragen wink

Kennwortgenerator

Bei mir ist mal wieder die Frage angekommen, wie man denn seine Kennwörter wählen sollte. Ich habe wieder auf das Programm pwgen hingewiesen. Das ist ein kleiner Password-Generator für die Bash/Konsole.

Warum ein Kennwort Generator? Nun ja, Software dieser Art hat aus meiner Sicht ein paar Vorteile…

So hindert man seinen eigenen Schweinehund daran immer das gleiche Kennwort zu benutzen. Das ist ja bekanntlich mehr als gefährlich, denn wenn bei irgendeinem Anbieter mal wieder ein Sicherheitsloch ausgenutzt wurde, ja dann ist das Kennwort schon in den „falschen Händen“, meist zusammen mit der E-Mail Adresse. Fast überall kann man sich mit der Kombination E-Mail Adresse/Kennwort anmelden. Ist es immer gleich, kann sich der Mensch mit den „falschen Händen“ direkt überall anmelden. Daher sollte es ein eigenes Kennwort für jeden Dienst geben. Dabei ist ein: SuperTollesKennwort.Dienstname besser als nichts… Nur so schlau dieses zu probieren ist im Zweifel der Mensch mit den „falschen Händen“ ebenfalls. Will man es auf die Spitze treiben legt man sogar für jeden Dienst eine eigene E-Mail Adresse an. Dann hat der Angreifer nicht nur kein einheitliches Kennwort, sondern auch keine einheitliche E-Mail Adresse. Zurück zu pwgen…

Als weiteren Vorteil sehe ich dass die erstellten Kennwörter „zufällig“ sind (es macht natürlich einen guten Kennwort Generator aus, dass er immer zufällige Kennwörter rechnet laughing). Einem selbst gehen schnell die Zufälle aus. Selbst wenn man immer nur auf der Tastatur hämmert, werden sie sich ähneln.

Zudem lässt sich pwgen gut in Scripten verwursten um direkt beim anlegen von Accounts schöne initiale Kennwörter zu generieren. Es wäre ja schön blöde immer die gleichen Kennwörter für neue Kunden zu vergeben. tongue-out

Nun wollen wir mal ein paar Kennwörter würfeln. Der folgende Aufruf sollte viele Kennwörter mit Groß-/Kleinschreibung, 8 Zeichen und Ziffern erstellen:

$ pwgen 
Puo7aone AG2aicho me0Ohn7t aiSeth7K aeb2Nah0 oGh1ohra iengahD0 ra4Aeboh
oNga5ooj doh0saeM eeMaiCo1 aeDoo8we IeXae1ah OoVael8h Soh7aera Ohnge6yi
aiH0quae ieSo7ohY noo4xe8E sheh5eeF uiChoh7e Aing2fae ieJii4to aeGu7tof
quooB9Be Ou1Onie4 Eeb9giep Chei8oob Yieh2yuz Naugh0be phai4aXe ohc7Ahw9
aiM0aiwo EiGhi9fu eiC2Xohk raiB0eu9 MuwuK5le Aicheew8 UDeo2eig xaig3Oph
kii0ER9E uKaig7uv ooha3Die Ahhoo5ba aTh7dook aeGh9mai Iewae8ig Shahye6s
Jieshie2 MooSa7th Tahj0dei tohb7Oto Ocahm7bi Ake5nah6 Boh7aung ThooV4ir
noo6Equ5 AhGhuz8i dotie8uN tae7Chai Mual8oaD ooP9IeQu aeg5Iido HahKie6u
Me8ahsei Ahg5ohpe Soh9ucol Eix1OoFa Ahleex9m ahch4Ahk Taev8Shi neu9Vei4
aiLoo5qu eiW2eiNg Zae8ooyu Eeng7koo ieZees1a tho1Chei bohh3ENe ooVeezu1
weeb4Ain daeMi8iR yohNg5iW Oogu1ac4 UFae3Fie kaiT5aak Wa6tie1u pheiw3Ye
Iyae4aef Shoh1aij pheong0K Toer8quu kohGu9Ta ceiChei0 iePh6she Taigh6mu
ooH0xair aGemai4i Zohdiah5 aesai2Oo uchohk7G ohxah9Oo AhJair1v thee6Io0
cah1kieG ieCh6cah Fi0aegeo ShiePee9 ooPafei2 oB4ohcho yoiPhu8I AiJ7beaM
Reexai7u AiCahj0s aePhai7E xaer6Uos ath4gi0U ieNgoo0i Ohfeech6 weet4Voo
iu8Dafis doo6Agee te7Hah7U oox3Eeri Eezas2th Eeyeer5g afiTah9K oot9aiCh
eiFaiNg9 Ooquahn9 jaiJah4z eo7oChai suph2Cau Tiebah1U uH0ohth0 uiS6iew0
Ej9iMee3 Phie4Ohh Iet7Aes1 pheiGh9r Jae3joh0 EiPh1iey Xo4Seejo ieque6Ci
booV4iex ieCae1Ee BaiMie8a waed6Fi1 Og5Ahth3 eiX4voph oopooQu1 phu0Xa3u
keishi0S Otievi4o ceeGh8Ee uthooZ6o Faed2sob udahG0Da Soh5aid1 reuze3Ne

So viele Kennwörter benötigt man normalerweise nicht. Ein einziges Kennwort mit Groß-/Kleinschreibung, 8 Zeichen und ohne Ziffern (dann kann es sich ein Anwender meist besser merken) generiert sich mit folgendem Aufruf:

$ pwgen -1 -0
chaisaeM

Soll es einmal sicher werden erstellt der folgende Aufruf ein Kennwort mit Groß-/Kleinschreibung, 14 Zeichen, Ziffern, Symbolen und der deaktivierten pronounceable Funktion von pwgen. Die pronounceable (aussprechbar) Funktion von pwgen sorgt sonst dafür das die Kennwörter besser zu merken sind. Dieses macht es natürlich etwas weniger zufällig.

$ pwgen -1 -s -y 14
SKf|.k.]m}o'Q3

Man sieht schon, solche Ausgaben lassen sich sehr gut in irgendwelchen Scripten nutzen! Wie immer bringen die man-pages noch mehr Beispiele und Informationen mit. Also bitte RTFM….

 $ man pwgen

 Ńoch Fragen? Dann fragen sealed

Einmal mit Profis: Einblick in die Welt der Experten

Ich habe heute, wenn auch etwas angeschlagen, wieder vor einem System gestanden welches von einem „selbsternannten“ Profi eingerichtet wurde. Dabei gab es Fehler die ich jetzt nicht näher ausführen kann, denn noch ist es mal wieder Zeit für einen ordentlichen double facepalm!

Nur falls sich jemand wundert warum ich in den nächsten Tagen dauerkopfschüttelnd herumlaufe. Jetzt glaubt bitte nicht dass ich fehlerfrei bin. Ganz sicher nicht!

Yahoo macht Mailinglisten mit DMARC kaputt?

Na was lese ich denn da wieder bei golem.de? Yahoo soll Mailinglisten kaputt machen weil DMARC eingesetzt wird?

Über DMARC habe ich ja schon etwas geschrieben, auch dass man mit Mailinglisten Probleme bekommen kann, wenn man eine Policy veröffentlicht. Denn die meisten Mailinglisten arbeiten leider nicht DKIM konform. Denn DKIM signiert den Body und ebenfalls den Betreff einer E-Mail. Wenn die Mailingliste nun den Betreff ändert um ein [Mailinglistenname] in den Betreff zu schreiben (damit die Anwender darüber besser „filtern“ können und wegen Übersicht bla bla). Sowie einen kleinen Footer mit Infos zur Liste in den Body hängen, ja dann ist die DKIM Signatur ungültig. Soll ja so sein! Mailinglisten lassen sich prima über den Mail-Header: List-id Filtern, die Infos zur Mailingliste im Footer liest eh keiner und es produziert nur unnötig viele Daten, da sie an jede E-Mail gehangen werden. Übersicht? Filtert man seine E-Mail sauber und sortiert sie in die passenden Ordner, dann ist die Übersicht gegeben.

Wie auch immer… DKIM Signaturen werden durch Mailinglisten schon seit vielen Jahren gebrochen. Einige Mailinglisten werfen sogar die DKIM Signaturen aus den E-Mails bevor sie „weitergeleitet“ werden. Damit kann es zwar keine ungültige/gebrochene Signatur mehr geben, in Kombination mit einer DMARC Policy gibt es denn noch ein Problem. Denn wenn in der Policy steht: E-Mails sind immer DKIM und SPF signiert und wenn sie es nicht sind oder wenn die Signatur ungültig ist, dann weise die E-Mail zurück. Dann passiert das so!

All dieses ist schon seit längerem fest in ein RFC gegossen. Eingesetzt wird DMARC bereits von vielen der großen Anbieter… Bisher war nur noch keiner cool genug es „scharf“ zu schalten. Ist völlig legitim, denn auch die Mailinglisten Admins sollen eine gewisse „Übergangszeit“ haben. Wie so oft hat nur kaum einer reagiert. Ist ja nur mal wieder Security oder Features welche die User nicht direkt betreffen. Ja, es ist eine gewisse Art ~Vergewaltigung~!

Der DMARC-RECORD von yahoo.com gibt eine klare Policy vor:

$ dig IN TXT _dmarc.yahoo.com +short
"v=DMARC1\; p=reject\; sp=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com, mailto:dmarc_y_rua@yahoo.com\;"

Als Beispiel: Der DMARC-RECORD von gmail.com dagegen noch nicht:

$ dig IN TXT _dmarc.gmail.com +short
"v=DMARC1\; p=none\; rua=mailto:mailauth-reports@google.com"

Heartbleed Bug: Was du darüber wissen musst und wie du dich schützt

Au man… Das ist ja der Hammer! Wie konnte denn bitte dieser Scheiß passieren? Zum Glück war mein System noch auf der Version 0.9… Aber keine Sorge, ich muss an genug anderen Systemen neue Schlüssel erstellen und die Anwender zu neuen Kennwörter „überreden“.

Das ist einer der größten Löcher die ich bisher gesehen habe und wer hat es gefunden? Google…. Ö_ö

Hier muss nun unbedingt ein Plan her für besseren Code Audit, richtig? Ich habe sogar bereits von Exploids gelesen, welche noch vor dem Bekanntwerden im Umlauf gewesen sein sollen. Alle Systeme mit den bösen Versionsständen müssen also als kompromittiert angesehen werden. Ich habe nun schon mit einigen Leuten darüber gesprochen und in diesem Punkt stimmen mir die Meisten zu, bis zu dem Punkt an welchem die damit verbundenen Konsequenzen klar werden. Also neue Schlüssel bauen, von der CA signieren lassen, einbinden, allen Anwendern neue Kennwörter zuschieben usw. usw. usw… Denn mit dem einspielen der Patches ist zwar das Loch gestopft, die möglicherweise abgeschnorchelten und vielleicht bereits missbrauchten Daten sind damit noch nicht zurückgeholt. Denn noch tun sich hier einige Entscheider schwer..

Richtig unangenehm wird es, wenn man daran denkt das in der Vergangenheit aufgezeichnete -verschlüsselte- Daten mit dem vielleicht eingesammelten privaten Schlüssel nun entschlüsselt werden können. Es sei denn Perfect Forward Secrecy war aktiviert. Das ist wohl das Gute an der ganzen Nummer. Man hat nun nicht nur einen theoretischen Grund um PFS einzuführen.

Also weiter machen!

P-A-N-I-C Millionen E-Mail Kennwörter geknackt!!!

Oh Gott…. Nein was machen wir jetzt bloß?

O-o nun mal im Ernst, mich wundert an der Geschichte eher dass dieses Viele überrascht. Schauen wir uns doch mal die durchschnittlichen Kennwörter der meistern Benutzer an. Die sind nicht wirklich gut und oft haben sie ebenfalls nur ein Kennwort  für alle ihre Dienste. Natürlich haben sie ja per default nichts zu verbergen, also wird auf „Sicherheit“ nicht unbedingt Wert gelegt… Klar geht mir in diesen Fällen immer ein Schmunzeln über die Lippen. Denn man hat ja nichts zu verbergen und ist ja alles nicht SO schlimm. Nur wenn mein E-Mail Passwort von anderen geklaut wurde, ne da muss natürlich was passieren.

Ich lese und höre in den letzten Tagen immer das fiese, böse, Masken und Kapuzen tragende Hacker die E-Mail Accounts gehackt hätten. Viel eher werden wohl verseuchte Rechner die Kennwörter bei der Eingabe oder Übertragung eingesammelt und Kriminellen geschickt haben. Wenn ich mich so bei einigen Kunden umschaue sieht man schnell dass die großen drei Sicherheitslöcher Anwendungsprogramme (Java, Flash, PDF) meist in recht alten Versionen vorliegen. Die Microsoft Produkte selbst bekommen ja meist per WSUS oder direkt von Microsoft ihre Updates. Java, Flash oder der Acrobat Reader kümmern sich „selbst“ darum. Leider muss der Anwender für die Installation der Updates administrative Rechte auf dem Rechner haben. Sonst kann er die Installation kaum durchführen. Gut, es gibt auch hier Lösungen… Welche ich produktiv im Einsatz gesehen habe kann ich an einer Hand abzählen. Daher hängt es mal wieder vom Einsatz der hauseigenen IT ab. Das klappt mal gut, mal weniger gut. Gibt es keine eigene IT, sieht es schnell schlecht aus. Warum muss überhaupt jeder Anwender ins Internet und warum immer mit Flash, Java und PDF?!?!

Es lässt sich kaum ändern. Vor einiger Zeit hatten wir ja schon mal etwas ähnliches. Wie groß ist dann wohl die Dunkelziffer tongue-out ? Beim letzten mal hat unser BSI nach langem überlegen die Idee eine Webseite zur Verfügung zu stellen auf welcher man seine E-Mail Adresse eingeben kann. Die Webseite war natürlich sofort tot und nicht erreichbar. Wer hätte schon damit rechnen können dass die eingeschüchterten Benutzer es wirklich probieren könnten? *kopfschüttel*

Man hat also seine E-Mail Adresse eingegeben und hat daraufhin die Info bekommen: Wenn deine E-Mail Konto geklaut wurde, dann bekommst du von uns eine GPG signierte E-Mail mit folgendem Betreff (Zufallszeichen). Nur wenn die E-Mail auch diesen Betreff hat ist sie von uns und du hast ein Problem!

Einmal mit Profis…. Nun nehmen wir das mal eben auseinander:

1. der GPG Schlüssel vom BSI ist auf der gleichen Webseite zu saugen und ist so vertrauenswürdig wie „der dicke Mann aus der Sparkassenwerbung“…
2. GPG ist toll nur wie viele der Anwender nutzen es wohl?
3. der Betreff, auf welchen es ankommt, wird bei einer GPG signierten E-Mail NICHT signiert. Er kann also wild geändert werden…
4. die E-Mail welche den Anwender darüber informiert das sein Account ggf. von anderen missbraucht wird, geht also an diesen Account. Der Missbrauchende müsste sie also nur ?löschen?.

Welcher Internetausdrucker hat sich dieses bitte überlegt?!?!?

Diese Kritikpunkte sind beim BSI angekommen und man könnte meinen, sie hätten es beim jetzt neuen Fall besser gemacht… Haben sie?

Natürlich nicht!!!

Zusätzlich wird man nun noch von seinem Provider informiert das sein Account „gefressen“ wurde und direkt gezwungen sein Kennwort zu ändern. Klappt natürlich nur bei den großen Providern. Ja OK, die meisten abgefischten Accounts liegen dort… Macht es denn noch nicht wirklich besser, oder?

Jetzt halten einige von den Pressemenschen wieder jedem dritten ihr Mikrofon unter die Nase… Dabei ergeben sich so Ideen wie: Es muss rechtliche Regelungen für so etwas geben. Zwei Wege Authentisierung usw. usw… Ob das wirklich alles so richtig ist?

Was bringt das alles wenn man Windows XP einsetzt, Java und Flash einem Sieb ähneln und die großen Provider dir beim Login erzählen das dein Adblocker die Sicherheit deines Browsers gefährdet? Dann sind wir schon bei E-Mail Made in Germany, richtig? Die Jungs hängen gerade an die große Glocke dass sie es 2014 geschafft haben TLS für ihre Verbindung einzuschalten und für die Anmeldung voraussetzten. 2014… Ich meine 2014… Das ist knapp 20 Jahre als. 2014. Die haben ihren Werbemastschweinen Kunden bis 2014 per Plaintext (also im Klartext) ein Login gestellt. Jeder hat durch bloßes hinschauen die Zugangsdaten abschreiben können. Die kommen dann mit „Sicherheit wiederherstellen“ und E-Mail Made in Germany und jetzt ist alles sicher?

Ach ich rege mich hier schon wieder auf…

Vielleicht sollte man aufhören seine Kunden auszuquetschen und mit Müll zu füttern. Hm, setzt natürlich voraus das die Kunden es wollen und vor allem mal von ihrem „kostenlos“ Ding wegkommen. Ach, ich höre nun auf, sonst habe ich für heute wieder schlechte Laune!

Citrix XenServer Updates manuell über Bash installieren

Der Citrix XenServer 6.2 ist zwar nun frei, Updates lassen sich aber nicht so einfach über das XenCenter installieren. Sie werden einem zwar noch angezeigt (so weiß man zumindest welche man installieren sollte) aber einfach durchklicken ist nicht mehr.

Über die Konsole ist es denn noch schnell erledigt, wie ich hier kurz beschreiben möchte! Um die Installation per Kommandozeile zu zeigen nehme ich folgenden Patch als Beispiel: Hotfix XS61E013 – For XenServer 6.1.0 Nun aber los zur commandline action…

Zuerst den jeweiligen Patch von support.citrix.com herunterladen.

$ wget http://support.citrix.com/servlet/KbServlet/download/33649-102-705213/XS61E013.zip

Dann das Zipfile auspacken:

$ unzip XS61E013.zip
Archive:  XS61E013.zip
  inflating: XS61E013.xsupdate       
  inflating: XS61E013-src-pkgs.tar.bz2
Als nächstes das xsupdate File auf den Server kopieren:
$ scp XS61E013.xsupdate root@10.8.4.66:/update/
XS61E013.xsupdate                                                                                                                      100% 1678KB   1.6MB/s   1.6MB/s   00:00
/update/ ist dabei ein Verzeichnis auf dem Citrix XenServer, welches ich zuvor angelegt habe.

Nun auf dem XenServer als root anmelden und in das passende Verzeichnis wechseln:

$ ssh root@10.8.4.66
Last login: Wed Apr  2 17:32:12 2014 from 10.33.45.21

XenServer dom0 configuration is tuned for maximum performance and reliability.

Configuration changes which are not explicitly documented or approved by Citrix
Technical Support, may not have been tested and are therefore not supported. In
addition, configuration changes may not persist after installation of a hotfix
or upgrade, and could also cause a hotfix or upgrade to fail.

Third party tools, which require modification to dom0 configuration, or
installation into dom0, may cease to function correctly after upgrade or hotfix
installation. Please consult Citrix Technical Support for advice regarding
specific tools.

Type "xsconsole" for access to the management console.
[root@dom0-sdb35 ~]# cd /update
[root@dom0-sdb35 update]# 

Ich schaue nun gerne immer zuerst welche Patches bereits installiert wurden:

[root@dom0-sdb35 update]# xe patch-list
uuid ( RO)                    : 7fd1ba20-1582-4b02-a61d-c251ad0b637c
              name-label ( RO): XS61E001
        name-description ( RO): Public Availability: fix for ISCSI multipathing
                    size ( RO): 862376
                   hosts (SRO): 427c6c42-a193-4740-8ed7-c664b5ace02c
    after-apply-guidance (SRO):


uuid ( RO)                    : c5354c77-4643-4e79-8cdf-fac914fc6c85
              name-label ( RO): XS61E003
        name-description ( RO): Public Availability: Xapi fixes
                    size ( RO): 6631433
                   hosts (SRO): 427c6c42-a193-4740-8ed7-c664b5ace02c
    after-apply-guidance (SRO): restartXAPI


uuid ( RO)

Wie man sehen kann sind auch bereits Patches eingespielt, was daran zu erkennen ist das sie dem host „zugewiesen“ sind. Um nun zuerst den gerade kopieren Patch in die Liste zu packen reicht folgender Befehl:

[root@dom0-sdb35 update]# xe patch-upload file-name=XS61E013.xsupdate
55aa7129-a5ff-4e90-899b-f89248d1182e
Und noch kontrollieren ob er in der Liste ist:
[root@dom0-sdb35 update]# xe patch-list
uuid ( RO)                    : 55aa7129-a5ff-4e90-899b-f89248d1182e
              name-label ( RO): XS61E013
        name-description ( RO): Public Availability: security fixes to Xen and xenstored
                    size ( RO): 1717976
                   hosts (SRO):
    after-apply-guidance (SRO): restartHost

Perfekt… Nun kann der Patch schon eingespielt werden. Dabei ist immer der Punkt: after-apply-guidance (SRO): zu beachten. In diesem Fall restartHost. Also am besten vorher brav alle VMs abschalten, Patch wie noch folgt einspielen und die Kiste einmal durchstarten.

[root@dom0-sdb35 update]# xe patch-apply uuid=55aa7129-a5ff-4e90-899b-f89248d1182e host-uuid=427c6c42-a193-4740-8ed7-c664b5ace02c
Preparing...                ##################################################
xen-hypervisor              ##################################################
Preparing...                ##################################################
xen-tools                   ##################################################

Etwas aufwendiger als mit dem XenCenter, denn noch gut und problemlos machbar! Ist der Patch eingespielt kann die Patch-Datei natürlich wieder vom Server gelöscht werden. Wenn sein Server direkt ins Internet darf, kann man ebenfalls direkt auf der Kiste den wget ausführen. Auf was man aber immer achten sollte ist der freie Plattenplatz. Denn wenn man so viele Updates auf die Kiste legt das dem dom0 plötzlich ein Platz mehr bleibt… Tja, dann hat man andere Probleme.

Noch Fragen?

« Ältere Beiträge Neuere Beiträge »

© 2025 -=Kernel-Error=-

Theme von Anders NorénHoch ↑