Exim jak znaleź

Konfiguracja serwerów, usług, itp.
Awatar użytkownika
Shiver25
Posty: 89
Rejestracja: 19 stycznia 2009, 22:29
Lokalizacja: z piekła rodem ]:-)

Exim jak znaleźć konkretnego użytkownika?

Post 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ł :)
Awatar użytkownika
mati75
Junior Member
Posty: 623
Rejestracja: 30 lipca 2009, 11:19
Lokalizacja: default city

Post autor: mati75 »

Sprawdź w kolejce w eximie:

Kod: Zaznacz cały

exim -bp
Powinno zwrócić usera.
Awatar użytkownika
Shiver25
Posty: 89
Rejestracja: 19 stycznia 2009, 22:29
Lokalizacja: z piekła rodem ]:-)

Post 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 ?
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post 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 ;)
Awatar użytkownika
Shiver25
Posty: 89
Rejestracja: 19 stycznia 2009, 22:29
Lokalizacja: z piekła rodem ]:-)

Post 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ć;/
Awatar użytkownika
mati75
Junior Member
Posty: 623
Rejestracja: 30 lipca 2009, 11:19
Lokalizacja: default city

Post 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";
Awatar użytkownika
Shiver25
Posty: 89
Rejestracja: 19 stycznia 2009, 22:29
Lokalizacja: z piekła rodem ]:-)

Post 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 :)
Awatar użytkownika
mati75
Junior Member
Posty: 623
Rejestracja: 30 lipca 2009, 11:19
Lokalizacja: default city

Post autor: mati75 »

Ta linia tworzy plik tymczasowy do którego zrzuca dane.
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post 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.
ODPOWIEDZ