smsmobile

Настройка отправки данных авторизации Cisco ISE по средствам sms

Задача.

В ходе реализации проекта по доступу к  гостевой WiFi сети при помощи Cisco ISE, была поставлена задача рассылать информационные сообщения с данными авторизации по средствам SMS на телефон конечного пользователя. Подробнее ознакомиться с описанием всего процесса можно в статье нашего CCNA инженера: Отправка гостевых учетных данных с помощью sms.

Решение.

В качестве решения для организации рассылки был выбран пакет SMS Server Tools 3. В  предыдущей статье я уже описывал принцип работы. Что нам нужно для решения этой задачи:

  • procmail
  • postfix
  • Скрипт обработки электронного письма
  • Демон sms3

На вашем основном почтовом сервере компании необходимо сделать настройки, которые позволят пересылать всю почту для домена sms.example.com на ваш sms шлюз, который в свою очередь будет разбирать сообщения при помощи procmail и в зависимости от условий производить те или иные действия. В нашем случае при получении письма с адреса auth@example.com procmail передает письмо на обработку скрипту sendsms_auth, который в свою очередь использует переменные в теле письма для формирования  sms сообщения и отправки адресату.

Схема прохождения обработки письма.

sms схема обработки электронного письма

Настройка procmail.

Предположим что у нас уже установлен procmail. Особой настройки он не требует, необходимо лишь в файле procmailrc, расположенному в каталоге /etc, создать необходимое правило для обработки почты. Как я уже описывал выше, нам необходимо указать procmail, что всю почту приходящую с адреса auth@example.com необходимо передавать на обработку скрипту sendsms_auth, расположенному в директории  /usr/local/bin, для этого создадим правило в секции #Rules

#Global options

VERBOSE=on
MAILDIR=/var/spool/mail
DEFAULT=/var/spool/mail/sms
LOGFILE=/var/log/procmail

#Rules

:0
* ^From.auth@example.com
| /usr/local/bin/sendsms_auth

Следует помнить, что цепочка обработки правил начинается сверху и идет вниз по прядку, как в iptables. Иными словами, если у вас будет правило обработки всех сообщений для домена *.example.com и оно будет стоять первым, то все последующие правила обрабатываться не будут.

Скрипт разбора почты и отправки SMS.

Результатом работы procmail, будет передача электронного письма на обработку нашему скрипту. Скрипт в свою очередь используя оператор sed, получит тело письма:

sed ‘1,/^$/d’ < $TMPFILE_MAIL > $TMPFILE_CONVERT

Так как письмо не содержит кириллических символов, Cisco ISE отправляет его в семибитной кодировке и у нас нет необходимости делать расшифровку из Base64. Используем тело письма как есть.

По договоренности с администратором Cisco ISE в письме приходит набор переменных которые мы будем использовать в работе скрипта.

  • phone — телефон пользователя в международном формате (+код страны-код города….)
  • login — Логин пользователя
  • pass — Пароль для доступа к WiFi
  • dates — дата начала действия учетных данных
  • datef — дата окончания действия учетных данных
  • dtime — часовой пояс

Следующим этапом нам необходимо определить на каком языке отправлять сообщение, для этого используем следующую конструкцию:

#Parsing country code
country=${phone:0:2};

Из переменной $phone получаем первые два символа и передаем их в новую переменную $country, при помощи которой будем определять язык sms сообщения.

При помощи оператора IF создадим условие, в котором если переменная $country равна +7, отправляем sms с русским текстом, всем остальным на английском.

if [ $country = +7 ]; then
echo «Сведения для подключения к гостевой WiFi сети НАШЕЙ КОМПАНИИ. Имя WiFi сети(SSID): EXAMPLE. Ваш логин:»$name».» «Ваш пароль:»$pass».» «Действительно с:»$dates»».» Действительно до:»$datef».» «Часовой пояс:»$dtime». Помощь: 8(800)-000-0000» | sendsms $phone
else
echo «Info about the guest wireless network. Wireless Network(SSID): EXAMPLE. Your username:»$name».» «Your password:»$pass».» «Valid from:»$dates»».» Expiration date:»$datef».» «Time zone:»$dtime». Support: +7(831)-000-0000» | sendsms $phone
fi

Указывая в конце сообщения номер технической поддержки в формате 8-800, следует помнить, что данные номера не доступны для звонков с зарубежных номеров, поэтому в английском тексте необходимо указывать номер в международном формате.

Скрипт.

#!/bin/sh
#########################################
# Script by Alexey Orlov                                                            #
# https://blog.eaglenn.ru                                                          #
# Mail to alexey.n.orlov[AT]gmail.com                                    #
# Date 13.03.2015                                                                    #
#########################################
# Smsd can send eMails via SMS. You simply need to store the eMail as text
# file in the outgoing queue directory with a unique filename.

# The eMail must include the phone number in the To: field, for example:
# To: «Herbert +491721234567» <sms@localhost>

# This simple script creates a unique filename and copies the eMail from
# stdin to that file.

# If you use procmail to deliver local eMail. Create the user sms and create
# the file /home/sms/.procmailrc with this content:

# VERBOSE=off
# MAILDIR=/var/spool/mail
# DEFAULT=/var/spool/mail/sms
# LOGFILE=/var/log/procmail
#
# :0
# * ^TOsms
# | /usr/local/bin/email2sms

# If you use QMail and vpopmail you need the file
# /home/vpopmail/domains/your-domain/.qmail-sms with this content:

# | /usr/local/bin/email2sms

TMPFILE_MAIL=$(mktemp /tmp/tmp.out.XXXXXX)
TMPFILE_CONVERT=$(mktemp /tmp/tmp.out.XXXXXX)

cat > $TMPFILE_MAIL
sed ‘1,/^$/d’ < $TMPFILE_MAIL > $TMPFILE_CONVERT

#Parsing body mail
phone=`cat $TMPFILE_CONVERT | grep ‘phone’ | cut -d «:» -f 2`
name=`cat $TMPFILE_CONVERT | grep ‘name’ | cut -d «:» -f 2`
pass=`cat $TMPFILE_CONVERT | grep ‘pass’ | cut -d «:» -f 2`
dates=`cat $TMPFILE_CONVERT | grep ‘dates’ | cut -d «:» -f 2`
datef=`cat $TMPFILE_CONVERT | grep ‘datef’ | cut -d «:» -f 2`
dtime=`cat $TMPFILE_CONVERT | grep ‘dtime’ | cut -d «:» -f 2`

#Parsing country code
country=${phone:0:2};

#Send sms
if [ $country = +7 ]; then
echo «Сведения для подключения к гостевой WiFi сети НАША КОМПАНИЯ. Имя WiFi сети(SSID): EXAMPLE. Ваш логин:»$name».» «Ваш пароль:»$pass».» «Действительно с:»$dates»».» Действительно до:»$datef».» «Часовой пояс:»$dtime». Помощь: 8(800)-000-0000» | sendsms $phone
else
echo «Info about the guest wireless network. Wireless Network(SSID): EXAMPLE. Your username:»$name».» «Your password:»$pass».» «Valid from:»$dates»».» Expiration date:»$datef».» «Time zone:»$dtime». Support: +7(831)-000-000» | sendsms $phone
fi

#Delete temp files
rm -f $TMPFILE_MAIL
rm -f $TMPFILE_CONVERT

Параметры выделенные красным необходимо изменить на свои.

Итог.

Результатом работы скрипта будет отправка смс сообщения пользователю с его данными для авторизации.

sms_rus

Настройка отправки данных авторизации Cisco ISE по средствам sms: 1 комментарий

  1. Уведомление: Отправка гостевых учетных данных с помощью sms | speicherhirn.eapea.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *