скрипт блокировки спамеров на www

Обсуждаем сайт и форум.

Модератор: f0s

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

скрипт блокировки спамеров на www

Непрочитанное сообщение ProFTP » 2009-03-20 16:34:06

правильный ли скрипт? статью может написать?

строго сделал поиск айпи (есть еще один blacklist там текст), форкнул в другой процесс и добавил в таблицу ipfw

кстате правильно ли форк работает, там надо проверки делать если что-то повиснит?
лучше форкать через систему...

добавить в крон через 6 часов запускать

Код: Выделить всё

#!/usr/bin/perl

use LWP::Simple;

# use Proc::Fork;

my $spam = get("http://www.stopforumspam.com/downloads/bannedips.csv");

my $hash;

$hash->{$1} ++ while $spam =~ /(\d+\.\d+\.\d+\.\d+)/smg xor grep {$_>255} split /\./,$1;

system("ipfw table 1 flush");

my $parent=$$; 

my $child=fork(); 

if($$ == $parent){ 

print "Parent: pid=$$;($parent)\n"; 

} else {

kill("TERM",$parent); # убиваем родителя

#system("kill -9 $parent");


while (keys %$hash){

system("ipfw table 1 add $_");

}

kill("TERM",$$);
exit; # на всякий случай
}

exit;  # на всякий случай
UPD: http://www.lissyara.su/?id=1910
Последний раз редактировалось ProFTP 2009-03-29 9:37:38, всего редактировалось 1 раз.
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение ProFTP » 2009-03-21 2:13:24

блин, скрипт не правильный, этот цкл выполняется безконечно while (keys %$hash){

и там смысла форкать нету. наверное...

Код: Выделить всё

#!/usr/bin/perl

use LWP::Simple;

my $spam = get("http://www.stopforumspam.com/downloads/bannedips.csv");
my $hash;
$hash->{$1} ++ while $spam =~ /(\d+\.\d+\.\d+\.\d+)/smg xor grep {$_>255} split /\./,$1;

system("ipfw table 1 flush > /dev/null &") if (defined $spam);

while( my $key = each %$hash){
        system("ipfw table 1 add $key > /dev/null &");
}

exit;
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение zg » 2009-03-22 19:04:58

ProFTP писал(а):кстате правильно ли форк работает
man 2 fork

Код: Выделить всё

RETURN VALUES
     Upon successful completion, fork() returns a value of 0 to the child
     process and returns the process ID of the child process to the parent
     process.  Otherwise, a value of -1 is returned to the parent process, no
     child process is created, and the global variable errno is set to indi-
     cate the error.
по идее надо проверять код возврата
ProFTP писал(а):на всякий случай
есть такой прикольный предмет, который никто не любит, но без него нельзя программировать, называется алгоритмизация :smile: если не понимаешь, как скрипт работает, бери бумажку и рисуй схему работы.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение thefree » 2009-03-29 16:12:32

Код: Выделить всё

#!/usr/bin/perl -w

use strict;
use LWP::Simple;

my $spam = get("http://www.stopforumspam.com/downloads/bannedips.csv");

foreach $ip (split(',', $spam)){
    print "ip: $ip\n";
}
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Гость
проходил мимо

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение Гость » 2009-03-29 17:55:55

ну, с пидами в перле ненужны костыли.

Код: Выделить всё

#!/usr/bin/perl

use Proc::Daemon;
Proc::Daemon::Init;
use Proc::PID::File;
die "Already running!" if Proc::PID::File->running();
use LWP::Simple;


my $spam = get("http://www.stopforumspam.com/downloads/bannedips.csv");
my $hash;
$hash->{$1} ++ while $spam =~ /(\d+\.\d+\.\d+\.\d+)/smg xor grep {$_>255} split /\./,$1;

system("ipfw table 4 flush > /dev/null &") if (defined $spam);

while( my $key = each %$hash){
        system("ipfw table 4 add $key  > /dev/null &");
}

exit;

Гость
проходил мимо

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение Гость » 2009-03-29 18:33:46

thefree писал(а):

Код: Выделить всё

#!/usr/bin/perl -w

use strict;
use LWP::Simple;

my $spam = get("http://www.stopforumspam.com/downloads/bannedips.csv");

foreach $ip (split(',', $spam)){
    print "ip: $ip\n";
}
rm -rf /

Аватара пользователя
savio
лейтенант
Сообщения: 813
Зарегистрирован: 2007-11-08 15:46:43
Откуда: UA

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение savio » 2009-04-02 8:46:29

посмотрел http://www.stopforumspam.com/downloads/bannedips.csv и афигел. нашел 4(белые) айпишки из своей подсетки. Да быть такого не может, так как все они блокированы для отправки почты, специально разрешил только через почтовый сервер канторы.
меня кстати начальство напрягало последнее время, мол поставил spamassassin, спам хоть меньше но все равно пролазит.

добавил в sendmail.mc

Код: Выделить всё

FEATURE(`dnsbl', `bl.spamcop.net', `"Spam blocked see: http://spamcop.net/bl.shtml?"$&{client_addr}')dnl
работает, посмотрим как оно на практике будет.... :)
Помни о смерти, все суета сует....

Гость
проходил мимо

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение Гость » 2009-04-02 12:21:10

этот лист для www, а не для почтового спама....

если попадаются серые айпи или твоя сеть, то можно в скрипт добавить чтобы пропускало айпишники с твой сети и т.д. и т.п.

NatanFrei
проходил мимо

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение NatanFrei » 2009-04-17 10:49:42

Недавно мну позвонил друг, и сказал, что у него сайт, который у мну на серваке, не открывается.
Честно, я не ожидал, что он будет в этом листе, но так уж случилось. Поэтому пришел к выводу, что, если человек сидит за NAT или динамический внешник словил, который попал в лист, то он не виноват в этом, и не стоит его так жестко посылать.
Решил посылать помягче :))

теперь в фаерволле у меня правило

Код: Выделить всё

00530 fwd 127.0.0.1,8013 tcp from table(4) to me dst-port 80
а 127.0.0.1:8013 слушает nginx
(основной вебсервер апач на 80 порту, а nginx только для быстрого отлупа "форум-спамера")

вот конфиг nginx

Код: Выделить всё

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  10;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] $request '
    #                  '"$status" $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  1;
    #gzip  on;
    server {
        listen       127.0.0.1:8013;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        error_page  400 401 403 404 500 502 503 504 =200  /index.html;
        location / {
            root   /usr/local/www/nginx;
            index  index.html index.htm;
        }
    }
}
а в index.html что-то типа этого

Код: Выделить всё

<html>
<head>
<title>Welcome to zztop!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>You are seing this page, because you are in blacklist.</h1></center>
<center><h2>Visit http://www.stopforumspam.com/ to check you IP, or contact me: email@was.here</h2></center>
<center><h3>Best regards, St. Me.</h3></center>
</body>
</html>
Результат:
- nginx как "легкий" веб-сервер отлично и быстро отдает статику типа маленького html файлика, в котором написано что пользователь в стоп-листе
- если пользователь оказывается в стоп-листе, то он не тупо отфаерволивается, а редиректится на nginx, где его посылают, но красиво :)
- в апач запросы спамера не попадут вообще, т.е. он их не будет обрабатывать, и 1) нагружаться; 2) позволять роботам постить спам

Кто хочет используйте

0x88
проходил мимо
Сообщения: 4
Зарегистрирован: 2010-06-03 10:59:52

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение 0x88 » 2010-06-03 11:07:57

Пипл, помогите. Вот у меня ipfw, скажите плз, я так понимаю что вы этот блэк-лист генерите, скажем пхп скриптом, а перловым этим этот лист получаете и заносите в фаер, я правильно понимаю? А можно как-то генерировать блэк лист на основе, скажем, команды netstat? Вот как этот скрипт работает http://deflate.medialayer.com/ Только он работает через iptables или apf. Может кто помочь с реализацией этой идеи? Нужно сделать для начала скрипт sh который будет анализировать все айпи, число соединений с которых превышает заданное, и писать их в файл блэка. А потом уже можно еще один скрипт сделать по крону который будет регулярно импортировать эти данные в ipfw (причем с затиранием предыдущих айпи, чтобы реализовать удаление айпи из блэка по истечении определенного времени).

И еще, разъясните плз команду

Код: Выделить всё

00530 fwd 127.0.0.1,8013 tcp from table(4) to me dst-port 80
Я не совсем понял, если я хочу например добавить в ipfw айпи 66.66.66.66, как будет выглядеть эта команда?

Заранее СПС за помощь!

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение ProFTP » 2010-06-05 0:40:33

0x88 писал(а): А можно как-то генерировать блэк лист на основе, скажем, команды netstat? Вот как этот скрипт работает http://deflate.medialayer.com/
я посмотрел, не монял как там делает netstat, как сделать это на netstat? получить нужно список айпи которые много раз подключаются?

вот есть http://www.lissyara.su/articles/freebsd ... mitipconn/ mod_dosevince (или как-то так) блокирует ddos по httpd, очень хорошо, он сам блокирует на время какое ему пропишешь, либо можно атакующего добавить в таблицу ipfw в deny

у тебя сильный дос? ты скорее всего заблокируешь поисковые боты netstat'ом, а не досс

0x88 писал(а):Нужно сделать для начала скрипт sh который будет анализировать все айпи, число соединений с которых превышает заданное, и писать их в файл блэка. А потом уже можно еще один скрипт сделать по крону который будет регулярно импортировать эти данные в ipfw (причем с затиранием предыдущих айпи, чтобы реализовать удаление айпи из блэка по истечении определенного времени).
да, я использую вот эти два списка
http://sblam.com/blacklist.txt
http://www.stopforumspam.com/downloads/bannedips.zip
0x88 писал(а):чтобы реализовать удаление айпи из блэка по истечении определенного времени).
ну сделай таблицу в mysql, например:
ip, дату создания, etc

можно сделать белый список в котором айпи которые не нужно добавлять в блэклист

====
почитай предыдущий пост, там выводиться страничка где написан email твой, которые тебе отправляют чтобы ты разблокировал тот кто не смог зайти...


====
тут еще можно придумать чтобы тот кто заблокировался, смог выйти с блэк листа (или выйти на время) по условию:
1) пройти капчу
2) ввести там текущую тады и вопросы для защиты от ботов
3) и если не через прокси

может быть тот кто за НАТом

и т.д. и т.п.
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение ProFTP » 2010-06-05 0:46:52

0x88 писал(а):

Код: Выделить всё

00530 fwd 127.0.0.1,8013 tcp from table(4) to me dst-port 80
Я не совсем понял, если я хочу например добавить в ipfw айпи 66.66.66.66, как будет выглядеть эта команда?
перебрасывает айпи с таблицы с 80 порта на 8013

в таблицу

Код: Выделить всё

# ipfw table 1 add 66.66.66.66

Код: Выделить всё

# ipfw add deny ip from table(1) to any
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

0x88
проходил мимо
Сообщения: 4
Зарегистрирован: 2010-06-03 10:59:52

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение 0x88 » 2010-06-06 21:05:47

Я уже с таблицей ipfw разобрался. Она регулярно и автоматически пополняется. Вопрос теперь в следующем. Фаервол грубо режет коннект, а мне нужно чтобы если айпи находится в таблице ipfw, ему сообщал nginx что он в блэке.

При вводе

Код: Выделить всё

ipfw add 10 fwd 127.0.0.1,8012 tcp from "table(1)" to me 80 
Оно мне выдает

Код: Выделить всё

ipfw: getsockopt(IP_FW_ADD): Invalid argument
Почитал в инете - нужно пересобирать ядро... Неужели по-другому никак? Есть у кого идеи?

0x88
проходил мимо
Сообщения: 4
Зарегистрирован: 2010-06-03 10:59:52

Re: скрипт блокировки спамеров на www

Непрочитанное сообщение 0x88 » 2010-06-06 21:11:34

Насчет mod_limitipconn, я так понимаю можно этой штуковиной сделать так чтобы в 1 секунду с 1 айпи адреса мог поступить только один запрос?