Debian GNU/Linux 9 (stretch) Zeit via NTP synchronisieren

Dies ist wieder einer von diesen „jedesmal-google-ich-das-wieder“ Schnippsel, die hoffentlich beim nächsten mal Zeit sparen.

Ein Debian stretch Server soll die aktuelle Zeit von einem [internen] NTP (NTPS) Server bekommen.

# NTP installieren
root@rabbithole:~# apt install ntp

# In der /etc/ntp.conf den lokalen NTP-Dienst konfigurieren
root@rabbithole:~# vi /etc/ntp.conf


  # Zeitquellen
  server MYNTP1.MEINEDOMA.IN
  server MYNTP2.MEINEDOMA.IN
  # Darf lokal genutzt werden
  restrict lo
  # Soll NTP *NICHT* nach außen (*:123) zur Verfuegung stellen
  interface ignore wildcard
  interface listen lo

# NTP restart
root@rabbithole:~# systemctl restart ntp

# NTP, config und Zeitserver testen
root@rabbithole:~#  ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
MYNTP1.MEINEDOMA.IN 352.29.139.27     3 u    9   64    3    0.485    7.615   1.192
MYNTP2.MEINEDOMA.IN 392.468.0.10      4 u   11   64    3    0.438   14.571   0.182



Linux (SuSE/Debian/RedHat) 802.1q VLAN-Interfaces erstellen und IP-Adressen vergeben

Dies ist mal wieder eine dieser „schnellen Notizen“, weil ich das jetzt ständig neu nachschlagen musste. 802.1q VLANs unter Linux werden in der Regel an ein bestehendes (physisches) Interface gebunden und stehen dann als Unterinterface mit einem Punkt (bzw. in „ip addr“ mit einem @-Zeichen) getrennt zur Verfügung.

Ein neues VLAN Interface unter Linux erstellen

Das Interface eth1 ist das physische Interface und eth1.3 wird das zugehörige VLAN-Interface (VLAN ID 3):


ip addr add 192.168.100.23/24 dev eth1
ip link set dev eth1 up
ip link add dev eth1.3 link eth1 type vlan id 3

Das Interface eth1.3 hat so noch keine IP-Adresse.

Ein VLAN Interface unter Linux konfigurieren

Das Interface eth1.3 wird mit einer IP-Adresse konfiguriert:


ip addr add  172.16.3.1/24 dev eth1.3
ip link set dev eth1.3 up

Der Netzwerverkehr für 172.16.3.0/24 passiert dann nun auf eth1.3, wird also direkt mit der VLAN ID=3 getaggt. Die Route für das Linklokale Netzwerk wird, wie bei Physischen Interfaces auch,  automatisch hinzugefügt.

Ein VLAN Interface unter Linux entfernen

Wenn man es nicht mehr braucht, kann es auch wieder gelöscht werden:


ip link set dev eth1.3 down
ip link delete eth1.3 type vlan

JPEG-Bilder nach EXIF Aufnahmedatum umbenennen (Windows/Linux)

Problem

Wir haben vermutlich alle mittlerweile eine Menge Bilder auf unseren Smarphones. So ich natürlich auch. Von Zeit zu Zeit sichere ich diese dann auf meine Backup-Maschine (und sychonisiere diese in verschiedene Clouds). Allerdings hatte ich neulich ein paar Probleme, als ich die Fotos und Videos sortieren wollte.

Die Bilder-Dateinamen sind ja meistens nur Dateizähler wie DSC0001, DSC0002, DSC0003. Die löbliche Ausnahme ist hier Windows Phone, das amerikansiche Datumsangaben einschliesslich (!) Uhrzeit verwendet. In einigigen Android’s kann man das auch einstellen, in anderen nicht.

Wenn man nun Bilder vom internen Speicher verschiebt, werden alle Dateidaten („Änderungsdatum“) der Bilder auf den Tag geändert, an dem die Dateien verschoben wurden. Das ist superunpraktisch beim selektieren, for allem wenn man das automatisieren möchte. Das passiert leider auch beim internen verschieben, also zum Beispiel vom internen Speicher auf eine SD-Karte.

Lösung

Zum Glück gibt es Jhead, das „Kommandozeilengesteuerte Programm zum Manipulieren der Nicht-Bild-Teile von Exif–JPEG-Dateien“.

Für Windows, Linux und Mac OS X gibt es eine vorkompilierte ausführbare Datei, die von der Kommandozeile aus starte. Ein GUI gibt es (und braucht es) nicht. Jhead zeigt, ohne Parameterm, so ungefähr alle EXIF-Daten an:

C:\Foo\JHead>jhead.exe C:\tmp\DSC* 
File name    : C:\tmp\DSC_F40261.JPG 
File size    : 3156739 bytes 
File date    : 2017:03:24 11:52:50
Camera make  : MegatronINC
Camera model : D4303 
Date/Time    : 2014:01:13 12:17:55 
Resolution   : 3840 x 2160
...

Und man kann damit diese Daten ganz wundervoll und schnell umbenennen:

C:\Foo\JHead>jhead.exe -n%m-%d-%Y-%f D:\tmp\DSC* 
D:\tmp\DSC_F0261.JPG --> D:\tmp\02-13-2016-DSC_0261.jpg 
D:\tmp\DSC_F0162.JPG --> D:\tmp\02-13-2016-DSC_0262.jpg

Ganz brauchbar fand ich diese Optionen (schnellübersicht, NICHT vollständig!)
%d Day of month as decimal number (01 – 31)
%H Hour in 24-hour format (00 – 23)
%j Day of year as decimal number (001 – 366)
%m Month as decimal number (01 – 12)
%M Minute as decimal number (00 – 59)
%S Second as decimal number (00 – 59)
%y Year without century, as decimal number (00 – 99)
%Y Year with century, as decimal number

Zum Beispiel:
C:\Foo> jhead -n%Y%m%d-%H%M%S *.jpg

… erzeugt Dateien mit der Benennung „YYYYMMDD-HHMMSS“.

Windows Zertifikat (PFX Format) in das PEM/CER/KEY Format (z.B. für Apache) konvertieren

Dies ist wieder mal so eine Notiz an mich selbst, damit ich nicht vergessen wie man PKCS#12-Dateien („.pfx“) in das Zertifikat (CER/PEM) und den private Key (KEY) zerlegt und konvertiert.

Apache braucht sowohl Privatekey als auch Zertifikat einzeln und beherrscht leider das PFX-Format nicht, das beides beinhaltet.

Daher muss diese Konvertierung sein.

openssl pkcs12 -in quelle.pfx -clcerts -nokeys -out ziel.cer
openssl pkcs12 -in quelle.pfx -nocerts -nodes  -out ziel.key
# rm -rf quelle.pfx

Das PEM „Format“ ist dasselbe wie ein CER (beides der private Key im DER-Format), wie man die Datei nennen möchte bleibt einem selbst überlassen.

Danach kann man die Schlüssel sofort in der Apache Site-Config verwenden:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /etc/apache2/ssl/ziel.cer
 SSLCertificateKeyFile /etc/apache2/ssl/ziel.key
 ...
</VirtualHost>

Postfix: ausgehende E-Mail via TLS pro Domain erzwingen

Problem

Es gibt eine (Management-)Richtlinie, die vorschreibt mit einem bestimmten Partner ausschliesslich über (TLS) verschlüsselte Verbindungen zu kommunizieren. Der ausgehende Mailserver ist ein Postfix (z.B. ein Smarthost). TLS mit den entsprechenden Zertifikaten ist hier schon korrekt eingerichtet. Es sollen nur sichere TLS-Verbindungen zu bestimmten Domain erzwungen werden.

Lösung

Standardmäßig verschlüsselt Postfix ausgehende E-Mails nicht. Sofern die Zertifikate richtig konfiguriert sind (Stichwort smtpd_tls_cert_file) lässt sich die ausgehende Verschlüsselung IMMER erzwingen:

Zum erzwingen von TLS In der Datei /etc/postfix/main.cf eintragen:

smtp_tls_security_level = encrypt

Viele Mail-Server akzeptieren aber auch heute noch keine TLS-Verbindungen. E-Mails an solche Mailserver werden daher nicht versendet. Als sinnvolle Alternativebietet sich daher an:

 smtp_tls_security_level = may

Bei dieser Einstellung wird die TLS-Verschlüsselung nur verwendet, wenn der Empfängerserver ebefalls TLS-Verbindungen akzeptiert. Verschlüsselt geht hier von iunverschlüsselt.

Nur für bestimmte Domains erzwingen

Es soll TLS für alle E-Mails erzwungen sein, die an *@denic.de gesendet werden. Der MX von denic.de zeigt auf mx1.denic.de und mx2.denic.de.

    • Mapping-Datei erstellen, z.B. „/etc/postfix/tls_policy“ mit diesem Inhalt:
      denic.de       encrypt
    • Mapping übernehmen
      root@posty:/etc/postfix# postmap /etc/postfix/tls_policy
    • Tabelle in der main.cf in der TLS-Policy referenzieren
      # TLS erzwingen
      smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
    • Postfix reloaden
      root@posty:/etc/postfix# /etc/init.d/postfix reload

Im Log lässt sich der Erfolg direkt danach prüfen, indem man nach dem Servernamen (oder der Adresse) und „STARTTLS“ grept:

postfix/smtp[61070]: > mx1.denic.de[2a02:568:102:211::1:1]:25: STARTTLS