Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c7:zeyple [08.08.2016 13:31. ] – django | centos:mail_c7:zeyple [18.11.2024 19:08. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Verschlüsselung von eMails mit Hilfe von Zeyple unter CentOS7 ====== | ====== Verschlüsselung von eMails mit Hilfe von Zeyple unter CentOS7 ====== | ||
+ | Verschlüsselung vertraulicher Daten dürfte in sensiblen Bereichen kaum mehr weg zu diskutieren sein. Sehr oft werden eMails genutzt, um einen Systemadministrator über Stati, (Fehl-)Funktionen und aussergewöhnliche Situationen zu informieren. | ||
+ | <WRAP center round tip 90%> | ||
+ | Besser als der Programm-Author //Cédric Félizard// des Encyption-Daemons **[[http:// | ||
+ | <WRAP center round alert 100%> | ||
+ | **//Why should I care? If you are a sysadmin who receives emails from various monitoring tools like Logwatch, Monit, Fail2ban, Smartd, Cron, whatever - it goes without saying that those emails contain lots of information about your servers. Information that may be intercepted by some malicious hacker sniffing SMTP traffic, your email provider, <insert your (paranoid) reason here>... Why would you take that risk - encrypt them all!//** | ||
+ | \\ | ||
+ | </ | ||
+ | </ | ||
- | <uml width=900 title=" | + | |
+ | In unserem Anwendungsbeispiel wollen wir alle eMails, die unsere Monitoring-Umgebung **[[centos: | ||
+ | |||
+ | ===== Kommunikationsablauf ===== | ||
+ | Die wesentlichen Kernaufgaben von **Zeyple** sind: | ||
+ | - Annahme der (__**un**__verschlüsselten) Nachrichten vom MTA((**M**ail **T**ransfer **A**gent)) (Postfix) | ||
+ | - Verschlüsseln der Nachrichten mit Hilfe des öffentlichen PGP Keys des Systemadministrators. | ||
+ | - Übergabe der (__verschlüsselten__) | ||
+ | |||
+ | Nachfolgende Übersichsskizze zeigt diese Verarbeitungsschritte. | ||
+ | |||
+ | <uml> | ||
skinparam defaultFontName Courier | skinparam defaultFontName Courier | ||
Zeile 36: | Zeile 55: | ||
note left | note left | ||
From: icinga < | From: icinga < | ||
- | To: django@mailserver.guru | + | To: django@nausch.org |
Subject: icinga 2 Service-Notification | Subject: icinga 2 Service-Notification | ||
Date: Friday 17:25:30 | Date: Friday 17:25:30 | ||
Zeile 96: | Zeile 115: | ||
note right of sendmail | note right of sendmail | ||
From: icinga < | From: icinga < | ||
- | To: django@mailserver.guru | + | To: django@nausch.org |
Subject: icinga 2 Service-Notification | Subject: icinga 2 Service-Notification | ||
Date: Friday 17:25:30 | Date: Friday 17:25:30 | ||
Zeile 121: | Zeile 140: | ||
</ | </ | ||
+ | |||
+ | ===== GitHub ===== | ||
+ | ==== Download ==== | ||
+ | Bevor wir uns nun dieses Projekt auf unseren Rechner clonen, wechseln wir in das Prokekt-Verzeichnis unseres Servers. | ||
+ | # cd / | ||
+ | |||
+ | Nun clonen wir das Projekt direkt in das Verzeichnis zeyple. | ||
+ | # git clone https:// | ||
+ | |||
+ | < | ||
+ | remote: Counting objects: 591, done. | ||
+ | remote: Total 591 (delta 0), reused 0 (delta 0), pack-reused 591 | ||
+ | Receiving objects: 100% (591/591), 113.99 KiB | 0 bytes/s, done. | ||
+ | Resolving deltas: 100% (315/315), done.</ | ||
+ | |||
+ | ==== Update ==== | ||
+ | Möchten wir unsere lokale Installation updaten, so gehen wir in folgenden Schritten vor. Als erstes wechseln wir in das Verzeichnis **zeyple**. | ||
+ | # cd / | ||
+ | |||
+ | Anschließen führen wir einen **pull** gegen das [[https:// | ||
+ | # git pull | ||
+ | |||
+ | Als erstes holen wir uns nun das | ||
+ | |||
+ | ===== Installation ===== | ||
+ | Zum Verschlüsseln der Nachrichten benötigen wir natürlich noch mind. folgende zwei Pakete **pygpgme** und **gnupg2**. Falls sich diese beiden Pakete noch nicht auf unserem Server befinden, installieren wir diese nun einfach mit Hilfe von **yum**. | ||
+ | # yum install pygpgme gnupg2 -y | ||
+ | |||
+ | ===== Konfiguration ===== | ||
+ | ==== Zeyple-User anlegen ==== | ||
+ | Zum Speichern der benötigten PGP-Schlüssel benötigen wir einen eigenen User **zeyple**, den wir uns nun anlegen. | ||
+ | # adduser --system --no-create-home --shell / | ||
+ | |||
+ | ==== PGP-Keys der Empfänger importieren ==== | ||
+ | Zum Ablegen benötigen wir nun noch ein Verzeichnis, | ||
+ | # mkdir -p / | ||
+ | |||
+ | Nur der User zeyple soll Zugriff auf das Schlüsselmaterial bekommen. Wir passen also die Verzeichnisrechte entsprechend an und weisen das Verzeichnis dem User zeyple zu. | ||
+ | # chmod 700 / | ||
+ | # chown zeyple: / | ||
+ | |||
+ | Nun können wir die öffentlichen PGP-Schlüssel der potentiellen Empfänger importieren. Haben wir den PGP public key in einer Datei lokal auf dem Server benutzen wir folgenden Aufruf. | ||
+ | # sudo -u zeyple gpg --homedir / | ||
+ | |||
+ | < | ||
+ | gpg: keyring `/ | ||
+ | gpg: / | ||
+ | gpg: key 637EE91F: public key " | ||
+ | gpg: Total number processed: 1 | ||
+ | gpg: | ||
+ | |||
+ | Alternativ können wir den Schlüssel auch von einem öffentlichen PGP-Keyserver laden. | ||
+ | # sudo -u zeyple gpg --homedir / | ||
+ | |||
+ | < | ||
+ | (1) Thomas Gelf < | ||
+ | 1024 bit DSA key 637EE91F, created: 2008-10-19 | ||
+ | Keys 1-1 of 1 for " | ||
+ | gpg: requesting key 637EE91F from hkp server keys.gnupg.net | ||
+ | gpg: / | ||
+ | gpg: key 637EE91F: public key " | ||
+ | gpg: Total number processed: 1 | ||
+ | gpg: | ||
+ | |||
+ | ==== zeyple Konfigurationsdatei ==== | ||
+ | Damit nun der zeyple encryption deamon weiss, wo er sein Schlüsselmaterial findet und wie dieser mit dem SMTP-Relayhost kommunizieren soll, müssen wir ihm ein paar Informationen bereitstellen. Hierzu wird die Konfigurationsdatei // | ||
+ | # cp / | ||
+ | |||
+ | Änderungen an dieser Datei sind in aller Regel nicht nötig. | ||
+ | <file bash / | ||
+ | log_file = / | ||
+ | |||
+ | [gpg] | ||
+ | home = / | ||
+ | |||
+ | [relay] | ||
+ | host = localhost | ||
+ | port = 10026 | ||
+ | </ | ||
+ | |||
+ | ==== zeyple Logdatei ==== | ||
+ | Damit **zeyple** sein logfile auch beschreiben kann, müsseen wir dieses nun noch anlegen und mit den zugehörigen Rechten versehen. | ||
+ | # touch / | ||
+ | # chown zeyple: / | ||
+ | |||
+ | |||
+ | |||
+ | ==== Postfix Integration ==== | ||
+ | Zur Einbindung des //zeyple encyption gateway// in unseren Postfix MTA sind nun zwei Dinge erforderlich. Zur Übergabe an **zeyple** benötigen wir eine Content-Filter definition und zur Rückleitung einen SMTP-Daemon, | ||
+ | |||
+ | Diese beiden Definitionen nehmen wir nun als erstes in der Postfix Konfigurationsdatei // | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | |||
+ | # Django : 2016-06-30 - Content-Scanner zur Übergabe der unverschlüsselten Nachrichten an das | ||
+ | # encryption gateway zeyple | ||
+ | zeyple | ||
+ | user=zeyple argv=/ | ||
+ | |||
+ | # Django : 2016-06-30 - SMTP-Daemon (Rückkanal) bei dem das encyrption gateway zeyple die | ||
+ | # verschlüsselten Nachrichten wieder dem MTA zur weiteren Verarbeitung übergibt | ||
+ | localhost: | ||
+ | -o content_filter= | ||
+ | -o receive_override_options=no_unknown_recipient_checks, | ||
+ | -o smtpd_helo_restrictions= | ||
+ | -o smtpd_client_restrictions= | ||
+ | -o smtpd_sender_restrictions= | ||
+ | -o smtpd_recipient_restrictions=permit_mynetworks, | ||
+ | -o mynetworks=127.0.0.0/ | ||
+ | -o smtpd_authorized_xforward_hosts=127.0.0.0/ | ||
+ | </ | ||
+ | |||
+ | Anschließend informieren wir noch Postfix, dass dieser den neu definierten Contentfilter auch verwenden soll. Hierzu tragen wir am Ende folgende Zeilen ein. | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | |||
+ | # Django : 2016-06-30 - Definition des encryption gateways zeyple als Content-Filter | ||
+ | content_filter = zeyple | ||
+ | </ | ||
+ | |||
+ | Zur Aktivierung der Konfigurationsänderung starten wir nun den Postfix-Daemon einmal durch. | ||
+ | # systemctl restart postfix.service | ||
+ | |||
+ | Den Status unseres Mailservers können wir wie gewohnt abfragen. | ||
+ | # systemctl status postfix.service -l | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | | ||
+ | | ||
+ | Process: 25123 ExecStop=/ | ||
+ | Process: 25141 ExecStart=/ | ||
+ | Process: 25138 ExecStartPre=/ | ||
+ | Process: 25133 ExecStartPre=/ | ||
+ | Main PID: 25215 (master) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Aug 09 10:01:21 vml000117.dmz.nausch.org systemd[1]: Starting Postfix Mail Transport Agent... | ||
+ | Aug 09 10:01:21 vml000117.dmz.nausch.org postfix/ | ||
+ | Aug 09 10:01:21 vml000117.dmz.nausch.org postfix/ | ||
+ | Aug 09 10:01:21 vml000117.dmz.nausch.org systemd[1]: Started Postfix Mail Transport Agent. | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Systemtest ===== | ||
+ | Nun ist es an der Zeit unsere Konfiguration zu testen. Als erstes schicken wir von der Konsole aus eine Testnachricht an eine Adresse, bei der wir zuvor den zugehörigen **[[/ | ||
+ | $ echo "very important top secret stuff" | mailx -s " | ||
+ | |||
+ | Im Logfile unseres Postfix MTA sehen wir die Abarbeitung dieser Nachricht. | ||
+ | < | ||
+ | Aug 9 10:39:40 vml000117 postfix/ | ||
+ | Aug 9 10:39:40 vml000117 postfix/ | ||
+ | Aug 9 10:39:40 vml000117 postfix/ | ||
+ | Aug 9 10:39:40 vml000117 postfix/ | ||
+ | Aug 9 10:39:40 vml000117 postfix/ | ||
+ | Aug 9 10:39:40 vml000117 postfix/ | ||
+ | Aug 9 10:39:40 vml000117 postfix/ | ||
+ | Aug 9 10:39:40 vml000117 postfix/ | ||
+ | Aug 9 10:39:40 vml000117 postfix/ | ||
+ | Aug 9 10:39:41 vml000117 postfix/ | ||
+ | Aug 9 10:39:41 vml000117 postfix/ | ||
+ | </ | ||
+ | |||
+ | Im Logfile des //**zeyple encryption daemon**// wird die Verarbeitung auch entsprechend dokumentiert. | ||
+ | < | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | |||
+ | Verschicken wir nun eine Nachricht an einen Empfänger für den wir keinen PGP-Schlüssel haben, kann diese natürlich __nicht__ verschlüsselt werden. | ||
+ | $ echo "very important top secret stuff" | mailx -s " | ||
+ | |||
+ | Im Logfile des //**zeyple encryption daemon**// wird die Verarbeitung auch entsprechend dokumentiert. | ||
+ | < | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | 2016-08-09 10: | ||
+ | |||
+ | In der Postfix Logdatei wird der ordnungsgemäße Verarbeitungsablauf wie gewohnt festgehalten. | ||
+ | < | ||
+ | Aug 9 10:43:16 vml000117 postfix/ | ||
+ | Aug 9 10:43:16 vml000117 postfix/ | ||
+ | Aug 9 10:43:16 vml000117 postfix/ | ||
+ | Aug 9 10:43:16 vml000117 postfix/ | ||
+ | Aug 9 10:43:16 vml000117 postfix/ | ||
+ | Aug 9 10:43:16 vml000117 postfix/ | ||
+ | Aug 9 10:43:16 vml000117 postfix/ | ||
+ | Aug 9 10:43:16 vml000117 postfix/ | ||
+ | Aug 9 10:43:16 vml000117 postfix/ | ||
+ | Aug 9 10:43:17 vml000117 postfix/ | ||
+ | Aug 9 10:43:17 vml000117 postfix/ | ||
+ | |||
+ | ====== Links ====== | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||