-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathspam_control.sh
105 lines (72 loc) · 3.56 KB
/
spam_control.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/bash
lower_trigger="10"
higher_trigger="20"
suspected_spam_trigger="100"
from="[email protected]"
target="[email protected]"
smtp="smtp.gmail.com:587"
tls="yes"
pass="[email protected]"
subject="Your subject ex:You have got enemies"
internaldomain="@internaldomain.com"
externaldomains=("@externaldomain.com" "@example.com")
# ============================================================= UNTUK EMAIL YANG ASALNYA DARI DALAM ==================================================
#Isi dari statistik zimbra
all_count=$(/opt/zimbra/libexec/zmqstat)
#Menghitung e-mail yang tertunda dan aktif di dalam queue
deferred_count=$(/opt/zimbra/libexec/zmqstat | grep "deferred" | sed 's/deferred=//g')
active_count=$(/opt/zimbra/libexec/zmqstat | grep "active" | sed 's/active=//g')
#Jika jumlah e-mail yang tertunda atau aktif di dalam queue > lower_trigger e-mail maka ...
if [ $deferred_count -gt $lower_trigger ] || [ $active_count -gt $lower_trigger ]
then
#Kirimkan e-mail berisi statistik zimbra (harus menginstall aplikasi sendemail, bukan sendmail)
sendEmail -f "$from" -t "$target" -s "$smtp" -o tls="$tls" -xu "$from" -xp "$pass" -u "$subject" -m "$all_count"
#Jika jumlah e-mail yang tertunda atau aktif di dalam queue > higher_trigger e-mail maka ...
if [ $deferred_count -gt $higher_trigger ] || [ $active_count -gt $higher_trigger ]
then
#Pendataan alamat e-mail yang dianggap nyepam (dari dalam)
suspected_email_from_internal_domain=""
for i in {1..16}
do
if [ ! -z "$(/opt/zimbra/common/sbin/postqueue -p | grep "$internaldomain" | cut -d " " -f$i | grep "$internaldomain" | sort -u)" ]
then
suspected_email_from_internal_domain=$(/opt/zimbra/common/sbin/postqueue -p | grep "$internaldomain" | cut -d " " -f$i | grep "$internaldomain" | sort -u)
#Untuk setiap e-mail yang dianggap nyepam (dari dalam)
for j in $suspected_email_from_internal_domain
do
#Dihitung jumlah e-mailnya
suspected_spam_count=$(/opt/zimbra/common/sbin/postqueue -p | grep "$j" | wc -l)
#Jika jumlah email dari alamat yang dianggap nyepam > suspected_spam_trigger maka ...
if [ $suspected_spam_count -gt $suspected_spam_trigger ]
then
#Buat password baru
new_password=$(od -vAn -N4 -tu4 < /dev/urandom)
#Ganti password dengan password yang baru
/opt/zimbra/bin/zmprov sp "$j" "$new_password"
#Tahan semua e-email dari alamat e-mail yang ada di dalam array
/opt/zimbra/common/sbin/postqueue -p | grep "$j" | cut -d " " -f1 | tr -d '!*' | /opt/zimbra/common/sbin/postsuper -h -
fi
done
fi
done
fi
fi
# ============================================================= UNTUK EMAIL YANG ASALNYA DARI LUAR ==================================================
#Pendataan alamat e-mail yang dianggap nyepam (dari luar)
for externaldomain in ${externaldomains[*]}
do
suspected_email_from_external_domain=""
for i in {1..16}
do
if [ ! -z "$(/opt/zimbra/common/sbin/postqueue -p | grep "$externaldomain" | cut -d " " -f$i | grep "$externaldomain" | sort -u)" ]
then
suspected_email_from_external_domain=$(/opt/zimbra/common/sbin/postqueue -p | grep "$externaldomain" | cut -d " " -f$i | grep "$externaldomain" | sort -u)
#Untuk setiap e-mail yang dianggap nyepam (dari luar)
for j in $suspected_email_from_external_domain
do
#Tahan semua e-email dari alamat e-mail yang ada di dalam array
/opt/zimbra/common/sbin/postqueue -p | grep "$j" | cut -d " " -f1 | tr -d '!*' | /opt/zimbra/common/sbin/postsuper -h -
done
fi
done
done