Apache 2.4.x ip черный список

Я ищу простой способ для черного списка IP-адресов в Apache 2.4.x. Мой веб-сайт регистрирует IP-адреса, которые пытались использовать незаконные операции в текстовом файле. Я хотел бы использовать этот текстовый файл в Apache, чтобы запретить доступ ко всем vhosts в этот список ip. Какой был бы лучший способ (самый простой и наименее ресурсоемкий способ)? Нашел этот, но это только для 2.2. Не знаете, как это относится к 2.4.. Приветствия.

edit: это окно x64, в котором используется apache x64

Ответ 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

Ответ 2

Я тоже не видел хорошей альтернативы для блокировки доступа динамически из самого Apache. Существуют "хакерские" способы: вы можете установить переменную окружения, которая будет содержать список IP-адресов, а затем использовать модуль с ${REMOTE_ADDR} и функцией env, но это растяжение. Подробности в представлении Parser

Однако я использовал несколько модулей легкого веса, которые полезны для защиты вашего сервера Apache.

Брандмауэр ConfigServer (CSF/LFD) - отличное решение для Linux-систем. Он обеспечивает простой способ управления iptables и может быть настроен на обнаружение и блокировку грубой силы. Info здесь


EDIT: Добавьте следующую строку в /etc/csf/csf.deny, чтобы включить свой список заблокированных IP-адресов:

Include /var/www/example.deny

В качестве альтернативы обновите свой script, чтобы добавить IP-адреса в csf.deny либо напрямую:

echo $badIP >> /etc/csf/csf.deny

или используя опцию командной строки CSF (предпочтительно):

csf -d 10.20.30.40

CSF readme здесь


mod_security - один из моих любимых модулей Apache/nginx. Он обнаруживает опасные запросы GET и POST и соответственно блокирует доступ. При правильной настройке он заставит CSF блокировать IP-адреса, которые часто нарушают правила. Подробнее здесь

Ответ 3

Решение с

RewriteMap hosts-deny txt: /etc/apache/banned-hosts

у меня хорошо работает, но разрешено только хостам. Как это нужно изменить, чтобы разрешить .domain.xy и 193.193.193. также?

Фрэнк