Ответ 1
@vastlysuperiorman назвал его правильным, csf/lfd является лучшим в этом. К сожалению, они работают только на Linux.
Эта бесплатная утилита promises to provide the same functionality
: динамически отслеживать попытки доступа и автоматически блокировать IP-адреса. Вы можете разблокировать команду, в случае ложных срабатываний. Конечно, стоит короткая.
Альтернативой может быть создание виртуальной машины (если ваша платформа поддерживает виртуализацию) развертывает очень маленький ящик spec linux и использует это как прокси. Это должно быть легко реализовать. Кстати, почему бы просто не использовать Linux?..: -)
(это должен был быть комментарий к сообщению @vastlysuperiorman, но мне не хватает SO-повторений, чтобы прокомментировать сообщение других)
Edited to suggest a possible apache 2.4 based solution:
Чтобы перевести ACL-директивы между 2.2 и 2.4 в apache
2.2 Синтаксис
order Deny,Allow
include conf/IPList.conf
Allow from all
2.4 Синтаксис
DocumentRoot /some/local/dir
<Directory /some/local/dir/>
<RequireAll>
Require all granted
Include conf/IPList.conf
</RequireAll>
</Directory>
#this will also work
<Location />
<RequireAll>
Require all granted
Include conf/IPList.conf
</RequireAll>
</Directory>
# conf/IPLIst.com is actually in /etc/apache2/conf/IPList.conf
# (ie, paths are relative to where apache is installed.
# I guess you can also use the full path to the list.
И внутри conf/IPList.conf вы будете иметь отдельные строки с такими элементами, как следующие
Require not ip 10.10.1.23 Require not ip 192.168.22.199 Require not ip 10.20.70.100
Использование mod-rewrite и список IP-адресов для запрета
- Чтобы работать с переадресацией на другую страницу, вам необходимо оставить RewriteRule вне основного URL-адреса, который вы охраняете.
- Например, перенаправление не будет работать в соответствии с директивой Directory по DocumentRoot или директивой Location в '/', поскольку запрет влияет на страницу состояния, которую мы хотим отобразить.
- Итак, лучше всего сохранить это за пределами директивы Directory или Location или ссылку на страницу состояния на другом незащищенном веб-сервере.
#Required set of rewrite rules
RewriteEngine on
RewriteMap hosts-deny txt:/etc/apache/banned-hosts
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND
RewriteRule ^ /why-am-i-banned.html
## inside our banned hosts file, we have:
## /etc/apache2/banned-hosts (maintain the format .. its not just a plain text file)
##
193.102.180.41 -
192.168.111.45 -
www.example.com -
www.sumwia.net -
# inside our status page, could be html as below or a plain text file with '.txt' extension
#/var/www/html/why-am-i-banned.html
#
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Why is my IP banned?</title>
</head>
<body>
<h2>Why is my IP address banned?</h2>
<p>
To manage spammers and for other security needs, our server automatically blocks
suspicious IP address. If however you reckon your IP address has been blocked
wrongfully, please contact us.
</p>
</body>
</html>
И, конечно же, вы можете анализировать свои файлы журналов и заполнять conf/IPList.conf или /etc/apache 2/banned-hosts соответствующим образом.
В качестве краткосрочного решения
Альтернативой, которая позволит вам использовать синтаксис 2.2, является установка модуля mod_access_compat и продолжения использования устаревших директив "Запретить, разрешать" 2.2. Но это целесообразно только в качестве краткосрочного решения, поскольку этот модуль находится там, чтобы помочь переходу, и, вероятно, уйдет в будущих версиях apache 2.4