目錄

簡介

必要條件

需求

採用元件

背景資訊

設定

SMS網關的優點

網路圖表和流量傳輸

組態

ISE

後修復

使用Mailfilter的Maildrop

卡內爾

驗證

ISE

後修復

Maildrop

郵件篩選器

卡內爾

訪客電話

疑難排解

ISE

相關資訊

簡介

本檔案介紹如何將開放原始碼解決方案(Postfix、Maildrop、Kannel)與思科身分識別服務引擎(ISE)整合，以便向具有訪客帳戶的使用者傳遞簡訊服務(SMS)訊息。

必要條件

需求

思科建議您瞭解以下主題：

- 思科ISE和訪客接入

- Linux和Shell指令碼

採用元件

本文中的資訊係根據以下軟體和硬體版本：

- Cisco ISE版本1.2或更高版本

- Postfix版本2.10

- Maildrop版本2.6.0

- Kannel版本1.5.0

附註：請注意，Postfix、Maildrop和Kannel是開源解決方案，思科不支援這些產品。此配置示例僅展示如何將ISE與其他產品整合以提供端到端解決方案。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路正在作用，請確保您已瞭解任何指令可能造成的影響。

背景資訊

ISE允許您為臨時網路訪問建立訪客帳戶，通常用於訪客、訪客、承包商、顧問和客戶。此類帳戶由發起人使用者通過發起人門戶建立。建立帳戶時，可以將帶有SMS的動態生成的訪問密碼直接傳送到訪客使用者行動電話。

思科ISE能夠使用簡單郵件傳輸協定(SMTP)通過電子郵件將這些憑證傳送到Mail2SMS網關。此網關負責SMS傳送。

設定

SMS網關的優點

市場上有多種Mail2SMS網關解決方案。它們通常可以使用不同的協定接收資料，例如SMTP、短資訊對等(SMPP)、FTP、HTTP(簡單對象訪問協定(SOAP)、Web服務)，並向特定行動電話傳送SMS消息。

最好建立您自己的SMS網關。它允許：

- 更大的靈活性

- 能夠構建有關路由的複合規則（基於時間、基於策略、基於內容）

- 與本地資料庫整合（例如，不同Active Directory組的不同路由策略）

- 潛在降低運營成本（無需為外部服務付費）

- 還可以將此解決方案用於ISE生成並以電子郵件傳送的運行狀況警報

混合部署可能是值得的 — 個人SMS網關也整合了外部服務。

網路圖表和流量傳輸

以下是流程：

1. 發起人使用者建立具有SMS通知的訪客帳戶，並為使用者提供行動電話號碼。ISE向配置的SMTP伺服器傳送電子郵件。來源位址(From)屬於特定保證人使用者，而目的地位址(To)是在ISE上全域設定(在本範例中為sms@test-cisco.com)。 有關新建立使用者的所有詳細資訊（例如使用者名稱和密碼）都位於該電子郵件的正文中。

2. 郵件到達郵件修復伺服器，該伺服器配置有郵件丟棄作為本地傳遞代理。在傳送到SMS使用者maildir目錄之前，maildrop會在使用者的主目錄中搜尋mailfilter。mailfilter指令碼解析電子郵件，如果找到所有必要資料，則使用wget將HTTP GET請求傳送到Kannel郵箱。該HTTP GET請求包含文本消息、使用者名稱和密碼以及使用者的行動電話號碼。Kannel smsbox是Kannel的前端，用來接受來自使用者的所有請求以傳送SMS（將其傳遞到Kannel bearbox）。

3. Kannel smisbox將該請求傳送到Kannel bearrbox，後者負責傳送SMS。

4. 收件箱上可能設定了多個規則和簡訊服務中心(SMSC)。此示例使用外部SMPP伺服器。本地連線的行動電話的配置非常簡單，稍後會顯示。

此解決方案的每個模組（Postfix、Kannel smisbox和Kannel bearbox）均可安裝在單獨的伺服器上。為簡單起見，此示例在同一台伺服器上配置。

組態

ISE

完成以下步驟以配置ISE。

1. 配置發起人門戶使用者。在本示例中，使用預設ISE配置，並將使用者置於SponsorAllAccount組中：

發起人使用者的電子郵件稍後可從發起人門戶進行配置。

2. 為了能夠傳送SMS通知，請編輯SponsorAllAccount組的默認權限：

預設情況下，Send SMS許可權被禁用。

3. 配置SMTP伺服器，並確保DNS設定正確。

所有通知電子郵件都傳送到smtp.test-cisco.com主機。ISE不會嘗試檢查已配置域的DNS MX記錄（此SMTP伺服器被視為中繼）。

4. 自定義作為SMS通知傳送的電子郵件。

5. 配置目標電子郵件地址，這是唯一未保留為預設設定的設定。所有通知都通過之前配置的SMTP伺服器傳送，其中的To欄位設定為sms@test-cisco.com。

附註：可以配置ISE以通過電子郵件傳送警報通知。這也可以與推薦的解決方案整合，以將警報以SMS傳送到行動電話。思科建議您在Postfix伺服器上為此使用單獨的帳戶(例如alert@test-cisco.com)。

後修復

Postfix是從ISE接收電子郵件的SMTP伺服器。除了一些細微的更改外，會使用預設配置。完成以下步驟即可進行設定。

1. 配置Postfix以作為test-cisco.com域的本地目標。還必須配置本地交付代理：maildrop。下面是main.cf中的必要更改：

myhostname = smtp.test-cisco.com

mydomain = test-cisco.com

mydestination = $myhostname, $mydomain, localhost

local_transport = maildrop

2. 下一步是在master.cf中啟用maildrop。更改master.cf中的正確行：

maildrop  unix  -       n       n       -       -       pipe

flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${user}
由於它是一個沒有虛擬域的簡單部署，因此使用了{user}引數，而不是預設的{recipient}引數。

3. 配置用於接收電子郵件的本地帳戶SMS:

neptun ~ # useradd sms

neptun ~ # passwd sms

New password:

BAD PASSWORD: it is too simplistic/systematic

Retype new password:

passwd: password updated successfully

neptun ~ # chown -R sms:sms /home/sms/

現在，所有電子郵件都應正確傳送給SMS使用者。maildir結構在第一次收到電子郵件時自動建立。

使用Mailfilter的Maildrop

在傳送之前，maildrop會在使用者的主目錄中搜尋.mailfilter。如果找到該檔案，則執行指令碼。檔案的許可權應僅限於使用者：

neptun sms # touch /home/sms/.mailfilter

neptun sms # chmod go-rwx /home/sms/.mailfilter

以下是檔案的內容：

# Mailfilter script for parsing ISE SMS messages

# Author: Michal Garcarz at cisco.com

# Date: 1 Dec 2013

#DEFAULT="$HOME/.maildir/"

DATE=`date`

SHELL="/bin/bash"

# Our log file

logfile "/home/sms/maildrop.log"

# Our verbosity in the log file

VERBOSE="5"

log "-------------SMS MAILFILTER LOG-----------"

log "Email received at: $DATE"

if (/^Subject:.*Guest.*Text.*Notification.*/)

{

log "Email processed by script sending SMS via Kannel"

USERNAME=""

PASSWORD=""

TO=""

if (/^text:Username:(.*)/:b)

{

log "Username exists $MATCH1"

USERNAME=$MATCH1

}

if (/^text:Password:(.*)/:b)

{

log "Password exists $MATCH1"

PASSWORD=$MATCH1

}

if (/^to:(.*)/:b)

{

log "Mobile phone exists $MATCH1"

TO=$MATCH1

}

if ($USERNAME ne "" && $PASSWORD ne "" && $TO ne "")

{

log "Sending via HTTP to kannel username=$USERNAME password=$PASSWORD to=$TO"

DATA="ISE Guest portal Username: $USERNAME Password: $PASSWORD"

#also curl can be used instead of wget

xfilter "wget -O/dev/null \"http://192.168.112.100:13013/cgi-bin/sendsms?username=

tester&password=foobar&to=$TO&text=$DATA\" >> /tmp/maildrop-kannel.log 2>>

/tmp/maildrop-kannel.log"

}

#deliver to maildir (not used since xfilter returns !=0)

to $DEFAULT/

}

指令碼：

- 檢查主題是否與ISE上配置的內容相同

- 讀取電子郵件正文欄位的使用者名稱和密碼（使用來自ISE的預設模板）

- 如果存在以下所有欄位，則呼叫外部程式：wget，以便使用所有引數將HTTP GET傳送到Kannel收件箱。請注意，URL中使用了特定憑證(username=tester&password=foobar)。 以下是在Kannel中配置了有權傳送SMS的使用者憑證。

此處有兩個日誌檔案：

- /home/sms/maildrop.log — 執行指令碼的日誌

- /tmp/maildrop-kannel.log — 執行wget的日誌

卡內爾

可從單個檔案配置smsbox和bearebox。此配置使用外部SMPP伺服器進行傳送。如果您搜尋smpp sms service provider短語，則很容易在web上找到多個服務。配置很簡單，因為不需要接收和路由SMS消息。此解決方案僅用於傳送和使用一個SMPP提供商。

以下是/etc/kannel/kannel.conf網站的摘錄:

#bearerbox

group = core

admin-port = 13000

admin-password = bar

smsbox-port = 13001

log-level = 0

log-file = "/var/log/kannel/kannel.log"

access-log = "/var/log/kannel/access.log"

# SMSC SMPP

group = smsc

smsc = smpp

host = ****.com

port = 1775

smsc-username = 4ljt7wi3

smsc-password = ******

system-type =

address-range =

# SMSBOX SETUP

group = smsbox

bearerbox-host = localhost

sendsms-port = 13013

sendsms-chars = "0123456789 +-"

global-sender = 12345

log-file = "/var/log/kannel/smsbox.log"

log-level = 0

access-log = "/var/log/kannel/access.log"

white-list =

black-list =

reply-couldnotfetch =

reply-couldnotrepresent =

reply-requestfailed =

reply-emptymessage =

# SEND-SMS USERS, this credentials has been used in wget script

group = sendsms-user

username = tester

password = foobar

user-deny-ip = "*.*.*.*"

user-allow-ip = "192.168.*.*"

# SMS SERVICE Default

# there should be default always (this is for receiving SMS messages - not used)

group = sms-service

keyword = default

text = "No service specified"

可以通過USB連線手機並配置GSM SMSC:

group = smsc

smsc = at                  #type = GSM

smsc-id = usb0-modem

my-number = 1234

modemtype = auto           #types: wavecom, siemens, siemens-tc35, falcom,

nokiaphone, ericsson

device = /dev/ttyUSB0      #phone device seen on server

在大多數電話上，還需要啟用數據機功能；例如，在Android 2.2版及更高版本中，它在「設定/Tethering」和「攜帶型熱點/USB tethering」中啟用。

請記得同時運行bearebox和smsbox。以下是範例：

neptun ~ # /etc/init.d/kannel-bearerbox start

* Starting kannel bearerbox ...                                              [ ok ]

neptun ~ # /etc/init.d/kannel-smsbox start

* Starting kannel smsbox ...                                                 [ ok ]

neptun ~ # netstat -atcpn

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address     Foreign Address    State    PID/Program name

tcp        0      0 0.0.0.0:13013     0.0.0.0:*          LISTEN   24170/smsbox

tcp        0      0 0.0.0.0:13000     0.0.0.0:*          LISTEN   24151/bearerbox

tcp        0      0 0.0.0.0:13001     0.0.0.0:*          LISTEN   24151/bearerbox

Bearbox必須至少配置一個SMSC才能啟動。

驗證

使用本節內容，確認您的組態是否正常運作。

ISE

使用發起人門戶的預設埠(8443)。 發起人登入https://ise.test-cisco.com:8443/sponsorportal/。

確保發起人在「我的設定」中分配了電子郵件地址:

使用SMS通知建立訪客帳戶：

您收到已成功建立訪客帳戶的確認：

ISE應該向配置的SMTP伺服器傳送電子郵件。

後修復

SMTP伺服器接收郵件並使用郵件丟棄將其傳送到本地帳戶(sms@test-cisco.com)。 以下是/var/log/messages的摘錄：

Nov 30 22:39:47 neptun postfix/smtpd[18460]: connect from unknown[192.168.112.1]

Nov 30 22:39:47 neptun postfix/smtpd[18460]: 2B36030B32: client=unknown

[192.168.112.1]

Nov 30 22:39:47 neptun postfix/cleanup[18463]: 2B36030B32: message-id=

<563762958.941385847586377.JavaMail.root@ise2>

Nov 30 22:39:47 neptun postfix/qmgr[32658]: 2B36030B32: from=

,

size=689, nrcpt=1 (queue active)

Nov 30 22:39:47 neptun postfix/pipe[18464]: 2B36030B32: to=<sms@test-cisco.com>,

relay=maildrop, delay=0.18, delays=0.14/0/0/0.04, dsn=2.0.0, status=sent (delivered

via maildrop service)

Maildrop

在將電子郵件傳送到SMS之前，maildir目錄將執行/home/sms/.mailfilter，該目錄將執行特定操作。

以下是/home/sms/maildrop.log目錄的摘錄:

-------------SMS MAILFILTER LOG-----------

Email received at: Sat Nov 30 22:39:47 CET 2013

Email processed by script sending SMS via Kannel

Username exists  jsmith02

Password exists  t6ub79_6r

Mobile phone exists 4850xxxxxxx

Sending via HTTP to kannel username= jsmith02 password= t6ub79_6r to=4850xxxxxxx

郵件篩選器

mailfilter指令碼讀取所有資料並執行xfilter，後者呼叫wget以將所有引數傳遞到Kannel。

以下節選自/tmp/maildrop-kannel.log:

--2013-11-30 22:39:47--  http://192.168.112.100:13013/cgi-bin/sendsms?username=

tester&password=foobar&to=4850xxxxxxx&text=ISE%20Guest%20portal%20Username:

%20%20jsmith02%20Password:%20%20t6ub79_6r

Connecting to 192.168.112.100:13013... connected.

HTTP request sent, awaiting response... 202 Accepted

Length: 24 [text/html]

Saving to: `/dev/null'

0K                                                       100% 1.14M=0s

2013-11-30 22:39:47 (1.14 MB/s) - `/dev/null' saved [24/24]

HTTP GET請求被接受。

卡內爾

Kannel smsbox報告它收到來自wget的HTTP請求，並且它將該請求傳送到後台以便傳送SMS。

以下節選自/var/log/kannel/smsbox.log:

2013-11-30 22:39:47 [18184] [5] INFO: smsbox: Got HTTP request </cgi-bin/sendsms>

from <192.168.112.100>

2013-11-30 22:39:47 [18184] [5] INFO: sendsms used by

2013-11-30 22:39:47 [18184] [5] INFO: sendsms sender:<tester:12345>

(192.168.112.100) to:<4850xxxxxxx> msg:

jsmith02 Password:  t6ub79_6r>

2013-11-30 22:39:47 [18184] [5] DEBUG: Stored UUID fd508632-9408-49e1-9eda-

3ce8d4b939d4

2013-11-30 22:39:47 [18184] [5] DEBUG: message length 57, sending 1 messages

2013-11-30 22:39:47 [18184] [5] DEBUG: Status: 202 Answer: <Sent.>

2013-11-30 22:39:47 [18184] [5] DEBUG: Delayed reply - wait for bearerbox

2013-11-30 22:39:47 [18184] [0] DEBUG: Got ACK (0) of fd508632-9408-49e1-9eda-

3ce8d4b939d4

Kannel信箱連線到遠端SMPP伺服器並成功傳送訊息。

以下節選自/var/log/kannel/kannel.log:

2013-11-30 22:39:47 [18165] [8] DEBUG: boxc_receiver: sms received

2013-11-30 22:39:47 [18165] [8] DEBUG: send_msg: sending msg to box: <127.0.0.1>

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP[SMPP:*****.com:1775/0:4ljt7wi3:]:

throughput (0.00,0.00)

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP[SMPP:*****.com:1775/0:4ljt7wi3:]:

Sending PDU:

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP PDU 0x2056bf0 dump:

2013-11-30 22:39:47 [18165] [6] DEBUG:   type_name: submit_sm

2013-11-30 22:39:47 [18165] [6] DEBUG:   command_id: 4 = 0x00000004

2013-11-30 22:39:47 [18165] [6] DEBUG:   command_status: 0 = 0x00000000

2013-11-30 22:39:47 [18165] [6] DEBUG:   sequence_number: 5 = 0x00000005

2013-11-30 22:39:47 [18165] [6] DEBUG:   service_type: NULL

2013-11-30 22:39:47 [18165] [6] DEBUG:   source_addr_ton: 2 = 0x00000002

2013-11-30 22:39:47 [18165] [6] DEBUG:   source_addr_npi: 1 = 0x00000001

2013-11-30 22:39:47 [18165] [6] DEBUG:   source_addr: "12345"

2013-11-30 22:39:47 [18165] [6] DEBUG:   dest_addr_ton: 2 = 0x00000002

2013-11-30 22:39:47 [18165] [6] DEBUG:   dest_addr_npi: 1 = 0x00000001

2013-11-30 22:39:47 [18165] [6] DEBUG:   destination_addr: "4850xxxxxxx"

2013-11-30 22:39:47 [18165] [6] DEBUG:   esm_class: 3 = 0x00000003

2013-11-30 22:39:47 [18165] [6] DEBUG:   protocol_id: 0 = 0x00000000

2013-11-30 22:39:47 [18165] [6] DEBUG:   priority_flag: 0 = 0x00000000

2013-11-30 22:39:47 [18165] [6] DEBUG:   schedule_delivery_time: NULL

2013-11-30 22:39:47 [18165] [6] DEBUG:   validity_period: NULL

2013-11-30 22:39:47 [18165] [6] DEBUG:   registered_delivery: 0 = 0x00000000

2013-11-30 22:39:47 [18165] [6] DEBUG:   replace_if_present_flag: 0 = 0x00000000

2013-11-30 22:39:47 [18165] [6] DEBUG:   data_coding: 0 = 0x00000000

2013-11-30 22:39:47 [18165] [6] DEBUG:   sm_default_msg_id: 0 = 0x00000000

2013-11-30 22:39:47 [18165] [6] DEBUG:   sm_length: 57 = 0x00000039

2013-11-30 22:39:47 [18165] [6] DEBUG:   short_message:

2013-11-30 22:39:47 [18165] [6] DEBUG:    Octet string at 0x205ec70:

2013-11-30 22:39:47 [18165] [6] DEBUG:      len:  57

2013-11-30 22:39:47 [18165] [6] DEBUG:      size: 58

2013-11-30 22:39:47 [18165] [6] DEBUG:      immutable: 0

2013-11-30 22:39:47 [18165] [6] DEBUG:      data&colon; 49 53 45 20 47 75 65 73

74 20 70 6f 72 74 61 6c   ISE Guest portal

2013-11-30 22:39:47 [18165] [6] DEBUG:      data&colon; 20 55 73 65 72 6e 61 6d

65 3a 20 20 6a 73 6d 69    Username:  jsmi

2013-11-30 22:39:47 [18165] [6] DEBUG:      data&colon; 74 68 30 32 20 50 61 73

73 77 6f 72 64 3a 20 20   th02 Password:

2013-11-30 22:39:47 [18165] [6] DEBUG:      data&colon; 74 36 75 62 37 39 11 36

72                        t6ub79.6r

2013-11-30 22:39:47 [18165] [6] DEBUG:    Octet string dump ends.

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP PDU dump ends.

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP[SMPP:******.com:1775/0:4ljt7wi3:]:

throughput (1.00,0.00)

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP[SMPP:******.com:1775/0:4ljt7wi3:]:

throughput (1.00,0.00)

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP[SMPP:******.com:1775/0:4ljt7wi3:]:

Got PDU:

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP PDU 0x2056bf0 dump:

2013-11-30 22:39:47 [18165] [6] DEBUG:   type_name: submit_sm_resp

2013-11-30 22:39:47 [18165] [6] DEBUG:   command_id: 2147483652 = 0x80000004

2013-11-30 22:39:47 [18165] [6] DEBUG:   command_status: 0 = 0x00000000

2013-11-30 22:39:47 [18165] [6] DEBUG:   sequence_number: 5 = 0x00000005

2013-11-30 22:39:47 [18165] [6] DEBUG:   message_id: "4128473611307259"

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP PDU dump ends.

2013-11-30 22:39:47 [18165] [6] DEBUG: SMPP[SMPP:******.com:1775/0:4ljt7wi3:]:

throughput (1.00,0.00)

請注意，來源位址設定為12345。此設定並不重要。外部SMPP伺服器重寫該值。可以購買附加服務以便以不同的方式呈現。

訪客電話

訪客使用者收到SMS:

疑難排解

本節提供的資訊可用於對組態進行疑難排解。

ISE

建立訪客帳戶時可能會遇到以下錯誤：無法向以下訪客使用者傳送文本消息：xxxx。您必須將您的電子郵件地址新增到設定頁面。如果您收到該錯誤消息，請驗證發起人電子郵件地址。

相關資訊

- 思科身分識別服務引擎 — 使用者指南1.2

- Kannel文檔

- 後修復文檔

- 技術支援與文件 - Cisco Systems