Commit dead16cf authored by Vitaly Lipatov's avatar Vitaly Lipatov

add mail scripts

parent d11eaeca
#!/bin/sh
IMAPDIR=/var/spool/imap/domain
BACKUPBASEDIR=/var/ftp/pvt/Etersoft/ARCHIVE/mails
fletter()
{
echo "$1" | cut -c1
}
DOMAIN=$1
USER=$2
BOX=$3
SPAMDIR=$IMAPDIR/$(fletter $DOMAIN)/$DOMAIN/$(fletter $USER)/user/$USER$BOX
test -d "$SPAMDIR" || exit
SPAMBOX="user/$USER$BOX@$DOMAIN"
BACKUPDIR=$BACKUPBASEDIR/$DOMAIN/$USER
mkdir -p $BACKUPDIR || exit
# archiving
ARCNAME="$BACKUPDIR/$(date -R).tar.gz"
erc create "$ARCNAME" $SPAMDIR || exit
# remove mails
find "$SPAMDIR" -maxdepth 1 -type f -name "*." -delete
rm -f $SPAMDIR/cyrus.*
# reconstruct mail
/usr/lib/cyrus/reconstruct "$SPAMBOX"
/usr/lib/cyrus/quota -f -d $DOMAIN user/$USER
#!/bin/sh
exit
BACKUPBASEDIR=/var/ftp/garbage/spam-imap
SPAMDIR=/var/spool/imap/domain/o/office.etersoft.ru/s/user/spam
BACKUPDIR=$BACKUPBASEDIR/spam
mkdir -p $BACKUPDIR || exit
# archiving
ARCNAME="$BACKUPDIR/$(date -R).tar.gz"
erc create "$ARCNAME" $SPAMDIR || exit
# remove mails
find $SPAMDIR -maxdepth 1 -type f -name "*." -delete
rm -f $SPAMDIR/cyrus.*
# reconstruct mail
/usr/lib/cyrus/reconstruct user/spam@office.etersoft.ru
#!/bin/sh -x
# Нужно сделать копию файлов, и сжать её. Каждый архив откладывать под его датой.
IMAPDIR=/var/spool/imap/domain
BACKUPBASEDIR=/var/ftp/garbage/spam-imap
archive_spamdir()
{
local SPAMDIR="$1"
local SPAMBOX="$2"
local BACKUPDIR="$3"
test -d "$SPAMDIR" || return
local SIZE=$(cat $SPAMDIR/cyrus.cache | wc -c)
# skip empty spam dir
[ "$SIZE" = 4 ] && return
mkdir -p "$BACKUPDIR"
# TODO: use eterremove
# Нужно удалять только старый spam!
#etertimemachine update $SPAMDIR $BACKUPDIR
#etertimemachine rotate $BACKUPDIR
rm -rf $SPAMDIR.copy
cp -al $SPAMDIR $SPAMDIR.copy
rm -f $SPAMDIR/*. $SPAMDIR/cyrus.*
/usr/lib/cyrus/reconstruct "$SPAMBOX"
erc create "$BACKUPDIR/$(date -R).tar.gz" $SPAMDIR.copy
rm -rf $SPAMDIR.copy
}
fletter()
{
echo "$1" | cut -c1
}
archive_spam()
{
local DOMAIN=$1
local USER=$2
local BOX=$3
local SPAMDIR=$IMAPDIR/$(fletter $DOMAIN)/$DOMAIN/$(fletter $USER)/user/$USER$BOX
local SPAMBOX="user/$USER$BOX@$DOMAIN"
local BACKUPDIR=$BACKUPBASEDIR/$DOMAIN/$USER
archive_spamdir "$SPAMDIR" "$SPAMBOX" "$BACKUPDIR"
}
remove_from_domain()
{
local DOMAIN="$1"
local i
echo
echo $DOMAIN
for i in $IMAPDIR/$(fletter $DOMAIN)/$DOMAIN/?/user/* ; do
USER=$(basename $i)
BOX=/spam
test -f "$i$BOX/cyrus.index" || continue
archive_spam $DOMAIN $USER $BOX
done
# recalc quotas
/usr/lib/cyrus/quota -f -d $DOMAIN || echo "You need fix this error!"
}
# Uncomment after improve old spam removing
#for d in $IMAPDIR/?/* ; do
# remove_from_domain $(basename $d)
#done
# main spam dir
DOMAIN=office.etersoft.ru
#user/spam@$DOMAIN
archive_spam $DOMAIN spam ""
# recalc quotas
/usr/lib/cyrus/quota -f -d $DOMAIN user/spam || echo "You need fix this error!"
#!/usr/bin/perl
use IMAP::Admin;
if (scalar(@ARGV) < 1) {
print "usage: $0 mailbox [mailbox ...]"
}
$imap = IMAP::Admin->new('Server' => 'localhost',
'Login' => 'cyrus',
'Password' => 'Wetcyr23');
$adminlogin = "cyrus";
#$imap = IMAP::Admin->new('Server' => 'server',
# 'Login' => 'admin@office.etersoft.ru',
# 'Password' => 'Wetcyr23');
#$adminlogin = "admin\@office.etersoft.ru";
foreach $mailbox (@ARGV) {
$mailbox="user/$mailbox";
print "$mailbox\n";
$err = $imap->set_acl($mailbox, $adminlogin, "lrswipdca");
if ($err != 0) {
print "Error occurred SAM for $mailbox\n\t$imap->{'Error'}\n";
next;
}
$err = $imap->delete($mailbox);
if ($err != 0) {
print "Error occurred destroying $mailbox\n\t$imap->{'Error'}\n";
}
@list = $imap->list($mailbox);
print @list;
}
#!/usr/bin/perl
use IMAP::Admin;
$imap = IMAP::Admin->new('Server' => 'server',
'Login' => 'cyrus',
'Password' => 'Wetcyr23',
'Port' => 143, # (143 is default),
'Separator' => ".", # default is a period
'CRAM' => 0, # off by default, can be 0,1,2
'SSL' => 1, # off by default
# and any of the SSL_ options from IO::Socket::SSL
);
$err = $imap->create("user.bob");
if ($err != 0) {
print "$imap->{'Error'}\n";
}
if ($err != 0) {
print $imap->error;
}
$err = $imap->create("user.bob", "green");
$err = $imap->delete("user.bob");
$err = $imap->h_delete("user.bob");
$err = $imap->subscribe("user.bob");
$err = $imap->unsubscribe("user.bob");
$err = $imap->rename("bboard", "newbboard");
@quota = $imap->get_quotaroot("user.bob");
@quota = $imap->get_quota("user.bob");
$err = $imap->set_quota("user.bob", 10000);
@acl = $imap->get_acl("user.bob");
%acl = $imap->get_acl("user.bob");
$err = $imap->set_acl("user.bob", "admin", "lrswipdca", "joe", "lrs");
$err = $imap->delete_acl("user.bob", "joe", "admin");
@list = $imap->list("user.bob");
@list = $imap->list("user.b*");
print $imap->{'Capability'}; # this contains the Capabilities reply from the IMAP server
$imap->close; # close open imap connection
#!/bin/sh
cd $(dirname $0)
DB_USER=mail
DB_PASS=VaQLNsXnyp3KVK4e
DB_HOST=mysql.auth
DB=mail
IMAPDIR=/var/spool/imap/domain
mysql_query()
{
echo "$@" |
mysql -s -N --default-character-set=utf8 --user=$DB_USER --password=$DB_PASS --host $DB_HOST $DB
}
check_user()
{
# filesystem name some^last -> some.last in the base
local USER=$(echo "$1" | sed -e "s|\^|.|g")
local RES=$(mysql_query "SELECT alias FROM virtual WHERE alias = '$USER@$DOMAIN' LIMIT 1")
test -n "$RES" #&& echo $RES
}
#check_user info && echo OK
#for i in $(mysql_query "SELECT alias FROM virtual WHERE alias LIKE '%@$DOMAIN'") ; do
# ULOGIN=$(echo $i | cut -d@ -f1)
# echo $ULOGIN
#done
remove_user()
{
echo "Remove user $@" | tee -a $0.log
./autocyradm-delete.pl $@
}
remove_from_domain()
{
#DOMAIN=office.etersoft.ru
FLETTER=$(echo $DOMAIN | cut -c1)
ULOGIN=
for i in $IMAPDIR/$FLETTER/$DOMAIN/?/user/* ; do
ULOGIN=$(basename $i)
#test "$i" -nt "$i/cyrus.index" && echo OK
DTIME=$(stat -c "%Z" $i)
FTIME=$(stat -c "%Z" $i/cyrus.index)
#test $DTIME = $FTIME && echo OK
echo "$ULOGIN - $DTIME - $FTIME - $i"
check_user $ULOGIN && continue
remove_user $ULOGIN@$DOMAIN
done
# no users!
[ "$ULOGIN" = "*" ] && eterremove remove --days 10000 --notest empty $IMAPDIR/$FLETTER/$DOMAIN
}
for i in $IMAPDIR/?/* ; do
DOMAIN=$(basename $i)
echo
echo $DOMAIN
remove_from_domain
done
#!/bin/sh
#IMAPDIR=/var/spool/imap/domain
IMAPDIR=/var/lib/imap/sieve
find $IMAPDIR -type d -print0 | xargs -0 -n 10 rmdir -v
#!/bin/sh -x
# Нужно сделать копию файлов, и сжать её. Каждый архив откладывать под его датой.
SPAMDIR=/var/spool/imap/domain/o/office.etersoft.ru/s/user/spam
BACKUPDIR=/var/ftp/garbage/spam-imap
mkdir -p $BACKUPDIR
# TODO: use eterbackup
#etertimemachine update $SPAMDIR $BACKUPDIR
#etertimemachine rotate $BACKUPDIR
rm -rf $SPAMDIR.copy
cp -al $SPAMDIR $SPAMDIR.copy
rm -f $SPAMDIR/*. $SPAMDIR/cyrus.*
/usr/lib/cyrus/reconstruct user/spam@office.etersoft.ru
erc create "$BACKUPDIR/$(date -R).tar.gz" $SPAMDIR.copy
rm -rf $SPAMDIR.copy
......@@ -3,11 +3,24 @@
# Oct 28 15:34:52 from unknown[123.21.162.223]: 450 4.7.1 Client host rejected: cannot find your hostname, [123.21.162.223]; from=<suhanov5858@mail.ru> to=<lav@etersoft.ru> proto=ESMTP helo=<[123.21.162.223]>
# Oct 28 12:47:46 server postfix/smtpd[7013]: NOQUEUE: reject: RCPT from unknown[2.50.178.28]: 450 4.7.1 Client host rejected: cannot find your hostname, [2.50.178.28]; from=<mexicoax7@list.ru> to=<lav@etersoft.ru> proto=ESMTP helo=<[2.50.178.129]>
# Oct 28 17:37:51 server postfix/smtpd[30552]: NOQUEUE: reject: RCPT from unknown[46.151.52.121]: 450 4.7.1 Client host rejected: cannot find your hostname, [46.151.52.121]; from=<ixyt.map@mail.ru> to=<200605212330.18561.lav@etersoft.ru> proto=ESMTP helo=<wiki-mail-eqiad.wikimedia.org>'
# Oct 28 16:38:26 server postfix/smtpd[25474]: NOQUEUE: reject: RCPT from triband-mum-120.61.169.161.mtnl.net.in[120.61.169.161]: 450 4.2.0 <lav@etersoft.ru>: Recipient address rejected: Please, come back in 180 seconds; from=<stirseewz00@stjoelive.com> to=<lav@etersoft.ru> proto=ESMTP helo=<triband-mum-120.61.169.161.mtnl.net.in>
# Oct 28 16:38:26 server postfix/smtpd[25474]: NOQUEUE: reject: RCPT from triband-mum-120.61.169.161.mtnl.net.in[120.61.169.161]: \
# 450 4.2.0 <lav@etersoft.ru>: Recipient address rejected: Please, come back in 180 seconds; from=<stirseewz00@stjoelive.com> to=<lav@etersoft.ru> proto=ESMTP helo=<triband-mum-120.61.169.161.mtnl.net.in>
space_string()
{
echo "$@" | sed -e "s|.| |g"
}
print_ip()
{
printf "%3s.%3s.%3s.%3s" $(echo "$@" | sed -e "s|\.| |g")
}
OLDIP=
IPMASK="[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"
#./byregexp.sh "$@" "" "rejected" | \
echo "Oct 28 16:38:26 server postfix/smtpd[25474]: NOQUEUE: reject: RCPT from triband-mum-120.61.169.161.mtnl.net.in[120.61.169.161]: 450 4.2.0 <lav@etersoft.ru>: Recipient address rejected: Please, come back in 180 seconds; from=<stirseewz00@stjoelive.com> to=<lav@etersoft.ru> proto=ESMTP helo=<triband-mum-120.61.169.161.mtnl.net.in>" | \
sed -e "s|\(.* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\) .*RCPT from \(.*\)\[\($IPMASK\)\]: \([0-9][0-9][0-9]\) \(.*\), \[$IPMASK\]; from=<\(.*@.*\)> to=<\(.*@.*\)> proto=ESMTP helo=<\(.*\)>|DATE='\1'; DOMAIN='\2'; IP='\3'; ERROR='\4'; ERRORSTRING='\4 \5'; EMAIL='\6'; EMAILTO='\7'; HELO='\8'|g" | \
./byregexp.sh "$@" "" "rejected" | \
#echo "Oct 28 16:38:26 server postfix/smtpd[25474]: NOQUEUE: reject: RCPT from triband-mum-120.61.169.161.mtnl.net.in[120.61.169.161]: 450 4.2.0 <lav@etersoft.ru>: Recipient address rejected: Please, come back in 180 seconds; from=<stirseewz00@stjoelive.com> to=<lav@etersoft.ru> proto=ESMTP helo=<triband-mum-120.61.169.161.mtnl.net.in>" | \
sed -e "s|\(.* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\) .*RCPT from \(.*\)\[\($IPMASK\)\]: \([0-9][0-9][0-9]\) \(.*\); from=<\(.*@.*\)> to=<\(.*@.*\)> proto=E*SMTP helo=<\(.*\)>|DATE='\1'; DOMAIN='\2'; IP='\3'; ERROR='\4'; ERRORSTRING='\5'; EMAIL='\6'; EMAILTO='\7'; HELO='\8'|g" | \
while read F STR ; do
# DATE DOMAIN IP ERROR ERRORSTRING EMAIL HELO
if ! echo "$F" | grep -q DATE ; then
......@@ -16,7 +29,18 @@ echo "Oct 28 16:38:26 server postfix/smtpd[25474]: NOQUEUE: reject: RCPT from tr
continue
fi
eval "$F $STR"
echo "PARSED: $DATE $DOMAIN $IP $ERROR $ERRORSTRING $EMAIL $EMAILTO $HELO"
#if [ "$OLDIP" = "$IP" ] ; then
# IP=$(space_string "$IP")
#fi
#echo "PARSED: $DATE $DOMAIN $IP $ERROR $ERRORSTRING $EMAIL $EMAILTO $HELO"
echo "$ERROR $(print_ip $IP) $EMAIL $DOMAIN helo=$HELO $ERRORSTRING"
OLDIP="$IP"
#exit
EMAILDOMAIN=$(echo "$EMAIL" | sed -e "s|.*\@||g")
if echo "$DOMAIN" | grep -q "$EMAILDOMAIN" ; then
echo -e "\tHELO like EMAIL: $EMAIL"
fi
done
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment