Я ежедневно получаю большое количество попыток внедрения sql, которые выглядят одинаково. Отрывок из журналов доступа показывает:
8222 24.247.182.172 - - [09/Nov/2018:08:47:25 -0600] ***************.com "GET /Add_Product.php?strPhotoID=VA1209&price_selected=2+union+select+0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526--&page_id=912 HTTP/1.1" 302 0 "https://www.***************.com/Add_Product.php?strPhotoID=VA1209&price_selected=2+union+select+0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526,0x5e2526--&page_id=912" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" "-"
Это конфигурация в jail.local:
[sql-union-select-attack]
enabled = true
filter = sql-union-select-attack
logpath = /var/log/nginx/*access.log
port = 8221,8222,8231,8232
maxretry = 1
findtime = 10
bantime = -1
action = iptables-allports[name=sqlUnionSelect]
Вот фильтр (sql-union-select-attack.conf):
#The SQL Injection attempt with "union+select+" in the URL
[Definition]
failregex = ^\d{4} <HOST> -.*\"(GET|POST).*/Add_Product.php.*union
Но я здесь, не получаю банов, как показано с
fail2ban-client status sql-union-select-attack
root@web4:/etc/fail2ban# fail2ban-client status sql-union-select-attack
Status for the jail: sql-union-select-attack
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/nginx/**************.access.log /var/log/nginx/access.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Что здесь происходит? Что-то не так с моей конфигурацией jail.local?
редактировать
Благодаря ответу Майкла Хэмптона, похоже, теперь он работает. У меня есть сценарий bash, который позволяет мне выбрать тюрьму для получения статуса:
root@web4:/etc/fail2ban# get_jail_status
http-get-dos
http-post-dos
magento-url
megaindex-crawler-spam
nginx-499
nginx-aspx-url
sql-directory-attempt
sql-union-select-attack
sshd
Please enter the jail you would like to check:
sql-union-select-attack
Status for the jail: sql-union-select-attack
|- Filter
| |- Currently failed: 0
| |- Total failed: 2
| `- File list: /var/log/nginx/**************.access.log /var/log/nginx/access.log
`- Actions
|- Currently banned: 5
|- Total banned: 5
`- Banned IP list: 142.163.212.50 217.61.108.219 37.59.8.29 207.228.228.8 162.144.126.204
Если я выберу один из этих IP-адресов и проверю его в iptables, он появится:
root@web4:/etc/fail2ban# iptables -L -v -n | grep 142.163.212.50
0 0 REJECT all -- * * 142.163.212.50 0.0.0.0/0 reject-with icmp-port-unreachable
Итак, похоже, это работает!
Fail2ban должен иметь установленный pyinotify для чтения файлов журнала, кроме журнала systemd. Если он не установлен, вам следует установить или переустановить его. Например:
sudo apt-get install python-pyinotify
После этого перезапустите fail2ban и подождите несколько минут, чтобы он просмотрел существующие файлы журнала.
(Технически он также может использовать гамин, но исторически это не было очень надежным ...)