{"id":93,"date":"2017-04-27T18:07:07","date_gmt":"2017-04-27T17:07:07","guid":{"rendered":"https:\/\/mindau.de\/blog\/?p=93"},"modified":"2022-02-09T12:13:10","modified_gmt":"2022-02-09T11:13:10","slug":"send-notifications-linux-fail2ban-ssh-auth-actions-slack","status":"publish","type":"post","link":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/","title":{"rendered":"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack"},"content":{"rendered":"<p>For this approach i will use my slackpost.sh script to send messages to Slack. More info about it you can find &#8211;\u00a0<a href=\"https:\/\/mindau.de\/blog\/en\/en-post-messages-slack-linux\/\">https:\/\/mindau.de\/blog\/en\/en-post-messages-slack-linux\/<\/a><\/p>\n<p><!--more--><\/p>\n<h4>fail2ban<\/h4>\n<p>How to install and configure fail2ban you can find for example here &#8211;\u00a0https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-protect-ssh-with-fail2ban-on-ubuntu-14-04<\/p>\n<p>Now edit fail2ban jail.local file<\/p>\n<pre class=\"lang:default decode:true\">sudo nano \/etc\/fail2ban\/jail.local\n<\/pre>\n<p>add &#8220;slack&#8221; hook where you want to use it. For example:<\/p>\n<pre class=\"lang:default decode:true\">.\n.\n.\n[ssh]\n\nenabled = true\nport = ssh,sftp,22\nfilter = sshd\nlogpath = \/var\/log\/auth.log\nbantime = 900\nbanaction = iptables-allports\nfindtime = 900\nmaxretry = 2\naction   = iptables[name=SSH, port=12345, protocol=tcp]\n           slack\n.\n.\n.<\/pre>\n<p>Now create new config file for slack action:<\/p>\n<pre class=\"lang:default decode:true\">sudo nano \/etc\/fail2ban\/action.d\/slack.conf<\/pre>\n<p>copy\/paste it<\/p>\n<pre class=\"lang:default decode:true\">.\n.\n.\n\n# Option:  actionban\n# Notes.:  command executed when banning an IP. Take care that the\n#          command is executed with Fail2Ban user rights.\n# Tags:    &lt;ip&gt;  IP address\n#          &lt;failures&gt;  number of failures\n#          &lt;time&gt;  unix timestamp of the ban time\n# Values:  CMD\n#\nactionban = \/path\/to\/slack-report.sh fail2ban ban &lt;ip&gt;\n\n.\n.\n.\n\n<\/pre>\n<p>put slack-report.sh to bin folder &amp; restart fail2ban service<\/p>\n<pre class=\"lang:default decode:true\">sudo service fail2ban restart<\/pre>\n<h4>SSH AUTH REPORT<\/h4>\n<pre class=\"lang:default decode:true\">sudo nano \/etc\/pam.d\/sshd<\/pre>\n<p>add to file:<\/p>\n<pre class=\"lang:default decode:true\">session optional pam_exec.so seteuid \/path\/to\/slack-report.sh sshauth<\/pre>\n<p>and finaly slack-report.sh<\/p>\n<style>.gist table { margin-bottom: 0; }<\/style>\n<div style=\"tab-size: 8\" id=\"gist92225043\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container\">\n<div id=\"file-slack-report-sh\" class=\"file my-2\">\n<div itemprop=\"text\"\n      class=\"Box-body p-0 blob-wrapper data type-shell  \"\n      style=\"overflow: auto\" tabindex=\"0\" role=\"region\"\n      aria-label=\"slack-report.sh content, created by grambas on 07:45PM on October 01, 2018.\"\n    ><\/p>\n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n<p>  <template class=\"js-file-alert-template\"><\/p>\n<div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n    <span><br \/>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br \/>\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a><br \/>\n    <\/span><\/p>\n<div data-view-component=\"true\" class=\"flash-action\">        <a href=\"{{ revealButtonHref }}\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters<br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><\/template><br \/>\n<template class=\"js-line-alert-template\"><br \/>\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\"><br \/>\n    <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n<\/span><\/template><\/p>\n<table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"slack-report.sh\">\n<tr>\n<td id=\"file-slack-report-sh-L1\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"1\"><\/td>\n<td id=\"file-slack-report-sh-LC1\" class=\"blob-code blob-code-inner js-file-line\">#!\/bin\/sh<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L2\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"2\"><\/td>\n<td id=\"file-slack-report-sh-LC2\" class=\"blob-code blob-code-inner js-file-line\"># Display usage information<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L3\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"3\"><\/td>\n<td id=\"file-slack-report-sh-LC3\" class=\"blob-code blob-code-inner js-file-line\"># send notifications from Linux fail2ban, ssh auth and others actions to Slack<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L4\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"4\"><\/td>\n<td id=\"file-slack-report-sh-LC4\" class=\"blob-code blob-code-inner js-file-line\">function show_usage {<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L5\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"5\"><\/td>\n<td id=\"file-slack-report-sh-LC5\" class=\"blob-code blob-code-inner js-file-line\">  echo &quot;Default Usage: $0 [subject] [action] [msg]&quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L6\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"6\"><\/td>\n<td id=\"file-slack-report-sh-LC6\" class=\"blob-code blob-code-inner js-file-line\">  echo &quot;Example: $0 DATABASE backup succefully&quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L7\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"7\"><\/td>\n<td id=\"file-slack-report-sh-LC7\" class=\"blob-code blob-code-inner js-file-line\">  echo &quot;Custom actions: $0 fail2brain start|stop|ban (ip)|unban (ip)&quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L8\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"8\"><\/td>\n<td id=\"file-slack-report-sh-LC8\" class=\"blob-code blob-code-inner js-file-line\">  echo &quot;Custom actions: $0 sshauth (use variables from pam_exec to generate msg).&quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L9\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"9\"><\/td>\n<td id=\"file-slack-report-sh-LC9\" class=\"blob-code blob-code-inner js-file-line\">  exit<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L10\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"10\"><\/td>\n<td id=\"file-slack-report-sh-LC10\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L11\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"11\"><\/td>\n<td id=\"file-slack-report-sh-LC11\" class=\"blob-code blob-code-inner js-file-line\"># Check for script arguments<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L12\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"12\"><\/td>\n<td id=\"file-slack-report-sh-LC12\" class=\"blob-code blob-code-inner js-file-line\">if [ $# -lt 1 ]<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L13\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"13\"><\/td>\n<td id=\"file-slack-report-sh-LC13\" class=\"blob-code blob-code-inner js-file-line\">then<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L14\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"14\"><\/td>\n<td id=\"file-slack-report-sh-LC14\" class=\"blob-code blob-code-inner js-file-line\">  show_usage<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L15\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"15\"><\/td>\n<td id=\"file-slack-report-sh-LC15\" class=\"blob-code blob-code-inner js-file-line\">fi<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L16\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"16\"><\/td>\n<td id=\"file-slack-report-sh-LC16\" class=\"blob-code blob-code-inner js-file-line\"># Custom reporting<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L17\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"17\"><\/td>\n<td id=\"file-slack-report-sh-LC17\" class=\"blob-code blob-code-inner js-file-line\">if [ &quot;$1&quot; = &#39;fail2ban&#39; ]<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L18\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"18\"><\/td>\n<td id=\"file-slack-report-sh-LC18\" class=\"blob-code blob-code-inner js-file-line\">then<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L19\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"19\"><\/td>\n<td id=\"file-slack-report-sh-LC19\" class=\"blob-code blob-code-inner js-file-line\">    #slack.conf start and stop not set<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L20\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"20\"><\/td>\n<td id=\"file-slack-report-sh-LC20\" class=\"blob-code blob-code-inner js-file-line\">    if [ &quot;$2&quot; = &#39;start&#39; ]<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L21\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"21\"><\/td>\n<td id=\"file-slack-report-sh-LC21\" class=\"blob-code blob-code-inner js-file-line\">    then<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L22\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"22\"><\/td>\n<td id=\"file-slack-report-sh-LC22\" class=\"blob-code blob-code-inner js-file-line\">      message=&#39;Fail2ban just started.&#39;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L23\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"23\"><\/td>\n<td id=\"file-slack-report-sh-LC23\" class=\"blob-code blob-code-inner js-file-line\">      echo $message | path\/to\/slackpost.sh<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L24\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"24\"><\/td>\n<td id=\"file-slack-report-sh-LC24\" class=\"blob-code blob-code-inner js-file-line\">    elif [ &quot;$2&quot; = &#39;stop&#39; ]<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L25\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"25\"><\/td>\n<td id=\"file-slack-report-sh-LC25\" class=\"blob-code blob-code-inner js-file-line\">    then<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L26\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"26\"><\/td>\n<td id=\"file-slack-report-sh-LC26\" class=\"blob-code blob-code-inner js-file-line\">      message=&#39;Fail2ban just stopped.&#39;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L27\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"27\"><\/td>\n<td id=\"file-slack-report-sh-LC27\" class=\"blob-code blob-code-inner js-file-line\">      echo $message | path\/to\/slackpost.sh<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L28\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"28\"><\/td>\n<td id=\"file-slack-report-sh-LC28\" class=\"blob-code blob-code-inner js-file-line\">    elif [ &quot;$2&quot; = &#39;ban&#39; ]<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L29\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"29\"><\/td>\n<td id=\"file-slack-report-sh-LC29\" class=\"blob-code blob-code-inner js-file-line\">    then<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L30\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"30\"><\/td>\n<td id=\"file-slack-report-sh-LC30\" class=\"blob-code blob-code-inner js-file-line\">      message=$([ &quot;$2&quot; != &#39;&#39; ] &amp;&amp; echo &quot;[$1] just banned $3&quot; || echo &#39;Fail2ban just banned an ip.&#39; )<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L31\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"31\"><\/td>\n<td id=\"file-slack-report-sh-LC31\" class=\"blob-code blob-code-inner js-file-line\">      echo $message | path\/to\/slackpost.sh<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L32\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"32\"><\/td>\n<td id=\"file-slack-report-sh-LC32\" class=\"blob-code blob-code-inner js-file-line\">    elif [ &quot;$2&quot; = &#39;unban&#39; ]<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L33\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"33\"><\/td>\n<td id=\"file-slack-report-sh-LC33\" class=\"blob-code blob-code-inner js-file-line\">    then<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L34\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"34\"><\/td>\n<td id=\"file-slack-report-sh-LC34\" class=\"blob-code blob-code-inner js-file-line\">      message=$([ &quot;$2&quot; != &#39;&#39; ] &amp;&amp; echo &quot;[$1] just unbanned $3&quot; || echo &quot;Fail2ban just unbanned an ip.&quot; )<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L35\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"35\"><\/td>\n<td id=\"file-slack-report-sh-LC35\" class=\"blob-code blob-code-inner js-file-line\">      echo $message | path\/to\/slackpost.sh<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L36\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"36\"><\/td>\n<td id=\"file-slack-report-sh-LC36\" class=\"blob-code blob-code-inner js-file-line\">    else<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L37\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"37\"><\/td>\n<td id=\"file-slack-report-sh-LC37\" class=\"blob-code blob-code-inner js-file-line\">      show_usage<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L38\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"38\"><\/td>\n<td id=\"file-slack-report-sh-LC38\" class=\"blob-code blob-code-inner js-file-line\">    fi<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L39\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"39\"><\/td>\n<td id=\"file-slack-report-sh-LC39\" class=\"blob-code blob-code-inner js-file-line\"># Extra check if not logout (close_session)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L40\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"40\"><\/td>\n<td id=\"file-slack-report-sh-LC40\" class=\"blob-code blob-code-inner js-file-line\">elif [ &quot;$1&quot; = &quot;sshauth&quot; ]<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L41\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"41\"><\/td>\n<td id=\"file-slack-report-sh-LC41\" class=\"blob-code blob-code-inner js-file-line\">then<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L42\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"42\"><\/td>\n<td id=\"file-slack-report-sh-LC42\" class=\"blob-code blob-code-inner js-file-line\">    #slack.conf start and stop not set<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L43\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"43\"><\/td>\n<td id=\"file-slack-report-sh-LC43\" class=\"blob-code blob-code-inner js-file-line\">    if [ &quot;$PAM_TYPE&quot; != &quot;close_session&quot; ]<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L44\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"44\"><\/td>\n<td id=\"file-slack-report-sh-LC44\" class=\"blob-code blob-code-inner js-file-line\">    then<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L45\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"45\"><\/td>\n<td id=\"file-slack-report-sh-LC45\" class=\"blob-code blob-code-inner js-file-line\">      #env is last cmd variables<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L46\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"46\"><\/td>\n<td id=\"file-slack-report-sh-LC46\" class=\"blob-code blob-code-inner js-file-line\">      #subject=&quot;SSH Login: $PAM_USER from $PAM_RHOST on $host&quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L47\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"47\"><\/td>\n<td id=\"file-slack-report-sh-LC47\" class=\"blob-code blob-code-inner js-file-line\">      # Message to send, e.g. the current environment variables.<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L48\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"48\"><\/td>\n<td id=\"file-slack-report-sh-LC48\" class=\"blob-code blob-code-inner js-file-line\">      message=&quot;$PAM_RHOST has just connected on $HOSTNAME with user $PAM_USER (PAM_TYPE=$PAM_TYPE)&quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L49\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"49\"><\/td>\n<td id=\"file-slack-report-sh-LC49\" class=\"blob-code blob-code-inner js-file-line\">          # message=&quot;`env`&quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L50\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"50\"><\/td>\n<td id=\"file-slack-report-sh-LC50\" class=\"blob-code blob-code-inner js-file-line\">      echo $message | path\/to\/slackpost.sh<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L51\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"51\"><\/td>\n<td id=\"file-slack-report-sh-LC51\" class=\"blob-code blob-code-inner js-file-line\">     fi<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L52\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"52\"><\/td>\n<td id=\"file-slack-report-sh-LC52\" class=\"blob-code blob-code-inner js-file-line\"># Default <\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L53\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"53\"><\/td>\n<td id=\"file-slack-report-sh-LC53\" class=\"blob-code blob-code-inner js-file-line\">else<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L54\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"54\"><\/td>\n<td id=\"file-slack-report-sh-LC54\" class=\"blob-code blob-code-inner js-file-line\">    echo &quot;[$1] action: $2 msg: $3&quot; | path\/to\/slackpost.sh<\/td>\n<\/tr>\n<tr>\n<td id=\"file-slack-report-sh-L55\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"55\"><\/td>\n<td id=\"file-slack-report-sh-LC55\" class=\"blob-code blob-code-inner js-file-line\">fi<\/td>\n<\/tr>\n<\/table>\n<\/div><\/div>\n<\/p><\/div>\n<\/div><\/div>\n<div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/grambas\/67ef18335aa4fb8576bd9a89092b0a18\/raw\/0dd48d82bab260d8b75a284720762b8769db31e1\/slack-report.sh\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a><br \/>\n        <a href=\"https:\/\/gist.github.com\/grambas\/67ef18335aa4fb8576bd9a89092b0a18#file-slack-report-sh\" class=\"Link--inTextBlock\"><br \/>\n          slack-report.sh<br \/>\n        <\/a><br \/>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n<\/p><\/div>\n<\/div>\n<p>And results:<\/p>\n<figure id=\"attachment_97\" aria-describedby=\"caption-attachment-97\" style=\"width: 966px\" class=\"wp-caption alignnone\"><img data-attachment-id=\"97\" data-permalink=\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/attachment\/slack_2017-04-27_19-02-45\/\" data-orig-file=\"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2017\/04\/slack_2017-04-27_19-02-45.png\" data-orig-size=\"966,202\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"slack notification example\" data-image-description=\"&lt;p&gt;slack notification example&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;slack notification example&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2017\/04\/slack_2017-04-27_19-02-45-300x63.png\" data-large-file=\"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2017\/04\/slack_2017-04-27_19-02-45.png\" loading=\"lazy\" class=\"wp-image-97 size-full\" title=\"slack post message example\" src=\"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2017\/04\/slack_2017-04-27_19-02-45.png\" alt=\"slack post message example\" width=\"966\" height=\"202\" srcset=\"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2017\/04\/slack_2017-04-27_19-02-45.png 966w, https:\/\/mindau.de\/blog\/wp-content\/uploads\/2017\/04\/slack_2017-04-27_19-02-45-300x63.png 300w, https:\/\/mindau.de\/blog\/wp-content\/uploads\/2017\/04\/slack_2017-04-27_19-02-45-768x161.png 768w\" sizes=\"(max-width: 966px) 100vw, 966px\" \/><figcaption id=\"caption-attachment-97\" class=\"wp-caption-text\">slack post message example<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>For this approach i will use my slackpost.sh script to send messages to Slack. More info about it you can find &#8211;\u00a0https:\/\/mindau.de\/blog\/en\/en-post-messages-slack-linux\/<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"jetpack_publicize_message":"How to send notifications from Linux fail2ban, ssh auth and others actions to Slack","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[5,11,14],"tags":[15,12],"jetpack_publicize_connections":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to send notifications from Linux fail2ban, ssh auth and other actions to Slack - Mindau | Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack - Mindau | Blog\" \/>\n<meta property=\"og:description\" content=\"For this approach i will use my slackpost.sh script to send messages to Slack. More info about it you can find &#8211;\u00a0https:\/\/mindau.de\/blog\/en\/en-post-messages-slack-linux\/\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/\" \/>\n<meta property=\"og:site_name\" content=\"Mindau | Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-27T17:07:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-02-09T11:13:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2017\/04\/slack_2017-04-27_19-02-45.png\" \/>\n<meta name=\"author\" content=\"Mindau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@MindaugasMilius\" \/>\n<meta name=\"twitter:site\" content=\"@MindaugasMilius\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mindau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/\"},\"author\":{\"name\":\"Mindau\",\"@id\":\"https:\/\/mindau.de\/blog\/#\/schema\/person\/b59ad18a46b5a55b9319b41779682998\"},\"headline\":\"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack\",\"datePublished\":\"2017-04-27T17:07:07+00:00\",\"dateModified\":\"2022-02-09T11:13:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/\"},\"wordCount\":144,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/mindau.de\/blog\/#\/schema\/person\/b59ad18a46b5a55b9319b41779682998\"},\"keywords\":[\"reporting\",\"slack\"],\"articleSection\":[\"English\",\"Linux\",\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/\",\"url\":\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/\",\"name\":\"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack - Mindau | Blog\",\"isPartOf\":{\"@id\":\"https:\/\/mindau.de\/blog\/#website\"},\"datePublished\":\"2017-04-27T17:07:07+00:00\",\"dateModified\":\"2022-02-09T11:13:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/mindau.de\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/mindau.de\/blog\/#website\",\"url\":\"https:\/\/mindau.de\/blog\/\",\"name\":\"Mindau | Blog\",\"description\":\"Mindaugas Milius\",\"publisher\":{\"@id\":\"https:\/\/mindau.de\/blog\/#\/schema\/person\/b59ad18a46b5a55b9319b41779682998\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/mindau.de\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/mindau.de\/blog\/#\/schema\/person\/b59ad18a46b5a55b9319b41779682998\",\"name\":\"Mindau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/mindau.de\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2022\/02\/1639431846236.jpeg\",\"contentUrl\":\"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2022\/02\/1639431846236.jpeg\",\"width\":250,\"height\":250,\"caption\":\"Mindau\"},\"logo\":{\"@id\":\"https:\/\/mindau.de\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"http:\/\/mindau.de\",\"https:\/\/www.linkedin.com\/in\/mindaugasmilius\/\",\"https:\/\/twitter.com\/MindaugasMilius\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack - Mindau | Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/","og_locale":"en_US","og_type":"article","og_title":"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack - Mindau | Blog","og_description":"For this approach i will use my slackpost.sh script to send messages to Slack. More info about it you can find &#8211;\u00a0https:\/\/mindau.de\/blog\/en\/en-post-messages-slack-linux\/","og_url":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/","og_site_name":"Mindau | Blog","article_published_time":"2017-04-27T17:07:07+00:00","article_modified_time":"2022-02-09T11:13:10+00:00","og_image":[{"url":"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2017\/04\/slack_2017-04-27_19-02-45.png"}],"author":"Mindau","twitter_card":"summary_large_image","twitter_creator":"@MindaugasMilius","twitter_site":"@MindaugasMilius","twitter_misc":{"Written by":"Mindau","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/#article","isPartOf":{"@id":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/"},"author":{"name":"Mindau","@id":"https:\/\/mindau.de\/blog\/#\/schema\/person\/b59ad18a46b5a55b9319b41779682998"},"headline":"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack","datePublished":"2017-04-27T17:07:07+00:00","dateModified":"2022-02-09T11:13:10+00:00","mainEntityOfPage":{"@id":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/"},"wordCount":144,"commentCount":0,"publisher":{"@id":"https:\/\/mindau.de\/blog\/#\/schema\/person\/b59ad18a46b5a55b9319b41779682998"},"keywords":["reporting","slack"],"articleSection":["English","Linux","Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/","url":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/","name":"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack - Mindau | Blog","isPartOf":{"@id":"https:\/\/mindau.de\/blog\/#website"},"datePublished":"2017-04-27T17:07:07+00:00","dateModified":"2022-02-09T11:13:10+00:00","breadcrumb":{"@id":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/mindau.de\/blog\/en\/send-notifications-linux-fail2ban-ssh-auth-actions-slack\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mindau.de\/blog\/"},{"@type":"ListItem","position":2,"name":"How to send notifications from Linux fail2ban, ssh auth and other actions to Slack"}]},{"@type":"WebSite","@id":"https:\/\/mindau.de\/blog\/#website","url":"https:\/\/mindau.de\/blog\/","name":"Mindau | Blog","description":"Mindaugas Milius","publisher":{"@id":"https:\/\/mindau.de\/blog\/#\/schema\/person\/b59ad18a46b5a55b9319b41779682998"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mindau.de\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/mindau.de\/blog\/#\/schema\/person\/b59ad18a46b5a55b9319b41779682998","name":"Mindau","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/mindau.de\/blog\/#\/schema\/person\/image\/","url":"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2022\/02\/1639431846236.jpeg","contentUrl":"https:\/\/mindau.de\/blog\/wp-content\/uploads\/2022\/02\/1639431846236.jpeg","width":250,"height":250,"caption":"Mindau"},"logo":{"@id":"https:\/\/mindau.de\/blog\/#\/schema\/person\/image\/"},"sameAs":["http:\/\/mindau.de","https:\/\/www.linkedin.com\/in\/mindaugasmilius\/","https:\/\/twitter.com\/MindaugasMilius"]}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pcptsa-1v","jetpack-related-posts":[{"id":82,"url":"https:\/\/mindau.de\/blog\/en\/simple-way-monitor-websites-linux\/","url_meta":{"origin":93,"position":0},"title":"[EN] Simple way to monitor websites in Linux with Slack","date":"April 27, 2017","format":false,"excerpt":"Mostly is very usefull to know if one or another website is down. Here is simple example to monitor your websites: https:\/\/gist.github.com\/6950da61b5ad31185931ddb2c0f9ecab#file-monitor-websites-sh sites.txt example website1.com website2.com Now you can add it to crontab. Type crontab -e and insert: # ping websites every minute * * * * * \/path\/to\/monitor-websites.sh >\u2026","rel":"","context":"In &quot;English&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":72,"url":"https:\/\/mindau.de\/blog\/en\/en-post-messages-slack-linux\/","url_meta":{"origin":93,"position":1},"title":"[EN] Post messages to slack from linux","date":"April 27, 2017","format":false,"excerpt":"Firstly you need to create webhook url in slack. How to do it you can find at\u00a0https:\/\/www.programmableweb.com\/news\/how-to-integrate-webhooks-slack-api\/how-to\/2015\/10\/20 Secondly you need for example a bash script. My version you can find\u00a0in gist: https:\/\/gist.github.com\/67ef18335aa4fb8576bd9a89092b0a18#file-slackpost-sh For comfort usage I\u00a0have copied it to bin folder cp \/current\/path\/to\/slackpost.sh \/usr\/local\/bin\/slackpost.sh chmod +x \/usr\/local\/bin\/slackpost.sh Now you cant\u2026","rel":"","context":"In &quot;English&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":104,"url":"https:\/\/mindau.de\/blog\/en\/raspberry-pi-garden-assistant-project\/","url_meta":{"origin":93,"position":2},"title":"Raspberry Pi Garden Assistant Project","date":"May 31, 2017","format":false,"excerpt":"Project Plan and Goals The idea is to make smart garden house. Main tasks is to provide internet from mobile sim card to WiFi access point, automatizes mart watering and log some interesting data. This is my TO DO list. I will\u00a0continually update it by adding links to details. Internet\u2026","rel":"","context":"In &quot;English&quot;","img":{"alt_text":"Garden Project Scheme","src":"https:\/\/i0.wp.com\/mindau.de\/blog\/wp-content\/uploads\/2017\/05\/download.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":288,"url":"https:\/\/mindau.de\/blog\/en\/auto-webserver-and-database-backup-with-gpg-encryption-to-amazon-s3\/","url_meta":{"origin":93,"position":3},"title":"Auto webserver and database backup with GPG encryption to Amazon S3","date":"December 15, 2017","format":false,"excerpt":"In this tutorial I will show you step-by-step\u00a0 instructions how to make cheap and secure encrypted backups of you webserver (or any other dir)\u00a0 files on you linux\u00a0 server using Amazon Storage Service Create Bucket and User at Amazon AWS Some links that we will need Amazon Console link -\u2026","rel":"","context":"In &quot;English&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":111,"url":"https:\/\/mindau.de\/blog\/en\/how-to-tutorials\/secure-nginx-configuration\/","url_meta":{"origin":93,"position":4},"title":"Secure Nginx configuration","date":"May 3, 2017","format":false,"excerpt":"After some research and digging, I made my nginx and domain configuration files. If I have something missed, you are welcome to write it in comment here or at Github. Mostly everything are commented so to understand code should be not problem. https:\/\/gist.github.com\/grambas\/a978ae5cdea456a5f8a55796a6cd6e7f#file-nginx-conf UPDATE: If you want more advanced solution,\u2026","rel":"","context":"In &quot;Linux&quot;","img":{"alt_text":"nginx secure configuration","src":"https:\/\/i0.wp.com\/mindau.de\/blog\/wp-content\/uploads\/2017\/05\/nginx-secure-configuration.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":453,"url":"https:\/\/mindau.de\/blog\/en\/super-fast-and-easy-email-synchronization-with-imapsync-and-docker\/","url_meta":{"origin":93,"position":5},"title":"Super fast and easy email synchronization with imapsync and docker","date":"February 27, 2019","format":false,"excerpt":"If you need to migrate or transfer an email server to other provider, then you also need to export \/ import all your emails and folders. In that case you can struggle with many problems. For example: Different Email Clients with different export formatNo export or import function Costly import\u2026","rel":"","context":"In &quot;English&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mindau.de\/blog\/wp-content\/uploads\/2019\/02\/email-3249062_640.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/posts\/93"}],"collection":[{"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/comments?post=93"}],"version-history":[{"count":8,"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/posts\/93\/revisions"}],"predecessor-version":[{"id":320,"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/posts\/93\/revisions\/320"}],"wp:attachment":[{"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/media?parent=93"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/categories?post=93"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mindau.de\/blog\/wp-json\/wp\/v2\/tags?post=93"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}