apache – mod_remoteip включен, nftables не может блокировать определенные IP адреса

Вопрос или проблема

На Raspberry Pi с Debian Bullseye, прежде чем внести необходимые изменения для логирования IP-адреса посетителей через Cloudflare, nftables работал нормально..

В это время был включен mod_remoteip и добавлены следующие строки

в /etc/apache2/sites-available/000-default.conf
RemoteIPHeader CF-Connecting-IP

в /etc/apache2/conf-available/remoteip.conf
RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxy 103.21.244.0/22

nftables перестал блокировать заданные IP-адреса…

файл nftables.conf выглядит следующим образом

table ip filter {
    set blacklist {
        type ipv4_addr
        flags interval
        auto-merge
        elements = { 1.34.128.0/17, 3.224.0.0/12, }
    }

    chain input {
        type filter hook input priority filter; policy accept;
        ip saddr @blacklist drop
    }

    chain forward {
        type filter hook forward priority filter; policy accept;
        ip saddr @blacklist drop
    }
}
table ip6 filter {
    set blacklist {
        type ipv6_addr
        flags interval
        auto-merge
        elements = { 2001:bc8:701::/48,
                 2001:41d0:801:2000::/64, }
    }

    chain input {
        type filter hook input priority filter; policy accept;
        ip6 saddr @blacklist drop
    }

    chain forward {
        type filter hook forward priority filter; policy accept;
        ip6 saddr @blacklist drop
    }
}

используя его как

sudo nft flush ruleset
~# sudo nft -f /etc/nftables.conf
~# sudo systemctl status nftables
● nftables.service - nftables
     Loaded: loaded (/lib/systemd/system/nftables.service; enabled; preset: enabled)
     Active: active (exited)
       Docs: man:nft(8)
             http://wiki.nftables.org
    Process: 46412 ExecStart=/usr/sbin/nft -f /etc/nftables.conf (code=exited, status=0/SUCCESS)
   Main PID: 46412 (code=exited, status=0/SUCCESS)
        CPU: 59ms

15 окт 18:45:12 x systemd[1]: Запуск nftables.service - nftables...
15 окт 18:45:12 x systemd[1]: Завершено nftables.service - nftables.

nftables не может управлять IP-адресами через обратный прокси.

Ответ или решение

Невозможность блокировки определенных IP-адресов с использованием nftables при включенном модуле mod_remoteip в Apache

Введение

При использовании конфигурации Apache с включенным модулем mod_remoteip и nftables на Raspberry Pi с Debian Bullseye, может возникнуть проблема, когда nftables перестает блокировать указанные IP-адреса. В этой статье мы подробно рассмотрим причину данной проблемы и предложим возможные решения.

Проблема

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

Настройки Apache

Ваши настройки Apache включают следующие строки:

RemoteIPHeader CF-Connecting-IP

Данная директива сообщает Apache, что реальный IP-адрес клиента будет передаваться через заголовок CF-Connecting-IP, который устанавливает Cloudflare. Когда Apache обрабатывает запрос, он использует этот заголовок вместо фактического IP-адреса, полученного от соединения.

Правила nftables

Ваши правила nftables для фильтрации IP-адресов выглядят следующим образом:

table ip filter {
    set blacklist {
        type ipv4_addr
        flags interval
        auto-merge
        elements = { 1.34.128.0/17, 3.224.0.0/12 }
    }

    chain input {
        type filter hook input priority filter; policy accept;
        ip saddr @blacklist drop
    }

    chain forward {
        type filter hook forward priority filter; policy accept;
        ip saddr @blacklist drop
    }
}

Правила считают ip saddr, что приводит к блокировке IP-адресов на уровне подключения, а не на уровне заголовка. Таким образом, если Apache заменяет IP-адреса на основании заголовка CF-Connecting-IP, правила nftables не смогут заблокировать эти запросы, так как они уже обрабатываются с использованием нового IP-адреса.

Решения

1. Поддержка блокировки через заголовки

Чтобы nftables мог обрабатывать IP-адреса, указанные в заголовках, необходимо изменить конфигурацию для учета этих заголовков. Вы можете использовать пример ниже:

table ip filter {
    chain input {
        type filter hook input priority filter; policy accept;
        ip saddr { ip адреса вашего blacklist set } drop
    }
}

Однако этот подход требует, чтобы nftables поддерживало соответствие заголовкам, что может быть довольно сложным.

2. Проверка конфигурации

Убедитесь, что ваши правила тасов слежения начинают обрабатывать совпадения на уровне приложений, так как nftables не может обрабатывать заголовки напрямую. Этот подход требует тщательной настройки и тестирования.

3. Комбинирование модулей

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

Заключение

Использование mod_remoteip в Apache изменяет обработку IP-адресов, что создает сложности для правил блокировки на уровне nftables. Это требует четкого понимания работы сетевого стека и, возможно, переработки конфигурации, чтобы адаптироваться к изменениям, которые вносят прокси-серверы. Переключение между уровнями приложений и сетевыми правилами может быть непростым, но с правильными инструментами и настройками вы сможете обеспечить необходимую защиту.

Если у вас возникли дополнительные вопросы или вам нужна помощь с настройкой, не стесняйтесь обращаться к профессионалам в области сети и серверного администрирования.

Оцените материал
Добавить комментарий

Капча загружается...