Есть черный список (black list) ip на сайте stopforumspam.com
(есть и другие списки), список часто обновляется. В blacklist входя
прокси-сервера, взломанные машины через которые боты пытаються спамить
на все www сразу...
Проще всего добаавить в ipfw таблицу, после блокировки максимум 1 спам
сообщение за несколько суток или за неделю.
add deny ip from table(1) to any
vi /root/spamstop.pl
#!/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;
crontab:
8 0 * * * root /root/spamstop.pl
можно при старте системы добавить этот скрипт в /usr/local/etc/rc.d/
скрипт выполняется не быстро, 4-10 минут, грузит процессор, можно
добавить больше детей...
ipfw -a list | grep table
00150 1317 65171 deny ip from table(1) to any
вариант помягче: http://forum.lissyara.su/viewtopic.php?f=14&t=16531#p159781
теперь в фаерволле у меня правило:
00530 fwd 127.0.0.1,8013 tcp from table(4) to me dst-port 80
а 127.0.0.1:8013 слушает nginx
(основной вебсервер апач на 80 порту, а nginx только для быстрого отлупа "форум-спамера")
<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) позволять роботам постить спам