Блокируйте доступ с помощью access.log

Мой access.log полон:

Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)
CCBot/2.0 (http://commoncrawl.org/faq/)
Mozilla/5.0 (compatible; spbot/5.0.3; +http://OpenLinkProfiler.org/bot )
Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)
Mozilla/5.0 (compatible; SeznamBot/3.2; +http://napoveda.seznam.cz/en/seznambot-intro/)

и:

85.55.237.132 - - [16/Jul/2018:06:30:44 +0000] "GET /wp-login.php HTTP/1.1" 404 11462 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
51.253.65.140 - - [16/Jul/2018:06:30:47 +0000] "GET /wp-login.php HTTP/1.1" 404 7645 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
113.161.75.37 - - [16/Jul/2018:06:30:57 +0000] "GET /wp-login.php HTTP/1.1" 404 12145 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
114.94.208.2 - - [16/Jul/2018:06:31:04 +0000] "GET /wp-login.php HTTP/1.1" 404 11096 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
112.134.172.163 - - [16/Jul/2018:06:31:07 +0000] "GET /wp-login.php HTTP/1.1" 404 11177 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
144.48.75.34 - - [16/Jul/2018:06:31:13 +0000] "GET /wp-login.php HTTP/1.1" 404 7736 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"

И ни один из моих сайтов не Wordpress.

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

Есть ли любой способ сказать Ubuntu, например:

If the user-agent (or requested URL) contains "Mjbot" block it.

Я видел несколько инструментов как Fail2ban, modsecurity, и т.д., но они, кажется, усложняют вещи, а не упрощают их.

Я ищу действительно простое решение.

1
задан 16 July 2018 в 21:49

3 ответа

Это может быть сделано легко при помощи mod-rewrite. Просто измените запуск Вашего .htaccess сказать

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_USER_AGENT} *Mjbot* [NC]
  RewriteRule .* - [F,L]
</IfModule>

Можно заменить *Mjbot* с regex по Вашему выбору

RewriteCond директива настраивает условие для URL, который будет 'переписан' или изменен. В этом случае это проверяет если переменная HTTP_USER_AGENT соответствует регулярному выражению *Mjbot* без чувствительности к регистру [NC]

RewriteRule директива говорит апачу отвечать на все запросы под этим .htaccess (.*) быть отвеченным с Запрещенными 403 ( F флаг) и сразу остановить процесс перезаписи после ( L флаг)

Кроме того, можно также препятствовать тому, чтобы такие запросы уже создали помехи журналу доступа при помощи упакованный mod_setenvif

Сделать это, к Вашему .htaccess добавьте эту строку:

SetEnvIf User-Agent "*Mjbot*" dontlog
2
ответ дан 7 December 2019 в 13:22

Я думаю, что это не работает...

Я имею, это управляет в apache2.conf/httpd.conf

RewriteCond %{REQUEST_URI} wp-login.php$ [NC]
RewriteRule .* - [F,L]

Если я пишу URL с завихрением, я вижу это:

curl -Is https://www.alebalweb-blog.com/wp-login.php | head -n 1
HTTP/2 404 

Разве я не должен видеть 403?

На самом деле, если я добавляю то же правило непосредственно о .htaccess сайта, я вижу это:

curl -Is https://www.alebalweb-blog.com/wp-login.php | head -n 1
HTTP/2 403 

Таким образом, я провел определенное исследование в области URL, переписывают правила в apache2.conf/httpd.conf и нашел много запутывающих людей и много беспорядка.

Среди многих вещей некоторые создают немного ясности, но также и другой беспорядок, такой как это: http://tltech.com/info/rewriterule-in-htaccess-vs-httpd-conf/

Здесь сказано, что правила URL переписывают, должен быть включен между тегами:

<Directory></Directory>

Но желая использовать apache2.conf/httpd.conf я не понял в который, уже существует 3 в моем apache2.conf:

<Directory />
<Directory /usr/share>
<Directory /var/www/>

Я пытался добавить тег:

<Directory>

вокруг моего кода в начале файла Apache не нравился он.

Таким образом, я попробовал так:

<Directory />

апач не жалуется, но это, кажется, не работает.

Таким образом, я попробовал так:

<Directory /var/www/>

снова апач не жалуется, но это, кажется, ничего не изменяет.

Затем я попробовал, чтобы не добавить, что тег, но ввести URL переписывают правила непосредственно в существующих тегах, но апачу не нравилось.

Затем я искал снова и нашел это: https://stackoverflow.com/questions/344588/how-can-i-implement-a-global-rewritecond-rewriterule-in-apache-that-applies-to

Здесь они говорят о новых опциях для URL, перепишите: InheritDown, InheritDownBefore, IgnoreInherit.

Но снова, желая использовать apache2.conf/httpd.conf, куда я должен поместить эти новые опции и где мои правила?

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

Кто-то может помочь мне?

0
ответ дан 7 December 2019 в 13:22

Возможно, необходимо купить книгу о fail2ban, если существует тот.


Вы отправили еще некоторые вопросы в ответе. Разве не имело бы большего смысла работать над Вашим начальным вопросом?


Если Вы хотите знать мой ответ/мнение: Изменение от Apache до Nginx и делает что-то как этот:

if ($http_user_agent ~* "AhrefsBot")
{
    rewrite .* /error.php?e=403 last;
}

В error.php можно получить больше данных из запрашивающей стороны через $ _SERVER и отправить его по почте Вам или лучше поместить его в файл журнала.

Это - еще больше забавы запретить SQL в, ПОЛУЧАЮТ параметры:

if ($query_string ~* "(alter|delete|update|select)(?![a-z._-])")
{
    set $lalala "bad_main_word";
}

if ($query_string ~* "1=1|ALL|DISTINCT|ON|AS|FROM|WHERE|GROUP|BY|HAVING|WINDOW|UNION|INTERSECT|EXCEPT|ORDER|ASC|DESC|USING|NULLS|FIRST|LAST|LIMIT|OFFSET|ROW|ROWS|FETCH|NEXT|ONLY|FOR|NO|KEY|SHARE|OF|NOWAIT|LATERAL|NATURAL|TABLE|CURRENT|RETURNING")
{
    set $lalala "${lalala}_and_bad_sub_word";
}

if ($query_string ~ "Put some RegEx here to whitelist your stuff, check your mail/log!")
{
    set $lalala "whitelist";
}

if ($lalala = "bad_main_word_and_bad_sub_word")
{
    rewrite .* /error.php?e=403 last;
}

Конечно, Вам все еще нужно следующее.

location = /error.php {
    alias /var/www/error.php;
    fastcgi_index error.php;
    fastcgi_pass php;
    include fastcgi_params;
    internal;
}

error_page 403 /error.php?e=403;
0
ответ дан 7 December 2019 в 13:22

Другие вопросы по тегам:

Похожие вопросы: