first, and hopefully last commit
This commit is contained in:
3
script/actions.conf
Normal file
3
script/actions.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
reject = 100;
|
||||
add_header = 5;
|
||||
greylist = 100;
|
103
script/bullmail.sh
Executable file
103
script/bullmail.sh
Executable file
@@ -0,0 +1,103 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Input your settings here
|
||||
#
|
||||
tls_cert="/etc/apache2/ssl/yourdomain.com.pem"
|
||||
tls_key="/etc/apache2/ssl/yourdomain.com.key"
|
||||
hostname="mail.yourdomain.com"
|
||||
domain="yourdomain.com"
|
||||
|
||||
|
||||
#
|
||||
# Script
|
||||
#
|
||||
echo "Welcome to bullmail"
|
||||
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Run this shit as root. Exiting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
packages="dovecot-core dovecot-imapd postfix rspamd postfix dovecot-lmtpd dovecot-sieve dovecot-managesieved postfix postfix-pcre"
|
||||
|
||||
echo "=== Cleaning up garbage... ==="
|
||||
rm -rf /etc/rspamd/
|
||||
rm -rf /etc/dovecot/
|
||||
apt purge --autoremove $packages -y
|
||||
|
||||
echo "=== Installing packages ==="
|
||||
apt install $packages -y
|
||||
|
||||
echo "=== Configuring rspamd ==="
|
||||
|
||||
echo "Generating DKIM keys..."
|
||||
mkdir -p /var/lib/rspamd/dkim
|
||||
chown _rspamd:_rspamd /var/lib/rspamd/dkim
|
||||
chmod 750 /var/lib/rspamd/dkim
|
||||
|
||||
dkim=$(rspamadm dkim_keygen -d $domain -s mail)
|
||||
private_key=$(echo "$dkim" | awk 'BEGIN {RS="-----END PRIVATE KEY-----"} NR==1 {print $0 RS}' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||
dns_record=$(echo "$dkim" | awk 'BEGIN {RS="-----END PRIVATE KEY-----"} NR==2 {print $0}' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||
|
||||
touch /var/lib/rspamd/dkim/$domain.mail.key
|
||||
echo "$private_key" > "/var/lib/rspamd/dkim/$domain.mail.key"
|
||||
|
||||
rspamd_dkim=$(< "$PWD/dkim_signing.conf")
|
||||
rspamd_dkim="${rspamd_dkim//__domain__/$domain}"
|
||||
echo "$rspamd_dkim" > "/etc/rspamd/local.d/dkim_signing.conf"
|
||||
chown _rspamd:_rspamd /var/lib/rspamd/dkim/$domain.mail.key
|
||||
chmod 644 /var/lib/rspamd/dkim/$domain.mail.key
|
||||
|
||||
cp $PWD/milter_headers.conf /etc/rspamd/local.d/milter_headers.conf
|
||||
cp $PWD/actions.conf /etc/rspamd/local.d/actions.conf
|
||||
touch /var/log/rspamd/rspamd.log
|
||||
|
||||
chown _rspamd:_rspamd -R /etc/rspamd/local.d
|
||||
chown _rspamd:_rspamd /var/log/rspamd/rspamd.log
|
||||
chmod 744 /etc/rspamd/local.d
|
||||
chmod 644 /etc/rspamd/local.d/*
|
||||
chmod 644 /var/log/rspamd/rspamd.log
|
||||
|
||||
echo "Restarting rspamd..."
|
||||
service rspamd restart
|
||||
|
||||
echo "=== Configuring Postfix ==="
|
||||
|
||||
postfix_conf=$(< "$PWD/main.cf")
|
||||
postfix_conf="${postfix_conf//KEY.pem/$tls_cert}"
|
||||
postfix_conf="${postfix_conf//KEY.key/$tls_key}"
|
||||
postfix_conf="${postfix_conf//__domain__/$domain}"
|
||||
postfix_conf="${postfix_conf//__hostname__/$hostname}"
|
||||
echo "$postfix_conf" > "/etc/postfix/main.cf"
|
||||
|
||||
escaped_domain="${hostname//./\\.}"
|
||||
header_checks=$(< "$PWD/header_checks")
|
||||
header_checks="${header_checks//__hostname__/$escaped_domain}"
|
||||
touch /etc/postfix/header_checks
|
||||
echo "$header_checks" > "/etc/postfix/header_checks"
|
||||
|
||||
cp $PWD/master.cf /etc/postfix/master.cf
|
||||
|
||||
echo "Restarting Postfix..."
|
||||
service postfix restart
|
||||
|
||||
echo "=== Configuring Dovecot ==="
|
||||
|
||||
dovecot_conf=$(< "$PWD/dovecot.conf")
|
||||
dovecot_conf="${dovecot_conf//KEY.pem/$tls_cert}"
|
||||
dovecot_conf="${dovecot_conf//KEY.key/$tls_key}"
|
||||
dovecot_conf="${dovecot_conf//__domain__/$domain}"
|
||||
echo "$dovecot_conf" > "/etc/dovecot/dovecot.conf"
|
||||
|
||||
mkdir -p /etc/dovecot/sieve
|
||||
cp $PWD/spam2junk.sieve /etc/dovecot/sieve
|
||||
sievec /etc/dovecot/sieve/spam2junk.sieve
|
||||
chown -R vmail:vmail /etc/dovecot/sieve
|
||||
|
||||
echo "Restarting Dovecot..."
|
||||
service dovecot restart
|
||||
|
||||
echo "Done. Please set this TXT record on your $domain domain."
|
||||
echo $dns_record
|
||||
echo "Bye!"
|
11
script/dkim_signing.conf
Normal file
11
script/dkim_signing.conf
Normal file
@@ -0,0 +1,11 @@
|
||||
enabled = true;
|
||||
sign_authenticated = true;
|
||||
allow_hdrfrom_mismatch = false;
|
||||
allow_username_mismatch = true;
|
||||
|
||||
domain {
|
||||
__domain__ {
|
||||
selector = "mail";
|
||||
path = "/var/lib/rspamd/dkim/__domain__.mail.key";
|
||||
}
|
||||
}
|
99
script/dovecot.conf
Normal file
99
script/dovecot.conf
Normal file
@@ -0,0 +1,99 @@
|
||||
#logging
|
||||
#auth_verbose = yes
|
||||
#auth_debug = yes
|
||||
#mail_debug = yes
|
||||
#log_path = /var/log/dovecot.log
|
||||
|
||||
disable_plaintext_auth = no
|
||||
auth_mechanisms = plain login
|
||||
auth_username_format = %Ln
|
||||
|
||||
ssl = yes
|
||||
ssl_cert = <KEY.pem
|
||||
ssl_key = <KEY.key
|
||||
ssl_client_ca_dir = /etc/ssl/certs
|
||||
ssl_dh = </usr/share/dovecot/dh.pem
|
||||
ssl_min_protocol = TLSv1.1
|
||||
|
||||
service imap-login {
|
||||
inet_listener imap {
|
||||
port = 143
|
||||
}
|
||||
inet_listener imap_alt {
|
||||
port = 1143
|
||||
}
|
||||
inet_listener imaps {
|
||||
port = 993
|
||||
ssl = yes
|
||||
}
|
||||
inet_listener imaps_alt {
|
||||
port = 1993
|
||||
ssl = yes
|
||||
}
|
||||
}
|
||||
|
||||
service auth {
|
||||
unix_listener /var/spool/postfix/private/auth {
|
||||
mode = 0660
|
||||
user = postfix
|
||||
group = postfix
|
||||
}
|
||||
}
|
||||
|
||||
mail_location = maildir:~/Maildir
|
||||
mail_privileged_group = mail
|
||||
managesieve_notify_capability = mailto
|
||||
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext
|
||||
namespace inbox {
|
||||
inbox = yes
|
||||
location = maildir:~/Maildir
|
||||
prefix =
|
||||
|
||||
mailbox Drafts {
|
||||
special_use = \Drafts
|
||||
auto = subscribe
|
||||
}
|
||||
mailbox Junk {
|
||||
special_use = \Junk
|
||||
auto = subscribe
|
||||
}
|
||||
mailbox Sent {
|
||||
special_use = \Sent
|
||||
auto = subscribe
|
||||
}
|
||||
mailbox Trash {
|
||||
special_use = \Trash
|
||||
auto = subscribe
|
||||
}
|
||||
}
|
||||
|
||||
passdb {
|
||||
driver = pam
|
||||
}
|
||||
userdb {
|
||||
driver = passwd
|
||||
}
|
||||
|
||||
|
||||
plugin {
|
||||
sieve_global_path = /etc/dovecot/sieve/spam2junk.sieve
|
||||
#sieve_global_dir = /etc/dovecot/sieve/
|
||||
#sieve = file:~/sieve;active=~/.dovecot.sieve
|
||||
}
|
||||
protocol lmtp {
|
||||
mail_plugins = $mail_plugins sieve
|
||||
postmaster_address = postmaster@__domain__
|
||||
mail_fsync = optimized
|
||||
}
|
||||
protocol lda {
|
||||
mail_plugins = $mail_plugins sieve
|
||||
}
|
||||
service lmtp {
|
||||
unix_listener /var/spool/postfix/private/dovecot-lmtp {
|
||||
group = postfix
|
||||
mode = 0600
|
||||
user = postfix
|
||||
}
|
||||
}
|
||||
|
||||
protocols = imap lmtp
|
8
script/header_checks
Normal file
8
script/header_checks
Normal file
@@ -0,0 +1,8 @@
|
||||
/^\s*Received: from __hostname__/ OK
|
||||
/^\s*Received:/ IGNORE
|
||||
/^From:/ PREPEND User-Agent: Mozilla Thunderbird
|
||||
/^\s*X-Enigmail/ IGNORE
|
||||
/^\s*X-Mailer/ IGNORE
|
||||
/^\s*X-Originating-IP/ IGNORE
|
||||
/^\s*X-Forward/ IGNORE
|
||||
/^\s*User-Agent/ IGNORE
|
51
script/main.cf
Normal file
51
script/main.cf
Normal file
@@ -0,0 +1,51 @@
|
||||
# logging
|
||||
maillog_file = /var/log/mail.log
|
||||
|
||||
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
|
||||
biff = no
|
||||
append_dot_mydomain = no
|
||||
readme_directory = no
|
||||
compatibility_level = 3.6
|
||||
|
||||
smtpd_tls_cert_file = KEY.pem
|
||||
smtpd_tls_key_file = KEY.key
|
||||
smtpd_tls_security_level = may
|
||||
|
||||
smtpd_milters = inet:127.0.0.1:11332
|
||||
non_smtpd_milters = inet:127.0.0.1:11332
|
||||
milter_default_action = accept
|
||||
milter_protocol = 6
|
||||
milter_mail_macros = i {auth_authen} {client_addr}
|
||||
smtp_header_checks = pcre:/etc/postfix/header_checks
|
||||
|
||||
smtpd_sasl_type = dovecot
|
||||
smtpd_sasl_path = private/auth
|
||||
smtpd_sasl_auth_enable = yes
|
||||
smtpd_tls_auth_only = no
|
||||
smtpd_sasl_security_options = noanonymous
|
||||
smtpd_sasl_local_domain = __hostname__
|
||||
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
|
||||
|
||||
virtual_transport = dovecot
|
||||
local_transport = lmtp:unix:private/dovecot-lmtp
|
||||
dovecot_destination_recipient_limit = 1
|
||||
|
||||
smtp_tls_CApath=/etc/ssl/certs
|
||||
smtp_tls_security_level=may
|
||||
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
||||
|
||||
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
|
||||
myhostname = __hostname__
|
||||
mydomain = __domain__
|
||||
alias_maps = hash:/etc/aliases
|
||||
alias_database = hash:/etc/aliases
|
||||
myorigin = /etc/mailname
|
||||
mydestination = __hostname__, __domain__, localhost, localhost.localdomain, localhost
|
||||
relayhost =
|
||||
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
|
||||
mailbox_size_limit = 0
|
||||
recipient_delimiter = +
|
||||
inet_interfaces = all
|
||||
inet_protocols = all
|
||||
|
||||
home_mailbox = Maildir/
|
46
script/master.cf
Normal file
46
script/master.cf
Normal file
@@ -0,0 +1,46 @@
|
||||
smtp inet n - y - - smtpd
|
||||
-o smtpd_milters=inet:127.0.0.1:11332
|
||||
2525 inet n - y - - smtpd
|
||||
-o smtpd_milters=inet:127.0.0.1:11332
|
||||
pickup unix n - y 60 1 pickup
|
||||
cleanup unix n - y - 0 cleanup
|
||||
qmgr unix n - n 300 1 qmgr
|
||||
tlsmgr unix - - y 1000? 1 tlsmgr
|
||||
rewrite unix - - y - - trivial-rewrite
|
||||
bounce unix - - y - 0 bounce
|
||||
defer unix - - y - 0 bounce
|
||||
trace unix - - y - 0 bounce
|
||||
verify unix - - y - 1 verify
|
||||
flush unix n - y 1000? 0 flush
|
||||
proxymap unix - - n - - proxymap
|
||||
proxywrite unix - - n - 1 proxymap
|
||||
smtp unix - - y - - smtp
|
||||
relay unix - - y - - smtp
|
||||
-o syslog_name=postfix/$service_name
|
||||
showq unix n - y - - showq
|
||||
error unix - - y - - error
|
||||
retry unix - - y - - error
|
||||
discard unix - - y - - discard
|
||||
local unix - n n - - local
|
||||
virtual unix - n n - - virtual
|
||||
lmtp unix - - y - - lmtp
|
||||
anvil unix - - y - 1 anvil
|
||||
scache unix - - y - 1 scache
|
||||
postlog unix-dgram n - n - 1 postlogd
|
||||
|
||||
maildrop unix - n n - - pipe
|
||||
flags=DRXhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
|
||||
|
||||
uucp unix - n n - - pipe
|
||||
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
|
||||
|
||||
ifmail unix - n n - - pipe
|
||||
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
|
||||
bsmtp unix - n n - - pipe
|
||||
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
|
||||
scalemail-backend unix - n n - 2 pipe
|
||||
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
|
||||
mailman unix - n n - - pipe
|
||||
flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
|
||||
dovecot unix - n n - - pipe
|
||||
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}
|
7
script/milter_headers.conf
Normal file
7
script/milter_headers.conf
Normal file
@@ -0,0 +1,7 @@
|
||||
enabled = true;
|
||||
|
||||
# avoid x-spam headers on sent emails
|
||||
use_authenticated = false;
|
||||
|
||||
# add x-spam headers
|
||||
extended_spam_headers = true;
|
6
script/spam2junk.sieve
Normal file
6
script/spam2junk.sieve
Normal file
@@ -0,0 +1,6 @@
|
||||
require ["fileinto"];
|
||||
|
||||
if header :contains "X-Spam" "Yes" {
|
||||
fileinto "Junk";
|
||||
stop;
|
||||
}
|
Reference in New Issue
Block a user