Mein Name ist Alexander. Dass diese Webseite so aussieht als wenn Sie in
den 90'ern erstellt wurde ist Absicht.
Zum einen hab ich keine Lust mich mit den neuesten abgefahrenen Features von
CSS zu beschäftigen,
zum Anderen finde ich solche Webseiten sehr sympatisch,
da hier der Inhalt und nicht das Aussehen im Vordergrund steht.
Ich möchte hier einfach ein paar Kniffe und Tipps teilen die vielleicht auch
für den Einen oder Anderen von Nutzen sein könnten.
Wer als MTA Exim einsetzt hat sicherlich schon mal ähnliche Zeilen in der Logdatei von exim gesehen:
2018-09-05 08:31:45 1fxRLs-0000Xv-VM Completed
Rot markiert ist die Message ID die für Exim eindeutig ist. Bleibt zum Beispiel
eine oder mehrere Nachrichten hängen bzw. können nicht zugestellt werden, bleiben
Sie in der Queue und können mit dem Commando # exim4 -bp 13d 1.2K 1vaDH0-0107QZ-B5 <foo@example.org> bar@example.com 3h 22K 1JbOHr-00d4ev-bn <foo@example.org> bar@example.com #Damit man nicht mühsam jede Message ID rauskopieren muss, um z.B. die erneute Zustellung zu triggern oder die Empfangs- oder Absendeinformationen zu modifizieren oder die Nachrichten gar komplett zu löschen, habe ich ein Einzeiler Perl-Skript geschrieben, das klein aber fein und sehr effektiv hilft die Brücke von der Queue- Anzeige zu Weiterverwendung von anderen Exim Kommandos zu schlagen:
$ cat messageids.pl #! /usr/bin/perl while (<>) {print "$1\n" if /(\b\S+-\S+-\S+\b)/;} $Das Skript liest von der Standardeingabe und gibt nur die Message IDs zeile aus. Leitet man also nun die Ausgabe von
# exim4 -bp | ./messageids.pl 1vaDH0-0107QZ-B5 1JbOHr-00d4ev-bn #Habe allerdings mittlerweile herausgefunden, dass das Exim Github Wiki neben vielen weiteren nützlichen Tricks, einen Befehl beschreibt, der genau dasselbe tut und auch Bestandteil der Exim Installation ist:
# exim4 -bp | exiqgrep -i 1vaDH0-0107QZ-B5 1JbOHr-00d4ev-bn #Damit kann man jetzt wiederrum mit der Hilfe von
# exim4 -bp | exiqgrep -i | xargs exim4 -Mrmdann
# exim4 -Mrm 1vaDH0-0107QZ-B5 1JbOHr-00d4ev-bnVielleicht hilft dieses kleine Skript ja noch jemand anders. Natürlich macht es erst so richtig Sinn wenn nicht 2 Nachrichten in der Queue stehen sondern Hunderte.
Mit folgenden Tastenkombinationen lässt sich wesentlich schneller auf der Linux Konsole navigieren und dessen Inhalt bearbeiten als wenn man mit der Links-, Rechts- und Rück-Taste rumhantiert. Die folgende Tabelle listet diese Tastenkombinationen auf.
Steuersequenz | Bedeutung |
---|---|
Strg + L | Terminal leeren (ala clear ) |
Strg + D | Logout (End-of-Document) (geht nur bei leerer Zeile) |
Strg + R | Rückwärts in der Befehlshistorie suchen |
Befehlseingabe bearbeiten | |
Strg + U | Aktuelle Zeile vom Cursor bis Anfang löschen |
Strg + K | Aktuelle Zeile vom Cursor bis Ende Löschen |
Strg + A | Cursor an den Anfang der aktuellen Zeile bewegen |
Strg + E | Cursor an das Ende der aktuellen Zeile bewegen |
Strg + W | Wort vor dem Cursor löschen |
Esc + D | Vom Cursor bis zum Wortende löschen |
Esc + U | Nächstes Wort vom Cursor in GROßBUCHSTABEN ändern |
Esc + L | Nächstes Wort vom Cursor in kleinbuchstaben ändern |
Während der Befehlsausführung | |
Strg + C | Befehlsabbruch (SIGTERM) |
Strg + Z | Befehlsunterbrechung (SIGSTOP) - kann mit fg oder bg fortgesetzt werden |
Strg + \ | Befehlsabbruch wenn gar nichts mehr geht (SIGKILL) |
Strg + S | Terminalausgabe einfrieren - hilfreich während build-Fehler |
Strg + Q | Terminalausgabe fortsetzen |
Spezialitäten | |
Strg + F | Cursor ein Zeichen weiter bewegen - wie Pfeil rechts |
Strg + B | Cursor ein Zeichen zurück bewegen - wie Pfeil links |
Strg + H | Backspace - falls Backspace mal nicht funktioniert |
Strg + M | Enter - falls mal die Entertaste kaputt ist |
Strg + P | Rückwärts in der Befehlshistorie - wie Pfeil hoch |
Strg + N | Vorwärts in der Befehlshistorie - wie Pfeil runter |
Esc + C | Ersten Buchstaben vom Cursor in Groß-, bis Wortende in Kleinschreibung (Substantiv) |
xterm*VT100.translations: #override F1: string("cat /home/marco/.myxterm.hlp") F2: string("ls -la") F3: string("df -h") F4: string("cd -") F5: string("cd ..") F6: string("cd") F7: string("uname -a") F8: string("ps -aux | more") F9: string("uptime") F10: string("free") F11: string("clear") F12: string("exit")Das hat allerdings nur auf
Seit dem Chrome angefangen hat (wie ich finde korrekterweise), der SAN Erweiterung mehr Bedeutung zuzuschreiben, als dem eher lose definierbaren X.509 "Subject" Attribut, ist die Erstellung eines Zertifikatsantrags mit OpenSSL etwas komplizierter geworden. Andernsfalls riskiert man eine unschöne Sicherheitswarnung oder sogar eine komplette Unbenutzbarkeit der Webseite falls HSTS vorab zum Einsatz kam.
Die Subject Alternative Name Erweiterung hat nämlich den Vorteil, explizit zwischen IP Addresse und DNS Namen unterscheiden zu können. Es können beliebig viele Variationen enthalten sein, z.B. gern in Unternehmensnetzen verwendeten nicht-vollqualifizierten Hostnamen im Browser einzugeben:
Aus diesem Grund habe ich mir ein kleines Perl-Skript geschrieben, das den
typischen OpenSSL CSR Dialog nachbildet, dann aber noch explizit auf die
SAN Erweiterung eingeht und diese im CSR mit einbaut.
Dieses Skript möchte ich Anderen nicht vorenthaten, da ich denke, dass es
nichts Nervigeres gibt, wie nicht ordentlich erstellte SSL Zertifikate.
#!/usr/bin/env perl use strict; use warnings; use Getopt::Long; my $keyfile = ""; my $days = 365; GetOptions("key=s" => \$keyfile, "days=i" => \$days) or die "Keyfile not supplied. Use $0 --key=<location of keyfile>."; die "Keyfile not supplied. Use $0 --key=<location of keyfile>." unless ($keyfile); die "Days must be a positive number" if $days < 0; print STDERR "Generate a certificate signing request with proper configuration\n\n"; print STDERR "Please answer the following questions:\n"; print STDERR "Country code [DE]: "; chomp(my $country = <STDIN>); $country ||= "DE"; print STDERR "State [Hesse]: "; chomp(my $state = <STDIN>); $state ||= "Hesse"; print STDERR "Location [e.g. Bembelhausen]: "; chomp(my $location = <STDIN>); $location ||= "Bembelhausen"; print STDERR "Organization [My Org]: "; chomp(my $organization = <STDIN>); $organization ||= "My Org"; print STDERR "Organizational unit [IT]: "; chomp(my $orgunit = <STDIN>); $orgunit ||= "IT"; print STDERR "E-Mail address [webmaster\@company.example]: "; chomp(my $email = <STDIN>); $email ||= 'webmaster@company.example'; print STDERR "Primary domainname (e.g. www.company.example): "; chomp(my $domainname = <STDIN>); my $cnf_tmpl = <<"EOF"; [req] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [ dn ] C = $country ST = $state L = $location O = $organization OU = $orgunit emailAddress = $email CN = $domainname [ req_ext ] subjectAltName = \@alt_names [ alt_names ] DNS.1 = $domainname EOF my $i = 2; print STDERR "Additional domain names: (leave empty to proceed): "; while (<>) { chomp; last unless length; $cnf_tmpl .= "DNS.$i = $_\n"; $i++; } continue { print STDERR "Additional domain names: (leave empty to proceed): "; } $i=1; print STDERR "Shall the certificate be also valid for an IP?: (leave empty to finish): "; while (<>) { chomp; last unless length; $cnf_tmpl .= "IP.$i = $_\n"; $i++; } continue { print STDERR "Shall the certificate be also valid for an IP?: (leave empty to finish): "; } my $cmd = "openssl req -new -days $days -sha256 -key \"$keyfile\" -config <(printf \'$cnf_tmpl\')"; system "bash -c \"$cmd\""; __END__ Author: Alexander Koeppe Date Created: 14.09.2017 Date Modified: 13.04.2018 - adding IP attribute
Syntax Highlighting dank http://tohtml.com