380 lines
12 KiB
Plaintext
380 lines
12 KiB
Plaintext
# ====================
|
|
# - Install via debian packagesystem
|
|
# ====================
|
|
|
|
# - Install dependencies
|
|
# -
|
|
apt-get install ruby-dev gnupg2 libgpgme-dev libsqlite3-dev libssl-dev build-essential
|
|
apt-get install haveged
|
|
|
|
# - Install schleuder 3 from stretch-backports
|
|
# -
|
|
apt-get install -t stretch-backports schleuder schleuder-cli ruby-oj
|
|
|
|
# - You will get the following output
|
|
# -
|
|
# - Type 'J'
|
|
# -
|
|
Paketlisten werden gelesen... Fertig
|
|
Abhängigkeitsbaum wird aufgebaut.
|
|
Statusinformationen werden eingelesen.... Fertig
|
|
The following additional packages will be installed:
|
|
fonts-lato libgpgme11 libruby2.3 libyaml-0-2 rake ruby ruby-activemodel ruby-activerecord ruby-activesupport
|
|
ruby-arel ruby-atomic ruby-backports ruby-blankslate ruby-builder ruby-daemons ruby-did-you-mean ruby-eventmachine
|
|
ruby-gpgme ruby-i18n ruby-json ruby-mail ruby-mail-gpg ruby-mime-types ruby-minitest ruby-multi-json ruby-net-telnet
|
|
ruby-oj ruby-power-assert ruby-rack ruby-rack-protection ruby-rack-test ruby-sinatra ruby-sinatra-contrib
|
|
ruby-sqlite3 ruby-test-unit ruby-thor ruby-thread-safe ruby-tilt ruby-tzinfo ruby2.3 rubygems-integration
|
|
schleuder-cli sqlite3 thin
|
|
Vorgeschlagene Pakete:
|
|
gpgsm ri ruby-dev ruby-builder-doc bundler sqlite3-doc
|
|
Die folgenden NEUEN Pakete werden installiert:
|
|
fonts-lato libgpgme11 libruby2.3 libyaml-0-2 rake ruby ruby-activemodel ruby-activerecord ruby-activesupport
|
|
ruby-arel ruby-atomic ruby-backports ruby-blankslate ruby-builder ruby-daemons ruby-did-you-mean ruby-eventmachine
|
|
ruby-gpgme ruby-i18n ruby-json ruby-mail ruby-mail-gpg ruby-mime-types ruby-minitest ruby-multi-json ruby-net-telnet
|
|
ruby-oj ruby-power-assert ruby-rack ruby-rack-protection ruby-rack-test ruby-sinatra ruby-sinatra-contrib
|
|
ruby-sqlite3 ruby-test-unit ruby-thor ruby-thread-safe ruby-tilt ruby-tzinfo ruby2.3 rubygems-integration schleuder
|
|
schleuder-cli sqlite3 thin
|
|
0 aktualisiert, 45 neu installiert, 0 zu entfernen und 47 nicht aktualisiert.
|
|
Es müssen 9.420 kB an Archiven heruntergeladen werden.
|
|
Nach dieser Operation werden 42,1 MB Plattenplatz zusätzlich benutzt.
|
|
Möchten Sie fortfahren? [J/n]
|
|
|
|
|
|
|
|
# ---
|
|
# - Enable user schleuder for managing lists
|
|
# ---
|
|
|
|
backup_date="$(date +%Y-%m-%d-%H%M)"
|
|
schleuder_config="/etc/schleuder/schleuder.yml"
|
|
user_schleuder_config="/var/lib/schleuder/.schleuder-cli/schleuder-cli.yml"
|
|
|
|
# - Create API Key for user schleuder
|
|
# -
|
|
api_key="$(schleuder new_api_key)"
|
|
|
|
# - Add the generated API Key to the list of valid api keys at
|
|
# - configuration file $schleuder_config
|
|
# -
|
|
if ! grep -q "$api_key" 2> /dev/null $schleuder_config ; then
|
|
perl -i.$backup_date -n -p \
|
|
-e "s/(^(\s*)valid_api_keys:.*)/\1\n\2 - ${api_key}/" \
|
|
$schleuder_config
|
|
fi
|
|
|
|
|
|
# - Add generated API Key to schleuder's configuration file
|
|
# - '${user_schleuder_config}'
|
|
# -
|
|
|
|
# - If no configuration file present, create a new default one.
|
|
# -
|
|
have_dot_schleuder_cli_yml=true
|
|
if [[ ! -d "~schleuder/.schleuder-cli" ]] ; then
|
|
have_dot_schleuder_cli_yml=false
|
|
elif [[ ! -f "~schleuder/.schleuder-cli/schleuder-cli.yml" ]] ; then
|
|
|
|
# - If the directory is present, no default configuration file (see below)
|
|
# - will be written
|
|
# -
|
|
mv "~schleuder/.schleuder-cli" "~schleuder/.schleuder-cli.${backup_date}"
|
|
|
|
have_dot_schleuder_cli_yml=false
|
|
fi
|
|
|
|
if ! $have_dot_schleuder_cli_yml ; then
|
|
|
|
# Creates a default configuration file '${user_schleuder_config}'
|
|
#
|
|
su - schleuder -s /bin/bash -c "/usr//bin/schleuder-cli lists list > /dev/null 2>&1"
|
|
|
|
fi
|
|
|
|
# - Now, add the API Key..
|
|
# -
|
|
perl -i.$backup_date -n -p \
|
|
-e "s/^(\s*api_key:).*/\1 ${api_key}/" \
|
|
${user_schleuder_config}
|
|
|
|
|
|
# - Get tls fingerprint of configured certificate
|
|
# -
|
|
cert_fingerprint="$(schleuder cert fingerprint | awk '{print$4}')"
|
|
|
|
# - Add the fingerprint to schleuder users private configuration file
|
|
# -
|
|
if ! grep -q "$cert_fingerprint" 2> /dev/null ${user_schleuder_config} ; then
|
|
perl -i.$backup_date -n -p \
|
|
-e "s/^(\s*tls_fingerprint:).*/\1 ${cert_fingerprint}/" \
|
|
${user_schleuder_config}
|
|
fi
|
|
|
|
|
|
# - Restart 'schleuder-api-daemon'
|
|
# -
|
|
systemctl restart schleuder-api-daemon
|
|
|
|
|
|
|
|
# ---
|
|
# - Add Postfix support
|
|
# ---
|
|
|
|
schleuder_script="$(which schleuder)"
|
|
backup_date="$(date +%Y-%m-%d-%H%M)"
|
|
schleuder_domains="il-schleuder.de cryptolists.interventionistische-linke.org"
|
|
|
|
|
|
cp -a "/etc/postfix/main.cf" "/etc/postfix/main.cf.$backup_date"
|
|
|
|
|
|
# -
|
|
# - /etc/postfix/master.cf
|
|
# -
|
|
|
|
# - Add transport options to file /etc/postfix/master.cf
|
|
# -
|
|
if ! grep -q -E "^\s*schleuder" /etc/postfix/master.cf 2>/dev/null ; then
|
|
|
|
# - Backup file /etc/postfix/master.cf
|
|
# -
|
|
cp -a "/etc/postfix/master.cf" "/etc/postfix/master.cf.$backup_date"
|
|
|
|
cat <<EOF >> /etc/postfix/master.cf
|
|
|
|
schleuder unix - n n - - pipe
|
|
flags=DRhu user=schleuder argv=${schleuder_script} work \${recipient}
|
|
EOF
|
|
|
|
fi
|
|
|
|
|
|
# -
|
|
# - virtual_schleuder_domains_file
|
|
# -
|
|
|
|
virtual_schleuder_domains_file="/etc/postfix/schleuder_domains_sqlite.cf"
|
|
if [[ -f "$virtual_schleuder_domains_file" ]] ; then
|
|
|
|
# - Backup file $virtual_schleuder_domains_file
|
|
# -
|
|
cp -a "$virtual_schleuder_domains_file" "${virtual_schleuder_domains_file}.$backup_date"
|
|
fi
|
|
|
|
# - Create new file '$virtual_schleuder_domains_file'
|
|
# -
|
|
cat << EOF > $virtual_schleuder_domains_file
|
|
dbpath = /var/lib/schleuder/db.sqlite
|
|
query = select distinct substr(email, instr(email, '@') + 1) from lists
|
|
where email like '%%@%s'
|
|
EOF
|
|
|
|
# - Add 'sqlite:$virtual_schleuder_domains_file' to virtual_mailbox_domains
|
|
# -
|
|
if ! $(grep -q -e "sqlite:$virtual_schleuder_domains_file" "/etc/postfix/main.cf") ; then
|
|
perl -i -n -p \
|
|
-e "s#^\s*(virtual_mailbox_domains\s*=.*$)#\1\n \#\# - Schleuder domains\n sqlite:${virtual_schleuder_domains_file}#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
fi
|
|
|
|
# - Delete backuped file '$virtual_schleuder_domains_file' if nothing changed
|
|
# -
|
|
if [[ -f "${virtual_schleuder_domains_file}.$backup_date" ]]; then
|
|
if $(diff "$virtual_schleuder_domains_file" "${virtual_schleuder_domains_file}.$backup_date" > /dev/null 2>&1); then
|
|
rm "${virtual_schleuder_domains_file}.$backup_date"
|
|
fi
|
|
fi
|
|
|
|
|
|
# -
|
|
# - virtual_schleuder_lists_file
|
|
# -
|
|
|
|
virtual_schleuder_lists_file="/etc/postfix/schleuder_lists_sqlite.cf"
|
|
if [[ -f "$virtual_schleuder_lists_file" ]] ; then
|
|
|
|
# - Backup file $virtual_schleuder_lists_file
|
|
# -
|
|
cp -a "$virtual_schleuder_lists_file" "${virtual_schleuder_lists_file}.$backup_date"
|
|
fi
|
|
|
|
# - Create new file '$virtual_schleuder_lists_file'
|
|
# -
|
|
cat << EOF > $virtual_schleuder_lists_file
|
|
# Use this as a table for postfix to select addresses that schleuder
|
|
# thinks belong to it. This is useful when
|
|
# smtpd_reject_unlisted_recipient = yes (which is the default for
|
|
# modern Postfix)
|
|
|
|
# For example, you might dedicate Postfix's "virtual" domains to
|
|
# schleuder with the following set of configs in main.cf:
|
|
#
|
|
# virtual_domains = lists.example.org
|
|
# virtual_transport = schleuder
|
|
# virtual_alias_maps = hash:/etc/postfix/virtual_aliases
|
|
# virtual_mailbox_maps = sqlite:/etc/postfix/schleuder_sqlite.cf
|
|
# schleuder_destination_recipient_limit = 1
|
|
|
|
# it is not recommended to use this table for more powerful
|
|
# configuration options (e.g. transport_maps) because it could give
|
|
# the schleuder user (which can write the given sqlite database) the
|
|
# power to change settings for for other mail handled by this Postfix
|
|
# instance.
|
|
|
|
dbpath = /var/lib/schleuder/db.sqlite
|
|
|
|
query = select 'present' from lists
|
|
where email = '%s'
|
|
or email = replace('%s', '-bounce@', '@')
|
|
or email = replace('%s', '-owner@', '@')
|
|
or email = replace('%s', '-request@', '@')
|
|
or email = replace('%s', '-sendkey@', '@')
|
|
EOF
|
|
|
|
# - Add 'sqlite:$virtual_schleuder_lists_file' to virtual_mailbox_maps
|
|
# -
|
|
if ! $(grep -q -e "sqlite:$virtual_schleuder_lists_file" "/etc/postfix/main.cf") ; then
|
|
perl -i -n -p \
|
|
-e "s#^\s*(virtual_mailbox_maps\s*=.*$)#\1\n \#\# - Schleuder lists\n sqlite:${virtual_schleuder_lists_file}#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
fi
|
|
|
|
# - Delete backuped file '$virtual_schleuder_lists_file' if nothing changed
|
|
# -
|
|
if [[ -f "${virtual_schleuder_lists_file}.$backup_date" ]]; then
|
|
if $(diff "$virtual_schleuder_lists_file" "${virtual_schleuder_lists_file}.$backup_date" > /dev/null 2>&1); then
|
|
rm "${virtual_schleuder_lists_file}.$backup_date"
|
|
fi
|
|
fi
|
|
|
|
|
|
# -
|
|
# - transport_schleuder_file
|
|
# -
|
|
|
|
transport_schleuder_file="/etc/postfix/transport_schleuder"
|
|
if [[ -f "$transport_schleuder_file" ]] ; then
|
|
# - Backup file '$transport_schleuder_file'
|
|
# -
|
|
cp -a "$transport_schleuder_file" "${transport_schleuder_file}.$backup_date"
|
|
fi
|
|
|
|
# - Create new file '$transport_schleuder_file'
|
|
# -
|
|
> $transport_schleuder_file
|
|
for _domain in $schleuder_domains ; do
|
|
cat << EOF >> $transport_schleuder_file
|
|
$_domain schleuder:
|
|
EOF
|
|
|
|
done
|
|
|
|
# - Create db-file '${transport_schleuder_file}.db'
|
|
# -
|
|
postmap btree:${transport_schleuder_file}
|
|
|
|
# - Add 'btree:${transport_schleuder_file}' to parameter transport_maps in /etc/postfix/main.cf
|
|
# -
|
|
if ! $(grep -q "btree:${transport_schleuder_file}" "/etc/postfix/main.cf") ; then
|
|
perl -i -n -p \
|
|
-e "s#^(transport_maps\s+=.*)#\1\n btree:${transport_schleuder_file}#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
|
|
fi
|
|
|
|
# - Add 'btree:${transport_schleuder_file}' to parameter transport_maps in /etc/postfix/main.cf
|
|
# -
|
|
if ! $(grep -q "btree:${transport_schleuder_file}" "/etc/postfix/main.cf") ; then
|
|
perl -i -n -p \
|
|
-e "s#^(transport_maps\s+=.*)#\1\n btree:${transport_schleuder_file}#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
|
|
fi
|
|
|
|
# - Delete backuped file '$transport_schleuder_file' if nothing changed
|
|
# -
|
|
if [[ -f "${transport_schleuder_file}.$backup_date" ]]; then
|
|
if $(diff "$transport_schleuder_file" "${transport_schleuder_file}.$backup_date" > /dev/null 2>&1); then
|
|
rm "${transport_schleuder_file}.$backup_date"
|
|
fi
|
|
fi
|
|
|
|
|
|
# -
|
|
# - virtual_schleuder_aliases_file
|
|
# -
|
|
|
|
virtual_schleuder_aliases_file="/etc/postfix/virtual_schleuder_aliases"
|
|
if [[ -f "$virtual_schleuder_aliases_file" ]] ; then
|
|
# - Backup file '$virtual_schleuder_aliases_file'
|
|
# -
|
|
cp -a "$virtual_schleuder_aliases_file" "${virtual_schleuder_aliases_file}.$backup_date"
|
|
fi
|
|
|
|
# - Create new file '$virtual_schleuder_aliases_file'
|
|
# -
|
|
cat << EOF > $virtual_schleuder_aliases_file
|
|
## - For schleuder domain, prevent e-mail addresse
|
|
## - postmaster@<schleuder-domain>,
|
|
## - abuse@<schleuder-domain>,
|
|
## - MAILER-DAEMON@<schleuder-domain>,
|
|
## - root@<schleuder-domain>
|
|
## - sending to schleuder list manager
|
|
## -
|
|
EOF
|
|
for _domain in $schleuder_domains ; do
|
|
cat << EOF >> $virtual_schleuder_aliases_file
|
|
|
|
postmaster@$_domain postmaster@interventionistische-linke.org
|
|
abuse@$_domain postmaster@interventionistische-linke.org
|
|
MAILER-DAEMON@$_domain root@localhost
|
|
root@$_domain root@localhost
|
|
EOF
|
|
|
|
done
|
|
|
|
# - Create db-file '${virtual_schleuder_aliases_file}.db'
|
|
# -
|
|
postmap btree:${virtual_schleuder_aliases_file}
|
|
|
|
# - Add 'btree:${virtual_schleuder_aliases_file}' to parameter virtual_alias_maps in /etc/postfix/main.cf
|
|
# -
|
|
if ! $(grep -q "btree:${virtual_schleuder_aliases_file}" "/etc/postfix/main.cf") ; then
|
|
perl -i -n -p \
|
|
-e "s#^(virtual_alias_maps\s+=.*)#\1\n \#\# - Schleuder\n btree:${virtual_schleuder_aliases_file}#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
|
|
fi
|
|
|
|
# - Delete backuped file '$virtual_schleuder_aliases_file' if nothing changed
|
|
# -
|
|
if [[ -f "${virtual_schleuder_aliases_file}.$backup_date" ]]; then
|
|
if $(diff "$virtual_schleuder_aliases_file" "${virtual_schleuder_aliases_file}.$backup_date" > /dev/null 2>&1); then
|
|
rm "${virtual_schleuder_aliases_file}.$backup_date"
|
|
fi
|
|
fi
|
|
|
|
|
|
# -
|
|
# - main.cf: new Parameter 'schleuder_destination_recipient_limit'
|
|
# -
|
|
|
|
# - Add and set parameter 'schleuder_destination_recipient_limit = 1'
|
|
# -
|
|
if ! $(grep -q -E "^\s*schleuder_destination_recipient_limit" "/etc/postfix/main.cf") ; then
|
|
perl -i -n -p \
|
|
-e "s#^\s*(virtual_transport\s*=.*$)#schleuder_destination_recipient_limit = 1\n\n\1#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
fi
|
|
|
|
|
|
# ---
|
|
|
|
if [[ -f "/etc/postfix/main.cf.$backup_date" ]]; then
|
|
if $(diff "/etc/postfix/main.cf" "/etc/postfix/main.cf.$backup_date" > /dev/null 2>&1); then
|
|
rm "/etc/postfix/main.cf.$backup_date"
|
|
fi
|
|
fi
|
|
|
|
systemctl restart postfix
|