Strona 1 z 1

Exim jak znaleźć konkretnego użytkownika?

: 27 stycznia 2016, 12:01
autor: Shiver25
Witam,

Mam na serwerze zainstalowanego exima. Mam też kilku userów którzy przez dziurawe wordpressy rozsyłają spam.
Chciałbym napisać skrypt, który będzie chociaż limitował wysyłanie maili tym co przekraczają jakąś normę powiedzmy 100 maili.
I tak mam problem z wyciągnięciem z exima który to dokładnie user.
Nie oczekuję gotowego skryptu tylko podpowiedzi. Chciałbym to zrealizować przed dodanie do pliku:

Kod: Zaznacz cały

/var/cpanel/users/username 
tego limitu. Ale to wiem jak zrobić. Wyciągnięcie userów realizuje przez:

Kod: Zaznacz cały

exim -bpr|grep "<"|awk {'print $4'}|cut -d"<" -f2|cut -d">" -f1|sort -n|uniq -c|sort -n

ale nie wiem jak odfiltrować tych najbardziej spamujących.

Dzięki za sugestie.
Pozdrawiam
p.s Każdy kiedyś zaczynał :)

: 27 stycznia 2016, 12:17
autor: mati75
Sprawdź w kolejce w eximie:

Kod: Zaznacz cały

exim -bp
Powinno zwrócić usera.

: 27 stycznia 2016, 13:14
autor: Shiver25
mati75 pisze:Sprawdź w kolejce w eximie:

Kod: Zaznacz cały

exim -bp
Powinno zwrócić usera.

No i właśnie tak robię ręcznie. Później patrze w logi apacha, który skrypt to rozsyła. Szukam tego skryptu w katalogu użytkownika i ręcznie usuwam. Też tak trza będzie robić. Ale chciałem to trochę zautomatyzować i ograniczyć danemu userowi możliwość zapychania kolejki.

Myślałem napisać coś mniej więcej takiego:

Kod: Zaznacz cały

 
zmienna1=`exim -bp | grep "<" | awk {'print $4'} | cut -d "<" -f 2 | cut -d ">" -f 1 | sort -n | uniq -c | sort -n`
zmienna2=100 #limit do porównania

if [[ $zmienna1 -eg $ zmienna2 ]]
then echo 'uzytkownik spamujący to:'

i nie wiem jak to ugryźć:/

Opcja

Kod: Zaznacz cały

exim -bp
zwraca mi całą kolejkę. No i dobrze ale jak sprawdzić który to user ma powyżej 100 maili w tej kolejce ?

: 27 stycznia 2016, 13:37
autor: mariaczi
To może tak spróbuj: http://serverfault.com/questions/636804 ... user-basis

Edycja:
W razie, gdybyś miał DA: http://help.directadmin.com/item.php?id=514

I nie zezwalaj na jakąkolwiek wysyłkę wiadomości bez autoryzacji. I w WP powinno dać się skonfigurować SMTP z autoryzacją.
Z dokumentacji: http://www.exim.org/exim-html-current/d ... #useratlim

Kto co wysłał/ile to powinieneś wydobyć z mail.info/mail.log ;)

: 28 stycznia 2016, 18:19
autor: Shiver25
Dzięki mariaczi za odpowiedzi przydatne, ale miałem wytyczne :/ co do tego skryptu. Jeśli dorobię się swojej firemki hostingowej na bank wdrożę jakąś politykę blokującą funkcję w php mail() oraz wprowadzę autoryzację SMTP.
Opcja

Kod: Zaznacz cały

[font=arial] exim -bp | grep "<" | awk {'print $5'} | cut -d "<" -f 2 | cut -d ">" -f 1 | sort -n | uniq -c | sort -n [/font]
wyświetla na serwerze

Kod: Zaznacz cały

3 (cha*)      
6 (bie*)
59 (fec*)
61 (zef*)
* w celu zamaskowania
Natomiast wyciągniecie userów powyżej 100 czy tam 10 dla których będzie to lepiej zobrazowane zrobiłem tak:

Kod: Zaznacz cały

[font=arial]exim -bp | grep "<" | awk {'print $5'} | cut -d "<" -f 2 | cut -d ">" -f 1 | sort -n | uniq -c | sort -n | awk '$1 >10'[/font]
wyświetla to:

Kod: Zaznacz cały

[font=arial]5[/font]9 (fec*)
61 (zef*)[font=arial]
[/font]
czyli tych co mają powyżej 10 maili w kolejce.

Dla potomności napisałem. Chociaż drażnią mnie takie gąsienice, ale nie wiem jak to można krócej i prościej zrobić;/

: 29 stycznia 2016, 08:51
autor: mati75
W taki sposób też możesz spróbować:

Kod: Zaznacz cały

m="/var/log/exim/mainlog.1";f="/var/log/exim/tmp.$RANDOM$RANDOM.txt";langgg=$LANG;export LANG=c;grep -e cwd=/home -e /tmp $m|grep -iv -e cron -e spam-scanned|grep -o "cwd\S*"|sort|uniq -c|sort -gr|while read i; do x=`echo $i|awk '{print $1}'`;y=`echo $i|awk '{print $2}'`;if [[ $x -gt 10 ]]; then echo "===== $x wysylek z $y =====" >>$f; u=`echo $y|awk -F "/" '{print $3}'`;grep -A10 $y $m|grep " U=$u "|head -n20|grep -o " T=.*$" >> $f;echo "==============" >> $f;fi;done;export LANG=$langgg;echo "wynik zapisany do pliku $f";

: 03 lutego 2016, 09:59
autor: Shiver25
mati75 pisze:W taki sposób też możesz spróbować:

Kod: Zaznacz cały

m="/var/log/exim/mainlog.1";f="/var/log/exim/tmp.$RANDOM$RANDOM.txt";langgg=$LANG;export LANG=c;grep -e cwd=/home -e /tmp $m|grep -iv -e cron -e spam-scanned|grep -o "cwd\S*"|sort|uniq -c|sort -gr|while read i; do x=`echo $i|awk '{print $1}'`;y=`echo $i|awk '{print $2}'`;if [[ $x -gt 10 ]]; then echo "===== $x wysylek z $y =====" >>$f; u=`echo $y|awk -F "/" '{print $3}'`;grep -A10 $y $m|grep " U=$u "|head -n20|grep -o " T=.*$" >> $f;echo "==============" >> $f;fi;done;export LANG=$langgg;echo "wynik zapisany do pliku $f";
Dzięki za skrypt. Jeszcze go nie przetestowałem bo nie rozumiem wszystkiego co ten skrypt robi:/
np nie rozumiem linijki

Kod: Zaznacz cały

;f="/var/log/exim/tmp.$RANDOM$RANDOM.txt"
reszty się mniej więcej domyślam. Bo jeśli chciałbym go wykorzystać to najpierw muszę wiedzieć dlaczego tak a nie inaczej :)

: 03 lutego 2016, 13:15
autor: mati75
Ta linia tworzy plik tymczasowy do którego zrzuca dane.

: 03 lutego 2016, 13:37
autor: dedito
Mi to wygląda na deklarację zmiennej, ścieżki do pliku z logami. Zrzut do pliku jest w dalszej części.
Mnie zastanawia po co te $RANDOM$RANDOM w nazwie.