Jail Fail2ban для определенного URL-адреса не работает с Cloudflare

Это продолжение предыдущего вопроса о создании тюрьмы для определенного URL-адреса .

Он запрещает IP Cloudflare, а не пользователя. Я выполнил это руководство, чтобы настроить Фильтр Cloudflare, но у меня проблемы.

Jail.local выглядит так ...

[apache-specific-url]
enabled  = true
port     = http,https
filter   = apache-specific-url
action   = cloudflare
           iptables-allports
logpath  = %(apache_access_log)s
bantime  = 48h
maxretry = 1

actions.d / cloudflare.conf

Это cloudflare.conf из Fail2ban V0.11.1, который я и использую. Похоже, это последняя и правильная версия. Я правильно установил cftoken & cfuser в файле.

actionban = curl -s -o /dev/null -X POST -H 'X-Auth-Email: ' -H 'X-Auth-Key: ' \
        -H 'Content-Type: application/json' -d '{ "mode": "block", "configuration": { "target": "ip", "value": "" } }' \
        https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules

actionunban = curl -s -o /dev/null -X DELETE -H 'X-Auth-Email: ' -H 'X-Auth-Key: ' \
          https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules/$(curl -s -X GET -H 'X-Auth-Email: ' -H 'X-Auth-Key: ' \
          'https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules?mode=block&configuration_target=ip&configuration_value=&page=1&per_page=1' | tr -d '\n' | cut -d'"' -f6)

Моя информация об API и Curl в порядке

Если я скручу следующее, тестовый IP-адрес действительно заблокирован в облачной вспышке, и я получу успех по возвращении.

curl -s -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
  -H "X-Auth-Email: CloudFlare-username" \
  -H "X-Auth-Key: CloudFlare-API-Key" \
  -H "Content-Type: application/json" \
  --data '{"mode":"block","configuration":{"target":"ip","value":"1.2.3.4"},"notes":"Fail2ban"}'

/var/log/fail2ban.log показывает следующее

2021-01-15 14:59:08,461 fail2ban.filter         [3439]: INFO    [apache-specific-url] Found 172.69.63.147 - 2021-01-15 14:59:07
2021-01-15 14:59:08,981 fail2ban.actions        [3439]: NOTICE  [apache-specific-url] Ban 172.69.63.147

Я не уверен, что мне здесь не хватает, но не похоже, что я правильно настроил тюрьму, чтобы получить фактический IP-адрес от Cloudflare и заблокировать его локально или в Cloudflare.

Любая помощь очень ценится.


person Eddie    schedule 15.01.2021    source источник


Ответы (1)


После долгих проб и ошибок проблема с блокировкой и разблокировкой была связана с действием cloudflare. Парсинг json кажется сложным для людей. Как ни странно, я нашел несколько человек с проблемой с разными разрешениями. Однако следующий микс мне подходит. Надеюсь, это кому-то поможет в будущем.

/etc/fail2ban/action.d/cloudflare.conf

actionban = curl -s -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
            -H "X-Auth-Email: <cfuser>" \
            -H "X-Auth-Key: <cftoken>" \
            -H "Content-Type: application/json" \
            --data '{"mode":"block","configuration":{"target":"ip","value":"<ip>"},"notes":"Fail2ban"}'



actionunban = curl -s -X DELETE "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules/$( \
      curl -s -X GET "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules?mode=block&configuration_target=ip&configuration_value=<ip>&page=1&per_page=1&match=all" \
      -H "X-Auth-Email: <cfuser>" \
      -H "X-Auth-Key: <cftoken>" \
      -H "Content-Type: application/json" | awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'id'\042/){print $(i+1)}}}' | tr -d '"' | head -n 1 | sed -E -e 's/^\s+//' -e 's/\s+$//')" \
      -H "X-Auth-Email: <cfuser>" \
      -H "X-Auth-Key: <cftoken>" \
      -H "Content-Type: application/json"

person Eddie    schedule 17.01.2021