Защищаем свой wordpress-сайт от ботов

Баним wordpress ботов. Простой скрипт для борьбы с брутфорсом wordpress блогов на VDS хостинге.
Подразумевается, что wordpress CMS у вас установленная на вашем виртуальном сервере (VPS/VDS) к которому вы имеете root-доступ.

antiddos.pl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/perl

use POSIX qw/strftime/;

$| = 1;

$output = `/root/antiddos/parse.sh`;

print strftime("%F %T\n", localtime);

#print "Netstat Data:\n";
#print $output;

open(RD, "/root/antiddos/ban.txt");
while(<RD>){ chomp;
    $heh{"$_"} = 1;
};
close(RD);

# debug
if (0) {
    print "Banned list:\n";
    for $ip (sort keys %heh) {
        print $ip."\n";
    };
};

print "Do action:\n";
@data = split("\n",$output);
foreach $line (@data) {
    ($num, $ip) = split(" ", $line);
    if ($heh{"$ip"} == 1) {
        print "\t$num $ip (already banned)\n";
        next;
    };
    print "\t$num $ip\n";
    if ($num > 20) {
        $run_cmd = "/sbin/iptables -A INPUT -s $ip -j DROP";
        system($run_cmd);
        system("echo $ip >> /root/antiddos/ban.txt");
        print $run_cmd."\n";
        print "$ip banned.\n";
    };
};
sleep(1);

# ok

И вспомогательный скрипт, который парсит лог фронтенда на nginx.

parse.sh

1
2
3
#!/bin/bash

tail -1000 /var/log/nginx/access.log | grep 'wp-login.php' | awk '{print $1}' | sort | uniq -c | sort -n

Копируем все в каталог "/root/antiddos/", например. И ставим запуск antiddos.pl в cron, раз в пять минут.

Вот и все. Все боты брутефорсеры на wp-login будут банится автоматически, и не будут грузить вам систему. Еще конечно желательно ограничить доступ к wp-login.php одним запросом в секунду, но это вы уже сами.

0 Comments

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>