Для подключения сайта или веб-приложения, размещённого на сервере под управлением Apache, к сервису Check Risk WAF необходимо выполнить несколько подготовительных действий. Сначала нужно добавить сайт в систему защиты и подтвердить права на него, затем определить внешний IP-адрес сайта, а после этого настроить перенаправление трафика через Check Risk WAF.

Подключение состоит из четырех шагов:

  • Добавить URL-адрес и подтвердить права на него в системе Check Risk WAF.
  • Определить внешний IP-адрес сайта.
  • Подключить защиту и настроить перенаправление трафика.
  • Харденинг конфигурации Apache для исключения возможности обхода WAF.

Инструкция по подключению защиты Apache

№ шага
Описание
Скриншот
1.1

Добавьте приложение и начните подтверждение домена. Войдите в личный кабинет Check Risk WAF, перейдите в раздел «Приложения» по адресу https://check-risk.ru/waf/app, нажмите кнопку «Добавить приложение», укажите URL-адрес приложения, которое хотите добавить, и пройдите верификацию прав на управление доменом через добавление TXT-записи в DNS.

Окно подтверждения домена и значение TXT-записи Check Risk WAF
1.2

Для добавления верификационной TXT-записи в DNS перейдите в личный кабинет своего хостинг-провайдера и добавьте новую DNS-запись. На примере хостинга reg.ru необходимо перейти в раздел «Домены», выбрать свой домен и перейти в раздел «DNS-серверы и управление зоной».

Нажмите кнопку «Добавить запись», в блоке «Тип записи» выберите TXT. Вставьте верификационный код в поле «Текст» и нажмите кнопку «Создать».

Примечание: символ @ в reg.ru используется для указания корневого домена (например, example.com).

Добавление TXT-записи для подтверждения домена у DNS-провайдера
1.3

Примечание: проверка прав может пройти не сразу, поскольку обновление DNS-записей занимает некоторое время.

После добавления записи убедитесь, что она корректно отображается в DNS. Проверку можно выполнить с помощью сервиса: https://toolbox.googleapps.com/apps/dig/#TXT/

По завершении вернитесь в личный кабинет Check Risk WAF, в раздел «Приложения», и в форме подтверждения домена нажмите кнопку «Подтвердить права».

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

Проверка TXT-записи домена через DNS-сервис
2

Получите внешний IP-адрес сервера. Для корректной настройки параметра upstream необходимо определить внешний IP-адрес, на котором размещено веб-приложение.

Получить данную информацию можно следующими способами:

  • в панели управления хостинг-провайдера;
  • непосредственно на сервере.

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

Определение внешнего IP-адреса сервера в терминале
3.1

Подключите защиту и настройте перенаправление трафика. Перейдите в личный кабинет Check Risk WAF, в раздел «Приложения», и нажмите на URL приложения или на пиктограмму «Карандаш», чтобы открыть панель управления конфигурацией приложения.

В этой панели укажите следующие параметры:

  • При необходимости измените, добавьте или удалите TCP-порты для вашего веб-приложения.
  • Добавьте SSL-сертификат. Вы можете загрузить собственный сертификат с использованием закрытого и открытого ключей или получить бесплатный сертификат с автопродлением от Let's Encrypt.
  • Добавьте upstream (URL обратного прокси). Укажите адрес, который вы получили на шаге 2.

После внесения настроек нажмите кнопку «Сохранить».

Первоначальная настройка приложения: порты, SSL-сертификат и upstream
3.2

После настройки веб-приложения останется только прописать A-записи на вашем DNS-сервере. Перечень назначенных вам IP-адресов доступен в панели управления веб-приложением, в разделе «Приложения».

Укажите этот перечень IP-адресов в настройках DNS-записей.

Входящие IP-адреса Check Risk WAF для A-записей домена
3.3

На этом настройка и переключение веб-трафика завершены. Ваш сайт или веб-приложение будет находиться под защитой Check Risk WAF.

Внимание: переключение трафика может занять от 5 минут до 48 часов из-за обновления и распространения DNS-записей. Этот процесс не зависит от нас. Переключение трафика будет бесшовным.

3.4

После переключения трафика в разделе «Приложения» вы увидите график трафика и блокировок.

Статистика трафика и блокировок после переключения через Check Risk WAF
3.5

На главной странице панели управления будет доступна статистика по трафику.

Приложение и режим защиты в панели Check Risk WAF

Шаг 4. Харденинг конфигурации Apache для исключения возможности обхода WAF

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

Для этого используется скрипт, который:

  • регулярно скачивает актуальный список IP-адресов WAF;
  • формирует отдельный файл Apache с правилами доступа;
  • запрещает доступ всем остальным адресам;
  • проверяет конфигурацию перед применением;
  • выполняет мягкую перезагрузку Apache без полного останова сервиса.

Такой подход не требует iptables и позволяет обновлять список адресов без заметного простоя.

1. Создание каталога для allowlist

Создайте каталог для файлов с правилами доступа:

Команда
sudo mkdir -p /etc/apache2/allowlists

2. Создание скрипта обновления allowlist

Создайте файл, например:

Команда
sudo nano /usr/local/sbin/apache-allowlist-update.sh

Вставьте содержимое скрипта:

apache-allowlist-update.sh
#!/usr/bin/env bash
set -Eeuo pipefail

URL="https://example.com/waf-ips.txt"
OUT="/etc/apache2/allowlists/waf_allow.conf"
TMP="$(mktemp)"
BACKUP="${OUT}.bak"

cleanup() {
  rm -f "$TMP"
}
trap cleanup EXIT

die() {
  echo "ERROR: $*" >&2
  exit 1
}

[[ ${EUID:-$(id -u)} -eq 0 ]] || die "run as root (sudo)"
command -v curl >/dev/null 2>&1 || die "missing: curl"
command -v apache2ctl >/dev/null 2>&1 || command -v apachectl >/dev/null 2>&1 || die "missing: apachectl/apache2ctl"
command -v systemctl >/dev/null 2>&1 || die "missing: systemctl"

APACHE_CTL="$(command -v apache2ctl || command -v apachectl)"

mkdir -p "$(dirname "$OUT")"

curl -fsSL "$URL" -o "$TMP"

{
  echo "# autogenerated, do not edit"
  echo "# source: $URL"
  echo "<RequireAll>"
  echo "    Require all denied"
  while IFS= read -r line || [[ -n "$line" ]]; do
    line="${line%%#*}"
    line="${line//$'\r'/}"
    for tok in $line; do
      [[ -z "$tok" ]] && continue
      echo "    Require ip $tok"
    done
  done < "$TMP"
  echo "</RequireAll>"
} > "${OUT}.new"

if [[ -f "$OUT" ]]; then
  cp -f "$OUT" "$BACKUP"
fi

mv -f "${OUT}.new" "$OUT"

if "$APACHE_CTL" configtest; then
  systemctl reload apache2
  echo "OK: allowlist updated and apache reloaded"
else
  echo "ERROR: apache config test failed, restoring previous allowlist" >&2
  if [[ -f "$BACKUP" ]]; then
    mv -f "$BACKUP" "$OUT"
  fi
  "$APACHE_CTL" configtest || true
  exit 1
fi

В скрипте замените значение URL на адрес списка доверенных IP WAF:

Параметр URL
URL="https://ваш-адрес-списка-ip"

Сделайте файл исполняемым:

Команда
sudo chmod +x /usr/local/sbin/apache-allowlist-update.sh

3. Подключение файла в конфигурации Apache

Откройте нужный виртуальный хост, например:

Команда
sudo nano /etc/apache2/sites-available/example.com.conf

Внутри нужного <VirtualHost> подключите файл allowlist. Пример:

example.com.conf
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Require all granted
        IncludeOptional /etc/apache2/allowlists/waf_allow.conf
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>

Если доступ нужно ограничить не ко всему сайту, а только к конкретному пути, можно подключить правила в нужный <Directory> или <Location> блок.

4. Проверка ручного запуска

Запустите скрипт вручную:

Команда
sudo bash /usr/local/sbin/apache-allowlist-update.sh

Если всё настроено корректно, скрипт:

  • скачает список;
  • сформирует /etc/apache2/allowlists/waf_allow.conf;
  • проверит конфигурацию Apache;
  • выполнит мягкую перезагрузку без полного перезапуска сервиса.

5. Настройка автообновления через systemd

Создайте unit-файл сервиса:

Команда
sudo nano /etc/systemd/system/apache-allowlist-update.service

Содержимое:

apache-allowlist-update.service
[Unit]
Description=Update Apache WAF allowlist
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/apache-allowlist-update.sh

Создайте timer:

Команда
sudo nano /etc/systemd/system/apache-allowlist-update.timer

Содержимое:

apache-allowlist-update.timer
[Unit]
Description=Periodic Apache WAF allowlist update

[Timer]
OnBootSec=1min
OnUnitActiveSec=10min
Persistent=true
Unit=apache-allowlist-update.service

[Install]
WantedBy=timers.target

Примените настройки:

Команды
sudo systemctl daemon-reload
sudo systemctl enable --now apache-allowlist-update.timer

6. Проверка работы

Проверить состояние таймера:

Команда
systemctl status apache-allowlist-update.timer

Посмотреть журнал выполнения:

Команда
journalctl -u apache-allowlist-update.service -n 50 --no-pager

Проверить конфигурацию Apache:

Команда
sudo apachectl configtest

Проверить итоговый файл allowlist:

Команда
sudo cat /etc/apache2/allowlists/waf_allow.conf

8. Логика работы

После настройки схема выглядит так:

  • пользователь обращается к приложению;
  • запрос проходит через WAF;
  • только IP-адреса WAF попадают в allowlist Apache;
  • все остальные подключения блокируются через Require all denied.

Таким образом, прямой обход WAF становится невозможен.