<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>The Wombelix Post - LUKS</title><link href="https://dominik.wombacher.cc/" rel="alternate"/><link href="/feeds/tag_luks.atom.xml" rel="self"/><id>https://dominik.wombacher.cc/</id><updated>2022-03-16T00:00:00+01:00</updated><entry><title>EMail Notification to Unlock LUKS encrypted disk via Dropbear SSH</title><link href="https://dominik.wombacher.cc/posts/email_notification_to_unlock_luks_encrypted_disk_via_dropbear_ssh.html" rel="alternate"/><published>2022-03-16T00:00:00+01:00</published><updated>2022-03-16T00:00:00+01:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2022-03-16:/posts/email_notification_to_unlock_luks_encrypted_disk_via_dropbear_ssh.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I'm running Proxmox VE Hosts with full encrypted disks and Dropbear SSH to unlock them remotely.
I wanted to get notified when I have to login and enter the key  ... &lt;a class="read-more" href="/posts/email_notification_to_unlock_luks_encrypted_disk_via_dropbear_ssh.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I'm running Proxmox VE Hosts with full encrypted disks and Dropbear SSH to unlock them remotely.
I wanted to get notified when I have to login and enter the key, e.g. in case of an unexpected reboot.&lt;/p&gt;
&lt;p&gt;My setup is based on the &lt;a class="reference external" href="https://www.mailjet.com"&gt;mailjet&lt;/a&gt; Free Tier (6000 Mails / Month, 200 Mails / Day)
and some initramfs customizing to include curl, a few other required libraries and
a simple script to send an API request, tested on PVE 7.1 / Debian 11 (bullseye)&lt;/p&gt;
&lt;p&gt;I will enclose placeholder in &lt;strong&gt;&amp;lt; &amp;gt;&lt;/strong&gt;, please replace them with appropriate values based on your Environment.&lt;/p&gt;
&lt;p&gt;The hook script &lt;code&gt;/etc/initramfs-tools/hooks/curl&lt;/code&gt; take care that &lt;em&gt;curl&lt;/em&gt;,
&lt;em&gt;libnss_dns&lt;/em&gt; and a &lt;em&gt;resolv.conf&lt;/em&gt; are included in the initramfs:&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="pygments-ch"&gt;#!/bin/sh
&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-nv"&gt;PREREQ&lt;/span&gt;&lt;span class="pygments-o"&gt;=&lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;

&lt;/span&gt;prereqs&lt;span class="pygments-o"&gt;()&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-o"&gt;{&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nb"&gt;echo&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="pygments-nv"&gt;$PREREQ&lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-o"&gt;}&lt;/span&gt;&lt;span class="pygments-w"&gt;

&lt;/span&gt;&lt;span class="pygments-k"&gt;case&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nv"&gt;$1&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-k"&gt;in&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;prereqs&lt;span class="pygments-o"&gt;)&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;prereqs&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nb"&gt;exit&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-m"&gt;0&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-p"&gt;;;&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-k"&gt;esac&lt;/span&gt;&lt;span class="pygments-w"&gt;

&lt;/span&gt;.&lt;span class="pygments-w"&gt; &lt;/span&gt;/usr/share/initramfs-tools/hook-functions&lt;span class="pygments-w"&gt;

&lt;/span&gt;copy_exec&lt;span class="pygments-w"&gt; &lt;/span&gt;/usr/bin/curl&lt;span class="pygments-w"&gt; &lt;/span&gt;/bin&lt;span class="pygments-w"&gt;

&lt;/span&gt;&lt;span class="pygments-c1"&gt;# Fix DNS resolver
&lt;/span&gt;cp&lt;span class="pygments-w"&gt; &lt;/span&gt;-a&lt;span class="pygments-w"&gt; &lt;/span&gt;/usr/lib/x86_64-linux-gnu/libnss_dns*&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nv"&gt;$DESTDIR&lt;/span&gt;/usr/lib/x86_64-linux-gnu/&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-nb"&gt;printf&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;nameserver &amp;lt;dns_server1_ipv4_address&amp;gt;\nnameserver &amp;lt;dns_server2_ipv4_address&amp;gt;\n&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nv"&gt;$DESTDIR&lt;/span&gt;/etc/resolv.conf&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;The actual notification will be send by &lt;code&gt;/etc/initramfs-tools/scripts/init-premount/notification&lt;/code&gt; through the mailjet API.
You shouldn't have a problem to adjust it to use any other Service as long you can trigger a API via curl :)&lt;/p&gt;
&lt;pre class="code bash literal-block"&gt;
&lt;span class="pygments-ch"&gt;#!/bin/sh
&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-nv"&gt;PREREQ&lt;/span&gt;&lt;span class="pygments-o"&gt;=&lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;

&lt;/span&gt;prereqs&lt;span class="pygments-o"&gt;()&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-o"&gt;{&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nb"&gt;echo&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="pygments-nv"&gt;$PREREQ&lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-o"&gt;}&lt;/span&gt;&lt;span class="pygments-w"&gt;

&lt;/span&gt;&lt;span class="pygments-k"&gt;case&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nv"&gt;$1&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-k"&gt;in&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;prereqs&lt;span class="pygments-o"&gt;)&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;prereqs&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nb"&gt;exit&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-m"&gt;0&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-p"&gt;;;&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-k"&gt;esac&lt;/span&gt;&lt;span class="pygments-w"&gt;

&lt;/span&gt;.&lt;span class="pygments-w"&gt; &lt;/span&gt;/scripts/functions&lt;span class="pygments-w"&gt;

&lt;/span&gt;configure_networking&lt;span class="pygments-w"&gt;

&lt;/span&gt;/bin/curl&lt;span class="pygments-w"&gt; &lt;/span&gt;--insecure&lt;span class="pygments-w"&gt; &lt;/span&gt;-s&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-se"&gt;\
&lt;/span&gt;-X&lt;span class="pygments-w"&gt; &lt;/span&gt;POST&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-se"&gt;\
&lt;/span&gt;--user&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;&amp;lt;mailjet_api_user&amp;gt;:&amp;lt;mailjet_api_pass&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-se"&gt;\
&lt;/span&gt;https://api.mailjet.com/v3.1/send&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-se"&gt;\
&lt;/span&gt;-H&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s1"&gt;'Content-Type: application/json'&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-se"&gt;\
&lt;/span&gt;-d&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s1"&gt;'{
  &amp;quot;Messages&amp;quot;:[
    {
      &amp;quot;From&amp;quot;: {
        &amp;quot;Email&amp;quot;: &amp;quot;&amp;lt;sender_email&amp;gt;&amp;quot;,
        &amp;quot;Name&amp;quot;: &amp;quot;&amp;lt;sender_name&amp;gt;&amp;quot;
      },
      &amp;quot;To&amp;quot;: [
        {
          &amp;quot;Email&amp;quot;: &amp;quot;&amp;lt;recipient_mail&amp;gt;&amp;quot;,
          &amp;quot;Name&amp;quot;: &amp;quot;&amp;lt;recipient_name&amp;gt;&amp;quot;
        },
        {
          &amp;quot;Email&amp;quot;: &amp;quot;&amp;lt;recipient2_mail&amp;gt;&amp;quot;,
          &amp;quot;Name&amp;quot;: &amp;quot;Pushover&amp;quot;
        }
      ],
      &amp;quot;Subject&amp;quot;: &amp;quot;Action required: Unlock &amp;lt;fqdn&amp;gt;!&amp;quot;,
      &amp;quot;TextPart&amp;quot;: &amp;quot;Server &amp;lt;fqdn&amp;gt; was restarted and need to be unlocked to proceed boot sequence.&amp;quot;,
      &amp;quot;CustomID&amp;quot;: &amp;quot;DropbearUnlockRequest&amp;quot;
    }
  ]
}'&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;I'm also using &lt;a class="reference external" href="https://pushover.net"&gt;Pushover&lt;/a&gt; to receive notifications on my mobile, they offer mail2push,
so I just added my personal pushover address as second recipient to get notified by Mail and Pushover.&lt;/p&gt;
&lt;p&gt;Make both scripts executable:&lt;/p&gt;
&lt;pre class="code text literal-block"&gt;
chmod +x /etc/initramfs-tools/hooks/curl`
chmod +x /etc/initramfs-tools/scripts/init-premount/notification

&lt;/pre&gt;
&lt;p&gt;Run &lt;code&gt;update-initramfs -u&lt;/code&gt; and you are good to go, during the next reboot you should receive
an Email Notification to enter your LUKS Key and unlock your disk.&lt;/p&gt;
</content><category term="Linux"/><category term="Debian"/><category term="Proxmox"/><category term="Dropbear"/><category term="SSH"/><category term="LUKS"/><category term="EMail"/></entry></feed>