Erweitert
Dieses Kapitel behandelt Themen für fortgeschrittene Benutzer, die den normalen Web-Interface umgehen und direkt mit ihm arbeiten: direkter Datenbankzugriff und SQL sowie Kommandozeilen-Datenbankbereinigungsskripte. Die meisten Benutzer werden dieses Kapitel nie benötigen.
Direkter Zugriff auf die SMSEagle-Datenbank
Die Datenbank von SMSEagle wird mit PostgreSQL betrieben. Sie können direkt darauf zugreifen, um SMS-Nachrichten über SQL-Abfragen zu lesen oder zu schreiben, anstatt über die Web-Oberfläche oder die API zu gehen.
Der Datenbankzugriff für externe Anwendungen ist standardmäßig deaktiviert. Aktivieren Sie ihn unter Settings > Global settings > Application > Access to DB for external applications.
Stellen Sie nach der Aktivierung eine Verbindung zur Datenbank von einer externen Anwendung aus her mit:
Host: die IP-Adresse des Geräts
Datenbankname:
smseagleBenutzer:
smseagleuserPasswort:
postgreeagle
Injizieren einer Kurz-SMS mit SQL
Eine Kurznachricht (bis zu 160 Zeichen):
INSERT INTO outbox (
DestinationNumber,
TextDecoded,
CreatorID,
Coding,
Class,
SenderID
) VALUES (
'1234567',
'This is a SQL test message',
'Program',
'Default_No_Compression',
-1,
'smseagle1'
);
INSERT INTO user_outbox (
id_outbox,
id_user
) SELECT CURRVAL(pg_get_serial_sequence('outbox','ID')), 1;
Die obige Nachricht gehört zum Benutzer mit id_user 1 (dem Standard-Benutzer admin) – die id_user-Werte anderer Benutzer finden Sie in der Tabelle public."user". Das Feld SenderID bezeichnet, welches Modem die Nachricht sendet: smseagle1 für Modem 1, smseagle2 für Modem 2.
Injizieren einer Langtext-SMS mit SQL
Mehrteilige Nachrichten benötigen auch einen UDH-Header, der als Hexadezimalzeichenkette im Feld UDH gespeichert wird. Wenn Sie keinen spezifischen Grund haben, dies manuell zu tun, verwenden Sie stattdessen die API (siehe API and Developer Integration).
Bei einer Langtextnachricht beginnt der UDH mit 050003, gefolgt von einem Byte, das als Nachrichtenreferenz verwendet wird (ein beliebiger Hexadezimalwert, aber unterschiedlich für jede Nachricht – D3 unten), einem Byte für die Gesamtzahl der Teile (02 unten, eindeutig pro an die gleiche Nummer gesendete Nachricht) und einem Byte für die aktuelle Teilenummer (01 für den ersten Teil, 02 für den zweiten usw.).
Eine zweiteilige Langnachricht sieht folgendermaßen aus:
INSERT INTO outbox (
"DestinationNumber",
"CreatorID",
"MultiPart",
"UDH",
"TextDecoded",
"Coding",
"Class",
"SenderID"
) VALUES (
'1234567',
'Program',
'true',
'050003D30201',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, qui',
'Default_No_Compression',
-1,
'smseagle1'
)
INSERT INTO outbox_multipart (
"ID",
"SequencePosition",
"UDH",
"TextDecoded",
"Coding",
"Class"
) SELECT
CURRVAL(pg_get_serial_sequence('outbox','ID')),
2,
'050003D30202',
's nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
'Default_No_Compression',
-1;
INSERT INTO user_outbox (
id_outbox,
id_user
) SELECT
CURRVAL(pg_get_serial_sequence('outbox','ID')),
1;
Das Hinzufügen eines UDH lässt weniger Platz für Text – das obige Beispiel ermöglicht nur 153 Zeichen pro Nachrichtenteil.
Datenbankbereinigungsskripte
Mehrere Skripte zum Löschen von SMS-Nachrichten aus der Datenbank über die Linux-CLI sind unter /mnt/nand-user/scripts/ verfügbar:
Skript |
Verwendung |
Zweck |
|---|---|---|
|
|
SMS aus Inbox und SentItems löschen, die älter als das angegebene Datum sind |
|
|
SMS aus Inbox und SentItems löschen, die älter als 7 Tage sind |
|
|
Inbox, SentItems und Outbox bereinigen – konzipiert für regelmäßige Ausführung über cron |
|
|
SMS aus einem gewählten Ordner löschen |
Skript zu cron hinzufügen: erstellen Sie eine Datei unter /etc/cron.d/ (zum Beispiel db_cleaner) mit folgendem Inhalt:
0 0 1 * * root /mnt/nand-user/scripts/db_delete_allfolders
Dieses Beispiel führt das Bereinigungsskript am 1. jeden Monats aus.
Weitergabe von Logs an einen externen Server
SMSEagle schreibt seine Logs über rsyslog. Um eine Kopie davon an einen zentralen Syslog-Server zu senden, fügen Sie eine Weiterleitungsregel über SSH hinzu. Es gibt keine Einstellung dafür in der Weboberfläche.
Melden Sie sich über SSH als
rootam Gerät an.Erstellen Sie die Datei
/etc/rsyslog.d/005-remote.confmit dieser Regel, ersetzen Sie die Adresse, den Port und das Protokoll durch die Ihres Servers:*.* action(type="omfwd" target="192.0.2.250" port="514" protocol="udp" action.resumeRetryCount="10" queue.type="linkedList" queue.size="10000")target- IP-Adresse oder Hostname des Syslog-Servers.port- Port, auf dem der Server lauscht, normalerweise514.protocol-udpodertcp.Die Warteschlangeneinstellungen behalten bis zu 10000 Nachrichten auf dem Gerät, während der Server nicht erreichbar ist, und senden diese, sobald er wieder verfügbar ist.
Überprüfen Sie die Konfiguration und starten Sie dann rsyslog neu:
rsyslogd -N1 systemctl restart rsyslog
Behalten Sie den Dateinamen bei. SMSEagles eigene Logs (Application, API, Message und die E-Mail-, Anruf-, Signal- und WhatsApp-Services) werden durch Regeln in
/etc/rsyslog.d/010-*.confbis018-*.confgeschrieben, und jede dieser Regeln stoppt die weitere Verarbeitung ihrer Nachrichten. Eine Weiterleitungsregel, die danach platziert ist, beispielsweise am Ende von/etc/rsyslog.conf, leitet nur die Systemlogs weiter. Das Präfix005-bewirkt, dass rsyslog die Weiterleitungsregel zuerst liest, sodass jede Nachricht weitergeleitet wird.
Um den Log-Datenverkehr mit TLS zu verschlüsseln, siehe das rsyslog-Handbuch Encrypting Syslog Traffic with TLS.