Android‑устройства становятся всё более привлекательными целями для злоумышленников. Snort — проверенный IDS/IPS, который можно запустить в среде Termux, позволяя анализировать сетевой трафик прямо на смартфоне. В этой статье мы пройдём от установки до создания адаптивных правил, учитывающих особенности мобильных сетей.
Подготовка окружения
Перед началом убедитесь, что у вас установлено приложение Termux и предоставлены права доступа к хранилищу.
termux-setup-storage
Обновляем репозитории и ставим базовые инструменты:
pkg update && pkg upgrade -y
pkg install -y git clang make autoconf automake libtool pkg-config wget tar gzip openssl-dev libpcap-dev libpcre-dev zlib-dev
Скачивание и сборка Snort
Скачиваем последнюю стабильную версию Snort из официального репозитория:
wget https://www.snort.org/downloads/snort/snort-2.9.20.1.tar.gz -O snort.tar.gz
mkdir -p $HOME/snort && tar -xzf snort.tar.gz -C $HOME/snort --strip-components=1
Собираем Snort:
cd $HOME/snort
./configure --enable-sourcefire
make -j$(nproc)
make install
После установки бинарники находятся в /data/data/com.termux/files/usr/local/bin. Добавим путь в $PATH:
echo 'export PATH=$PATH:/data/data/com.termux/files/usr/local/bin' >> $HOME/.profile
source $HOME/.profile
Установка PulledPork для управления правилами
PulledPork автоматизирует загрузку, обновление и подготовку правил Snort.
cd $HOME
git clone https://github.com/shirkdog/pulledpork.git
cd pulledpork
chmod +x pulledpork.pl
Создаём конфигурационный файл pulledpork.conf (пример ниже). Обязательно укажите ваши Oinkcode, полученный после регистрации на snort.org.
cat > pulledpork.conf << 'EOF'
[PulledPork]
# Путь к Snort
snort_path = /data/data/com.termux/files/usr/local/bin/snort
# Путь к каталогу правил
rule_path = /data/data/com.termux/files/usr/local/etc/snort/rules
# Оinkcode (замените на ваш)
oinkcode = YOUR_OINKCODE_HERE
# URL репозитория правил
snort_rules_url = https://www.snort.org/downloads/community/community-rules.tar.gz
# Параметры обновления
update = yes
EOF
EOF
Запускаем первое обновление правил:
perl pulledpork.pl -c pulledpork.conf -l
Базовая конфигурация Snort
Создаём директорию конфигураций и основной файл snort.conf:
mkdir -p /data/data/com.termux/files/usr/local/etc/snort
cat > /data/data/com.termux/files/usr/local/etc/snort/snort.conf << 'EOF'
# Основные пути
var RULE_PATH /data/data/com.termux/files/usr/local/etc/snort/rules
var SO_RULE_PATH /data/data/com.termux/files/usr/local/etc/snort/so_rules
var PREPROC_RULE_PATH /data/data/com.termux/files/usr/local/etc/snort/preproc_rules
var WHITE_LIST_PATH /data/data/com.termux/files/usr/local/etc/snort/rules/white_list.rules
var BLACK_LIST_PATH /data/data/com.termux/files/usr/local/etc/snort/rules/black_list.rules
# Сетевой интерфейс (будет подменён скриптом)
var HOME_NET any
var EXTERNAL_NET any
# Включаем динамические правила
include $RULE_PATH/local.rules
include $RULE_PATH/community.rules
EOF
EOF
Адаптивные правила под мобильный трафик
Мобильные сети часто меняют IP‑адреса, поэтому фиксировать HOME_NET как any неэффективно. Мы создадим небольшую оболочку, которая будет автоматически подставлять текущие диапазоны сети, полученные из iproute2 и netcfg.
cat > $HOME/update_home_net.sh << 'EOS'
#!/usr/bin/env bash
# Получаем диапазоны IPv4, назначенные текущему Wi‑Fi/моб. сети
INTERFACES=$(ip -o -4 addr list | awk '{print $2" "$4}')
HOME_NET=""
for i in $INTERFACES; do
IP_RANGE=$(echo $i | cut -d' ' -f2)
HOME_NET+="$IP_RANGE,"
done
# Убираем последнюю запятую
HOME_NET=${HOME_NET%,}
# Обновляем snort.conf
CONFIG=/data/data/com.termux/files/usr/local/etc/snort/snort.conf
sed -i "s/^var HOME_NET ./var HOME_NET $HOME_NET/" $CONFIG
EOS
chmod +x $HOME/update_home_net.sh
Запускаем скрипт перед стартом Snort:
$HOME/update_home_net.sh
Теперь HOME_NET всегда отражает актуальные подсети вашего устройства.
Пример адаптивного правила
Создадим пользовательское правило, которое будет срабатывать только при попытке соединения с известными C&C‑серверами, но только из внешних подсетей (т.е. когда ваш телефон находится в роуминге).
cat > /data/data/com.termux/files/usr/local/etc/snort/rules/local.rules << 'EOF'
# Блокируем известные C&C IP, если они не принадлежат HOME_NET
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"Попытка соединения с C&C"; sid:1000001; rev:1;)
EOF
Обратите внимание, что переменная $EXTERNAL_NET автоматически подставляется как «все, кроме HOME_NET», что делает правило контекстно‑зависимым.
Запуск Snort в режиме IDS
Запускаем Snort, указывая интерфейс (например, wlan0 или rmnet_data0 для мобильного data):
# Определяем активный интерфейс
IFACE=$(ip route | grep default | awk '{print $5}')
# Запускаем Snort в фоне, выводим в log.txt
snort -c /data/data/com.termux/files/usr/local/etc/snort/snort.conf -i $IFACE -A console -l $HOME/snort_logs &
Логи будут сохраняться в $HOME/snort_logs. Для просмотра используйте cat или less.
Автоматизация обновления правил
Создадим cron‑задачу (Termux поддерживает crontab) для еженедельного обновления правил и пересчёта HOME_NET:
pkg install -y cronie
crontab -e
# Добавьте строки:
0 3 * 0 $HOME/update_home_net.sh && perl $HOME/pulledpork/pulledpork.pl -c $HOME/pulledpork/pulledpork.conf -l
Таким образом, каждый воскресный день в 03:00 будет обновляться конфигурация и правила.
Мониторинг и отладка
- Для быстрых проверок используйте
snort -T -c ...— проверка синтаксиса. - События в реальном времени выводятся в консоль, если запустить Snort без опции
-A console, заменив её на-A fastи просмотрев файлfast.log. - Для более детального анализа подключите
barnyard2(можно собрать из исходников) и отправляйте события в Elastic Stack.
Заключение
Настройка Snort в Termux позволяет превратить ваш Android‑устройство в полноценный датчик сетевых угроз. Адаптивные правила, основанные на динамическом определении HOME_NET, делают IDS гибкой и эффективной даже в условиях часто меняющихся мобильных IP‑адресов. Регулярное обновление правил через PulledPork и автоматизация посредством cron гарантируют актуальность защиты.
Если вам требуется профессиональная настройка IDS/IPS, аудит мобильных сетей или построение комплексных решений на базе открытого ПО, обращайтесь в RybinskLab. Мы поможем интегрировать Snort, Suricata и другие инструменты в ваш инфраструктурный стек, обеспечим поддержку и обучение персонала.