Autorarchive: André P.

Über André P.

Seit einigen Jahren in der IT unterwegs, teile ich nun auch meine Gedanken und Ideen in Form dieses Blogs.

Rspamd: Ratelimit-Überschreitung in Slack Channel teilen

Hallo,

Long time no read.

Mehr ein Snippet als ein echter Beitrag.

Verwendet wird der der metadata_exporter von Rspamd. Eine Mail wird gesendet, wenn das Ratelimit auslöst und die Mail von einem authentifizierten Benutzer kommt. Das kann im LUA-Script entsprechend angepasst werden.

Hier die „local.d/metadata_exporter.conf“:

rules {
  RLINFO {
    backend = "send_mail";
    smtp = "localhost";
    smtp_port = 25;
    mail_to = "ratelimit@localhost";
    selector = "ratelimited";
    formatter = "email_alert";
  }
}
custom_select {
  ratelimited = <<EOD
return function(task)
  local ratelimited = task:get_symbol("RATELIMITED")
  local uname = task:get_user()
  if uname and ratelimited then
    return true
  end
  return
end
EOD;
}

Und die entsprechende „local.d/ratelimit.conf“, um das Info-Symbol zu setzen:

info_symbol = "RATELIMITED";

In diesem Beispiel pipe ich es via ratelimit@localhost an ein Python-Script, das die Nachricht an einen Slack Channel sendet:

Das Alias sieht dann etwa so aus:

ratelimit:      |/usr/local/bin/slack_alert.py

Das Python Script /usr/local/bin/slack_alert.py:

#!/usr/bin/env python

import json
import requests
import sys
import email

webhook_url = 'https://hooks.slack.com/services/AAAAAAAA/BBBBBBB/CCCCCCCCCCCCCCCCCCCCCCC';
slack_data = sys.stdin.read()
if not slack_data:
  print "No data"
  exit

msg = email.message_from_string(slack_data)

response = requests.post(
    webhook_url, json={"text": msg.get_payload()},
    headers={'Content-Type': 'application/json'}
)
if response.status_code != 200:
    raise ValueError(
        'Request to slack returned an error %s, the response is:\n%s'
        % (response.status_code, response.text)
)

ProFTPD mit mod_vroot bauen

Update 23.09.2018: RuntimeDirectory hinzugefügt

Da ich mich wunderte, dass das ProFTPD Modul mod_vroot in vielen Distributionen nicht mehr verfügbar ist, hier mal der Debian-way.

Aktuelle mod_vroot Releases: https://github.com/Castaglia/proftpd-mod_vroot/releases
Aktuelle/stabile ProFTPD Version: http://www.proftpd.org/

Installation:

# Abhängigkeiten installieren
apt-get build-dep proftpd-dfsg

# Benutzer hinzufügen
adduser --system --disabled-login --no-create-home --home /run/proftpd proftpd
mkdir -p /run/proftpd
chown proftpd:nogroup /run/proftpd

# Herunterladen, bauen
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.6.tar.gz
tar xfvz proftpd-1.3.6.tar.gz
cd proftpd-1.3.6/contrib
wget https://github.com/Castaglia/proftpd-mod_vroot/archive/v0.9.5.tar.gz
tar xfvz v0.9.5.tar.gz
mv proftpd-mod_vroot-0.9.5/ mod_vroot
cd ..
./configure --prefix=/usr --sysconfdir=/etc/proftpd --localstatedir=/var --enable-openssl --with-modules=mod_vroot
make
make install

Eine Service-Datei („/etc/systemd/system/proftpd.service“):

[Unit]
Description=ProFTPD FTP Server
After=network.target

[Service]
Type=forking
PIDFile=/run/proftpd/proftpd.pid
ExecStart=/usr/sbin/proftpd
ExecReload=/bin/kill -HUP $MAINPID
RuntimeDirectory=proftpd

[Install]
WantedBy = multi-user.target

Mit anschließendem „systemctl enable proftpd.service“ aktivieren.

Eine Konfigurationsdatei (Beispiel):

ServerName                      "FTP"
ServerIdent                     on "FTP Server ready."
ServerAdmin                     cow@localhost
PidFile				/run/proftpd/proftpd.pid
DefaultServer                   on
VRootEngine                     on
DefaultRoot                     ~ !adm
AuthPAMConfig                   proftpd
AuthOrder                       mod_auth_pam.c* mod_auth_unix.c
UseReverseDNS                   off
User                            proftpd
Group                           nogroup
MaxInstances                    20
UseSendfile                     off
LogFormat                       default "%h %l %u %t \"%r\" %s %b"
LogFormat                       auth    "%v [%P] %h %t \"%r\" %s"
ListOptions                     -a
RequireValidShell               off
PassivePorts                    12000 12100

  Umask                         002
  IdentLookups                  off
  AllowOverwrite                yes
  
    AllowAll
  

Das Modul muss nicht explizit geladen werden.