Termux предоставляет полноценную Linux‑окружение на Android‑устройствах, что открывает возможность развертывания систем обнаружения вторжений (IDS) и систем предотвращения вторжений (IPS) непосредственно на мобильных платформах. В статье мы рассмотрим, как создать адаптивный Bash‑скрипт, который будет автоматически загружать, проверять и деплоить актуальные сигнатуры для таких решений, как Suricata и Snort.
Основные компоненты решения
- Репозитории сигнатур: официальные источники (
https://rules.emergingthreats.net), кастомные Git‑репозитории и локальные каталоги. - Правила валидации: контроль контрольных сумм (SHA256), проверка срока действия и совместимости с текущей версией IDS.
- Автоматический деплой: копирование, индексация и перезапуск сервиса без потери текущих сессий.
Структура каталога в Termux
#tree $HOME/ids
$HOME/ids
├─ rules
│ ├─ emerging
│ └─ custom
├─ scripts
│ └─ update-signatures.sh
└─ logs
└─ update.log
Скрипт динамического обновления сигнатур
Ниже представлен полностью комментированный Bash‑скрипт, который удовлетворяет всем описанным требованиям.
#!/usr/bin/env bash
# ------------------------------------------------------------
# update-signatures.sh – динамическое обновление IDS/IPS сигнатур
# Требования: curl, jq, sha256sum, git, termux-notification
# ------------------------------------------------------------
set -euo pipefail
# ---------- Конфигурация ----------
IDS_HOME="$HOME/ids"
RULES_DIR="$IDS_HOME/rules"
LOG_FILE="$IDS_HOME/logs/update.log"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
# URL‑ы официальных репозиториев
EMERGING_URL="https://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz"
EMERGING_SUM="https://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz.sha256"
# Путь к кастомному Git‑репозиторию
CUSTOM_REPO="https://github.com/youruser/custom-suricata-rules.git"
CUSTOM_DIR="$RULES_DIR/custom"
# ---------- Функции ----------
log() {
echo "[$(date +%Y-%m-%d %H:%M:%S)] $1" | tee -a "$LOG_FILE"
}
notify() {
termux-notification --title "IDS/IPS updater" --content "$1" --priority high
}
download_and_verify() {
local url=$1
local sum_url=$2
local dest_dir=$3
mkdir -p "$dest_dir"
local archive="$(basename $url)"
local sum_file="$(basename $sum_url)"
log "Скачивание $url"
curl -fsSL "$url" -o "$dest_dir/$archive"
log "Скачивание контрольной суммы $sum_url"
curl -fsSL "$sum_url" -o "$dest_dir/$sum_file"
local expected=$(cat "$dest_dir/$sum_file" | awk '{print $1}')
local actual=$(sha256sum "$dest_dir/$archive" | awk '{print $1}')
if [[ "$expected" != "$actual" ]]; then
log "Ошибка проверки контрольной суммы: $expected != $actual"
notify "Контрольная сумма не совпала. Обновление отменено."
exit 1
fi
log "Контрольная сумма OK. Распаковка $archive"
tar -xzf "$dest_dir/$archive" -C "$dest_dir"
rm -f "$dest_dir/$archive" "$dest_dir/$sum_file"
}
update_custom_repo() {
if [[ -d "$CUSTOM_DIR/.git" ]]; then
log "Обновление кастомного репозитория"
git -C "$CUSTOM_DIR" pull --rebase
else
log "Клонирование кастомного репозитория"
git clone "$CUSTOM_REPO" "$CUSTOM_DIR"
fi
}
reload_ids() {
# Пример для Suricata, замените на ваш путь/опцию
local service_cmd="suricata -c $IDS_HOME/suricata.yaml -i wlan0 --af-packet"
log "Перезапуск Suricata"
pkill -f suricata || true
$service_cmd &
log "Suricata запущена с PID $!"
}
# ---------- Основной процесс ----------
log "=== Запуск обновления сигнатур ($DATE) ==="
# 1. Обновляем официальные правила Emerging Threats
download_and_verify "$EMERGING_URL" "$EMERGING_SUM" "$RULES_DIR/emerging"
# 2. Обновляем кастомные правила из Git
update_custom_repo
# 3. Объединяем правила в один файл (по желанию)
cat "$RULES_DIR/emerging"/.rules "$CUSTOM_DIR"/.rules > "$IDS_HOME/combined.rules"
# 4. Перезапускаем IDS/IPS
reload_ids
log "=== Обновление завершено успешно ==="
notify "Обновление сигнатур завершено."
Автоматизация с помощью планировщика
Для регулярного выполнения скрипта удобно использовать crontab. Ниже пример, который запускает обновление каждый день в 02:30.
# crontab -e
30 2 * $HOME/ids/scripts/update-signatures.sh >> $HOME/ids/logs/cron.log 2>&1
Тестирование и отладка
- Проверка логов:
cat $HOME/ids/logs/update.log - Вручную запустить скрипт с параметром
--dry-run(можно добавить в скрипт). - Убедиться, что после перезапуска Suricata/Snort правила действительно подгрузились (
suricata -T -c $HOME/ids/suricata.yaml).
Заключение
Разработав адаптивный скрипт для динамического обновления сигнатур, вы получаете полностью автономную IDS/IPS‑инфраструктуру в Termux, способную реагировать на новые угрозы без человеческого вмешательства. Такой подход особенно полезен для полевых специалистов, аудиторов безопасности и разработчиков мобильных решений.
Компания RybinskLab предлагает профессиональные услуги по интеграции и кастомизации систем обнаружения вторжений, написанию и поддержке скриптов автоматизации, а также обучению персонала работе с Termux и Linux‑инструментами в мобильных средах. Свяжитесь с нами, чтобы ускорить процесс внедрения безопасных решений в ваш проект.