Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c7:zeyple [05.08.2016 21:18. ] – angelegt 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!//** | ||
+ | \\ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | 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__) eMail an den MTA (Postfix) | ||
+ | |||
+ | Nachfolgende Übersichsskizze zeigt diese Verarbeitungsschritte. | ||
+ | |||
+ | <uml> | ||
+ | skinparam defaultFontName Courier | ||
+ | |||
+ | state "/ | ||
+ | sendmail : Script oder Daemon generiert | ||
+ | sendmail : eMail und verschickt diese | ||
+ | sendmail : via / | ||
+ | |||
+ | state " | ||
+ | state " | ||
+ | mta1 : Annahme der eMail durch das | ||
+ | mta1 : Postfix-Modul POSTDROP | ||
+ | mta1 : und Weiterleitung an den | ||
+ | mta1 : zeyple-Encryption-Daemon | ||
+ | | ||
+ | state " | ||
+ | zeyple : Annahme der unverschlüsselten Admin-Mails vom Postfix-Daemen (queue); | ||
+ | zeyple : Verschlüsseln der Nachrichtenen mit dem PGP-Key des Empfängers und anschließend | ||
+ | zeyple : weiterleiten der verschlüsselten Mail an den Postfix SMTP-Daemon Port 10026 | ||
+ | |||
+ | state " | ||
+ | mta2 : Entgegennahme der verschlüsselten eMail | ||
+ | mta2 : vom zyple Daemon und weiterleiten an den | ||
+ | mta2 : zuständigen Mailserver (next-hop) | ||
+ | } | ||
+ | |||
+ | |||
+ | sendmail --> mta1 | ||
+ | mta1 -right-> zeyple | ||
+ | zeyple -right-> mta2 | ||
+ | mta2 --> [*] | ||
+ | note left | ||
+ | From: icinga < | ||
+ | To: django@nausch.org | ||
+ | Subject: icinga 2 Service-Notification | ||
+ | Date: Friday 17:25:30 | ||
+ | |||
+ | ====================================================================================== | ||
+ | Content-Type: | ||
+ | | ||
+ | Content-Description: | ||
+ | | ||
+ | MIME-Version: | ||
+ | |||
+ | This message is in MIME format and has been PGP signed and encrypted. | ||
+ | |||
+ | --=_KVUguhHg3_izbRdYCjHHIA2 | ||
+ | Content-Type: | ||
+ | |||
+ | Version: 1 | ||
+ | |||
+ | --=_KVUguhHg3_izbRdYCjHHIA2 | ||
+ | Content-Type: | ||
+ | Content-Disposition: | ||
+ | |||
+ | -----BEGIN PGP MESSAGE----- | ||
+ | Version: GnuPG v2.0.14 (GNU/Linux) | ||
+ | |||
+ | hQIMA7qTOzFT6dtKAQ/ | ||
+ | XogSXhi57xIgMF2dY3BlY02JIrJ/ | ||
+ | 4NpQovyw5Yd9OOxGfP49+qNn1MIgWwbOsIPf91qT1RAzdWMwIg25Rkdn63OSMTsE | ||
+ | fLquJLPdbrbVZQfb2oTzThwmWZ9LGHB54zQpOSG2Nehq4UYHdCed/ | ||
+ | FwqkZGr9SSUVLQz7VkBUnHfcuMHZ22zliFdsbjhp84Q9ekZqqOBATK99BeF+kZBd | ||
+ | FCtKLtpBOlJ03zOz3J7vxgcpVpScnbn9kXJFg3g05Y/ | ||
+ | mul0lY1zMM6TRSWkezuR8y26kNqOUw2y5rOKCq8fjPoqY9SJBSEKiPPukQsZ9W8u | ||
+ | WRTxrEQqixGedABrZfKq41uQv+gQyF9iYJpiBSPT6Sws/ | ||
+ | 9tUowUkaUao/ | ||
+ | Wf+CSD9u/ | ||
+ | s/ | ||
+ | AgwD8mpRdV5KKq0BEACcRFnmcNhfGoM1oql5WWLkJNcaixELxJ/ | ||
+ | GySlbYCymO6B3stRzajuBjCVC0+eFluYAFbpVRXlA4jUN7YE41P5JGWf4S6vpOZE | ||
+ | / | ||
+ | jcekTCBroHISAhMec0IYh060a8T4ojlxprp6cpRkJ8ofnVBGBi6w8pan2W9FdNhD | ||
+ | 9MxE/ | ||
+ | ML8pMGUcjJAlE0w68jnhvznKN1WS82C+s/ | ||
+ | OpP8pPrV0gaJMNFZB2lHX6p7btFcbYL3wWXT2Rp6QBYSBZx8AYAoERSRNbi9DKSB | ||
+ | AtgU0YkAjYnuZcQ3+VasXmHayhayR1l1b22NRHxwfbf8Ls/ | ||
+ | kV6DcAo7wZmtpazyqKmdU1H8MQ0QOW5UmjWF62A10Qjrg7I2Y3K6k/ | ||
+ | FreQ9cWsAMI0GiUvCZMi29wI4GqWvkdL1I1PZxrvGfmz6lL1hK26PzEoWgUqeSdj | ||
+ | ws1o9O04IhZkyCeH8sPSoUylIEei/ | ||
+ | kB12G4rGASScJYWzCUsuhonj/ | ||
+ | =Ydeu | ||
+ | -----END PGP MESSAGE----- | ||
+ | |||
+ | --=_KVUguhHg3_izbRdYCjHHIA2-- | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | end note | ||
+ | |||
+ | note right of sendmail | ||
+ | From: icinga < | ||
+ | To: django@nausch.org | ||
+ | Subject: icinga 2 Service-Notification | ||
+ | Date: Friday 17:25:30 | ||
+ | |||
+ | ====================================================================================== | ||
+ | |||
+ | ***** nausch.org Icinga2 Service Monitoring | ||
+ | | ||
+ | ==> | ||
+ | |||
+ | When? | ||
+ | Service? System_Users | ||
+ | Host? vml000017.dmz.nausch.org | ||
+ | Address? 10.0.0.17 | ||
+ | Info? USERS WARNING - 4 users currently logged in | ||
+ | |||
+ | Comment by : | ||
+ | |||
+ | Have a look: | ||
+ | https:// | ||
+ | |||
+ | end note | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ===== 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:// | ||
+ | |||