Мой 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, и т.д., но они, кажется, усложняют вещи, а не упрощают их.
Я ищу действительно простое решение.
Это может быть сделано легко при помощи 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
Я думаю, что это не работает...
Я имею, это управляет в 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, куда я должен поместить эти новые опции и где мои правила?
Я уверен, что все это может работать, но я должен выяснить, куда каждая часть должна пойти, чтобы заставить все работать правильно.
Кто-то может помочь мне?
Возможно, необходимо купить книгу о 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;