Trongthựctế,sẽcórấtnhiềutìnhhuốngxảyracũngnhưcórấtnhiềucác yêucầukhácnhauđốivớihệthốngNAP.Vìvậy,đểđápứngđiềuđó,NAPcho phépchúngtatựxâydựngmộtcặpSHA-SHVtheomụcđíchriêng.Mụcđíchđócó thểlàkiểmtraphầnmềmnàođangchạytrênmáy,kiểmtracáckhóaRegistry… Nângcaohơnnữa,cácnhàpháttriểncóthểthiếtkếcảNAP-Clientđểcàiđặtcho cácmáykhôngđượctíchhợpsẵnNAPnhưLinux,WindowsXPSP1/SP2…
Mụ
c tiêu:XâydựngmộtcặpSHA-SHVriêng,phùhợpvớiyêucầucủahệ
thống.Bêncạnhđó,việcpháttriểnthànhphầnhệthống,sẽgiúpchúngtahiểusâu vàchínhxáchơnnữavềhệthốngNAP.
Ch
ức n ă ng:SHA-SHVdochúngtatựxâydựng,tuântheocấutrúcquyđịnh
củahệthốngNAP,sẽtiếnhànhthuthậpthôngtinvàxửlýtìnhtrạngsứckhỏehệ thống,từđóchophéphayhạnchếtruycậpmạng.
3.4.1. Môi trường phát tri ển:
Môi trường Mô tả
mạng. WindowsVista
WindowsXPSP3 SDKforWindows Server2008
ClienthỗtrợchứcnăngNAP,nếudùngVistachúngta nên cập nhật các Hotfix hoặc cài Service Pack 1đểNAP hoạtđộngtốt.
Thưviệnđểphát triểnứng dụng trên Windows, trongđó cóAPINAP.
Visual Studio 2005 Côngcụpháttriển.
Trang79
QuảnlýtruycậpmạngdựatrênNAP
3.4.2. Phát triển hệ th ống
a. XâydựngSystemHealthAgent(SHA)
KhithiếtkếSHA,chúngtacầnphảiquantâmtớicácmodulesauđây: - ModuledùngđểđăngkýSHAvớiNAPClient: DoSHARegistration
- Modulethựcthinhiệmvụ: DoSHAExecution
Để có thể đăng ký SHA vào hệ thống, NAP sử dụng một Structure là
NapComponentRegistrationInfo. Structurenàycócấutrúcnhưsau:
typedef struct tagNapComponentRegistrationInfo { NapComponentId id; CountedString friendlyName; CountedString description; CountedString version; CountedString vendorName; CLSID infoClsid; CLSID configClsid; FILETIME registrationDate; UINT32 componentType; } NapComponentRegistrationInfo;
TrongStructurenày,quantrọngnhấtlàthànhphần NapComponentId.Đây chínhlàIDgiúphệthốngxácđịnhđượcđúngcặpSHA-SHVtươngứng,cũngnhư phânbiệtcácSHAvớinhau.Saukhilấyđầyđủthôngtintheocấutrúctrên,SHA sửdụngphươngthức RegisterSystemHealthAgent đểđăngkýnóvớiNAPClient. PhươngthứcnàythuộcvềInterface INapClientManagement.Ngượclại,nếumuốn hủy đăng ký, SHA sẽ sử dụng phương thức UnregisterSystemHealthAgent cũng nằmtrongInterfacetrên.
Trongquátrìnhhoạtđộng,SHAcóthểtrảlờikhinhậnyêucầuvềSoHhoặc thôngbáoSoHcósựthayđổitrênmáytrạmchoNAPClient.Điềunàyđượcthực hiệnthôngquacơchế callback interface,SHAsẽcócáchàmtươngứngđượcgọi tùytheoloạiyêucầu.NAPAPIđãtạorainterfaceđểsửdụngtrongcơchếnày,đó chínhlà INapSystemHealthAgentCallback. Mộtsốphươngthứcđượcsửdụngtrong Interfacenàynhưsau:
METHOD DESCRIPTION
INapSystemHealthAgentCallback::CompareSoHRequests SửdụngbởiSHAđểsosánhcácSoH
INapSystemHealthAgentCallback::GetFixupInfo GọibởiNapAgentđểquyếtđịnhtrạngthái củaSHA.
Trang80
QuảnlýtruycậpmạngdựatrênNAP
INapSystemHealthAgentCallback::GetSoHRequest GọibởiNapAgentđểtruyvấnyêucầulấy bảntinSoH.
INapSystemHealthAgentCallback::NotifyOrphanedSoHRequest ĐượcgọinếutruyvấnlấybảntinSoHtới SHA,nhưngSHAkhôngtrảlời
INapSystemHealthAgentCallback::NotifySystemIsolationStateChange GọibởiNapAgentđểchobiếttìnhtrạng cáchlyhệthốngthayđổi.
INapSystemHealthAgentCallback::ProcessSoHRespond ĐượcgọikhiNapAgentnhậnđượcbảntin SoHresponse.
ĐểsửdụngCallbackInterfacenày,SHAphảithựchiệncáccôngviệcsau.
CComPtr<INapSystemHealthAgentBinding> binding = NULL;
hr = binding.CoCreateInstance(CLSID_NapSystemHealthAgentBinding,NULL,
CLSCTX_INPROC_SERVER);
- KhởitạobiếntrỏtớiinterfacequảnlýSHA:
- KhởitạoCallbackInterface
IShaCallbackPtr callback = NULL;
callback = ShaCallback::CreateInstance(binding);
- ĐăngkýCallbackInterfacevớiSHA
hr = binding->Initialize(QuarSampleSystemHealthId,callback);
Đểlấyđượcthôngtin vềtrạngtháisứckhỏehệthống,NAPAgentsửdụng phương thức GetSoHRequest. Phương thức này được định nghĩa trong nhiều Interfacekhácnhau,nhưngchúngtacóthểthấyđượcphươngthứcnàyhoạtđộng
chủyếudựavàocấutrúc SoHRequest. CấutrúcSoHRequest,SoHRespond,vàSoH
đượcđịnhnghĩanhưsau:
typedef struct tagSoH {
UINT16 count;
SoHAttribute *attributes; }SoH, SoHRequest, SoHResponse;
QuảnlýtruycậpmạngdựatrênNAP
Trongcấutrúcnày,thànhphầnSoHAttributecũnglàmộtcấutrúc,được địnhnghĩatừcấutrúckiểuUnion SoHAttributeValue. CấutrúcSoHAttributeValue chứathôngtinvềdanhsáchcácứngdụngđượcđịnhnghĩađểchomáytrạmthỏa mãnchínhsách,hoặcthôngtinvềlỗinếuxảyra.SHAsẽsửdụng2Interfacelà
INapSoHConstructor và InapSoHProcessor đểthuthậpthôngtinvềtìnhtrạngsức
CácInterfacecũngnhưcáccấutrúcđãnóiởtrên,chúngtacóthểtìmhiểu chitiếthơntạihệthốngMicrosoftDeveloperNetwork(MSDN).
b. XâydựngSystemHealthValidator(SHV)
SHV,đượcpháttriểntrongmôitrườngCOMDLL,chínhlànơigiúpngười quảntrịmạngthiếtlậpcácchínhsáchvềantoàntruycậptàinguyênmạng.
KhixâydựngSHV,ngoài2moduleđăngkývàhủyđăngkýSHV,chúngta cầnquantâmtớicácModulechínhsau:
- Modulekiểmtrasựhợplệcủatrạngtháimáytrạmvớichínhsáchtruy cậpmạng:ModuleValidate.
- ModulexửlýbảntinSoHgửitới: ModuleCheckRequestSoHHealth MỗicặpSHA-SHVcómãtrùngnhau,điềunàygiúptừngcặpSHAvàSHV cóthểliênlạcvớinhau.KhiđăngkýSHVvớimáychủNPS,chúngtacũngcần phảichỉrõmãIDchonó.
HRESULT CSdkShvModule::RegisterSdkShv() throw() {
// 1. Khai báo và khởi tạo biến trỏ tới interface của NPS CComPtr pSHVMgmt = NULL;
hr = pSHVMgmt.CoCreateInstance(CLSID_NapServerManagement, ...); // 2. Khai báo và khởi tạo thông tin về SHV
NapComponentRegistrationInfo shvInfo;
hr = FillShvComponentRegistrationInfo(&shvInfo);
// 3. Đăng ký SHV với NPS, CSampleShv chứa các hàm xử lý yêu cầu hr = pSHVMgmt->RegisterSystemHealthValidator(&shvInfo,
(CLSID*)&__uuidof(CSampleShv)); }
Trang82
QuảnlýtruycậpmạngdựatrênNAP
Đểthựchiệnviệckiểmtratìnhtrạngsứckhỏehệthốngcóphùhợpvớichính sách truy cập mạng hay không, SHV sử dụng 2 Interface sau đây:
INapSystemHealthValidationRequest và INapServerCallback.
STDMETHODIMP CSampleShv::Validate(
/*[in]*/ INapSystemHealthValidationRequest* pShvRequest,
/*[in]*/ UINT32 hintTimeOutInMsec,
/*[in]*/ INapServerCallback* pCallback)
Cácphươngthứctrong2Interfacenày,chúngtacóthểtìmthấychitiếttrên websiteMSDN.
Để thực hiện việc xử lý bản tin SoH gửi tới, SHV sử dụng Interface
SystemHealthEntityId systemHealthId,
INapSoHProcessor *pSohRequest,
HRESULT &complianceResult )
INapSoHProcessor nhưsau:
Ngoàira,chúngtacầnchúýthêmlàSHVđượccàiđặttrênservervàcó nhiệmvụkiểmtranhữngyêucầuvềkhảnăngtựbảovệtừnhiềumáytrạmcùng lúc.DođóSHVtrongthựctếsẽphảinhậnvàxửlýnhiềuyêucầukiểmtrachính sáchcùnglúc.Bêncạnhđócũngcórấtnhiềutrườnghợpviệckiểmtrachínhsách đòihỏiSHVphảiliênlạcvớiserverkhác,vàmấtnhiềuthờigianchotừngyêucầu kiểmtrachínhsách.ĐểgiảiquyếtvấnđềtrênSHVđãtạoratừngthreadxửlýcho từngyêucầukiểmtrachínhsách.
STDMETHODIMP CSampleShv::Validate(
INapSystemHealthValidationRequest* pShvRequest,
UINT32 hintTimeOutInMsec, INapServerCallback* pCallback) throw() {
// 1. Chuẩn bị thông tin cho một yêu cầu kiểm tra chính sách asyncDataItems* requestData = NULL;
requestData->pthis = this;
requestData->piShvRequest = pShvRequest; requestData->piCallback = pCallback;
// 2. Tạo thread mới để xử lý yêu cầu kiểm tra chính sách hr = QShvCreateThread( requestData );
}
3.4.3. Th ử nghiệm cặ p SHA-SHV xây dự ng
Trang83
QuảnlýtruycậpmạngdựatrênNAP
TrênmáytrạmWindowsVista,việctriểnkhaiSHAnhưsau:
- Đểkiểmtraviệcđăngkýthànhcông,dùnglệnh:
netsh nap client showstate
ChúngtasẽthấycóSHAmớitênlàSHASDKSampleđãxuấthiện tronghệthốngnhưsau:
TrênmáychủNPS,chúngtatiếnhànhđăngkýSHVvớihệthốngnhưsau: - Dùnglệnhregsvr32.exeSdkShv.dllđểđăngkýSHVvớiNPSmangtên
SDKSHVSample.
Trang84
QuảnlýtruycậpmạngdựatrênNAP
SaukhiđăngkýSHAvàSHVthànhcông,chúngtatiếnhànhcấuhìnhcác phươngthứcthựcthinhưđãlàmtạicácbướctrên.Khiđó,SHAvàSHVsẽlàmột thànhphầntronghệthốngthựcthiNAPđanghoạtđộng.
3.5. Nhậnxét-Đánhgiá
NAPđượcxemlàgiảipháptăngcườngbảomậtmạngchứkhôngphảilàgiải phápbảomậtmạng.Lýdolànóchỉđảmbảocácmáytoànquyềntruycậptài
nguyênmạnglànhữngmáytuânthủchínhsáchtruycậpmạng,màkhôngcungcấp cơchếngănchặntấncôngtừnhữngmáyđãtuânthủchínhsáchđó.
Bêncạnhđó,khitriểnkhaicácphươngthứcthựcthiNAP,chúngtanhận thấythôngtintraođổigiữaSHAvàSHVchưađượcbảovệ.Điềunàycóthểdẫn đếnkhicósựthayđổitráiphépyêucầuAuto-RemediationchoSoHkhinóchuyển từSHVtớiSHA,nócóthểyêucầuSHAthựchiệnnhữngviệcgâyhạichomáy trạm.Đểgiảiquyếtvấnđềnày,SHAvàSHVphảitựthựchiệncơchếbảovệthông tintraođổihoặckhôngmởchứcnăngAuto-Remediationtrongmôitrườngkhông cóbảovệthôngtinđườngtruyền.Cácdịchvụcósẵnhỗtrợmôitrườngbảovệ thôngtinđườngtruyềnlà:IPSec,802.1x,VPN.
VấnđềquantâmtiếptheolàviệccóthểtạoSHAtráiphép,nhằmmụcđích thaythếSHAcósẵnnàođótronghệthốngthựchiệntrảlờiSoHchoNPS.Điều nàycóthểlàmchoNPSkiểmtranhữngSoHsailệchvàxemnhưmáytrạmđãtuân thủchínhsáchtruycậpmạng.Đểgiảiquyếtvấnđềnày,chúngtakhôngnêncấp chongườisửdụngcótoànquyềntrênmáytrạmđểđăngkývàthayđổiSHA.
Trang85
QuảnlýtruycậpmạngdựatrênNAP
CHƯƠNG IV.KẾTLUẬN
4.1. Kếtquả đạtđược củađồán
• Trongquátrìnhthựchiệnđồán,nhữngyêucầuvềđảmbảoantoàncho truycậpmạngđượctìmhiểucặnkẽ.
• Nguyênlýhoạtđộng,cấutrúc,thànhphầncủahệthốngNAPđượctìm hiểuvànắmvững.
• Môhìnhtriểnkhaicàiđặtthànhcông,đápứngđượcyêucầurấtthựctế củahệthốngmạngdoanhnghiệp.
• TìmhiểuhướngpháttriểnhệthốngNAP,tùybiếnhệthốngtheotừng yêucầukhácnhaucủanhàquảntrị
4.2. Nhữngmặthạn chế
• Đồánchưapháttriểnđượchoànchỉnhmộtcặpthànhphầnmới,cónhiều tínhnănghơnthànhphầncósẵntronghệthốngNAP.
• HệthốngNAPkhótriểnkhainếutrongmạngcónhữngmáycàiđặtphiên bảnWindowscũ(nhưWindowsXPSP2,Windows2000…)hoặcLinux
4.3. Hướng pháttriển trongtươnglai
• XâydựngthànhcôngthànhphầnSHA-SHVđápứngđầyđủtấtcảcác yêucầukhácnhaucủanhàquảntrị
• XâydựnghệthốngNAPClientdànhchocácphiênbảnWindowscũ,cho cácmáytrạmcàiđặthệđiềuhànhnềnLinux…khôngđượcNAPhỗtrợ. Đảmbảotínhtươngthíchtốiđachotấtcảcáchệthốngmạng.
Trang86
QuảnlýtruycậpmạngdựatrênNAP
TÀI LIỆU THAMKHẢO
1. WindowsServer2008–NetworkingandNetworkAccessProtection(NAP), JosephDavies,TonyNorthrup,MicrosoftPress,2008
2. MicrosoftSolutionsforSecurityandCompliance,MicrosoftPress,2006 3. WindowsServer2008- Administration,SteveSeguis,McGrowHill,2008 4. WindowsServer2008–ConfiguringNetworkInfrastructure,BrienPosey,
Syngress,2008
5. MicrosoftWindowsSoftwareDevelopmentKit(SDK),2008. 6. Website: http://technet.microsoft.com
7. Website: http://msdn.microsoft.com
8. Website: http://en.wikipedia.org 9. Website: http://msopenlab.com