вторник, 9 сентября 2025 г.

OpenSMTPD + Dovecot + Sieve

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

Установка и настройка OpenSMTPD и Dovecotдля базового функционала не рассматривается.

OpenSMTPD - получает почту, раскладывает ее по ящикам, отправляет почту ;
Dovecot - используя IMAP управляет письмами в ящиках;

В данной связке особых сложностей нет, каждый выполняет свои задачи. Но никто из них явно не обладает функционалом раскладки писем на основании правил.

Для Dovecot можно использовать скриптовый язык Sieve, реализующий требуемый функционал.
Для того, чтобы Dovecot мог использовать Sieve необходимо дополнительно установить pigeonhole.
Если установка производится из сырцов, то при сборке необходимо указать путь до каталога, где находится файл dovecot-config из комплекта Dovecot, например --with-dovecot=/path
При установке также устанавливаются доки, в которых много чего подробно написано, но в общую картину складывается не очень и на вскидку ни первого, ни со второго раза не заработало.

И теперь изложение в каком варианте настроек функционал заработал:
1.Создать в каталоге нужно пользователя (пусть будет - cat) каталог для Sieve:
user=cat;d=/home/${user}/sieve;[ -d $d ] || mkdir -p $d && chown $user $d
 

2.Создаем файл скрипта /home/cat/sieve/rules.sieve примерно следующего содержания:
require ["fileinto"];

if header :contains ["From"] ["home-3011"]
 {
    fileinto "Alerts";
 }
elsif header :contains ["X-Spam-Flag"] ["YES"]
 {
    fileinto "Junk";
 }
 else
  {
    keep;
  }

Согласно данным правилам входящие письма содержащие в поле "From" фразу "home-3011" будут перемещены в папку "Alerts" почтового ящика пользователя "cat". Входящие письма содержащие в поле "X-Spam-Flag" фразу "YES" будут перемещены в папку "Junk", остальные в папаку "INBOX".

3.Параметры Sieve в файле /etc/dovecot/conf.d/90-sieve.conf:
plugin {
...

sieve = file:~/sieve;active=~/sieve/rules.sieve

#
На время запуска и отладки Sieve включить подробный вывод инфы в файлы
sieve_trace_dir = /tmp

sieve_trace_level = matching

...

}

Файл 90-sieve.conf идет в комплекте с pigeonhole, если установка была из сырцов, то лежит он в "pigeonhole-dir-source"/doc/example-config/conf.d

4.Для раскладки писем используется "dovecot-lda" (lda - local delivery agent) из комплекта Dovecot. "dovecot-lda" использует скрипты Sieve для анализа писем.
Прописать в файле /etc/dovecot/conf.d/15-lda.conf:
protocol lda {
  mail_plugins = $mail_plugins sieve
  log_path =
  info_log_path =
  syslog_facility = mail
}

Логи отдаются syslog, правила sieve берутся из файла ~/sieve/rules.sieve, который был создан выше. 

5.OpenSMTPD отдает входящие письма "dovecot-lda" который и раскладывает их по папкам в соответствии со скриптом ~/sieve/rules.sieve:
/etc/opensmtpd/smtpd.conf:
table aliases file:/etc/aliases
action "local_mail" mda "/usr/local/dovecot/libexec/dovecot/dovecot-lda -d %{user.username}" alias <aliases>


Путь до "dovecot-lda" нужно указать в соответствии с текущей ОС.
 
6.Проверить работоспособность послав тестовое письмо.

пятница, 14 марта 2025 г.

Templates Zabbix for Megatec SNMP NetagentA DA807 UPS card

Существует в мире серия внешних модулей для управления UPS от megatec.com.tw. Используют эту серию разные производители UPS. И умеют эти модули управлять UPS и получать от него информация с использованием сетевого протокола SNMP. И есть в комплекте с модулем MIB файл и даже программа для удаленного управления UPS по SNMP.

Но вот захотелось мне помониторить такой модуль из Zabbix. Вроде бы что тут сложного - посмотрел MIB, позапускал snmpwalk/snmptranslate с нужными OID и дело в шляпе.

Но нет, наши восточные друзья, как часто бывает, модуль сделали и он с родным ПО вроде как и работает, но попытки использовать родной MIB во вне не увенчались успехом - никто такие OID не знает...

И тогда пришлось с помощью бубна и такой-то матери выискивать верное и работающее.

Результатом стал шаблон для Zabbix.

четверг, 13 февраля 2025 г.

Установка комплекта Node-Red+ MQTT+Zigbee2mqtt на планшет на базе Android для управления "умным домом"

Для реализации данного решения потребуется:
планшет (можно использовать и любой более/менее современный телефон, но размер экрана слишком мал для удобного управления) на котором можно получить разблокированный загрузчик и в дальнейшем, root права;
zigbee2mqtt контроллер;
OTG кабель;

Предполагается что Вы знаете, что такое IP адрес, командная строка и немного знакомы с unix системами.

Вы все делаете на свой страх и риск. Любые данные, находящиееся на планшете перед началом действий, могут и будут потеряны.

Мой выбор пал на Aquarius NS220  - 10", 2/16ГБ, Type-C. Брал на Авито.

Довел до стостояния root прав (на каждом конкретном уст-ве это достигается разными способами, поэтому нет смысла это описывать).

Все действия выполняются именно в такой последовательности, поскольку некоторые вещи зависят от наличия других вещей.

 

1.Termux
Берется на f-droid. Далее все делается в
Termux.
Запустить Termux, выполнить:
termux-change-repo
apt update
apt upgrade
pkg install root-repo tsu mc openssh coreutils nodejs
git

2.Настроить ssh:
ssh-keygen -t rsa -b 2048
cd .ssh
cat id_rsa.pub > authorized_keys
cp id_rsa /storage/self/primary/Download/
cd ~/

Забрать с планшета файл
id_rsa на свой комп, запустить puttygen.exe (из пакета PuTTY)
Импортировать id_rsa в puttygen.exe, при этом будет показан пользователь
для которого созданы ключи ssh, его и нужно использовать при логине с ключом (
или whoami для определения пользователя Андроида).
Нажать кнопку "Save private key" и записать файл с произвольным именем в защищенное место.
Запустить putty.exe, указать адрес, который получил планшет в сети, порт 8022, слева на дереве опций в разделе "Data"->"Auto-login username" прописать ранее определенное имя пользователя, в разделе "SSH"->"Auth"->"Private key file for authontication" указать полный путь к файлу с приватным ключом, который записали ранее.
Выбрать раздел "Windows"->"Translation"->"Remoute character set" и указать KOI8-R.
Выбрать раздел "Session"->"Saved session" и указать осмысленное имя подключения к планшету, нажать кнопку "Save".
В дальнейшем для подключения к планшету запустить
putty.exe, для подключения два раза кликнуть на имени ранее созданного подключения.
Чтобы не иметься с vi, nano и подобными "правильными" редакторами
используем mc (благо Termux позволяет) - работа с файлами, редактор текстовых файлов, выставление прав на файлы и.д. и т.п.

Далее все действия производятся через ssh подключение с компа. Все команды копируются на компе в буфер обмена, в putty вставляеются Shift+ПКМ, копируются -
Shift+ЛКМ
 

2.NodeRed
npm i -g --unsafe-perm node-red
node-red

При первом запуске будет создан каталог .node-red в котором содержаться конфиги.

С компа - http://адрес_планшета:1880

Если веб-морда доступна, то движемся дальше, если нет, смотрим вывод инфы при старте.
Останавливаем - Ctrl+C
Для недопущения посторонних к управлению NodeRed рекомендуется выставить авторизацию для доступа к настройкам и панели управления:
mcedit ~/.node-red/settings.js
(или идем в каталог .node-red и F4 на файле settings.js)
доступ к настройкам:
adminAuth
доступ к управлению: httpNodeAuth

Запуск как сервис:
node-red &
Остановка:
killall
node-red


3.MQTT
Функционал MQTT реализуется нодой в N
odeRed. Название ноды: node-red-contrib-aedes
Создать в NodeRed подключение "MQTT брокер"  используя ноду "aedes broker".
После деплоя должен поднятся порт 1883, убедится, что порт поднялся:
sudo netstat -ant

 

4.Zigbee2mqtt
Ноды, реализующий функционал zigbee2mqtt шлюза на
NodeRed не обнаружил.
zigbee2mqtt реализован отдельной прогой, являющейся по сути стандартом. Поскольку она также, как и NodeRed, реализована на nodejs, особых проблем не возникло.
Необходимо убедится, что
Zigbee контроллер распознается в Termux. Подключить контроллер OTG кабелем к планшету и посмотреть, что появилось:
sudo ls /dev|grep tty

среди всего прочего должно быть что-то такое: ttyACM0
таким образом название контроллера, в данном случае, будет: /dev/
ttyACM0
Установка Zigbee2mqtt шлюза:
npm install -g pnpm
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git zigbee2mqtt
cd zigbee2mqtt
pnpm install --no-frozen-lockfile
pnpm run build
cd ..
cp
zigbee2mqtt/data/configuration.example.yaml zigbee2mqtt/data/configuration.yaml
chmod 644
zigbee2mqtt/data/configuration.yaml

в configuration.yaml раскоментировать и установить параметры (
у меня - adapter: zstack):
mcedit zigbee2mqtt/data/configuration.yaml
frontend:
    enabled: true
    port: 8080
serial:
  port: /dev/ttyACM0
  adapter: zstack

Запуск:
su -c `which node` zigbee2mqtt/index.js &
Остановка:
sudo killall -9 su


С компа - http://адрес_планшета:8080
Для обнаружения zigbee уст-в  веб-морде нажать кнопку "Разрешить обнаружение".


Если доступа нет - логи лежат в zigbee2mqtt/data/log/

Zigbee2mqtt должен запускаться через su, т.к. требуется повышение привилегий для доступа к /dev/ttyACM0. Для редактирования конфига и просмотра логов также потребуются права root, поэтому и mc нужно запускать как
sudo mc
Будет хорошо запустить два подключения к планшету, в одном запусить mc от пользователя, в другом от root. В первом делать все настройки, во втором только то, что связано с
Zigbee2mqtt.

5.Завершение
После выполнения всего вышеперечисленного на планшете в среде
Termux будут выполнятся NodeRed+MQTT broker, Zigbee2mqtt+zigbee2mqtt контроллер. И браузер, в котором открыть адрес панели управления NodeRed http://127.0.0.1:1880/ui

Для запуска приложений при загрузке планшета или через виджеты возможно использовать следующие варианты:
Termux:Boot или Termux:Widget.