Подключение состоит из четырех шагов:
- Добавить URL-адрес и подтвердить права на него в системе Check Risk WAF.
- Определить внешний IP-адрес сайта.
- Подключить защиту и настроить перенаправление трафика.
- Харденинг конфигурации Apache для исключения возможности обхода WAF.
Инструкция по подключению защиты Apache
Добавьте приложение и начните подтверждение домена. Войдите в личный кабинет Check Risk WAF, перейдите в раздел «Приложения» по адресу https://check-risk.ru/waf/app, нажмите кнопку «Добавить приложение», укажите URL-адрес приложения, которое хотите добавить, и пройдите верификацию прав на управление доменом через добавление TXT-записи в DNS.
Для добавления верификационной TXT-записи в DNS перейдите в личный кабинет своего хостинг-провайдера и добавьте новую DNS-запись. На примере хостинга reg.ru необходимо перейти в раздел «Домены», выбрать свой домен и перейти в раздел «DNS-серверы и управление зоной».
Нажмите кнопку «Добавить запись», в блоке «Тип записи» выберите TXT. Вставьте верификационный код в поле «Текст» и нажмите кнопку «Создать».
Примечание: символ @ в reg.ru используется для указания корневого домена (например, example.com).
Примечание: проверка прав может пройти не сразу, поскольку обновление DNS-записей занимает некоторое время.
После добавления записи убедитесь, что она корректно отображается в DNS. Проверку можно выполнить с помощью сервиса: https://toolbox.googleapps.com/apps/dig/#TXT/
По завершении вернитесь в личный кабинет Check Risk WAF, в раздел «Приложения», и в форме подтверждения домена нажмите кнопку «Подтвердить права».
После успешного подтверждения прав вам станет доступен блок «Первоначальная настройка», где необходимо выполнить дальнейшую настройку подключения защиты.
Получите внешний IP-адрес сервера. Для корректной настройки параметра upstream необходимо определить внешний IP-адрес, на котором размещено веб-приложение.
Получить данную информацию можно следующими способами:
- в панели управления хостинг-провайдера;
- непосредственно на сервере.
В качестве upstream следует использовать внешний адрес, по которому сервер принимает входящие подключения. Если используется NAT или промежуточный прокси-сервер, необходимо указывать соответствующий внешний адрес.
Подключите защиту и настройте перенаправление трафика. Перейдите в личный кабинет Check Risk WAF, в раздел «Приложения», и нажмите на URL приложения или на пиктограмму «Карандаш», чтобы открыть панель управления конфигурацией приложения.
В этой панели укажите следующие параметры:
- При необходимости измените, добавьте или удалите TCP-порты для вашего веб-приложения.
- Добавьте SSL-сертификат. Вы можете загрузить собственный сертификат с использованием закрытого и открытого ключей или получить бесплатный сертификат с автопродлением от Let's Encrypt.
- Добавьте
upstream(URL обратного прокси). Укажите адрес, который вы получили на шаге 2.
После внесения настроек нажмите кнопку «Сохранить».
После настройки веб-приложения останется только прописать A-записи на вашем DNS-сервере. Перечень назначенных вам IP-адресов доступен в панели управления веб-приложением, в разделе «Приложения».
Укажите этот перечень IP-адресов в настройках DNS-записей.
На этом настройка и переключение веб-трафика завершены. Ваш сайт или веб-приложение будет находиться под защитой Check Risk WAF.
Внимание: переключение трафика может занять от 5 минут до 48 часов из-за обновления и распространения DNS-записей. Этот процесс не зависит от нас. Переключение трафика будет бесшовным.
Шаг 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
Вставьте содержимое скрипта:
#!/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="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. Пример:
<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
Содержимое:
[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
Содержимое:
[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 становится невозможен.







