Instruktaż/Tutorial Alerty i komunikaty serwerów QNAP wysyłane za pośrednictwem darmowych bramek SMS polskich oper. k...

Silas Mariusz

rm -rf /
Help us, GOD!
5 Kwiecień 2008
10 168
31
2 248
153
39
Nowy Sącz
forum.qnap.net.pl
QNAP
TS-x77
Ethernet
1 GbE
Alerty i komunikaty serwerów QNAP wysyłane za pośrednictwem darmowych bramek SMS polskich operatorów komórkowych.
2013, Silas Mariusz​

UWAGA! Artykuł niekompletny - cdn.!

[Wstęp; Powiadomienia i Plus GSM]
Użytkownicy sieci Plus GSM przez długi okres czasu mogli cieszyć się komunikatami alertów dostarczanymi na ich telefony komórkowe SMS’em za pośrednictwem oferowanej przez sieć darmowej usłudze E-mail to SMS. Wystarczyło w ustawieniach powiadomień serwera QNAP NAS wprowadzić, jako drugi adres email odbiorcy +48xxxxxxxxx@text.plusgsm.pl zawierający poprawny numer telefonu. Cała treść alertu była dostarczana błyskawicznie na wskazany numer telefonu komórkowego. Niestety po przeprowadzonej przez sieć modernizacji, alerty z serwerów QNAP wysyłane na adres usługi Email2SMS przestały być dostarczane - i tak jest do dziś! Ale z kolei email wsłany z programu Outlook zostanie dostarczony poprawnie!

Co się stało? Dotychczas usługa Email przez SMS wymagała, aby w nagłówku źródłowym wiadomości email znajdowały się wyłącznie podstawowe informacje niezbędne do skomponowania wiadomości.

Kod:
From: "Silas Mariusz" <silas@qnaphacking.pl>
To: <qnap@syndicat.pl>
Subject: Temat przesylanej wiadomości

Można przypuszczać, że sieć Plus GSM, aby ustrzec się przed nadmiernym wykorzystywaniem usługi wprowadziła modyfikacje wymagającą unikalne ID dla każdej nadawanej treści. A więc, aby korzystać z powiadomień SMS, należałoby dodać brakujący nagłówek w wysyłanym z serwera emailu:
Kod:
Message-ID: <$DATESTAMP.$MID@qnaphacking.pl>
(Domena identyfikatora wiadomości musi być identyczna jak w nagłówku Od (From) --- sprawdzić.)


[Konkluzja]
Modyfikujemy sendmail. Ale skoro brniemy tak daleko i będziemy nadawać wiadomościom unikalny identyfikator to, dlaczego od razu nie połączyć tego z programem obsługującym bramki SMS polskich sieci komórkowych GSM?


[Teoria]
Przechwycić przekazywaną wiadomość do linux’owego programu sendmail będącego klientem SMTP ustalonego przez nas serwera poczty wychodzącej i:
  • zmodyfikować w locie treść wiadomości nadając jej dodatkowy identyfikator umożliwiający ponowne korzystanie z usługi Email przez SMS w sieci Plus GSM,
  • oraz treść komunikatu przekazać do zewnętrznego programu obsługującego bramki internetowe SMS i nadać na wybrane numery telefonów.

[Zadanie]

  • podmienić sendmail na własny skrypt,
  • napisać skrypt zastępujący sendmail i do przechwyconej wiadomości dodać unikalny identyfikator z domeną maila nadawcy SMTP
  • w skrypcie przesłać zmodyfikowaną wiadomość email do prawidłowego sendmail
  • przekazać treść wiadomości do programu wysyłającego SMS za pośrednictwem bramek internetowych
  • dodać do autostartu serwera skrypt podmieniający sendmail na własny oraz wysłać powiadomienie Hello world!

[Wymagania]
  • Znajomość podstaw linux’a,
  • Serwer QNAP NAS ;)
  • PuTTY lub inny klient SSH,
  • zainstalowane i uruchomione Optware (z Centrum Aplikacji).

[Ćwiczenie]
  1. Zainstalować i uruchomić Optware.
  2. Za pomocą PuTTY połączyć się przez SSH z serwerem QNAP NAS.
  3. Aby ułatwić sobie pracę w konsoli zaczniemy od instalacji niezbędnych narzędzi:
    Bash:
    ipkg update
    ipkg upgrade
    ipkg install mc tmux screen tree zip unrar dtach bash htop atop
  4. Następnie szukamy ścieżki do zamontowanego woluminu dysku twardego, na którym utworzymy modyfikacje.
    Bash:
    SHAREPUBLIC=$(/sbin/getcfg Public path -f /etc/config/smb.conf)
    VOLROOT=$(cd $SHAREPUBLIC ; cd .. ; pwd)
    cd $VOLROOT
  5. Na zamontowanym woluminie (np. /share/HDA_DATA albo /share/MD0_DATA) tworzymy strukturę katalogów, w których umieścimy nasze programy:
    Bash:
    mkdir -p rootils rootils/autorun-delegated rootils/smssender
    cd $VOLROOT/rootils
  6. Piszemy program sendmail-mod, który będzie działał jako tzw. catcher wiadomości i przekazywał zmodyfikowaną w nagłówkach wiadomość do prawidłowego sendmail. Zaczniemy od tworzenia pliku oraz nadania odpowiednich praw (+x execute / wykonywalny)
    Bash:
    mkdir -p sendmail-alt
    cd sendmail-alt
    touch sendmail-mod
    chmod +x sendmail-mod
  7. Edytujemy utworzony plik za pomocą ulubionego edytora (np. mcedit) lub za pomocą klasycznego vi. Alternatywnym jak nasz sendmail słownikiem mówiąc, w konsoli klepiemy:
    Bash:
    vi sendmail-mod
    W edytorze vi naciskamy na klawiaturze przycisk I (od nazwy Insert) i za pomocą kliknięcia prawym przyciskiem myszy wewnątrz okna PuTTY wklejamy zawartość poniższego kodu źródłowego uprzednio skopiowanego do schowka.
    Bash:
    #!/usr/bin/env sh
    : ${DEBUG:=1}
    ## ###########################################################################
    ## (SENDMAIL) MAIL CONTENT MODIFIER
    ## ###########################################################################
    ## Version: v1.1
    ## Author: Silas Mariusz
    ## Contact: silas [-_-] qnap.com | silas [-_-] qnapclub.pl
    ## Web: https://forum.qnap | https://forum.qnap.com
    ## ###########################################################################
    
    ## My QPKG name?
    ## ########################################################### MYNAME ########
    MY_QPKG_NAME=rootils
    RETVAL=0
    
    ## Get my name and locate me
    ## ########################################################### INITIAL #######
    PROGNAME=`type $0 | awk '{print $3}'`  # search for executable on path
    PROGDIR=`dirname $PROGNAME`            # extract directory of program
    PROGNAME=`basename $PROGNAME`          # base name of program
    ORIGDIR=`pwd`                                 # original directory (builtin)
    PROGDIR=`cd $PROGDIR && pwd || echo $PROGDIR` # program directory
    
    PUBLIC=$(/sbin/getcfg Public path -f /etc/config/smb.conf) # get Public path
    #VOLROOT=$(cd $SHAREPUBLIC ; cd .. ; pwd)                   # get volume path
    QPKG_CONF=/etc/config/qpkg.conf
    ROOTILS=`/sbin/getcfg ${MY_QPKG_NAME} Install_Path -d "$PROGDIR" -f $QPKG_CONF`
    
    PATH="/bin:/usr/bin:/sbin:/usr/sbin:$PATH" ; export PUBLIC ROOTILS PATH
    
    if [ $DEBUG -eq 1 ]; then
            echo -e "$PROGNAME:-- ORIGDIR:      (executed from) \033[36m$ORIGDIR\033[0m"
            echo -e "$PROGNAME:-- PROGDIR:         (where m i?) \033[36m$PROGDIR\033[0m"
            echo -e "$PROGNAME:-- PUBLIC SHARE:      (smb.conf) \033[36m$PUBLIC\033[0m"
            echo -e "$PROGNAME:-- ROOTILS: (get from qpkg conf) \033[36m$ROOTILS\033[0m"
    fi
    
    
    ## Common Paths
    ## ########################################################### COMMONS #######
    DELEGATE="$ROOTILS/smsgateway/sendsms"      # Mail delegate (SMS gateway)
    MAILSENDER="/usr/sbin/ssmtp"                # SMTP mail sender
    MAILFILE="/tmp/ssmtp.tmp"                   # Temporary mail file
    SH_EXEC="$PUBLIC/mailsender.log"          # Cmds execution log
    LOG_DELEGATE="$PUBLIC/maildelegate.log"     # Delegated execution log
    [ -f $MAILFILE ] && rm -f $MAILFILE
    
    ## Make unique message ID from random numbers
    ## ########################################################### RANDOMS #######
    DATESTAMP="`date '+%Y%m%d%H%M%S'`"          # Get current date and time
    MID_RAND=`md5sum <<EOF
    $RANDOM
    EOF`                                           # Generate random string
    MID="`echo $MID_RAND | awk '// { print $1 }'`" # Get exact str from MID_RAND
    
    
    ## Parse STDIN (mail content), adds custom header string and save msg to file
    ## ########################################################### PARSE MAIL ####
    {
            echo "Message-ID: <$DATESTAMP.$MID@syndicat.pl>";
            while IFS= read LINE; do
                    echo ${LINE}
            done
    } > $MAILFILE           # prints modified mail content to output file
    
    
    ## Send E-mail!
    ## ########################################################### PARSE MAIL ####
    $SSMTP $@ < "$MAILFILE" # pass all arguments and content of mail to sender
    RETVAL=$?               # get Sender Exit status code
    
    
    ## Write Debug
    ## ########################################################### DEBUG #########
    if [ $DEBUG -eq 1 ]; then
            echo "[SENDER] $SSMTP $@" >> $SH_EXEC # Write args passed to sender
            echo "[STDIN] ----------------------------------------" >> $SH_EXEC
            cat "$MAILFILE" >> $SH_EXEC           # Write modified mail to log
            echo "[END--] ----------------------------------------" >> $SH_EXEC
            echo ":-----STDIN
    `cat $MAILFILE`
    ------ENDIN
    :-----ARGUMENTS
    $@
    ------END OF DELEGATES
    :-----DUMP FROM DELEGATE EXECUTION:" >> $LOG_DELEGATE # Write delegates
    fi
    
    
    ## Mail content delegate
    ## ########################################################### DELEGATE ######
    if [ -f "$DELEGATE" ]; then
            if [ $DEBUG -eq 1 ]; then
                    echo "sh $DELEGATE $@ < $MAILFILE >> ${LOG_DELEGATE}"
                    sh $DELEGATE $@ < $MAILFILE >> ${LOG_DELEGATE}.tmp
                    cat ${LOG_DELEGATE}.tmp ; cat ${LOG_DELEGATE}.tmp >> ${LOG_DELEGATE}
                    rm -f ${LOG_DELEGATE}.tmp
            else
                    sh $DELEGATE $@ < $MAILFILE
            fi
            _RETVAL=$?
    else
            RETVAL=1
            echo -e "[ \033[91mSENDMAIL \033[91mERROR\033[0m ] \033[91mDelegate program file not found.\033[0m"
            echo -e "[ \033[33mEXECUTIVE PATH\033[0m ] ! path error: \033[33m${DELEGATE}\033[0m ($0:$LINENO)"
    fi
    [ $RETVAL -eq 0 ] && RETVAL=$_RETVAL
    
    #rm -rf $MAILFILE                                # Remove temporary file
    
    exit $RETVAL
  8. Piszemy installer naszego zmodyfikowanego sendmaila. A więc tworzymy plik:
    Bash:
    touch install-sendmail.sh
    chmod +x install-sendmail.sh
    # edytujemy zawartosc pliku
    vi install-sendmail.sh
  9. Wklejamy poniższy kod:
    Bash:
    #!/usr/bin/env sh
    : ${DEBUG:=0}
    ## ###########################################################################
    ## SENDMAIL REPLACER
    ## ###########################################################################
    ## Version: v1.0
    ## Author: Silas Mariusz
    ## Contact: silas [-_-] qnap.com | silas [-_-] qnapclub.pl
    ## Web: https://forum.qnap | https://forum.qnap.com
    ## ###########################################################################
    
    ## Get my name and locate me
    ## ########################################################### INITIAL #######
    PROGNAME=`type $0 | awk '{print $3}'`  # search for executable on path
    PROGDIR=`dirname $PROGNAME`            # extract directory of program
    PROGNAME=`basename $PROGNAME`          # base name of program
    ORIGDIR=`pwd`                                 # original directory (builtin)
    PROGDIR=`cd $PROGDIR && pwd || echo $PROGDIR` # program directory
    
    PATH="/bin:/usr/bin:/sbin:/usr/sbin:$PATH" ; export PUBLIC ROOTILS PATH
    
    ## Replace sendmail
    ## ########################################################### INITIAL #######
    [ -x "/usr/sbin/sendmail" ] && rm /usr/sbin/sendmail # Delete old sendmail
    sync ; sleep 1
    [ $DEBUG -eq 1 ] && echo "copy: $PROGDIR/sendmail-mod > /usr/sbin/sendmail"
    cp -f $PROGDIR/sendmail-mod /usr/sbin/sendmail       # Copy new sendmail
    
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
            echo "Sendmail program installed successfully."
    else
            echo -e "[ -- -\033[91mERROR!\033[0m- -- ] Sendmail install failed! ($0:$LINENO)"
    fi


Artykuł niekompletny - cdn.!

Uwaga!
W związku z opublikowaniem rozwiązania powiadomień za pomocą metody pośredniczej, artykuł zaniechany. https://forum.qnap.net.pl/threads/serwer-smsc-powiadomienia-o-alertach-bramki-sms.3684/
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. powiadomienia email