Expressway 또는 VCS 에 들어오는 SIP 공격 막기

Expressway 나 VCS를 구축하고 나면 외부로부터 엄청난 SIP 공격이 들어옵니다.

 

오늘 아침에 Call History 입니다. 아침 7시를 기준으로 보니 한 시간 동안 15번정도 호가 들어 왔네요

참 쉬지 않고 많은 넘들이 돌아가면서 공격하는군요

 

저 같은 경우 도메인이 아닌 IP로 된 수신자로 호가 들어 오는 경우 내부로 호가 들어가지 않게 설정합니다.

외부에서 영상통화를 하고자 하는 경우 보통 도메인으로 안내를 하기 때문에 IP로 통화를 하는 경우는 거의 없습니다.

 

그외에 외부로 부터의 공격을 어떻게 막아야 할까요?

위의 그림을 자세히 보면 공격하는 넘들은 Source가 항상 Destination의 IP와 같은 IP로 설정을 합니다.

이런 경우 막기 쉽습니다.

Expressway의 CPL을 사용합니다.

설정하는 위치는 configuration – Call Policy – configuration 입니다.

우선 “Call Policy mode”를 “Local CPL” 로 변경하고 “Save” 합니다.

 

그리고 XML 문서를 하나 만듭니다.

<cpl xmlns=”urn:ietf:params:xml:ns:cpl” xmlns:taa=”http://www.tandberg.net/cpl-extensions” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”urn:ietf:params:xml:ns:cpl cpl.xsd”>

<taa:routed>

<taa:rule-switch>

<!– EXP-E IP로 된 발신자정보를 사용하는 호 인입되는 경우 모두 block –>

<taa:rule unauthenticated-origin=”(.*)@“Expressway-E의 IP” destination=”(.*)”>

     <reject status=”404″ reason=”Denied by policy”/>

     </taa:rule>

<taa:rule unauthenticated-origin=”(.*)” destination=”(.*)”>

<!– All other calls allowed –>

<proxy/>

</taa:rule>

    </taa:rule-switch>

</taa:routed>

</cpl>

 

내용은 위와 같습니다.

위의 “Expressway-E의 IP” 부분을 수정해 주시면 됩니다.

수정할때는 123\.123\.123\.123 으로 합니다.

IP를 입력할때는 “.”를 “\.”로 입력해야 합니다.

“.”를 1개의 Digit로 보는게 기본이라 특수문자를 그대로 입력하고 싶으면 “\”를 문자 앞에 입력해야 합니다.

한글이 들어 있으니 저장할 때 UTF-8로 저장합니다.

 

Select the new Call Policy file 의 찾아보기를 눌러서 XML 파일을 업로드하면 설정은 끝입니다.

 

잘 입력되면 위와 같이 successful 이 보입니다.

 

위와 같이 Source가 Expressway의 IP로 호가 들어 오는 경우 Status가 404 Denied by policy 로 보이면서 호가 막히는 것을 확인 할 수 있습니다.

Cisco TelePresence Server 회의룸에서 멘트 끄기 및 Display Name 숨기기

Cisco Telepresence Server 가 요즘 Cisco Meeting Server에 밀려 구축 하는 사례가 별로 없을 것이라 생각합니다.

사실 전 얼마 전 CMS 대신 vTS를 구축했습니다.

다자간 룸 접속 시 나오는 환영 멘트와 메시지를 수정하기에는 vTS가 더 좋기 때문입니다.

CMS의 경우 Branding 이라는 License 를 추가로 구입해야 하는데…그 금액이 너무 비쌉니다.

 

다자간 룸에 접속할 때 나오는 환영멘트가 너무 시끄럽다고 꺼달라는 고객이 이었습니다.

그리고 처음에 접속하는 사람에게는 혼자 있다는 멘트까지 들립니다.

모두 안 나오게 하고 싶은 경우

Conductor 의 Conference templates 의 Parameter – customParams에

{“customOnlyParticipantAudio”:””,”useCustomOnlyParticipantAudio”:true,”welcomeScreen”:false}

를 추가 합니다.

설명을 하자면 “혼자 있다는 멘트 수정 “기능을 사용하지만 값은 “Null ” 입니다.

그리고 웰컴멘트는 끕니다.

 

PIN 코드 입력하라는 멘트까지 모두 끄고 싶다면

{“customOnlyParticipantAudio”:””,”customPINEntryAudio”:””,”useCustomOnlyParticipantAudio”:true,
“useCustomPINEntryAudio”:true,”welcomeScreen”:false}

를 입력합니다.

 

혹시나 접속자의 이름이 보이지 않게 하고 싶다면

{“callAttributes”:{“displayShowEndpointNames”:false}}

를 입력하면 됩니다.

 

기타 설정이 많이 있지만 보통 이정도를 사용할 것 같습니다.

Cisco CE 9.0.1

지난 3월에 작성한 CE 9.1.0 버전 관련 글에 추후 화상장비들 아이콘이 변경 될 것 같다고 했는데..

역시나 4월에(지금은 5월말인데… 이제야 글을 쓰네요.) CE9.0.1 버전에 아이콘과 배경 이미지가 변경 되었습니다.

버전이 CE 9.0.1 이라고 되어 있습니다.


메인 화면 입니다.

 

통화 버튼을 눌렀을 때 화면

 

설정 버튼을 선택 했을 때의 화면입니다.

역시나 예전 버전에 비해 아이콘이 이쁩니다.

Cisco CE 9.1 ?

얼마전 테스트를 위해서 제가 쓰고 있는 DX80을 Spark 에 연동을 한적이 있습니다.

몇일 외근을 다녀왔더니 Spark 에서 DX80의 OS를 업그레이드를 하였습니다.

기존 DX80의 바탕화면은 Cisco의 산배경 그림이었습니다.

하지만 위와 같이 알록달록한 배경으로 변경되었습니다.

화면의 아이콘도 기존과 다르게 변경이 되었습니다.

이 아이콘들은 기존 ACANO의 문서들에서 보이던 아이콘입니다.

통화 시 화면 입니다.

Spark에 연동되어있던 DX80을 다시 CUCM에 연동하기 위해 초기화를 하였습니다.

초기화를 하면 DX80의 Firmware 이름이 기존 Spark OS에서 CE로 이름이 변경이 됩니다.

위와 같이 Firmware 버전이 CE9.1.0 입니다.

현재 Cisco에서 정식으로 나온 Firmware 버전은 CE8.3.1 입니다. (2017.3.27 기준)

앞으로 나올 CE 버전을 미리 만나본 느낌입니다.

Cisco Meeting Server 2.1.2

2017년 1월 27일에 CMS 2.1.2 버전이 새로 나왔습니다.

얼마 전 CMS가 2.1 버전으로 업그레이드 되며 Web bridge가 2.0 버전으로 바뀌면서 사용자들이 불편하다는 의견이 반영이 되었는지

CMS 2.1.2 버전에서는 Web bridge 버전이 1.9 로 돌아갔습니다.

 

 

저는 설 연휴가 끝난 오늘 아침 출근하자 마자 CMS 2.1.2를 설치해 봤습니다.

위 캡쳐를 보시면 2.1.2 버전 인 것을 확인 할 수 있습니다.

CMS 2.1 이상 버전의 새로운 기능인 “CMA user Settings” 도 보입니다.

 

첫화면이 CMS 2.0.X , 그러니까 Web bridge 1.9 버전 화면인 것을 확인 할 수 있습니다.

 

CE8.3 버전에 CMS 2.1 을 사용해서 Layout 변경 기능을 사용하고자 했으나

CMS 2.1의 WebRTC 사용 불편 문제로 업그레이드를 진행 하지 못하던 경우라면 이제 CMS 2.1.2로 업그레이드 진행하시면 될 듯 합니다.

Cisco Meeting Server의 초대 메시지 변경하기

Cisco Meeting App의 Spaces에는 초대를 할 수 있는 기능이 있습니다.

CMS 2.0.8 기준 초대 메시지 내용은 아래와 같습니다.

———————————————————————————————————————————————————-

내 온라인 미팅에 당신을 초대합니다.

참여를 위해 링크를 클릭: https://join.imeeting.co.kr/invited.sf?secret=wh3bNt6baNHpWX7uhYBjrw&id=8001

다른 곳으로 전화:

– 영상회의 시스템, 재버 또는 링크: 8001

———————————————————————————————————————————————————

해당 내용을 수정해 보겠습니다.

필요한 것은 postman 과 WEB server가 필요합니다.

설정을 CMS에 직접 하는게 아니라 메시지 내용이 있는 txt 파일을 웹서버에 올려두고 해당 파일을 불러오는 방법을 사용합니다.

저는 위와 같이 내용을 만들었습니다.

내용을 설명드리면 처음 부분은 이름이 있으면 “당신을 %name%에 초대합니다.” 가 나오고

이름이 없으면 “당신을 iMeeting의 space에 초대합니다.” 가 나옵니다.

그 다음은 하이퍼링크가 있거나 없거나

Uri가 있으면 표시 없으면 표시 안함

번호 ID가 있으면 표시 없으면 표시 안함

패스코드가 있으면 표시 없으면 표시 안함

뭐 이런 내용입니다.

해당 TXT 파일을 웹서버에 올립니다.

저는 invitation_template.txt 이라는 이름으로 저장했습니다.

https://cms.imeeting.co.kr:445/api/v1/callBrandingProfiles 을 GET했더니 아무것도 없습니다.

Key에 invitationTemplate을 입력하고

Value에 아까 만든 웹서버의 TXT 파일 위치를 입력합니다.

그리고 POST를 합니다.

GET으로 값이 잘 입력 된 것을 확인 했습니다.

callBrandingProfile id 값을 복사 해 둡니다.

https://cms.imeeting.co.kr:445/api/v1/system/profiles 에

callBrandingProfile=45f2d1b6-9025-4b51-856b-5dbdb47169a2 값을 입력하고

PUT 합니다.

값이 잘 입력 되었습니다.

현재 CMA에 접속상태라면 로그 아웃 했다가 다시 접속합니다.

초대-이메일을 눌렀을 때 나오는 화면입니다.

내용이 잘 변경 된 것을 확인 할 수 있습니다.

Cisco Meeting Server 에서 API를 통한 AD연동하기

API를 통해서 AD를 연동하는 경우는 1개의 CMS에 다수의 AD를 연동하거나

사용자별로 분리를 하기 위해서 Tenant 설정이 필요한 경우에 사용합니다.

API를 통해서 AD 를 연동하기 위해서는 우선 GUI에 AD 설정을 삭제해야 합니다.

GUI에 값이 있는 경우 해당 값이 우선합니다.

작업 순서는

1. GUI의 AD 정보 삭제

2. Ldap 서버 정보 추가

3. Ldap 정보 Mapping 정보 추가

4. Ldap 소스 추가

5. Ldap User싱크

위 그림과 같이 AD 서버에 대한 IP, ID, Password 값을 가지는 다수의 ldapserver 값을 만들 수 있고

CMS의 값과 AD의 값을 Mapping 하는 다수의 ldapmapping 값,

만들어진 ldapserver 값과 ldapmapping값에 BaseDN 값을 추가하는 다수의 ldapsouce 값을 만들 수 있습니다.

모두 만든 상태에서 ldapsyncs를 POST하게 되면 CMS에 User가 생성 됩니다.

이제 자세하게 설명해 보겠습니다.

설명은 1개의 AD 서버, 1개의 Mapping 값, 2개의 Source로 설명합니다.

https://CMS IP or domain:445/api/v1/ldapServers/ 에

address=AD서버 IP&portNumber=389&username=cn=administrator,cn=Users,dc=imeeting,dc=co,dc=kr&password=패스워드&secure=false

값으로 POST 합니다.

GET으로 값이 잘 들어 간 것을 확인합니다.

ldapServer id를 잘 복사해 둡니다.

https://CMS IP or domain:445/api/v1/ldapMappings 에

jidMapping=$mail$&nameMapping=$cn$&coSpaceNameMapping=$cn$의Space&coSpaceUriMapping=$telephoneNumber$&coSpaceSecondaryUriMapping=$mail$&coSpaceCallIdMapping=$telephoneNumber$

값을 POST 합니다.

해당 값들은 원하는 값으로 변경해서 입력하시면 됩니다.

GET으로 값이 잘 입력 된 것 확인

ldapMapping id를 복사해 둡니다.

https://CMS IP or domain:445/api/v1/ldapSources/ 에

server=2f08a2e6-04ab-49d4-9d3e-ba1269e4d82f&mapping=e02276aa-db2c-4cf1-823e-13a9ae5aaf94&baseDN=ou=endusers,dc=imeeting,dc=co,dc=kr&filter=mail=*icent.co.kr

로 mail 주소가 icent.co.kr 로 된 User용으로 하나 POST 하고

server=2f08a2e6-04ab-49d4-9d3e-ba1269e4d82f&mapping=e02276aa-db2c-4cf1-823e-13a9ae5aaf94&baseDN=ou=endusers,dc=imeeting,dc=co,dc=kr&filter=mail=*imeeting.co.kr

로 mail 주소가 imeeting.co.kr 로 된 User용으로 또하나 POST 합니다.

GET으로 값이 잘 입력된 것을 확인합니다.

https://CMS IP or domain:445/api/v1/ldapSyncs 에서

아무 값도 없이 POST를 합니다.

CMS에 접속해서 User 가 생성 된 것을 확인 할 수 있습니다.

Cisco Meeting Server 와 CUCM 연동

CMS와 CUCM 간의 SIP 연동은 간단한 편입니다.

CUCM에서 SIP Trunk만 설정해 주면 됩니다.

그 후 Dial 및 Domain 연동 부분을 추가 해야 합니다.

 

제가 진행하는 연동 테스트 환경은

서버

CUCM 9.1

CMS 2.1

Domain

icent.co.kr

imeeting.co.kr

Directory Number

5800 ~ 5999

8000 ~ 8020

 

icent.co.kr의 경우 해당 Domain을 사용하는 개인 이메일 주소로 Call을 하게 되면 Expressway를 통해서 호가 인입됩니다.

imeeting 의 경우 해당 Domain으로 호는 하는 경우 CMS로 바로 호가 인입 됩니다.

 

우선 CUCM 부터 설정해 보겠습니다.

기본적인 설정입니다.

Inbound에 모든 digit를 다 받는 것으로 설정하고

핸드폰까지만 가능한 CSS를 주었습니다.

CMS를 통해서 해외 국제전화를 하지는 않겠죠? (전 테스트용이라 보안상 핸드폰까지만 했습니다.)

CMS IP를 입력했고

암호화 하지 않았습니다.

그리고 중요한 Normalization Script 를 설정했습니다.

왜 이부분이 중요하냐면 전 보안을 위해서 CMS의 IP로 들어 오는 호는 무시하도록 설정하기 때문입니다.

Domain으로 들어오는 호만 받아줍니다.

해당 부분을 설정하지 않으면 CUCM은 CMS로 호를 보낼 때 1000@CMS IP 로 보냅니다.

설정하면 1000@imeeting.co.kr 로 URI가 보내집니다.

SIP Normalization Script의 Content 값입니다.

M = {}

function M.outbound_INVITE(msg)

local method, ruri, ver = msg:getRequestLine()

local uri = string.gsub(ruri, “@(.*):%d+”, “@imeeting.co.kr”)

msg:setRequestUri(uri)

local toheader = msg:getHeader(“To”)

local touri = string.gsub(toheader, “@(.*)>”, “@imeeting.co.kr>”)

msg:modifyHeader(“To”, touri)

end

return M

 

Router Pattern도 만들어 줍니다.

8XXX 로 만들고 CMS로 가게 했습니다.

Domain으로 발신할 수 있게 SIP Route Pattern에 imeeting.co.kr 설정도 추가해줍니다.

CUCM 설정은 끝났습니다.

 

기존에 Multi domain 설정 때 만들어 둔 설정입니다.

기본적인 설정으로 해당 설정까지 되어 있으면 CUCM에서 CMS로 발신이 가능합니다.

 

jabber에서 8001로 발신한 화면입니다.

CMS 초기 화면이 잘 보입니다.

이제 CMS에서 설정을 해보겠습니다.

 

Icent.co.kr Domain은 모두 CUCM IP로 보낸다고 설정하였습니다.

그리고 나머지 모든 Domain은 외부로 발신 됩니다.

Dial Transforms은 CMA에서 핸드폰으로 전화를 걸 때 사용합니다.

58XX와 59XX 는 해당 값에 @icent.co.kr를 붙이고

01로 시작하고 9자리 또는 8자리 숫자가 추가되는 경우에도 @icent.co.kr을 붙이게 설정하였습니다.

Icent.co.kr domain을 붙이면 Outbound calls에 설정값을 보고 CUCM IP 로 호가 가게 됩니다.

나머지 모든 번호는 발신이 안되게 설정하였습니다.

 

내선통화 및 핸드폰으로 발신이 잘 되는 것 확인하였습니다.

별도 테스트 이미지는 올리지 않았습니다.

Cisco Meeting Server 에서 Multi Domain 설정

글을 수정합니다.

CMS 설정을 하다보니

Multi Domain 설정에 API를 통한 AD 연동 및 Tenant 설정이 필수요소가 아니라것을 알게 되었습니다.

다수의 AD 연동과 같이 API를 통한 AD 연동 부분과 Tenant 설정 부분은 별도 글을 작성할 예정입니다.

——————————————————————————————————————————————————-

 

CMS를 구축하는 고객사가 1개의 Domain만 사용하는 것이 아니라 2개 이상의 Domain을 사용하는 경우

보통 AD에서 user를 가져올 때 Mail 주소를 기본으로 가져옵니다.

문제는 그냥 mail주소로 User ID를 가져온다고 해당 ID로 로그인이 되는 것은 아닙니다.

XMPP 와 Webbridge 에 추가 도메인 설정을 해줘야 합니다.

기본 Domain 이 imeeting.co.kr 하나로 설정되어 있는 상태입니다.

User에 icent01@icent.co.kr 이 있는 것을 확인 할 수 있습니다.

하지만 위와 같이 icent.co.kr Domain을 사용하는 User는 로그인이 안됩니다.

이제 설정을 추가해 보도록 하겠습니다.

xmpp multi_domain add “추가할 도메인” xmpp.key xmpp.crt

Key file과 Certificate file 은 기존에 사용한 xmpp.key 와 xmpp.crt를 사용했습니다.

모든 작업이 완료 되었습니다.

인증서가 새로 만들어져서 로그인시 인증서 확인을 다시 합니다.

정상적으로 로그인이 되는 것을 확인하였습니다.

CMS 2.1 설치 및 기본설정

이번에는 CMS 2.1 설치에 대한 글을 써보겠습니다.

저는 원래 1.9에서 2.0으로 2.0 ~ 2.0.7로 업그레이드 하다가 얼마전에 2.1로 업그레이드를 진행했습니다.

순수 2.1 설치는 이번이 처음입니다.

기본 VM에 OVA 설치하는 부분부터 시작해 보겠습니다.

설치전에 DNS 서버에 기본적인 설정은 하고 시작하는게 좋습니다.

저는 join.imeeting.co.kr, cms.imeeting.co.kr 에 대한 설정을 하였으며

_xmpp-client._tcp.imeeting.co.kr    10     10     5222    cms.imeeting.co.kr

_xmpp-server._tcp.imeeting.co.kr    10    10    5269    cms.imeeting.co.kr

값도 추가했습니다.

ESXi 에서 OVF템플릿 배포를 통해서 CMS2.1 OVA파일을 선택합니다.

아직도 acano-server 라고 나오네요.

저는 CMS2.1 이라고 이름을 만들어 주었습니다.

전 저의 테스트용 서버라 Thin 으로 설치 하겠습니다.

네트워크도 설정 하였습니다

배포 할 준비가 다 되었습니다.

배포가 다 되면 VM을 시작하면 됩니다.

시작하고 처음 화면 입니다.

초기 Login ID와 Password 는 admin / admin 입니다.

그리고 새로운 Password를 2번 입력하면 됩니다.

IP와 DNS를 설정합니다.

IP 와 DNS가 제대로 설정이 되었는지 확인합니다.

WinSCP와 같은 SFTP 프로그램을 이용해서 cms.lic 파일을 업로드 합니다.

편하게 작업하기 위해서 SecureCRT를 이용합니다.

Ntp 와 timezone을 설정 후 reboot 합니다.

우선 webadmin을 먼저 설정합니다.

pki selfsigned webadmin

webadmin certs webadmin.key webadmin.crt

webadmin listen a 445

webadmin restart

webadmin enable

Callbridge 를 설정합니다.

pki selfsigned callbridge

callbridge certs callbridge.key callbridge.crt

callbridge listen a

callbridge restart

Xmpp를 설정합니다.

pki selfsigned xmpp

xmpp listen a

xmpp certs xmpp.key xmpp.crt

xmpp domain imeeting.co.kr

xmpp enable

xmpp callbridge add cms

해당 명령어 입력 후 출력되는 Secret 값을 복사합니다.

https://cms domain:445 에 접속하여 General configuration에 좀 전에 설정한 값 들을 입력합니다.

Shared secret 값은 좀 전에 복사한 Secret 값을 입력하면 됩니다.

Web bridge settings 부분과 External access 부분도 설정을 해둡니다.

Webbridge 부분도 설정합니다.

pki csr webbridge CN:join.imeeting.co.kr

pki selfsigned webbridge

webbridge listen a

webbridge certs webbridge.key webbridge.crt

webbridge trust callbridge.crt

webbridge http-redirect enable

webbridge enable


Active Directory Configuration 부분에 설정 값을 추가 합니다.

Submit 을 누르고 Sync now 를 클릭합니다.

Users 와 Space에 user 가 추가 된 것을 볼 수 있습니다.

CMA로 접속해 봅니다.

고급 – 어쨌든 연결을 선택합니다.

위와 같이 접속되며 영상통화도 잘 됩니다.

구글로도 접속해 봅니다.

구글에서도 정상 동작 되는 것 확인이 되었습니다.