Termux – это мощный терминал для Android, который позволяет запускать полноценные Linux‑утилиты прямо на смартфоне. В статье мы покажем, как превратить ваш мобильный девайс в компактную, но функциональную систему мониторинга и реагирования на инциденты (SIEM) на базе Elastic Stack и Loki. Такой подход полезен для:
- Отслеживания системных журналов и сетевого трафика на мобильных и IoT‑устройствах;
- Быстрого реагирования на подозрительные события без необходимости отдельного сервера;
- Тестирования правил детекции в полевых условиях.
Подготовка Termux
Убедитесь, что у вас установлена последняя версия Termux и подключены репозитории unstable и x11-repo (для графических компонентов). Выполните:
pkg update && pkg upgrade -y
pkg install -y wget curl tar proot git
pkg install -y unstable-repo x11-repo
Для последующего запуска Grafana понадобится X‑сервер (например, XServer XSDL).
Установка Java и Elasticsearch
Elastic Stack требует JDK 17+. В Termux проще всего установить OpenJDK из репозитория:
pkg install -y openjdk-17
Скачиваем и распаковываем Elasticsearch (версии 8.x):
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.0-linux-x86_64.tar.gz -O es.tar.gz
mkdir -p $HOME/elastic && tar -xzf es.tar.gz -C $HOME/elastic --strip-components=1
Настраиваем базовый конфиг ($HOME/elastic/config/elasticsearch.yml):
cat > $HOME/elastic/config/elasticsearch.yml <<'EOF'
cluster.name: termux-siem
node.name: termux-node
path.data: $HOME/elastic/data
path.logs: $HOME/elastic/logs
network.host: 127.0.0.1
http.port: 9200
xpack.security.enabled: false
EOF
Запускаем в фоне:
cd $HOME/elastic
nohup bin/elasticsearch &
Установка Kibana
Kibana – веб‑интерфейс для визуализации данных Elasticsearch. Скачиваем и распаковываем:
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.13.0-linux-x86_64.tar.gz -O kibana.tar.gz
mkdir -p $HOME/kibana && tar -xzf kibana.tar.gz -C $HOME/kibana --strip-components=1
Базовый конфиг ($HOME/kibana/config/kibana.yml) выглядит так:
cat > $HOME/kibana/config/kibana.yml <<'EOF'
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://127.0.0.1:9200"]
EOF
Запуск:
cd $HOME/kibana
nohup bin/kibana &
Откройте http://127.0.0.1:5601 в браузере Termux (можно через termux-open-url).
Установка Logstash
Logstash будет собирать логи Android‑устройства и передавать их в Elasticsearch.
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.13.0-linux-x86_64.tar.gz -O logstash.tar.gz
mkdir -p $HOME/logstash && tar -xzf logstash.tar.gz -C $HOME/logstash --strip-components=1
Создаём простой pipeline ($HOME/logstash/pipeline/android.conf) для чтения системных журналов через logcat:
cat > $HOME/logstash/pipeline/android.conf <<'EOF'
input {
exec {
command => "logcat -d"
interval => 60
codec => multiline {
pattern => "^\\d{2}-\\d{2}"
negate => true
what => "previous"
}
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:msg}" }
}
date { match => ["timestamp", "ISO8601"] }
}
output {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "android-logs-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
EOF
Запуск pipeline в фоне:
cd $HOME/logstash
nohup bin/logstash -f pipeline/android.conf &
Установка Loki и Promtail
Loki – легковесный агрегатор логов, оптимизированный под Grafana. Скачиваем официальные бинарники:
wget https://github.com/grafana/loki/releases/download/v2.9.2/loki-linux-amd64.zip -O loki.zip
unzip loki.zip -d $HOME/loki
chmod +x $HOME/loki/loki-linux-amd64
wget https://github.com/grafana/promtail/releases/download/v2.9.2/promtail-linux-amd64.zip -O promtail.zip
unzip promtail.zip -d $HOME/promtail
chmod +x $HOME/promtail/promtail-linux-amd64
Создаём конфиги:
cat > $HOME/loki/config.yml <<'EOF'
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9095
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
chunk_idle_period: 5m
max_chunk_age: 1h
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /tmp/loki/boltdb-shipper-active
cache_location: /tmp/loki/boltdb-shipper-cache
shared_store: filesystem
filesystem:
directory: /tmp/loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
EOF
cat > $HOME/promtail/config.yml <<'EOF'
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://127.0.0.1:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: system
path: /proc/$(pidof logcat)/
- job_name: android_logcat
static_configs:
- targets:
- localhost
labels:
job: logcat
path: /data/data/com.termux/files/usr/tmp/logcat.log
EOF
Запускаем Loki и Promtail:
nohup $HOME/loki/loki-linux-amd64 -config.file=$HOME/loki/config.yml &
nohup $HOME/promtail/promtail-linux-amd64 -config.file=$HOME/promtail/config.yml &
Интеграция Loki с Grafana
Устанавливаем Grafana (ARM64‑версия) и подключаем её к Loki и Elasticsearch.
wget https://dl.grafana.com/oss/release/grafana-10.4.0.linux-arm64.tar.gz -O grafana.tar.gz
mkdir -p $HOME/grafana && tar -xzf grafana.tar.gz -C $HOME/grafana --strip-components=1
cd $HOME/grafana
nohup bin/grafana-server web &
В браузере откройте http://127.0.0.1:3000, добавьте два источника данных:
- Loki – URL
http://127.0.0.1:3100 - Elasticsearch – URL
http://127.0.0.1:9200
Создайте дашборд, комбинирующий системные метрики (Grafana) и логи (Loki/Elasticsearch).
Настройка алертинга и автоматического реагирования
Для простого реагирования используем alertmanager из Prometheus‑стека.
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-linux-arm64.tar.gz -O am.tar.gz
mkdir -p $HOME/alertmanager && tar -xzf am.tar.gz -C $HOME/alertmanager --strip-components=1
cat > $HOME/alertmanager/config.yml <<'EOF'
global:
resolve_timeout: 5m
route:
receiver: telegram
receivers:
- name: telegram
telegram_configs:
- bot_token: "YOUR_BOT_TOKEN"
chat_id: "YOUR_CHAT_ID"
EOF
nohup $HOME/alertmanager/alertmanager --config.file=$HOME/alertmanager/config.yml &
Создайте правила в Grafana (или в Prometheus) – например, при росте количества записей уровня ERROR в Loki более 100 за минуту отправлять сообщение в Telegram.
Тестирование и отладка
1. Сгенерируйте искусственный лог:
logcat -L "03-01 12:00:00.000 I TestTag: Test message"
2. Проверьте, что запись попала в Elasticsearch:
curl -s http://127.0.0.1:9200/android-logs-/_search?pretty | grep "TestTag"
3. Откройте дашборд в Grafana и убедитесь, что событие отобразилось в панели Loki.
Оптимизация под мобильные ограничения
- Отключайте X‑пакетные плагины в Elasticsearch, если они не нужны – экономия RAM.
- Уменьшите
retentionв Loki (например, 7 дней) вstorage_config. - Запускайте сервисы через
proot-distroв отдельном контейнере, чтобы изолировать ресурсоёмкие процессы.
Заключение
В результате вы получили полностью автономную SIEM‑платформу, работающую на Android‑устройстве через Termux. Elastic Stack отвечает за хранение и мощный поиск, Loki – за лёгкую агрегацию логов, а Grafana объединяет всё в едином визуальном интерфейсе с поддержкой алертинга.
Если вы хотите масштабировать решение, интегрировать его с корпоративными системами или получить профессиональную поддержку по настройке и оптимизации, обратитесь в RybinskLab. Мы предлагаем:
- Консультации и аудит текущих систем мониторинга;
- Разработку кастомных дашбордов и правил детекции;
- Поддержку и обслуживание гибридных SIEM‑решений (on‑premise + облако).
Свяжитесь с нами, и ваш мониторинг будет работать без перебоев, даже на самых ограниченных устройствах.