Страница 1 из 1

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

Добавлено: 2009-03-20 16:34:06
ProFTP
правильный ли скрипт? статью может написать?

строго сделал поиск айпи (есть еще один 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

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

Добавлено: 2009-03-21 2:13:24
ProFTP
блин, скрипт не правильный, этот цкл выполняется безконечно 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;

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

Добавлено: 2009-03-22 19:04:58
zg
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: если не понимаешь, как скрипт работает, бери бумажку и рисуй схему работы.

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

Добавлено: 2009-03-29 16:12:32
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";
}

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 /

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

Добавлено: 2009-04-02 8:46:29
savio
посмотрел 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, а не для почтового спама....

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

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

Добавлено: 2009-04-17 10:49:42
NatanFrei
Недавно мну позвонил друг, и сказал, что у него сайт, который у мну на серваке, не открывается.
Честно, я не ожидал, что он будет в этом листе, но так уж случилось. Поэтому пришел к выводу, что, если человек сидит за 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) позволять роботам постить спам

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

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

Добавлено: 2010-06-03 11:07:57
0x88
Пипл, помогите. Вот у меня 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, как будет выглядеть эта команда?

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

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

Добавлено: 2010-06-05 0:40:33
ProFTP
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) и если не через прокси

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

и т.д. и т.п.

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

Добавлено: 2010-06-05 0:46:52
ProFTP
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

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

Добавлено: 2010-06-06 21:05:47
0x88
Я уже с таблицей 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
Почитал в инете - нужно пересобирать ядро... Неужели по-другому никак? Есть у кого идеи?

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

Добавлено: 2010-06-06 21:11:34
0x88
Насчет mod_limitipconn, я так понимаю можно этой штуковиной сделать так чтобы в 1 секунду с 1 айпи адреса мог поступить только один запрос?