Eine SIM nur für Login-Codes
Immer mehr Dienste erzwingen 2FA per SMS, und damit bekommt gefühlt jeder zweite Anbieter meine Handynummer. Da ich diese Nummer ungern im nächsten Datenleak wiederfinden und danach mit Spam zugeschüttet werden will, nutze ich eine separate SIM nur für solche Codes. Für eine Nummer, die ausschließlich empfängt, will ich aber kein zweites Handy dauerhaft herumliegen haben, und meinen zweiten SIM-Slot halte ich mir lieber für Reise-SIMs frei. Also übernimmt ein altes USB-GSM-Modem an einem kleinen Container den Job, und eingehende SMS landen direkt in einem Telegram-Chat.
Wie es funktioniert
Das Herzstück ist gammu-smsd, ein Linux-Daemon, der GSM-Modems über AT-Befehle anspricht. Er pollt das Modem, decodiert eingehende SMS und kann bei jedem Empfang ein Programm starten. Genau dieser Hook ist der ganze Trick:
[smsd]
service = files
RunOnReceive = /opt/sms-telegram
gammu reicht die Nachricht dabei über Umgebungsvariablen weiter (SMS_1_NUMBER, SMS_1_TEXT, bei langen Nachrichten DECODED_PARTS). sms-telegram ist ein Go-Binary, das diese Variablen ausliest, die Teile zusammensetzt und per Telegram-Bot-API verschickt.
Welcher Port ist das Modem?
Ein USB-Modem meldet sich oft mit mehreren seriellen Geräten (ttyUSB0 bis ttyUSB2), und welches davon der AT-Befehlsport ist, steht nicht fest. Statt das hart zu verdrahten, probiert mein Entrypoint die Kandidaten der Reihe nach mit gammu --identify durch und nimmt den ersten, der antwortet. Verschwindet das Modem mal, sucht er einfach neu.
Der Container
Das Image ist bewusst schlank: ein distroless-Basis-Image mit nur den gammu-Binaries samt ihren Bibliotheken und meinen zwei Go-Helfern, ohne Paketmanager und sonstigen Ballast. Der gesamte Code ist in meinem GitLab zu finden.
Die SIM am Leben halten
Eine Prepaid-SIM, die nur empfängt, schaltet der Anbieter irgendwann wegen Inaktivität ab. Dagegen hilft ein systemd-Timer, der einmal im Monat eine Keepalive-SMS rausschickt:
[Timer]
OnCalendar=*-*-01 10:00:00
Persistent=true
Persistent=true sorgt dafür, dass der Versand nachgeholt wird, falls der Rechner am Ersten des Monats gerade aus war.
Fazit
Seitdem läuft das Ganze unbeaufsichtigt auf meinem Homeserver mit angestöpseltem Modem. Eingehende SMS sind in wenigen Sekunden als Telegram-Nachricht da, und die SIM bleibt von allein aktiv. Und hoffentlich kein nerviger Spam mehr.