Verbindung zu SMTP Server ohne telnet oder nc testen

Um die Verbindung zu einem SMTP Server zu testen um zum Beispiel einen Fehler durch eine Firewall auszuschließen nutze ich normalerweise telnet:

user@host ~ $ telnet mail.example.net 25
Trying 1.2.3.4...
Connected to mail.example.net.
Escape character is '^]'.
220 mail.example.net ESMTP Postfix

Wenn telnet nicht installiert ist geht das auch noch mit netcat:

user@host ~ $ nc mail.example.net 25
220 mail.example.net ESMTP Postfix

Heute hatte ich ein System auf dem beides nicht existierte. Da habe ich eine Methode mit python gefunden die sehr gut funktioniert hat:

user@host ~ $ python
Python 2.7.9 (default, Mar  1 2015, 12:57:24) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> conn=socket.create_connection(('mail.example.net',25))
>>> input=conn.makefile()
>>> print input.readline()
220 mail.example.net ESMTP Postfix

>>> conn.sendall('QUIT')
>>> conn.close()
>>> 

Puppet: Reports per Mail mit tagmail

Puppet bietet die Moeglichkeit bei Aenderungen Reports per Email zu versenden. Dafuer gibt es den Tagmail Report Processor. Folgendes muss man tun um ihn zu verwenden:

Zuerst muss tagmail fuer die Reports aktiviert werden. Dafuer tagmail in der /etc/puppet/puppet.conf in den reports unter master hinzufuegen. Falls die Zeile bereits vorhanden ist den Wert ergaenzen. Der Standardwert ist uebrigens store. Beispiel:

[master]
reports = store, tagmail

Danach kann man die Reports in der Datei /etc/puppet/tagmail.conf konfigurieren. Die Datei ist immer gleich aufgebaut. Werte: Emailadressen. Die Werte und Emailadressen koennen einzelne oder kommaseparierte Eintraege sein. Pro Zeile eine neue Definition. Folgende Werte sind moeglich:

  • all
  • Klassennamen
  • Loglevel
  • Tags

Beispiele:

  1. Alle Reports sollen an die Emailadresse puppetreports@example.org gesendet werden:
     all: puppetreports@example.org
  2. Reports der Klassen sudoers und fail2ban soll an admins@example.org geschickt werden
    sudoers, fail2ban: admins@example.org
  3. Events mit dem Logleven emerg und crit sollen an John Doe und operators@example.org verschickt werden:
    emerg, crit: john.doe@example.org, operators@examplr.org

Es kann auch mit NOT gearbeitet werden, weitere Informationen dazu gibt es in der Dokumentation unter Docs: Config Files: tagmail.conf.

Ausserdem koennen Tags als Grundlage fuer Reports dienen. Tags werden zum Beispiel in Klassen definiert. Die Syntax dafuer ist anders als das was bisher hier auf dem Blog zu lesen war:

tag 'foo', 'bar'

Es koennen ein oder mehrere Tags vergeben werden, wichtig ist, dass sie nicht => zugewiesen werden und auch am Ende kein Komma steht. Weitere Informationen ueber Tags gibt es in der Puppet Dokumentation unter Docs: Language: Tags

Diese Tags kann man danach ebenfalls als Wert in der /etc/puppet/tagmail.conf definieren:

foo: foo@example.org

Gibt es keine Aenderungen werden keine Mails verschickt:

May 11 11:04:38 host puppet-master[18075]: Compiled catalog for node01.example.org in environment production in 0.05 seconds
May 11 11:04:40 host puppet-master[18075]: Not sending tagmail report; no changes

Gibt es Aenderungen einfach den Posteingang pruefen.

Puppet: Mailaliases erzeugen

Mir ist es immer wichtig, dass ich die Mails von meinen Servern bekomme. Dafuer habe ich logcheck installiert und einen Mailalias an den alles geschickt wird. Auch lasse ich mir die Mails an root immer an eine eigene Adresse weiterleiten.

Mit puppet kann man sicherstellen, dass Aliase existieren. Meine Klasse dafuer sieht wie folgt aus:

# make sure that the alias for root and logcheck is set correct
 
class aliases {
 
  file { '/etc/aliases' :
    mode  => '0644',
    owner => 'root',
    group => 'root',
  }
 
  mailalias { 'root' :
    name      => 'root',
    recipient => 'user@example.org',
    notify    => Exec['newaliases'],
  }
 
  mailalias { 'logcheck' :
    name      => 'logcheck',
    recipient => 'logcheckalias@example.org',
    notify    => Exec['newaliases'],
  }
 
 exec { 'newaliases':
    command     => '/usr/bin/newaliases',
    refreshonly => true,
    subscribe   => File['/etc/aliases'],
  }
}

Informationen zu dem „mailalias“ und dem „exec“ Type gibt es in der puppet Type Reference: