Chúngtacầnphảitạoraítnhất3VLANtrênSwitch.Trongmôhìnhnày, chúngtatạora3VLANnhưsau:
- VLANID1:ĐượcđặttênlàDefault_VLAN. VLANnàybaogồmtấtcả cácportkhôngđượcđánhdấu,khôngthuộc2VLANtiếptheo.
- VLANID2:ĐặttênlàNONCOMPILIANT_VLAN.Nhữngmáyclient đượcxácđịnhkhôngđủsứckhỏehệthốngsẽđượcđưavàoVLANnày đểhạnchếtruycập.
- VLANID3:CótênCOMPLIANT_VLAN.VLANnàydànhchocácmáy thỏamãnchínhsáchtruycậpmạng.
Chúng ta cấu hình Switch sử dụngmáychủ NPSlàmmáy chủ xác thực (authentication)vàủyquyền(authorization).Vàcácportnốivới2máychủ NPS và Domain Controller cần phải cấu hình không yêu cầu xác thực
Trang68
QuảnlýtruycậpmạngdựatrênNAP
802.1X.Ngoàirachúngtacầnchúý,nếusửdụngSwitchLayer3,thìphải disableinter-VLANroutinggiữaVLAN2vàVLAN3.
3.2.2. Cài đặt Enterprise Root CA trên máy ch ủ Domain Controller.
QuátrìnhcàiđặtRootCAkhôngquáphứctạp.Chúngtachỉcầnlàmtương tựnhưphầntrước.Tuynhiên,phươngthứcthựcthi802.1Xkhôngyêucầu phảicóHealthCertificate,chonênchúngtakhôngphảitạothêmTemplate mớinhưvớiphươngthứcthựcthiIPSec.
3.2.3. Cài đặ t và cấ u hình máy ch ủ NPS
MáychủNPSlàthànhviêncủadomain,đượccàiđặthệđiềuhànhWindows Server2008.ChúngtasửdụngServerManager,càiđặtRoleNetworkPolicy Server.Triểnkhaiphươngthứcthựcthi802.1X,chúngtachỉcầncàiđặt1 rolelàNetworkPolicyServernhưsau:
Hình3.9:CàiđặtNPSServertrongphươngthứcthựcthi802.1X
Saukhiquátrìnhcàiđặtthànhcông,chúngtacầnphảiRequesttớiRootCA đểlấychứngchỉchoNPS.Chứngchỉnàysẽđượcsửdụngchoquátrìnhxác thực PEAP giữa NPS Server và Domain Controller. Sử dụng giao diện MMC\Certificate,chúngtacóthểyêucầulấyđượcchứngchỉtừCAnhư sau:
Trang69
QuảnlýtruycậpmạngdựatrênNAP
Saukhirequestthànhcôngchứngchỉ,chúngtathựchiệnbướctiếptheo,đó làcấuhìnhNPSServer.
Sửdụnggiaodiệnnps.mscđểcấuhìnhphươngthứcthựcthi802.1X.Đối
vớiphươngthứcnày,NAPcungcấpchochúngta2lựachọn.Thứnhấtlà 802.1X–WiredchohệthốngmạngLAN,vàthứhailà802.1X–Wireless dànhchohệthốngmạngkhôngdây.Cáchthứccấuhìnhgiữa2lựachọnnày là tương tự như sau. Trong mô hình thử nghiệm này, chúng ta sử dụng 802.1X–Wirednhưsau:
Trang70
QuảnlýtruycậpmạngdựatrênNAP
Tiếp theo, chúng ta phải cung cấp cho NPS server địa chỉ của RADIUS Client,ởđâychínhlàthiếtbị802.1Xnhưsau:(Trongmôhìnhnày,802.1X Switchcóđịachỉlà172.16.1.254)
Trang71
QuảnlýtruycậpmạngdựatrênNAP
Hình3.10:CấuhìnhNPSServertrongphươngthứcthựcthi802.1X
Saukhicungcấpđịachỉcủa802.1XSwitch,chúngtaphảicấuhìnhNPS ServervớicácthôngtinvềVLANdànhchocácmáythỏamãnvàkhông thỏamãnchínhsáchtruycậpmạng.Trongmôhìnhtriểnkhainày,VLAN3 dànhchocácmáythỏamãnchínhsách,cònVLAN2dànhchocáchmáy khôngthỏamãn.Cácthôngsốcấuhình2VLANnàytươngtựnhưnhau,chỉ khácphầnVLANID(Tunnel-Ptv-Group-ID)màthôi.Dođóchúngtacần phảichúýcungcấpđúng.DướiđâylàcácthôngsốvềVLANdànhchocác máythỏamãnchínhsáchtruycập.
Trang72
Hình3.11:ThôngsốcấuhìnhVLANtrongphươngthức802.1X
Trang73
QuảnlýtruycậpmạngdựatrênNAP
BướccuốicùngtrênmáychủNPS,chúngtacấuhìnhđểkhởiđộngcácdịch vụcầnthiếttrênmáyclient.
Hình3.12:SửdụngGPOcấuhìnhcácdịchvụ802.1X
NgoàiservicesNAPAgentvàmộtEnforcementClient(trongtrườnghợp này là EAP Quarantine Enforcement Client) cần phải khởi động như các phương thức khác, phương thức thựcthi 802.1X còn yêu cầu client khởi độngmộtdịchvụkhác.ĐólàdịchvụWireAutoConfig.Cácdịchvụnàycó thểđượccấuhìnhkhởiđộnglocaltrêntừngmáytrạm,hoặccấuhìnhthông quaGPOcủamiền.CáchđơngiảnnhấtlàchúngtacấuhìnhbằngGPOcủa miền.
3.2.4. Cấ u hình máy tr ạ m sử dụ ng 802.1X
Chúngtacầnphảicấuhìnhchomáytrạmsửdụngphươngthứcxácthực 802.1X. Nếu nhưmáy chủ DomainController đượccàiđặt hệđiềuhành WindowsServer2008,chúngtacóthểlàmbướcnàybằngcáchdùngGPO
tạiphầnWiredNetwork(IEEE802.3)Policies.Tuynhiên,nếuhệthống
mạngsửdụngmáyWindowsServer2003làmDomainController,chúngta sẽphảimởrộngSchemahệthốngtrướckhicấuhìnhGPO.Trongmôhình
Trang74
QuảnlýtruycậpmạngdựatrênNAP
triểnkhainày,chúngtasẽcấuhìnhtrựctiếptrênmáyclient.Chúngtaphải cấuhìnhclientvớicácthôngsốnhưsau:
Hình3.13:Cấuhìnhmáytrạmsửdụng802.1X
Sau4bướccấuhìnhnhưtrên,chúngtasẽtriểnkhaithànhcôngphươngthức thựcthiNAP802.1Xtronghệthống.Phươngthứcthựcthi802.1Xlàmột phươngpháphoànhảonhấtđểépbuộctấtcảcácmáytrạmphảithựchiện việckiểmtratìnhtrạngsứckhỏehệthốngnếumuốntruycậpvàomạng.
3.3. Triển khaiphương thứcthựcthiDHCP,VPNvà TSGateway
3.3.1. Ph ươ ng th ứ c th ự c thi DHCP
Môhìnhtriểnkhaiphươngthứcnàykháđơngiản,khôngcógìphứctạp. DHCPvàNPSServercóthểđượccùngcàiđặttrên1server.Khitriểnkhai, chúngtacũngtiếnhànhtươngtựnhư2phươngthứctrên:Càiđặtvàcấu hìnhNPSServer,khởiđộngcácdịchvụvàEnforcementClientcầntương ứng.Tuynhiên,đốivớiphươngthứcnày,chúngtaphảicấuhìnhthêm1 bướctạiDHCPServernhưsau:
QuảnlýtruycậpmạngdựatrênNAP
Hình3.14:CấuhìnhphươngthứcthựcthiDHCP
MỗikhiClientyêucầuđượccấpDHCP,nếuthỏamãnchínhsáchtruycập mạng,nósẽđượccấpđầyđủcácthôngsốTCP/IP.Ngượclại,nếukhôngđủ tiêuchuẩn,nósẽđượcDHCPServersửdụngNAPDefaultClassđểcấpcác thôngsốhạnchếtruycập.
3.3.2. Ph ươ ng th ứ c th ực thi VPN.
ChúngtatriểnkhaimôhìnhthửnghiệmphươngthứcthựcthiVPNnhưsau:
Hình3.15:MôhìnhtriểnkhaiphươngthứcthựcthiVPN
Trang76
Quátrìnhcàiđặt,triểnkhaiRootCA,NPSServerđốivớiphươngthứcthực thiVPNkhôngkhácsovớicácphươngthứckhácmàchúngtađãlàmởtrên. Tuynhiên,khitriểnkhaichúngtacầnphảichúý2điểmkhácbiệtsau: - KhicấuhìnhVPNbằngdịchvụRoutingandRemoteAccess,chúngta
cầnphảicấuhìnhchỉrõRADIUSServerchínhlàNPSServer(địachỉ 192.168.0.2)
Hình3.16:CấuhìnhRADIUSServertrongphươngthứcVPN
- KhicấuhìnhNPSServer,chúngtaphảichỉchonóbiếtRADIUSClient là máy chủ nào. Trong mô hình này, RADIUS Client chính là VPN Server,cóđịachỉlà192.168.0.3
Hình3.17:CấuhìnhRADIUSClienttrongphươngthứcVPN
Trang77
QuảnlýtruycậpmạngdựatrênNAP
3.3.3. Ph ươ ng th ứ c th ực thi TS Gateway
hìnhnhưsau:
Hình3.18:MôhìnhtriểnkhaiphươngthứcthựcthiTSGateway
QuátrìnhcàiđặtvàyêucầuRootCAcấpchứngchỉchoNPSservertương tự như chúng ta đã làm phía trên. Tuy nhiên, khi cấu hình TS Gateway ServerchúngtacầnchúýcấuhìnhmụcTSCAPStorenhưsau:
Hình3.19:CấuhìnhTSGatewayserver
Trang78
QuảnlýtruycậpmạngdựatrênNAP
Chúng ta cần phải đảm bảo mục Request clients to send a statement of healthđượcđánhdấuchọn.Tiếptheo,chúngtacầnchỉrõsửdụngNPS Serverởđâu.Tùytheomôhìnhtriểnkhai,màchúngtachọnLocal(NPSvà TSGatewayđượccàiđặttrêncùng1server)hayCentral.Trongmôhìnhthử nghiệmnày,chúngtachọnLocal.Cácbướctriểnkhaicònlại,chúngtacấu WindowsServer2008 Serverđóngvaitròquảnlýcácchínhsáchvàdịchvụ
hìnhtươngtựnhưđãlàmvớicácphươngthứcthựcthikhác.
Tómlại,với5phươngthứcthựcthiđãtriểnkhai,cácnhàquảntrịmạngcó thểsửdụngkếthợp,hayđơnlẻtùytheomụcđíchcủamình.Vànhìnchung,hệ thốngNAPđượcxâydựngsẵnbởiMicrosoftđãđápứngphầnlớnyêucầucủacác nhàquảntrịmạnghiệnnay.Vớinhữngtrườnghợpđặcbiệt,cóyêucầukhác,chúng tacầnphảipháttriểnriêngchomìnhmộthệthốngNAP.Phầntiếptheochúngtasẽ cùngđivàoviệcpháttriểnhệthốngđó.
3.4. Pháttriểnchươngtrình.
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;