2008년 12월 31일 수요일

sp_replwritetovarbin 확장 저장 프로시저(Extended Stored Procedure) 취약점

SQL Server 의 기능중에 하나인 확장 저장 프로시져중 sp_replwritetovarbin 에서 오버플로우 취약점 으로 인한 원격 코드 실행 가능성이 있다고 합니다.

자세한 사항은, 다음 문서를 참고해 보시기 바랍니다.

http://www.microsoft.com/technet/security/advisory/961040.mspx
http://blogs.technet.com/swi/archive/2008/12/22/more-information-about-the-sql-stored-procedure-vulnerability.aspx

임시 해결책으로는, 해당 프로시져를 disable 하거나  권한을 변경 하라고 하는데요. 이러한 프로시져가 쉽게 실행이 가능한(직간접적으로 쉽게 접근이 가능한....) 상태로 서버가 운영되고 있다는 점이 더욱 큰 문제 인것 같습니다.

이를테면, SQL Injection 인데요. 물론 SQL Injection 을 당해서 해당 DB 만 레코드가 위변조 되면 코드 수준의 문제이지만, sa 계정 같은 권한 상태로 운영되는 경우 서버 전체가 침해사고가 발생하다는 점일것 입니다.

앞서 그런한 상태의 서버는,.
sa 나 그와 같은 권한을 너무나 쉽게 사용하고 공개? 한다는 점이겠지요.

2008년 12월 30일 화요일

SQL Server 백업후 압축, FTP 전송

SQL Server 2000/2005: Automated Database Backups and Restorations
http://www.codeproject.com/KB/database/assiduous.aspx

Enterprise Manager 나, SQL Server 2005 에서의 Management Studio 에서 가능한 유지관리 작업인데,. 위 예제의 경우,. Winzip 으로 압축을 하고 추가로 FTP 로 전송까지 하는 방법을 설명.

물론,. xp_cmdshell 를 사용하므로써 가능한 일. ^^

2008년 12월 25일 목요일

닷넷에서 Oracle Database 연결

오라클의 기술문서중에 한개로,.

오라클 데이타베이스 기반 .NET 애플리케이션의 구축
http://www.oracle.com/technology/global/kr/pub/articles/cook_dotnet.html


닷넷에서, Oracle Database 를 이용하는 예제.
Oracle.DataAccess.dll 를 참조하는 것과, Oracle 만의  기본적인 Connection 설정외,.
나머지는 ADO.NET 과 같음....

Linux, iSCSI 환경에서 Oracle RAC 10g Release 2 클러스터 설치하기

오라클의 기술문서 중에 한개
http://www.oracle.com/technology/global/kr/pub/articles/hunter_rac10gr2_iscsi.html


Oracle 의 클러스터 기술인 RAC 구현을, 실제 장비로 구현해 보기에는 현실적으로 어려움이 있어서 소프트웨어 기반 iSCSI Target 을 이용해서 구현을 하는 방법 소개.

Windows Server 2008 Service Pack 2 Beta 한글 다운로드 가능



Windows Server 2008 Service Pack 2 Beta 버젼이, 주요국 언외에 한국어등 몇개 언어가 추가로 배포되고 있는 중입니다.

아시다 시피??,.
Windows Server 2008 / Vista 부터는 Service Pack 를 각각 배포하지 않고 하나의 패키지에 모두 포함되어 있습니다.

x86(32bit)
http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=dca54ecc-362a-4b4d-b62b-22780e839a7e

x64(64bit)
http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=361d0ca3-4b2c-4f1c-8b3e-de376fdb1de8

C#, Path.ChangeExtension Method

파일 확장자만 변경이 필요할때,. 확장자를 쉽게 얻을수 있는 Method.
http://msdn.microsoft.com/en-us/library/system.io.path.changeextension.aspx 

그런데,. Path 클래스의 단점...
경로상의 마지막 문자열을 무조건 파일로 인식한다는 점...;;;;;;

FileInfo 를 써서 확장자를 알아 내는 것도 좋지만,. 간단한 작업에선,,..
Path 클래스를 쓰는것도 좋은 방법인듯...;;;;

DirectoryInfo df = new DirectoryInfo(@"D:\");
foreach(DirectoryInfo sf in df.GetDirectories())
{
 foreach (FileInfo f in sf.GetFiles())
 { 
     if (f.Extension == ".txt")
     {
       string result = Path.ChangeExtension(f.FullName, ".log");
       f.MoveTo(result);
       Console.WriteLine(f.FullName);
     }
 }
}

C# - CSV Import Export

http://www.codeproject.com/KB/database/Cs_CSV_import_export.aspx

직접 텍스트를 파싱한게 아니라,.
ADO.NET (ODBC/OleDB Dirver) 를 이용했다는게 흥미로움..??....

Asynchronous Registry Notification Using Strongly-typed WMI Classes in .NET

http://www.codeproject.com/KB/system/WMI_RegistryMonitor.aspx

특정 레지스트리 위치의 수정 에 대한 이벤트를 Win32 라이브러리를 .NET wrapper (http://www.codeproject.com/KB/system/registrymonitor.aspx?display=PrintAll) 를 이용해서 이벤트를 얻을수 있긴 하지만,. 다소 제한 적...

위 예제의 경우에는,. WMI 의 RegistryKeyChangeEvent 클래스에 대한 WqlEventQuery 를 이용해서 이벤트를 얻을수가 있고,.. Win32 라이브러리 보다 약간 쫌... 더 다양한 이벤트를 얻을수 있음...^^

Simple Ping Utility with GUI

http://www.codeproject.com/KB/IP/SimplePingUtilityWithGUI.aspx

오훗.! 괜찮은 유틸,...

소스도 함께 공개되어 있으므로, 현재는 xml 에서 Ping 체크 리스트를 가져 오는데, 서버가 많거나 또는 별도의 DB 기반 관리 시스템이 있다면 해당 DB에서 체크하는 목록을 가져오도록 개선해서 이용해 보는 것도 좋을듯.^^

Send Emails in ASP.NET, SmtpClient Credentials

Google 에서는 SMTP 를 제공하기 때문에,. 그걸 이용하는 ASP.NET C# 예제.
http://www.codeproject.com/KB/aspnet/aspnetemailusinggmail.aspx

예제 코드에서는,. 원격지 SMTP 인증에 관한것.

2008년 12월 24일 수요일

Riva FLV Encoder , 프리웨어 FLV 인코더

http://rivavx.de/index.php?encoder&L=3

쓸일이 잠깐 있어서 찾아 봤는데,.
이런거 Free 로 배포되는게 별로 흔하지 않은것 같네요.

차이는 있겠지만,.
뭐 요즘,. 국내 동영상 포털 부터 해서 유튜브, SoapBox 등 보통의 동영상 파일 업로드 하면 플래시무비 파일로 변환이 자동으로 되기도 하고..^^

아참,. 이런 파일을 웹서버에 올려놓고 호스팅 한다면, IIS 7 에 추가 모듈로 가능한 Media Pack (http://www.wssplex.net/Tools/UsefulTools.aspx?Seq=69) 이용을 해보는 것도 좋은 생각?..^^

Server.Transfer 와 Context.Handler

닷넷 1.1 에서는,.
부모 페이지 클래스에 대한 개체 인스턴스를 통해서 접근을 했는데,.

wssplex.a _a = (wssplex.a) Context.Handler;

닷넷 2.0 에서는
Context.Items 을 이용해서 겁내 쉽게 접근이 가능하네효.^^

Passing values between two IHttpHandlers within the same HttpContext
http://blogs.msdn.com/csano/archive/2005/12/14/503758.aspx

Programmatically Manage IIS

http://www.codeproject.com/KB/server-management/DirectoryServicesIIS.aspx

IIS 5/6 은 System.DirectoryServices 네임스페이스 나,. COM 개체를 이용하면 되고,.
IIS 7 은 http://www.wssplex.net/TipnTech.aspx?Seq=239 처럼,
제어가 가능한 별도의 네임스페이스를 라이브러리를 제공해 주고 있긴 하나,.........

좀더 쉽게 사용할수 있도록 자기만의 프레임워크 를 만들어 놓은듯...^^

Simple Reverse Proxy in C# 2.0

http://www.codeproject.com/KB/IP/SimpleReverseProxy.aspx

이거 어떻게 보면, 괜찮은 아이디어고,.. 또 어떻게 보면....
별 쓸때 없는 것 같고.....^^

그건 있을것 같음..
다중 도메인에서 처리가 되는 요청이라면,..
Client 입장에서는,. 웹요청을 하나의 도메인에서 모두 처리가 가능하다는것...

An FTP secure client library for C#

http://www.codeproject.com/KB/IP/FTP_Secure.aspx

C# 으로, FTP Client 를 구현하는 소스 인데,.
SSL 을 지원하는 Ftp Server 에 접속할 때...

nix 기반 FTP 나, 상용 또는 그와 비슷한 기능을 갖는 FTP Server 프로그램에서는 SSL 을 이미 지원하고 있으나, 늦은 감이 없지 않아 있지만,.

IIS FTP의 경우, 기존 6 까지는 SSL 적용을 지원하지 않았으나,.
IIS 7 부터는 SSL 적용이 지원 되므로 써먹을수 있을듯... ^^

Switching Between HTTP and HTTPS Automatically

http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx

흠;;;, 괜찮은 아이디어..^^

일반적으로, SSL 적용을 할때 개인정보, 금융정보등의 트래픽이 왔다리 갔다리 하는 꼭 필요한 페이지만 하면 되긴 한데,. 그걸 적용할려면 웹페이지 링크 수정등 페이지가 많은 사이트의 경우 완죤 노가다. -_-;;

왜?.... 특정 페이지만, https:// 를 걸면 되지 않냐? 싶겠지만,.

사이트 내부 링크는 보통 도메인 까지 쓰지 않는 /Path/ 형식의 상대 경로를 사용하기 때문에 특정 페이지에서 Https:// 로 진입후에 다시 SSL이 필요 없는 페이지로 갈때,.

그런 상황에서, 링크된 모든 곳을 일일히 https:// 가 아닌 http:// 로 링크를 걸어야 하는 수고스러움이 있는게 사실.. 물론,. 걍 니멋대로.... 라면 아무런 도움이 되지 않을 내용. ^^

Step-by-Step SQL Mirroring the ASPState Database

http://www.codeproject.com/KB/database/sqlmirroring.aspx  

요건,. 세션을 DB에 저장하는 경우와 관련된 포스트,.

SQL Server 2005 부터 지원하는 데이터베이스 미러링 설정된 상태에서의 web.config 에서의 세션정보 설정과, Failover 시에 작동과 관련한 내용.

세션정보가 매우 중요한 경우가 아니면,. 일반적으로, 작업자 프로세스에 저장되는데, 작업자 프로세스에도 영향을 받지 않게 할려면, ASP.NET State Service 에 세션정보를 저장해도 크게는 무리 없음...

물론, 웹서버 자체가 죽으면,. ASP.NET State Service 에 독립적으로 저장된 세션 정보도 의미는 없게 되지만...ㅋ

2008년 12월 19일 금요일

ADO(MySQL ODBC) 에서의 CursorLocation=3 관련 메모리 문제

Asp(Vbscript) 는 해본적이 너무 오래되서, 잊고 있었던 내용 입니다. (요즘엔 닷넷만 해서.....) ADO 에서의 커서를 생성하는 위치를 지정하는 CursorLocation 에 관련되어 메모리 문제 입니다.

CursorLocation 은 ADO 에서, 레코드셋을 만들기 위해서 커서의 생성 위치를 어디에 두느냐? 라는 것을 지정해 줄수 있는 옵션 입니다. 물론 지정하지 않으면 기본값이 Server 측인데,. 즉 DB 서버 라는 얘기 입니다.

CursorLocationEnum
http://msdn.microsoft.com/en-us/library/ms677542(VS.85).aspx

문제는. CursorLocation=3 으로 클라이언트 측에 둘때의 문제 입니다.

물론 클라이언측에 두었을 때의 잇점이 많이 있기 때문에 사용하는 것도 있지만,. 쿼리문에서 사용되는 테이블의 레코드 갯수가 적을 때에는 문제를 느끼기 어렵고, 대량의 레코드를 갖고 있는 경우에 문제가 됩니다.

특히,. 집계 함수를 사용하는 경우인데, 이때 커서 위치가 클라이언측에 있는 경우, 이를 테면 웹서버에 두는 경우 웹프로세스(작업자프로세스)에 메모리 점유가 상당하는 점 입니다. (운영하는 서버에서는 단 5분 만에 500M 를 초과 하며, 해당 테이블의 레코드 갯수가 20만개가 넘습니다.)

이러한 비정상적인 메모리 점유에 대한 내용을 확인하던 중에, 꾀 흥미로운 점을 발견 했습니다. 즉 ODBC 드라이버에서 MySQL 에 던지는 쿼리 형태 입니다.

081218  4:41:12   46781 Connect     wssplex@xxx.xxx.xxxx.xxx on wssplex
          46781 Query       SET SQL_AUTO_IS_NULL = 0
          46781 Query       select database()
          46781 Query       select database()
          46781 Query       SELECT @@tx_isolation
          46781 Query       select count(distinct(컬럼)) c from 테이블 where 컬럼 = '값'
081218  4:41:13   46781 Query       SELECT * FROM 테이블
081218  4:41:34   46781 Query       select database()

위에 보이는 것처럼, select * 를 하여 테이블을 통째로 쿼리 한다는 점입니다. 이 통째 쿼리한 결과는 웹서버측에 반환되고, 이것을 받은 웹프로세스는 메모리가 급격하게 증가 합니다.

잠시 동안은 이러한 쿼리가 DB 측에 날라 간다는 점을 알지 못하였고,. 위 쿼리를 사용한 웹페이지를 아무리 확인해 봐도 메모리 점유를 할만한 부분이 있지 않았습니다.

물론,. 위의 이러한 점을 확인하기 위해서 정확하게 웹서버측에서 전달되는 것을 확인하기 위해서 패킷 캡쳐를 하여 문자열을 확인해 보기도 하였습니다.

..C..B..#.$h..E..\..@...-....L...J....A.....-.P..j.k..0....
select count(distinct(컬럼)) c from 테이블 where 컬럼 = '값'
IP (tos 0x0, ttl 128, id 54945, offset 0, flags [DF], proto 6, length: 65) xxx.xxx.xxx.xxx.4299 > xxx.xxx.xxx.xxx.3306: P [tcp sum ok] 3716:3741(25) ack 2161 win 65061
..C..B..#.$h..E..A..@...-....L...J....A..%...*P..%.........
SELECT * FROM 테이블

이런식의 쿼리가 되는 것은,. CursorLocation 을 클라이언트 측에 두었기 때문 입니다.

그러나 MSSQL 의 경우에도 이런식의 쿼리 형태 인지는 확인해 보지 않았습니다. 만약 MySQL 에서만 그랬다면 MySQL 의 특성이거나 MyODBC 드라이버 문제이지 않을까도 생각해 봅니다. 모든 DB에서의 동일한 현상이라면 ADO 의 작동 방식일수도 있겠고... (*혹시 아시는 분은 댓글 부탁드려요.^^)

CursorTypes, LockTypes, and CursorLocations
http://dev.mysql.com/tech-resources/articles/vb-cursors-and-locks.html

물론, 커서 위치를 단순하게 서버측이냐, 클라이언트냐 의 문제 보다는 데이터를 어떻게 이용하는 방법에 따라서 불가피하게 특정 커서 위치를 선택해야 하는 경우도 있을것 입니다.

2008년 12월 17일 수요일

Microsoft SQL Server 2005 서비스 팩 3 다운로드 가능

12월 15일 자로, SQL Server 2005 의 서비스 팩 3의 다운로드가 가능한 상태 입니다. 기존에 나왔던 패치, 업데이트와 몇몇 항목이 개선이 되었다고 합니다.



서비스 팩 3 다운로드:
http://www.microsoft.com/downloads/details.aspx?FamilyID=ae7387c3-348c-4faa-8ae5-949fdfbe59c4&DisplayLang=ko

SQL Server 2005 SP3의 새로운 기능
http://msdn.microsoft.com/ko-kr/library/dd353312(SQL.90).aspx

설치를 하기전에 현재 운영되는 환경에서의 SP3 적용에 문제는 없는지, 함께 공개된 릴리즈 문서를 검토하는것이 좋을것 같습니다. ^^

2008년 12월 15일 월요일

Internet Explorer 의 원격 코드 실행 zero-day 취약점 - 961051

Internet Explorer 의 zero-day 취약점 공격에 대해 정보를 알려드립니다.
이번 문제는 Internet Explorer 5.01, 6, 7, 8(베타)에 모두 해당됩니다.

OS로 구분하면 Windows 2000/XP/Vista, Windows Server 2003/2008이 해당됩니다.

페이지가 수시로 수정되고 번역 시간이 있기 때문에 영어 페이지에 더 최신 정보가 유지됩니다.

http://www.microsoft.com/technet/security/advisory/961051.mspx (영어)
http://www.microsoft.com/korea/technet/security/advisory/961051.mspx (한국어)

이 외에도 아래에서 자세한 기술적 정보를 보실 수 있습니다.

보안 대응 센터(MSRC) http://blogs.technet.com/msrc/
악성 코드 방지 센터(MMPC) http://blogs.technet.com/mmpc/
윈도우 취약점 연구팀(SWI)의 블로그 http://blogs.technet.com/swi/

이 외에 패치 발표일과 관련해 추가 공지 사항이 나오면 즉시 추가로 공지해 드리도록 하겠습니다.
보안 패치가 나오기 전에 고객께서 직접 workaround로 취할 수 있는 방법 9가지 정도가 Microsoft Security Advisory에 소개되고 있습니다.

http://www.microsoft.com/technet/security/advisory/961051.mspx 문서에서 [Suggested Actions]의 [Workarounds]를 참고하시기 바랍니다. 특히 이 부분의 내용이 계속 추가되는 중입니다.

--> 불법 사이트나 의심이 되는 사이트 접속은 하지 않는 것이 좋다는 의견 이지만, 이 역시,. 전용 위조 사이트나 페이지를 만드는 것보다는, SQL Injection 으로 정상적인 웹사이트에 악성 코드를 심어 놓은후, 해당 웹사이트에 접속한 클라이언트는 감염될 것 입니다.

2008년 12월 11일 목요일

Winmgmt(WmiPrvSE.exe) & wmiApSrv 의 메모리 문제 on Vista, Windows Server 2008

Windows Server 2008 에서도 동일하게, WMI 를 이용해서 성능 카운터 정보를 얻을수 있습니다. 그런데, 이상하게도 WmiPrvSE.exe 프로세스의 메모리 점유율이 비정상적으로 높은것을 알수 있습니다. (* 같은 코드 기반인 Vista 에서도 동일할듯....)

이러한 문제는, 이전 Windows 2000 에서 발생했던 적이 있었으며,. 추후 패치가 제공 되었습니다. 그리고 그 이후의 Windows 2000 과 Windows Server 2003 에서는 동일한 문제가 발생하지 않고 있습니다.

모니터링 도구를 실행하면 Winmgmt.exe에서 메모리가 누수된다
http://support.microsoft.com/kb/811772

이러한 문제?를 확인할 수 있었던 이유는, 운영중인 서버중 Windows Server 2008 이 몇대가 존재하고 있으며 기존에 Windows 2000, Windows Server 2003 을 모니터링 하기 위한 윈도우 서비스를 Windows Server 2008 에서도 작동 하도록 코드 수정 및 테스트 과정에서 WmiPrvSE.exe 의 비정상적인 메모리 점유를 확인 한것  입니다.

이 포스트에서는 해결책을 제시하지 않으며, 프로세스 내부적인 작동상의 문제로 추정되고 있으므로 추후 Microsoft 의 패치 업데이트 외에는 현재 개선할 방법은 없을것 같습니다.

최초 Windows Management Instrumentation(Winmgmt) 서비스를 시작하고, 성능 카운터 정보외에 다른 클래스에서의 쿼리시에는 시작시 점유했던 메모리 양과 거의 변화를 보지 않습니다.

Name: WmiPrvSE.exe (System 계정)
ExecutablePath: C:\Windows\system32\wbem\wmiprvse.exe
Handle: 6128
HandleCount: 139
OSName: Microsoft® Windows Server® 2008 Standard .....
PageFileUsage(KB): 3344
PeakPageFileUsage(KB): 4116
PeakVirtualSize: 42606592
WorkingSetSize(Byte): 6602752
PeakWorkingSetSize(KB): 6460
ProcessId: 6128
ThreadCount: 5
UserModeTime: 936006

위 값을 보면,. 약 6M 선 이며,
이후 여타 클래스에서 쿼리를 하더라도 보통 7M 내외를 점유 합니다.

이때,. 성능 카운터중, CPU 사용량을 얻기 위해서 다음과 같은 성능 카운터 클래스를 호출하는 vbscript 를 실행하면,.

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)

Winmgmt 는 성능 카운터 정보를 얻기 위해서 WMI Performance Adapter(wmiApSrv) 를 호출하고 wmiApSrv 는 요청된 성능 카운터 정보를 반환하게 됩니다.

이후의 WmiPrvSE.exe 메모리 점유를 보면, 다음과 같으며

Name: WmiPrvSE.exe
HandleCount: 585
PageFileUsage(KB): 23668
PeakPageFileUsage(KB): 23668
PeakVirtualSize: 111034368
WorkingSetSize(Byte): 30457856
PeakWorkingSetSize(KB): 29744
ProcessId: 6128
ThreadCount: 13
UserModeTime: 12324079
VirtualSize: 111034368

계속해서 성능 카운터 클래스를 호출하면, 메모리 점유율이 조금씩 조금씩 늘어나게 됩니다. 그러나 더 이상 성능 카운터 클래스를 호출하지 않으면 wmiApSrv 서비스가 종료되고 이후 약간의(1~3M정도) 메모리 를 반환하지만  더 이상은 반환하지 않습니다.

그러나 쿼리가 몇일동안 계속 되는 경우, 메모리 점유는 400~500M 를 점유하게 되며 그때의 경우에는 성능 카운터 관련 클래스 호출에 대해서 성능 카운터 관련 클래스가 없어지는 비정상적인 작동을 하게 됩니다.

2008년 12월 10일 수요일

2008년 12월 마이크로소프트 보안 공지

Visual Basic 6.0 런타임 확장 파일(ActiveX 컨트롤)의 취약점으로 인한 원격 코드 실행 문제점 (932349)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-070.mspx

Microsoft Visual Basic 6.0 런타임 확장 파일용 ActiveX 컨트롤의 비공개적으로 보고된 취약점 5건과 공개적으로 보고된 취약점 1건을 해결합니다. 이 취약점으로 인해 사용자가 특수하게 조작된 콘텐츠가 포함된 웹사이트를 탐색할 경우 원격 코드 실행이 허용될 수 있습니다. 이 보안 업데이트는 ActiveX 컨트롤의 유효성 검사 및 오류 처리를 강화하여 취약점을 해결합니다

GDI의 취약점으로 인한 원격 코드 실행 문제점 (956802)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-071.mspx

GDI에서 발견되어 비공개적으로 보고된 취약점 2건을 해결합니다. 이러한 취약점을 악용하면 사용자가 특수하게 조작된 WMF 이미지 파일을 열 경우 원격 코드 실행이 허용될 수 있습니다. 이 취약점을 악용한 공격자는 영향을 받는 시스템에 대해 완벽히 제어할 수 있습니다. 이 보안 업데이트는 GDI의 파일 크기 매개 변수 유효성 검사 및 정수 계산 방식을 수정하여 오버플로 조건이 발생하지 않도록 하여 취약점을 해결합니다

Windows 검색의 취약점으로 인한 원격 코드 실행 문제점 (959349)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-075.mspx

Windows 검색에서 발견되어 비공개적으로 보고된 취약점 2건을 해결합니다. 이 취약점으로 인해 사용자가 Windows 탐색기에서 특수하게 조작된 검색 조건 저장 파일을 열고 저장하거나 특수하게 조작된 검색 URL을 클릭할 경우 원격 코드 실행이 허용될 수 있습니다. 이 취약점을 악용한 공격자는 영향을 받는 시스템에 대해 완벽히 제어할 수 있습니다. 이 보안 업데이트는 Windows 검색 파일을 저장할 때 Windows 탐색기가 메모리를 해제하는 방식을 수정하고 search-ms 프로토콜을 구문 분석할 때 Windows 탐색기가 매개 변수를 해석하는 방식을 수정하여 취약점을 해결합니다

Windows Media Components의 취약점으로 인한 원격 코드 실행 문제점 (959807)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-076.mspx

Windows Media Player, Windows Media Format Runtime 및 Windows Media Services. 가장 위험한 취약점으로 인해 원격 코드 실행이 허용될 수 있습니다. 사용자가 관리자 권한으로 로그온한 경우, 이 취약점을 악용한 공격자는 영향을 받는 시스템을 완전히 제어할 수 있습니다. 이 보안 업데이트는 Windows Media 인증 응답의 유효성을 검사하는 방식을 변경하여 첫 번째 취약점을 해결합니다. 이 보안 업데이트는 Windows Media 클라이언트가 ISATAP 주소를 사용하여 서버를 외부 서버로 취급하는 방식을 변경하여 취약점을 해결합니다.

Windows File Protection / ID: 64021

이벤트 형식: 정보
이벤트 원본: Windows File Protection
이벤트 범주: 없음
이벤트 ID: 64021
날짜:  2008-12-09
시간:  오전 4:16:16
사용자:  N/A
컴퓨터: WEBSERVER
설명:
시스템 파일 c:\windows\system32\eventvwr.exe을(를) DLL 캐시로 복사할 수 없습니다. 오류 코드: 0x00000000 [작업을 완료했습니다.
].  시스템 안정성 관리에 필요한 파일입니다.

자세한 정보는 http://go.microsoft.com/fwlink/events.asp에 있는 도움말 및 지원 센터를 참조하십시오.

================================================================================

위와 같은 로그 형식이 세벽 4시 15분부터 30분까지 15분동안 10차례정도 생겼더군요

그 후 오전 11시 45분쯤에 웹사이트가 먹통이 되어 버렸습니다.

서버의 게이트웨이로 ping이 안돼서 서비스 재시작도 안돼는 현상이 발생하였고

재부팅 후에 정상적으로 살아났습니다.

D


2008년 11월 29일 토요일

MEMORY.DMP - 0xc000000e, DISK_HARDWARE_ERROR

KERNEL_DATA_INPAGE_ERROR (7a)
The requested page of kernel data could not be read in.  Typically caused by
a bad block in the paging file or disk controller error. Also see
KERNEL_STACK_INPAGE_ERROR.
If the error status is 0xC000000E, 0xC000009C, 0xC000009D or 0xC0000185,
it means the disk subsystem has experienced a failure.
If the error status is 0xC000009A, then it means the request failed because
a filesystem failed to make forward progress.
Arguments:
Arg1: c07b9920, lock type that was held (value 1,2,3, or PTE address)
Arg2: c000000e, error status (normally i/o status code)
Arg3: f732411e, current process (virtual address for lock type 3, or PTE)
Arg4: 2642d860, virtual address that could not be in-paged (or PTE contents if arg1 is a PTE address)

Debugging Details:
------------------

***** Debugger could not find nt in module list, module list might be corrupt, error 0x80070057.

GetContextState failed, 0x80070026
Unable to get current machine context, Win32 error 0n38
- 중략 -
GetContextState failed, 0x80070026
GetContextState failed, 0x80070026
GetContextState failed, 0x80070026
Unable to get current machine context, Win32 error 0n38
GetContextState failed, 0x80070026
Unable to read selector for PCR for processor 0
GetContextState failed, 0x80070026
Unable to read selector for PCR for processor 1
GetContextState failed, 0x80070026
Unable to read selector for PCR for processor 2
GetContextState failed, 0x80070026
Unable to read selector for PCR for processor 3
GetContextState failed, 0x80070026
Unable to read selector for PCR for processor 0

ERROR_CODE: (NTSTATUS) 0xc000000e - <Unable to get error code text>

DISK_HARDWARE_ERROR: There was error with disk hardware

BUGCHECK_STR:  0x7a_c000000e

DEFAULT_BUCKET_ID:  DRIVER_FAULT

STACK_TEXT: 
GetContextState failed, 0x80070026
Unable to get current machine context, Win32 error 0n38

STACK_COMMAND:  kb
SYMBOL_NAME:  ANALYSIS_INCONCLUSIVE
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: Unknown_Module
IMAGE_NAME:  Unknown_Image
DEBUG_FLR_IMAGE_TIMESTAMP:  0
BUCKET_ID:  CORRUPT_MODULELIST
Followup: MachineOwner

참고.
http://support.microsoft.com/kb/327020/ko

2008년 11월 27일 목요일

WMI / ID: 4

Error 0x8004100a encountered when trying to load MOF C:\PROGRAM FILES\MICROSOFT SQL SERVER\100\SHARED\SQLMGMPROVIDERXPSP2UP.MOF while recovering .MOF file marked with autorecover.

2008년 11월 26일 수요일

C#, IPAddress 및 Port 변환

//IPAddress 를 숫자형으로 반환 받은 경우 문자열로 변환
public string LongToIPAddress(uint IPAddr)
{
  return new System.Net.IPAddress(IPAddr).ToString();
}

//문자열 IPAddress 를 숫자형으로 변환
public uint IPAddressToLong(string IPAddr)
{
  System.Net.IPAddress oIP=System.Net.IPAddress.Parse(IPAddr);
  byte[] byteIP=oIP.GetAddressBytes(); 

  uint ip=(uint)byteIP[3]<<24;
  ip+=(uint)byteIP[2]<<16;
  ip+=(uint)byteIP[1]<<8;
  ip+=(uint)byteIP[0];

  return ip;
}

//byte 단위 값을 숫자형 값으로 변환
public int LocalPort(uint dwLocalPort)
{
    return (int)(((dwLocalPort & 0xFF00) >> 8) | ((dwLocalPort & 0x00FF) << 8));
}

2008년 11월 22일 토요일

Microsoft XML Core Services 4.0 서비스 팩 2용 보안 업데이트 반복 설치 문제

시스템 파일 중 하나가 손상되었거나 제대로 업데이트되지 않은 경우 Microsoft Update 또는 Windows Update의 업데이트 목록에 이 보안 업데이트가 반복적으로 나타날 수 있습니다. 이 문제에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.

http://support.microsoft.com/kb/941729/

Microsoft XML Core Services 4.0 서비스 팩 2용 보안 업데이트(KB936181)가 Microsoft Update 또는 Windows Update의 업데이트 목록에 반복적으로 나타날 수 있음 (영문)

2008년 11월 18일 화요일

FCSAMRtp / ID: 3002

Microsoft Forefront Client Security 실시간 보호 에이전트에서 오류가 발생하여 실패했습니다.
사용자: WSSPLEX-WEB\wssplex
에이전트: On Access
오류 코드: 0x8007139f
오류 설명: 그룹 또는 리소스가 요청된 작업을 실행할 올바른 상태에 있지 않습니다.

2008년 11월 12일 수요일

2008년 11월 마이크로소프트 보안 공지

제목: SMB의 취약점으로 인한 원격 코드 실행 문제점 (957097)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-068.mspx

이 보안 업데이트는 공개된 Microsoft SMB(Server Message Block)의 취약점을 해결합니다. 이 취약점으로 인해 영향을 받는 시스템에서 원격 코드 실행이 발생할 수 있습니다. 취약점 악용에 성공한 공격자는 프로그램을 설치하거나 데이터를 보고 변경하거나 삭제하고 모든 사용자 권한이 있는 새 계정을 만들 수 있습니다. 시스템에 대한 사용자 권한이 적게 구성된 계정의 사용자는 관리자 권한으로 작업하는 사용자에 비해 영향을 적게 받습니다.

Microsoft XML Core Services의 취약점으로 인한 원격 코드 실행 문제점 (955218)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-069.mspx

이 보안 업데이트는 Microsoft XML Core Services의 여러 가지 취약점을 해결합니다. 가장 심각한 취약점은 사용자가 Internet Explorer를 사용하여 특수하게 조작된 웹 페이지를 볼 경우 원격 코드 실행을 허용할 수 있습니다. 시스템에 대한 사용자 권한이 적게 구성된 계정의 사용자는 관리자 권한으로 작업하는 사용자에 비해 영향을 적게 받습니다.

2008년 11월 7일 금요일

ASP.NET, Sql Injection 필터 예제 코드

http://forums.asp.net/t/1254125.aspx 포스트를 참고해 보면 좋을것 같음.

닷넷 프레임워크 2.0 이상에서는, HttpModule 을 등록하여 사용하는 방법에 대한 것이고, 닷넷 1.1 기반에서는 응용프로그램 시작 지점에 체크 루틴을 넣는 방법 입니다.

public static string[] blackList =
 {"--",";--",";","/*","*/","@@","@",
    "char","nchar","varchar","nvarchar",
    "alter","begin","cast","create","cursor","declare","delete","drop",
    "end","exec","execute",
    "fetch","insert","kill","open",
    "select", "sys","sysobjects","syscolumns",
    "table","update"};

Sql Injection 이 가능한 문자열을 배열로 지정을 해놓고, 웹서버에 요청되는 내용을 위 내용으로 필터링을 하는 것입니다.

특히 요즘에는,. 쿼리문을 바이너리 문자열로 인코딩하여 실제 SQL Server 에서는 실행시 정상적인 쿼리문으로 실행되도록 Cast 형변환,. 즉 Declare 와 Cast 를 많이 쓰는것 같습니다.

사이트의 개별 코드와는 상관없이 사이트 전역에 영향을 주는 방법이긴 합니다만, Form 값으로 들어오는 부분도 필터링을 하므로,. 보통 게시판을 글 내용에 있는 것도 필터가 될수도 있겠네요.

요즘,. Sql Injection 이 극성인데,..
조금이나마 도움이 될수도 있을것 같습니다.^^

2008년 11월 1일 토요일

EXCDO / ID: 8208

일정 에이전트에서 되풀이 약속을 확장하지 못했습니다. 오류 코드는 0x8004010f입니다.

2008년 10월 25일 토요일

2008년 10월 마이크로소프트 보안 공지 (비정기, 긴급)

서버 서비스의 취약점으로 인한 원격 코드 실행 문제(958644)

http://www.microsoft.com/technet/security/Bulletin/MS08-067.mspx
 에 나와 있듯이, 22일(현지) 에 긴급 발표된 내용입니다.

방화벽을 사용하는 환경에서는 크게 문제될 부분은 없으며, 방화벽을 운영한다면 135/445 등 관련 포트를 제한 하거나, 또는 서비스에서 Computer Browser 및 Server 서비스를 중지하면 됩니다.

최종적으론 패치를 적용하는것이 가장 적절한 대처 이겠습니다.^^

2008년 10월 23일 목요일

C# TaskScheduler, 작업 스케쥴러

//Interop.TaskScheduler 는
//Vista 또는 Windows Server 2008 의 예약작업 COM 개체를 참조해야 함.
//TaskScheduler 1.1 Type Library, taskschd.dll

TaskScheduler a = new TaskScheduler();
a.Connect(null, null, null, null);

StreamReader sr = new StreamReader("c:\\테스트작업.xml");
string aa = sr.ReadToEnd();
sr.Close();

ITaskDefinition task = a.NewTask(0);
task.XmlText = aa;

ITaskFolder root = a.GetFolder("\\");

bool folderExist = false;
foreach(ITaskFolder f in root.GetFolders(0))
{
 if (f.Name == "Wssplex")
 {
  folderExist = true;
 }
 }
if (!folderExist)
{
 root.CreateFolder("Wssplex", null);
 root = a.GetFolder(\\Wssplex);
}

IRegisteredTask regTask = root.RegisterTaskDefinition("작업이름", task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_S4U, null);

위의 예제 코드는 Wssplex 라는 폴더에, 테스트 작업 이라는 이름의 작업을 등록하는 것이며, 작업 설정 사항은 테스트작업.xml 에 있는 내용을 등록하는 것.

물론,. 예제에서는 xml 파일을 읽어서 넣었는데, task.XmlText  에 그냥  xml 내용을 하드 코딩을 해줘도 상관없음.

xml 의 트리구조는 작업 스케쥴러 UI 에서 특정 작업을 내보내기 하거나, C:\Windows\System32\Tasks 폴더의 작업 파일이 xml 이므로 텍스트 편집기에서 열어 보면 구조를 알수 있음.

또는, C:\>schtasks /query /tn 작업이름 /xml 처럼 하면 해당 작업에 대한 xml 을 볼수가 있음.

다음과 같이 각 항목을 코드상으로 구현도 가능

//생성
ITaskDefinition task = a.NewTask(0);
task.RegistrationInfo.Author = "Administrator";
task.RegistrationInfo.Description = "테스트";      

//Principals
task.Principal.UserId = Administrator"; ;
task.Principal.LogonType = _TASK_LOGON_TYPE.TASK_LOGON_S4U;

//트리거        
IEventTrigger trigger = (IEventTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_EVENT);
trigger.Enabled = true;
trigger.Subscription = "<QueryList><Query Id=\"0\" Path=\"System\"><Select Path=\"System\">*[System[Provider[@Name='aaaaa'] and (Level=1 ) and (EventID=5847)]]</Select></Query></QueryList>";

//Actions
IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
action.Path = "C:\\Windows\\notepad.exe";
action.Arguments = "aaa";

//작업등록
ITaskFolder root = a.GetFolder("\\");
IRegisteredTask regTask = root.RegisterTaskDefinition("sss", task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, null);

위의 예제는, 특정 이벤트 로그에 대한 이벤트 트리거를 등록하는 것.

그외, 상세한 내용은 http://msdn.microsoft.com/en-us/library/aa383607(VS.85).aspx 참조하면 되며, 그냥 명령행으로는 schtasks.exe 에서 대부분의 작업이 가능

2008년 10월 22일 수요일

C# NetFwTypeLib, 고급 보안이 설정된 Windows 방화벽

//Interop.NetFwTypeLib 는 FwPolicy2 가 구현된 COM개체를 참조하고 있어야 함
//--> Vista & Windows Server 2008


Type trule = Type.GetTypeFromProgID("HNetCfg.FWRule");     
Type tpol = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");   

INetFwRule newRule;
INetFwPolicy2 Policy2 = (INetFwPolicy2)Activator.CreateInstance(tpol);

//v2.0|Action=Allow|Active=TRUE|Dir=Out|Protocol=6|RPort=8530|Name=윈도우 업데이트 서버(TCP-Out)|Edge=FALSE|

newRule = (INetFwRule)Activator.CreateInstance(trule);
newRule.Name = "윈도우 업데이트 서버(TCP-Out)";
newRule.Protocol = 6;
newRule.RemotePorts = "8530";
newRule.Enabled = true;
newRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT;
newRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
Policy2.Rules.Add(newRule);

그외, 방법으로는 netsh 명령행을 이용하거나 Vbscript 를 이용

netsh advfirewall firewall>add rule name="윈도우 업데이트 서버(TCP-Out)" dir=out action=allow enable=yes remoteport=8530 protocol=tcp


참고로,, 방화벽의 Outbound 차단에 대한 이해에 도움이 될만한,..
테크넷 매거진 내용

보안: Windows Vista 방화벽 관리
http://technet.microsoft.com/ko-kr/magazine/cc510323.aspx (캐시된문서)

의 내용중 마지막 단락의 "아웃바운드 필터링으로 가능한 보안 수준" 은 한번쯤 생각해 볼만한 부분인듯..^^

2008년 10월 17일 금요일

VDS Dynamic Provider / ID: 10

드라이버에서 알림을 저장하는 동안 공급자가 실패했습니다. 가상 디스크 서비스를 다시 시작해야 합니다. hr=80042505

WSRM / ID: 119

Windows 시스템 리소스 관리자에서 0x80010117 오류가 발생했습니다. 사용자 이름이 후속 이벤트 로그에 로깅되지 않습니다.

오류: 0x80010117

사용자 작업
오류 조건을 해결한 후 다시 시도하십시오.

2008년 10월 15일 수요일

WMServer / ID: 326

Windows Media 서버가 실패했습니다.
오류 코드: 0xc00d1583
오류 텍스트: 이 Windows 버전에서는 'WMS 고급 FF/RW 형식 미디어 파서' 플러그 인을 로드할 수 없습니다.

openfiler iSCSI Storage - 3.Microsoft iSCSI Initiator

Windows 에서 iSCSI 를 사용하기 위한 방법은 하드웨어 iSCSI 어댑터에서 지원하는 소프트웨나, Microsoft 에서 소소프트웨적인 방법으로 구현해 놓은  Microsoft iSCSI Initiator 를 이용하는 방법이 있습니다.

물론,. iSCSI 기술 자체가 TCP/IP 를 이용하므로, 어느정도 소프트웨적인 기술에 기반하기 때문에, 소프트웨적 으로만 구현이 된 Microsoft iSCSI Initiator 는 하드웨어 어댑터에 비해서 성능이 떨어지지만 보통의 환경에서는 크게 무리가 없어 보입니다. Initiator 보다는,. 이더넷의 성능과 회선 속도에 영향을 받이 받을것 같고 그래서 FC 이더넷이 추천 되기도 합니다.

Microsoft iSCSI Initiator 는 Vista 와 Windows Server 2008 에서는 iSCSI Initiator 가 기본으로 내장되어 있으나, 그외 하위 버젼에서는 다운로드 해서 설치 필요가 필요합니다.

현재 최신 버젼으로는, Microsoft iSCSI Software Initiator Version 2.07 입니다.

http://www.microsoft.com/downloads/details.aspx?FamilyID=12CB3C1A-15D6-4585-B385-BEFD1319F825&displaylang=en

계속해서 버젼이 업데이트 되는것 같으므로, 항상 Microsoft Download 에서 검색해서 다운로드 하는것이 좋습니다.


<그림. Microsoft TechNet>

Windows 에서 Microsoft iSCSI Initiator 를 이용해서 Sotrage 에 접근하는 전체적인 구성 입니다. 중간에 IP Switch 가 있지만 일반적인 Hub 입니다. 또는 Direct 연결도 상관이 없고요..^^



<그림. Microsoft TechNet>

SAN 특성상 공유 스토리지로의 사용이 가능합니다. 그래서 iSCSI 역시 Windows 에서는 MBR 형식의 디스크로 인식이 되므로 Windows Cluster 구성에 좋은 구성 방법 입니다. 꼭 Cluster 가 아니더라도 NLB 구성으로된 웹서버의 홈디렉토리로 이용에도 좋은 구성일것 입니다.


Microsoft iSCSI Initiator 에서의 설정은 특별히 복잡하지 않습니다.

다만,. 각 세부 설정의 용어와 그 기술에 대한 이해가 있으면 더 좋을것 같습니다. 제어판이나, 관리도구에서,,. 아무튼,. Microsoft iSCSI Initiator 를 찾습니다.

Discovery 에서,... Target Potals 추가,. iSCSI Target Server 로 구성되었던 openfiler 의 10.0.0.45 IP 주소를 추가해 줍니다. Port 및 Advanced 설정값등은 기본으로 해도 대부분 잘 설정 됩니다. (*iSCSI Network ACL 에 설정이 안되어 있으면 접근 불가)

Advanced Settings 에서 굳이 추가로 설정을 해준다면,.  Local adaper 에:  Microsoft iSCSI Initiator, Source IP 에는, 10.0.0.3 및 인증 정도 입니다.



Discovery 에서 Target 를 추가 했다면,. Targets 에서 "Refresh" 버튼을 클릭해서 openfiler 에서 호스트하는 LUN 파티션이 목록이 노출 되는지 확인 합니다. 이 목록에 나타나면 이제 iSCSI 디스크를 Windows 에서 사용할수 있다는 뜻 입니다.



위 화면에서,  "Log On..." 을 클릭해서 "Automatically restore this connection when the system boots" 를 체크해 줍니다. 이것은, Windows 가 부팅이 되더라도 iSCSI Initiator 서비스에서 부팅후 즉시 파티션에 접근이 가능하도록, 해당 Target 자동으로 연결을 한다는 내용 입니다.



이와 같이, iSCSI Initiator 설정이 완료되면,. 디스크 관리를 가면 새로운 디스크 추가 팝업이 뜨거나 추가가 되어 있을것 입니다.



추가된 iSCSI 디스크는 이제 일반적인 로컬 디스크의 사용과 동일하게 사용이 가능한 상태가 되었습니다. 이렇게 해서 openfiler 를 통해서 iSCSI 이용하기 위한 구성 방법을 알아 봤습니다.

이를 이용해서, 앞서 얘기했던 Cluster 나 여러 서버에서의 Shared Storage 등의 구성과 운영은 한층 편리해 졌고 이를 이용한 다양한 형태의 서버/네트워크의 추가적인 구성이 가능할 것 같습니다.^^


15-Microsoft-iSCSI-Initiator-Storage.gif
15-Microsoft-iSCSI-Initiator-Cluster-Storage.gif
15-Microsoft-iSCSI-Initiator-Taeget-Portal-1.gif
15-Microsoft-iSCSI-Initiator-Targets-2.gif
15-Microsoft-iSCSI-Initiator-Logon-Target-3.gif
15-Microsoft-iSCSI-Initiator-Disk-Manager-4.gif

openfiler iSCSI Storage - 1.Install

Storage 기술에는 여러가지가 있죠. DAS, NAS, SAN 등등....;;

그런데,. 이런 장비들은 대체적으로 매우 고가 입니다. 일반적인 서버 환경에서는 비용문제로 구축하기가 어렵습니다. 특히 SAN 은..  그건 그렇다 치고,. 게중에 그래도 FC SAN 방식이 Shared Sotrage 환경을 구축하기에는 가장 좋은 대안 인것 같습니다.

하지만,. 이러한 SAN 방식은 별도의 어댑터를 갖춘 스토리지와 SAN 스위치가 있어야 합니다. 그래서 이러한 제한에서 벗어날뿐만 아니라 최근의 TCP/IP 네트워크를 이용한 방식,. IP SAN이 점차 부상하고 있는데요. iSCSI 입니다.

SAN : http://en.wikipedia.org/wiki/Storage_Area_Network
iSCSI: http://en.wikipedia.org/wiki/Iscsi

물론 iSCSI 도 성능상 제약점이 있습니다만,.

그러한 제한을 극복할 만큼의 잇점이 있는것이 사실이고 최근에는 iSCSI 환경의 스토리지 구축이 점점 늘어나고 있습니다. (iSCSI Target 구축을 위한 어댑터 단품으로는 약 1백만원선 인듯....)  각설하고.. iSCSI 에 대해서 더 궁금한 사항은 세계적으로 잘 알려진 스토리지 업체의 기술문서를 참고하시면 매우 자세하게 설명되어 있습니다.

이와 같이,. 하드웨어적인 구성이 아닌 소프트웨어적으로 iSCSI Target 구성이 가능하도록 Linux 기반의 Appliance Sofrware 가 나와 있습니다. openfiler 이며, Linux 기반이라서 GPL 라이센스 이고,. 무료 입니다. (매우 크리티컬한 환경에서 사용하는 것은 자제해야 겠지요.^^ 100% 성능과 안정성을 보장할수 없으므로..)

그러고 보면, 오픈소스 계열에서는,.. 상용이나, 하드웨어서 구현이 되는걸 소프트웨어 방식으로 구현해 놓은 프로젝트가 참 많죠.^^ iSCSI   솔루션 중에 몇개 있지만 게중에 그래도 개인적으로 가장 쓸만한게 openfiler 인것 같습니다. 오픈소스 기반 Storage 솔루션 부분에서는 잘 알려져 있는것 같기도 하고요.

다운로드: http://www.openfiler.com/products

그외,. 솔루션
http://www.freenas.org/
http://www.open-iscsi.org/

그럼,. 간단한 설치 그리고 설정, Windows 에서의 이용방법등에 대해서 간략하게 스샷을 통해서 보면,. (각 부분에서 필요한 기술적인 설명은 제외.... 필요하면 검색하여 직접 찾아보는 노력을.....)


1. Basic Install

다운 받은 openfiler 를 넣고 설치를 시작 합니다.

Linux 기반이라서 기존 Linux 설치 방법과 거의 같고, 설치 과정에서 특별히 설정해 줄 부분은 그리 많치도, 어렵지도 않습니다. 모두 GUI 설치 화면이므로, Windows 유저들도 크게 거부감 없이 설치가 가능할것 같습니다.




2. Setup UI


다음 화면에서 부터 본격적인 설치를 시작 합니다.



언어 선택 부분에서는 키보드-한국어가 없으므로 그냥,. U.S. English 선택을 하고 (한글을 쓸 이유가 없음....), 그외 뭐 특별하게 해줄건 없고, 그냥 "다음" 입니다.


3. Disk Partition



파티션 설정 부분인데, 이 화면 앞서서 자동으로 할것인지 아니면 Disk Druid 로 할것인지 나오는데요,. Disk Partitioning -> Automatically partition or Manually partition with Disk Druid 자동 보다는 Disk Druid 로 설정하는 것을 권장 합니다.

왜냐면,. 장착된 디스크의 파티션을 효율적으로 사용할수 있기 때문입니다. Linux 를 설치해 보신 분들은 매우 잘알것 입니다. 기본으로 필요한 파티션은 / 와 /boot 그리고 swap 입니다.


4. Network Configuration




네트워크 서비스를 해야 하므로, Network Configuration -> 고정 IP 가 있는 경우 IP 할당. (ex, 10.0.0.45) 및 Gateway, DNS 등 기본적인 설정을 해줍니다. 물론 DHCP 도 가능하지만,. Storage 특성상 IP가 변경되면 문제가 있겠지요.^^

그다음으로,, Time Zone -> Asia/Seoul (선택), Root Password 설정 (ex, -> 1234567) 을 합니다. 설치가 완료된 후에는 일반적인 Linux 와 동일하므로 ssh, 방화벽 설정등은 접근 제한을 해주는 것이 좋습니다.


5. Install Application



Openfiler NAS/SAN Appliance 설치 시작.

<다음화면> Installing Packages  ,, 뭐 여러가지 페키지를 설치하느데,.. 정확한것은 모르겠습니다. 패키지 이름을 안다고 해도,.. 어떻게 작동하고 설정하고.. 이런것 까지 알아서 하기 보다는,. Linux 전문가 도움을 받는게 좋을것 같고요.^^

여기 까지는 그냥 기본적인 GUI 설치과 별반 다르지 않음...;;


6. Complete Installation



설치를 완료하고 리붓팅을 하고 나면, 일반적인 Linux 로그인 첫화면이 나옵니다. 앞서 설정했던 root 로그인이 잘되는지 확인도 해보시고요.  텀 환경이 불편하면, 추가적으로 KDE 나 GNOME 을 구성해서 기본적인 Linux 관리를 해도 크게 문제될 부분은 없을것 같습니다.

로그인 첫화면에 Web administration GUI : https://10.0.0.45:446/ 처럼 웹관리 콘솔 경로를 표시해 줍니다. 이제 부터 iSCSI 설정은 모두 웹에서 설정 및 관리가 가능 합니다.


여기까지 openfiler 를 설치한 이유는 뭘까요?..^^

당근,. Windows Server 에서 Shared Storage 로 이용하기 위해서 이죠.  설마 Linux 나 그와 관련된 사용법을 알려 드릴려고 하겠습니까. 그러고 싶지도 않고요.^^


15-Openfiler-Setup-1.gif
15-Openfiler-Setup-2.gif
15-Openfiler-Disk-Setup-3.gif
15-Openfiler-Setup-Network-Configuration-4.gif
15-Openfiler-Setup-Install-Packages-5.gif
15-Openfiler-Setup-install-Complete-6.gif

2008년 10월 마이크로소프트 보안 공지

Active Directory의 취약점으로 인한 원격 코드 실행 문제점 (957280)

이 보안 업데이트는 비공개적으로 보고된 Microsoft Windows 2000 Server상의 Active Directory 구현 취약점을 해결합니다. 공격자가 해당 네트워크의 액세스를 얻을 경우 이 취약점으로 인해 원격 코드 실행을 허용할 수 있습니다. 이 취약점은 도메인 컨트롤러로 구성된 Microsoft Windows 2000 서버에만 영향을 미칩니다. Microsoft Windows 2000 서버가 도메인 컨트롤러로 사용되지 않는 경우 LDAP(Lightweight Directory Access Protocol)나 LDAPS(LDAP over SSL) 쿼리에 응답하지 않으므로 이 취약점에 노출되지 않습니다.


Microsoft Ancillary Function Driver의 취약점으로 인한 권한 상승 문제점 (956803)

이 보안 업데이트는 비공개로 보고된 Microsoft Ancillary Function Driver의 취약점을 해결합니다. 이 취약점을 악용한 공격자는 영향을 받는 시스템을 완전히 제어할 수 있습니다. 이렇게 되면 공격자가 프로그램을 설치할 수 있을 뿐 아니라 데이터를 보거나 변경하거나 삭제할 수 있고 모든 사용자 권한이
있는 새 계정을 만들 수도 있습니다.


Windows 커널의 취약점으로 인한 권한 상승 문제점 (954211)

이 보안 업데이트는 Windows 커널의 공개된 취약점 1건과 비공개로 보고된 취약점 2건을 해결합니다. 이러한 취약점을 악용한 로컬 공격자는 영향을 받는 시스템을 완전히 제어할 수 있습니다. 익명의 사용자에 의해서나 원격으로는 이 취약점을 악용할 수 없습니다.


SMB의 취약점으로 인한 원격 코드 실행 문제점 (957095)

이 보안 업데이트는 비공개적으로 보고된 Microsoft SMB(Server Message Block) 프로토콜의 취약점을 해결합니다. 이 취약점에 의해 파일이나 폴더를 공유하는 서버에서 원격 코드 실행이 가능할 수 있습니다. 이러한 취약점의 악용에 성공한 공격자는 프로그램을 설치하거나 데이터를 보고, 변경하고, 삭제할 수 있으며 전체 사용자 권한이 있는 새 계정을 생성할 수 있습니다.


Virtual Address Descriptor 조작의 취약점으로 인한 권한 상승 문제점 (956841)

이 보안 업데이트는 비공개로 보고된 Virtual Address Descriptor의 취약점을 해결합니다. 이 취약점으로 인해 사용자가 특수하게 조작된 응용 프로그램을 사용할 경우 권한 상승이 발생할 수 있습니다. 이 취약점 악용에 성공한 인증된 공격자는 영향을 받는 시스템에서 권한을 상승시킬 수 있습니다. 이렇게 되면 공격자가 프로그램을 설치할 수 있을 뿐 아니라 데이터를 보거나 변경하거나 삭제할 수 있고 전체 관리자 권한이 있는 새 계정을 만들 수도 있습니다.


Message Queuing의 취약점으로 인한 원격 코드 실행 문제점 (951071)

이 보안 업데이트는 비공개로 보고된 Microsoft Windows 2000 시스템의 MSMQ(Message Queuing Service) 취약점을 해결합니다. 이 취약점으로 인해 MSMQ를 사용하는 Microsoft Windows 2000 시스템에 원격 코드 실행이 발생할 수 있습니다.


그외, 나머지는 클라이언트 환경이거나, 잘 사용되지 않는 구성과 관련된 내용 입니다.
Active Directory, AFD, SMB 는 즉시 패치를 적용하는 것이 좋을것 같습니다.

openfiler iSCSI Storage - 2.Configuration

openfiler 를 설치완료 부팅이 완료되면 텀의 로그인이 아닌 웹 관리 콘솔에 접속을 합니다. 웹관리 콘솔 접속 주소는 부팅이 완료된후 첫 로그인 화면에 표시가 됩니다.

Web administration GUI : https://10.0.0.45:446/

이제 실제 중요한 iSCSI 타켓 설정 모두는 위 웹페이지에 접속하여 진행하게 됩니다. 웹관리 콘솔의 기본 접속 로그인 정보는 매뉴얼에 나온 것처럼 Username: openfiler Password: password  입니다.


로그인을 하고 나면,. 첫 Status 화면. iSCSI 와 관련된 사항외 나머지는 일반적인 Linux 설정 정보와 같습니다.
물론 iSCSI 설정도 텀에서 가능하겠지만,.. Web 에서 하는게 좋겠죠.^^
















1. iSCSI Target Server 서비스 활성화




Services 메뉴에서, iSCSI Target Server 서비스를 Enable 설정을 합니다.
텀상에서는 ietd 이름으로 작동하고요.

[root@iscsi ~]# service iscsi-target status
ietd (pid 3212) is running...


그 다음으로는,. 물리적인 볼륨생성 -> 볼륨그룹 -> iSCSI 논리 볼륨 생성 -> Target 설정 순 입니다.


2. Volumes - Partition




다음으로,. 서버에 장착된 여유 파티션이나 별도의 디스크를 사용하기 위해서는 일단 물리적인 볼륨을 생성  합니다.

생성된 Volumes 그룹이 없으므로, 하단 경고 이미지가 있는 부분의
"Create a new volume group" 의 "create new physical volumes" 를 클릭하여 볼륨 생성.

위 이미지의, 현재 장착된 2개의 Disk 중, iscsi 파티션 용도로 사용할 디스크에 대해서,  Edit Disk 에서 "/dev/sdb" 클릭, 다음 페이지에서, Create a partition in /dev/sdb 에서 파티션을 생성 합니다.

Mode: Primary
Partition Type: Physical volume
Starting Cylinder : 1
Ending Cylinder : 130

/dev/sdb 디스크 전체 용량에 대해서 새로운 파티션 생성 하였습니다. 물론 테스트 구성이므로,,.. 물론 필요한 만큼의 일부만 사용해도 상관없으며,. /dev/sda 의 남은 파티션을 사용해도 상관없습니다.


3. Volumes - Group




다음으로 볼륨 그룹을 생성 합니다. 오른쪽 사이드 Volumes section 메뉴의 Manage Volumes 에서  새로운 그룹을 생성을 클릭하고 설정화면에서  volgrp(예제) 라는 그룹 이름을 사용하고, 앞서 생성된 파티션을 그룹 멤버로 체크 합니다.

이제 volgrp 라는 그룹 생성 되었습니다. 다음으로는 실제 iSCSI 타입 파일시스템을 갖는 논리적인 볼륨을 생성하는 과정 입니다.


4. Volumes - Logical Volume




앞서 생성된 volgrp 볼륨 그룹에 논리적 볼륨을 생성 합니다.

오른쪽 사이드 Volumes Section 메뉴의, "Add Volume" 메뉴에서, iSCSI 라는 파일시스템 타입의 논리적 볼륨을 앞서 생성된 물리적 파티션에 할당 합니다. 물론 여기서도 모두 할당하거나 일부만 할당할수 있습니다.



완료후, 오른쪽 사이드 메뉴의 Manage Volumes 에서 볼륨 목록에 다음과 같이 앞서 생성했던, iSCSI 파일 시스템의 볼륨 목록이 나타 납니다. 이제 iSCSI 클라이언트에서 접속이 가능하도록 Target 설정이 필요 합니다.


5. Volumes - iSCSI Targets



iSCSI Targets 에서,. Add new iSCSI Target 에서 IQN 을 추가. (*openfiler 버젼별로 화면 UI 가 조금씩 다릅니다.)
자동생성된: iqn.2006-01.com.openfiler:tsn.86ec439e42e9 그대로 추가하면 됩니다.

추가를 하고 나면,.  "Settings for target: iqn.2006-01.com.openfiler:tsn.86ec439e42e9 " 에 대한 여러가지 설정이 나오는데,. 그냥 기본값으로 하면 되며 별도의 추가적인 설정은 필요 없습니다.

그 다음으로, Network ACL 에서는 iSCSI Target 접근을 제한하거나, 허용설정을 해줄수 있는데,. 이 부분은 꼭 설정을 해줘야 하도록 되어 있습니다. 해당 설정페이지의 설명글에도 나와 있지만,.Network 설정에서 IP 목록을 등록해 주고 그 IP 에 대해서 허용설정을 해주면 됩니다.



그외, IP 제한과 더불어서 추가적인 인증이 필요한 경우 iSCSI 인증 방법중 하나인, CHAP Authentication 설정도 가능합니다. (특별한 경우가 아니라면, 그냥 IP 제한 정도로도 무리는 없을듯...);

마지막으로, LUN Mapping 에 LUN 추가하면 iSCSI Target 설정은 완료 됩니다. 그외,. 몇몇 iSCSI 관련 설정도 있으나 일반적인 경우엔 필요 없습니다.


6. Restart iSCSI Sevice


앞서 설정한 볼륨에 관련된 내용이 적용 가능하도록 서비스를 재시작해 줍니다. Manage Servie 에서 iSCSI target server 서비스를 Disable 했다가 다시 Enable 해줍니다. 또는 다음과 같이 텀에서 재시작을 해주어도 상관없습니다.

[root@iscsi ~]# service iscsi-target restart
Stopping iSCSI tagret service: [  OK  ]
Starting iSCSI tagret service: [  OK  ]



이제는,. Microsoft iSCSI Initiator 에서 Target 접속이 잘되는지와, LUN 을 잘 찾는지만 확인하면 됩니다.




2008년 10월 10일 금요일

adsutil.vbs 를 이용한, IIS SMTP 서비스 메일 디렉토리 변경

XIMS: Relocating the Directories Used by SMTP Service
http://support.microsoft.com/kb/240917

adsutil.vbs set smtpsvc/1/dropdirectory  dir
adsutil.vbs set smtpsvc/1badmaildirectory  dir
adsutil.vbs set pickupdirectory dir
adsutil.vbs set queuedirectory dir

위에것 그대로 가져다가 안된다고 하는 사람들 많았을듯;;;
2006년에 검토를 했다는데 아직도 수정이 안됨. 검토를 한거는 한건지.... -_-;;;

위 내용중에,. 예제 명령행에 오타가 있음;;;;
다음 처럼....

adsutil.vbs set smtpsvc/1/dropdirectory "d:\mailroot\drop"
adsutil.vbs set smtpsvc/1/badmaildirectory "d:\mailroot\badmail"
adsutil.vbs set smtpsvc/1/pickupdirectory "d:\mailroot\pickup"
adsutil.vbs set smtpsvc/1/queuedirectory "d:\mailroot\queue"


2008년 10월 8일 수요일

MSExchangeIS Public Store / ID: 3093

"기본 저장소 그룹\공용 폴더 저장소(EXCHSVR)" 데이터베이스에서 tbtOwningFolders 개체 유형의 0x67480014 속성을 읽는 동안 -2147221233 오류가 발생했습니다.

wmic nicconfig, 네트워크 인터페이스 정보 설정

IP 주소를 설정하거나, 변경을 할려면 어떤 인터페이스에 어떤 IP 주소가 설정이 되어 있는지 확인을 먼저 해야 합니다. 다음과 같이 해당 컴퓨터의 모든 이더넷 인터페이스의 설정값을 확인할 수 있습니다.

wmic:root\cli>nicconfig
ArpAlwaysSourceRoute  ArpUseEtherSNAP  Caption
                                       [00000001] Intel(R) PRO/100 VE Network Connection
                                       [00000002] RAS 비동기 어댑터
                                       [00000003] WAN 미니 포트 (L2TP)
                                       [00000004] WAN 미니 포트 (PPTP)
                                       [00000005] WAN 미니 포트(PPPOE)
                                       [00000006] 직접 병렬
                                       [00000007] WAN 미니 포트 (IP)


위 처럼 하면,. Win32_NetworkAdapterConfiguration 클래스의 정보를 나열하여 볼수 있습니다. Caption 목록이나,. IPAddress 속성 항목에서 배열값중 현재 컴퓨터의 IP 주소가 있으면 그것에 해당하는 인터페이스의 인덱스값이 순서 입니다.

이를테면,. 현재 내 컴퓨터가 IP 주소로 10.0.0.2 와 3번을 사용하고 있다면,. {"10.0.0.34", "10.0.0.35"} 로 값이 나오게 됩니다. 네트워크 설정에서 여러값 설정이 가능한 항목은 모두 위처럼 출력이 됩니다.


IP 주소 설정

사용하고자 하는 IP 정보가 10.0.0.35 라는 주소와 서브넷은 255.255.255.0, DNS 가 168.126.63.1, Gateway 가 10.0.0.1 이라면 다음과 같이 설정이 가능합니다.

wmic nicconfig where index=1 call enablestatic ("10.0.0.35"),("255.255.255.0")
(\\WSSPLEX-VM2\ROOT\CIMV2:Win32_NetworkAdapterConfiguration.Index=1)->enablestatic() 실행 중
메서드를 실행했습니다.
Out 매개 변수:
instance of __PARAMETERS
{
        ReturnValue = 0;
};


wmic nicconfig where index=1 call setgateways ("10.0.0.1")
(\\WSSPLEX-VM2\ROOT\CIMV2:Win32_NetworkAdapterConfiguration.Index=1)->setgateways() 실행 중
메서드를 실행했습니다.
Out 매개 변수:
instance of __PARAMETERS
{
        ReturnValue = 0;
};


wmic nicconfig where index=1 call SetDNSServerSearchOrder ("168.126.63.1")
(\\WSSPLEX-VM2\ROOT\CIMV2:Win32_NetworkAdapterConfiguration.Index=1)->SetDNSServerSearchOrder() 실행

메서드를 실행했습니다.
Out 매개 변수:
instance of __PARAMETERS
{
        ReturnValue = 0;
};


정상적으로 잘 적용이 된것인지 확인은 ipconfig/all 을 통해서 확인하면 됩니다. 그리고 ping 등 작동을 잘하는지 추가로 확인을 하면 되겠습니다.

Connection-specific DNS Suffix  . :
Description . . . . . . . . . . . : Intel(R) PRO/100 VE Network Connection
Physical Address. . . . . . . . . : 00-0C-29-73-2D-28
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 10.0.0.35
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.0.0.1
DNS Servers . . . . . . . . . . . : 168.126.63.1
NetBIOS over Tcpip. . . . . . . . : Disabled


지금까지는,. IP 주소등을 적용하는 과정인데,. 기존의 IP 정보를 변경하는 것도 위와 동일 합니다. wmic 에서 위와 같은 설정이 가능한것은 WMI 에서 몇개의 메소드를 지원하기 때문 입니다.

어떤 메소드와 값,  또는 어떤 정보를 확인해 볼수 있는지는 wmic:root\cli>nicconfig /? 면 도움말 확인이 가능하며 메소드 실행은 wmic:root\cli>nicconfig call /? 를 통해서 지원되는 목록을 확인할수 있습니다.


물론,  wmic 를 이용하지 않고 netsh 명령행을 이용해도 IP 주소의 설정이나 변경등이 가능 합니다.

netsh - 네트워크 인터페이스에 IP,DNS 설정
http://www.wssplex.net/TipnTech.aspx?Seq=380

netsh - 네트워크 인터페이스 설정 초기화
http://www.wssplex.net/TipnTech.aspx?Seq=382

netsh - 네트워크 인터페이스 Enable, Disable, 연결끊기, 이름 변경
http://www.wssplex.net/TipnTech.aspx?Seq=383

그외,. 레지스트리의 값을 변경하는 방법도 있습니다.

2008년 10월 7일 화요일

MsiInstaller / ID: 11920

Product: Microsoft SQL Server 2005 Express Edition -- Error 1920. Service 'SQLWriter' (SQLWriter) failed to start.  Verify that you have sufficient privileges to start system services.

MsiInstaller / ID: 1023

제품: Microsoft SQL Server 2005 Express Edition - 'GDR 3068 for SQL Server Database Services 2005 ENU (KB948109)' 업데이트를 설치하지 못했습니다. 오류 코드 1603. 추가 정보는 C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Hotfix\SQL9_Hotfix_KB948109_sqlrun_sql.msp.log 로그 파일에 기록되어 있습니다.

2008년 10월 6일 월요일

VolSnap / ID: 21

사용할 수 있는 시스템 메모리가 부족하여 C: 볼륨에 대한 플러시 및 대기 작업이 중단되었습니다.

2008년 10월 4일 토요일

NTBackup / ID: 8019

작업 종료: 경고 또는 오류가 발생했습니다.
자세한 내용은 백업 보고서를 참고하십시오.

---------------------

볼륨 섀도 복사본 만들기: 시도 1.
"MSDEWriter"에서 0x800423f4 오류가 보고되었습니다. 이것은 시스템 상태의 일부입니다. 백업을 계속할 수 없습니다.

다음 볼륨 섀도 복사본을 만드는 동안 오류가 반환되었습니다: 800423f4
백업을 중지합니다.

2008년 10월 2일 목요일

Microsoft Hyper-V Server 2008 정식출시 및 무료배포




Vmware 와 함께,. 가상화 서비스에서 각축을 다투기 위해 몸부림 치는 마이크로소프트에서 자사의 가상화 제품인 Hyper-V 를 기존의 Windows Server 2008 과 별도의 제품을 내놓는다고 하더니, 이제서야 정식으로 출시 했습니다. ^^

상세한 제품 정보 및 다운로드:

http://www.microsoft.com/servers/hyper-v-server/default.mspx


기존의 Windows Server 2008 과 다르게, Hyper-V Server 2008 은 말그대로 가상화 작동을 위한 기능만 있다고 합니다. 별도의 UI 가 제공되지 않는다고 하니,... 명령행이나 System Center 를 이용해서 관리를 해야 하지 않을까 싶습니다.

역시 원격관리가 가능하고 WMI 를 지원하므로 로컬 또는 원격 WMI 를 이용해서 관리도 가능합니다.

Remotely from Windows Server 2008 (x86/x64) using the Hyper-V Manager MMC
Remotely from Windows Vista SP1 (x86 /x64) using the Hyper-V Manager MMC
Remotely from System Center Virtual Machine Manager

PowerShell 은 제공하지 않는다고 합니다.
그리고 한글을 포함해서 12가지 언어가 제공되며 설치시 선택이 가능하다고 하며,
Windows Server 2008 로의 업그레이드는 지원하지 않는다고 합니다.


Hyper-V Server 2008 도 Vmware 의 ESXi  무료버전과 비슷한 기능으로 제한되어 있기는 합니다. 이를테면 관리 UI 나 고가용성 기능등....

"No CALs are required for Microsoft Hyper-V Server"

Hyper-V Server 자체에 대한 라이선스는 무료이며,. 그위에 게스트 운영체제 자체 및 그 접속 라이선스만 필요하다고 합니다.

무료로 배포가 되므로,. 가상화에 불을 당길것 같기도 하고,
Vmware 도 ESXi 를 내놓기는 했지만 이제서야 제대로된 싸움이 될것 같습니다.

훔... 누가 최종 승자가 될가효?..^^

vhdparser / ID: 1

부모 가상 하드 디스크가 "...\\BF565789-808B-46D4-AAF8-FE09D28DBE0D\새 가상 컴퓨터_3587B294-CA9D-4E6C-9044-8A255FFFCCD7.avhd"에 위치한 차이점 보관용 가상 하드 디스크를 사용하지 않고 수정된 것 같습니다. 부모 가상 하드 디스크를 수정하면 데이터가 손상될 수 있습니다. 이후에 이 문제가 발생하는 것을 방지하기 위해 부모 가상 하드 디스크를 잠그는 것이 좋습니다. 최근 컴퓨터의 표준 시간대를 변경한 경우에는 이 가상 하드 디스크를 계속 사용할 수 있습니다.

2008년 10월 1일 수요일

storflt / ID: 5

The Virtual Storage Filter Driver is disabled through the registry. It is inactive for all disk drives.

Hyper-V-Hypervisor / ID: 32

Hyper-V launch failed; at least one of the processors in the system does not appear to provide a virtualization platform supported by Hyper-V.

Hyper-V-Hypervisor / ID: 41

Hyper-V launch failed; Either VMX not present or not enabled in BIOS.

Kernel-Processor-Power / ID: 2

펌웨어 문제로 인해 7 프로세서의 성능 전원 관리 기능을 사용할 수 없습니다. 업데이트된 펌웨어에 대해 컴퓨터 제조업체에 문의하십시오.

VMSMP / ID: 1

Failed to open handle to switch list configuration store key due to error C0000034. Persistent Virtual Switches and Ports are not restored.

2008년 9월 29일 월요일

IIS 7, URL Rewrite Module (URL 재작성 모듈)

URL Rewrite 모듈은,. 이미 인터넷 상에 매우 많은 종류가 배포되어 사용되고 있습니다. IIS 7 에서는 모듈형태로 URL Rewrite Module 이 제공이 되고 있는데요,. 별도로 다운로드 해서 설치를 해줘야 합니다.



Request Filtering 과 URL Rewrite Module 는, Http 요청이 오면 BeginRequest 이벤트에 의해서 작동이 됩니다.


다운로드:
x86: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1691
x64: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1692



IIS7 의 URL Rewrite Module 은 쉽게 URL Rewrite Rule 설정이 가능하도록 UI 를 제공하고 있습니다.

Blank rule 은 직접 모든 항목을 설정하는 것이며,

User friendly URL 은 웹브라우져의 주소창의 URL 을 토대로 몇개의 재작성된 URL 주소 형식 기준의 패턴을 보여 줍니다.

Rule with rewrite map 은 일종의 고정된 템플릿 패턴을 저장후 룰 설정이 호출해서 이용할수 있으며,

Request blocking 은 특정 패턴의 요청을 401, 403, 404, Abort Request 으로 응답을 해줍니다. 일종의 방화벽 역할과 비슷하죠..^^

물론, 기능중에는 Apache 의 mod_rewrite 룰도 가져와서 적용할수 있습니다.




설정된 정보중 전역설정값은 applicationhost.config 에 저장되며, 사이트 단위 설정은 web.config 에 저장됩니다.

<rewrite>
    <globalRules>
 <rule name="Rewrite rule1 for StaticTest">
     <match url=".*" />
     <conditions>
  <add input="{StaticTest:{REQUEST_URI}}" pattern="(.+)" />
     </conditions>
     <action type="Rewrite" url="{C:1}" appendQueryString="false" />
 </rule>
    </globalRules>
    <rewriteMaps>
 <rewriteMap name="StaticTest">
     <add key="/article1" value="/article.aspx?id=1&amp;title=some-tile" />
 </rewriteMap>
    </rewriteMaps>
</rewrite>


위처럼 직접 config 을 수정해서 적용이 가능하지만,. UI 에서의 설정이 훨씬더 편할것 같습니다. URL Rewrite Module 에 대한 상세한 설명은 다음 페이지를 참고해 보시기 바랍니다.

http://learn.iis.net/page.aspx/460/using-url-rewrite-module/

스샷등 매우 상세하게 설명되어 있습니다.^^


29-iis7-request-filtering.png
29-IIS7-URL-Rewrite-Module-1.png
29-IIS7-URL-Rewrite-Module-2.png

2008년 9월 27일 토요일

IIS 7.0 실패한 요청 추적 규칙 로깅 사용

추적 규칙을 모두 설정해 놓았는데,.. %SystemDrive%\inetpub\logs\FailedReqLogFiles 에 추적 xml 파일이 생성되지 않는 경우라면,.. "사용" 체크가 되어 있지 않기 때문 입니다.

기본값으로, 추척 규칙을 등록하더로 비활성화 되어 있죠...
요것 땜에 약간 헤맸음.... -_-;;




사이트 추적 편집 에서 사용 체크를 해주어야 로깅이 시작 된다는... -_-;;



요청 추적은,. 웹서버측에 요청되는 매 건마다 지정된 오류 코드에 대해서 Tracing 을 하므로 매우 요청이 많은 서버에서는 부하가 있을수 있으므로 잘 판단해서 사용해야 겠지요.^^


26-IIS7-Request-Error-Trace-2.png
26-IIS7-Request-Error-Trace-3.png

IIS 7.0 Trace Viewer, 실패한 요청 추적 로그 뷰어

IIS 7 에서 새롭게 지원하는 모듈중에 하나인 웹요청 실패를 상세하게 추적할수 있는 "실패한 요청 추적 규칙" 을 통해서 생성된 로그를 각 웹사이트 인스턴스 별로 목록을 보여주는 유틸 모듈 입니다.


다운로드: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1653

위 Trace Viewer 는 닷넷으로 만들어져 있으며, 다운로드후 설치를 실행하면 C:\Windows\assembly 에 공용 어셈블리로 등록됨과 동시에 administration.config 에도 등록 됩니다.

어셈블리의 실제 위치는 C:\Windows\assembly\GAC_MSIL 이고, administration.config 에는 다음과 같이 moduleProviders 노드에 리스로 추가 됩니다.

<add name="TraceViewer" type="TraceViewer.TraceViewerModuleProvider,
TraceViewer,Version=1.0.0.0,Culture=neutral,PublicKeyToken=604ca8476429e166" />


IIS 7의 전체적인 아키텍쳐가 이렇게 쉽게 모듈을 추가할수가 있게 되어 있습니다. 기존의 IIS 6 까지는 ISAPI 모듈 같은걸 만들어야 됬죠....^^



이름을 잘못 지은건지 모르겠지만,. 뷰어인데 이게 로깅이 되어 있는 xml 뷰어가 아니라 각 사이트 인스턴스 별로 지정된 C:\inetpub\logs\FailedReqLogFiles 폴더의 인스턴스 별 파일 목록을 보여주는 정도 입니다.

로그는 기존의 xml style sheet 인 freb.xsl 가 너무 깔끔하게 보여주기 때문에 익스플로러로 보여주며, 따로 디자인 하는건 낭비라는 생각도 듭니다.^^


26-IIS7-TraceViewer-1.png
26-IIS7-TraceViewer-3.png

2008년 9월 25일 목요일

IIS 7 에서 FastCGI 를 이용한 PHP 구성

Windows Server 2008 IIS 7 에서는 FastCgi 모듈이 내장 되어 있으며, 설정 또한 applicationHost.config 에서 설정하도록 되어 있으며 사이트 단위로도 설정이 가능합니다.

<fastCgi>
   <application fullPath="C:\inetpub\php-5.2.6-nts-Win32\php-cgi.exe" />
</fastCgi>

<handlers accessPolicy="Read, Script">
   <add name="PHPFastCgi" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\inetpub\php-5.2.6-nts-Win32\php-cgi.exe" resourceType="Unspecified" />
</handlers>

Vista 의 경우에는 Windows Server 2008 이 나오기전의 IIS 7 버젼이라서 FastCgi 모듈을 별도로 설치해 줘야 하는데, Service Pack 1를 설치하는 경우에는 내장되어 있습니다.


CGI 가속 기능을 지원하는 FastCgi 를 이용할려면 다음 처럼, CGI 구성요소가 설치가 되어야 합니다.





IIS 의 CGI 모듈 설치가 완료가 되면, 그 다음으로 PHP 를 다운 받아서 설치를 합니다.

PHP 의 버젼은 Installer 버젼 보다는 zip 패키지 설치를 권장하고 있으며,.... 또한 쓸때없는 체크를 하지 않도록 Non-thread-safe 버젼을 설치하는 것이 좋습니다.

그외, php.ini 의 기본적인 설정은 보통의 php 구성과 같으며,. 다만 기존의 FastCgi 를 이용하지 않고 ISAPI 모드나 CGI 모드에처럼 dll 파일이나 ini 파일을 복사하는등의 과정은 필요 없습니다.



PHP를 호스팅하기 위해서는 처리기 매핑 - 모듈 매핑 추가 에서 위와 같은 형식으로 추가를 해줍니다.  요청 제한 옵션중에는 동사부분에서 GET,POST,HAED,DEBUG 등 기본 동사만 허용하도록 해주는 것이 좋습니다.

그 다음으로, php 가 정상적으로 작동하는지 확인하기 위해서 웹사이트 폴더에 <?php phpinfo(); ?> 와 같은 내용이 들어간 .php 파일을 호출해서 다음과 같이 나오면 PHP가 FastCgi 를 이용하여 정상적으로 작동이 되는 것입니다.



FastCgi 옵션에 따라서 다르지만,. 작업 관리자에 보면 php-cgi.exe가 설정값에 따라서 몇개가 실행중이고 어느정도 작동후 종료후 새로운 php-cgi.exe가 생성되는 재생도 작동 됩니다.


그외,. 재생 설정은 다음과 같이 appcmd 를 이용하여 설정이 가능합니다.

C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='c:\{php_folder}\php-cgi.exe'].instanceMaxRequests:10000

C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /+[fullPath='c:\{php_folder}\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS', value='10000']


물론 applicationHost.config 파일을 열어서 직접 추가/수정을 해줘도 상관은 없습니다. FastCgi 노드에서의 그외 속성값은 iis 6에서 설치된 fcgiext.ini 을 참고해 보시면 좋을것 같습니다.



또는 위와 같이, Administration Pack for IIS 7.0 을 설치하면 FastCGI Settings 를 통해서도 GUI 상에서 설정이 가능합니다.

<fastCgi>
    <application
             fullPath="C:\inetpub\php-5.2.6-nts-Win32\php-cgi.exe"
             maxInstances="4"
             instanceMaxRequests="10000">
 <environmentVariables>
     <environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000" />
 </environmentVariables>
    </application>
</fastCgi>


속성이름이 대부분 명시적이어서 무슨 의미인지 이해하는데 어렵지는 않을것 입니다.

ps,.

FastCgi 에서 호출되는 CGI 는 기본값으로는 Network Service 계정에서 호출을 합니다.

실행 CGI 가 있는 폴더는 Windows 기본값에서는 Users 그룹에 권한이 되어 있으므로 호출에는 문제가 없으나, 보안 강화를 위해서 Administrators 외 제외를 하였다면,. 적절한 권한 설정이 필요합니다.


24-fastcgi-config-2.png


2008년 9월 24일 수요일

Windows Server 2008의 2노드 파일 서버 장애 조치 클러스터 구성을 위한 단계별 가이드

Product: Windows Server 2008 Enterprise
Download: http://download.microsoft.com/download/b/b/5/bb50037f-e4ae-40d1-a898-7cdfcf0ee9d8/WS08_STEP_BY_STEP_GUIDE/Step-by-StepGuideForConfiguringATwo-NodeFileServerFailoverClusterInWindowsServer2008.doc
Language: Korean

본 가이드의 내용 - 5

2노드 파일 서버 클러스터 개요 - 6
   장애 조치 클러스터의 공유 폴더 - 7

2노드 장애 조치 클러스터 요구 사항 - 8
   2노드 장애 조치 클러스터의 하드웨어 요구 사항 - 8
   2노드 장애 조치 클러스터 소프트웨어 요구 사항 - 11
   2노드 장애 조치 클러스터의 네트워크 인프라 및 도메인 계정 요구 사항 - 11

2노드 파일 서버 클러스터 설치 단계 - 12
   1단계: 클러스터 서버를 네트워크 및 저장소에 연결 - 12
   2단계: 장애 조치 클러스터 기능 설치 - 14
   3단계: 클러스터 구성 유효성 검사 - 15
   4단계: 클러스터 만들기 - 17

2노드 파일 서버 클러스터 구성 단계 - 18

추가 참조 - 21

SQL Server 2005 성능 문제 해결

Product: SQL Server 2005
Download: http://download.microsoft.com/download/6/8/f/68f15f44-e957-4a1a-97b8-b7444e4d0379/Troubleshooting_Performance_Problems_in_SQL_Server.pdf
Language: Korean

목차

SQL Server 2005 성능 문제 해결........... 1
소개 ................. 2
목적 ................. 2
방법론 ............. 3

리소스 병목 ............ 3
리소스 병목 해결을 위한 도구 ............. 4
CPU 병목 ................... 4
과도한 컴파일과 재컴파일(Recompile) ....... 5
비효율적인 쿼리 계획 ............ 10

쿼리 병렬 처리 ............. 11
서투른 커서 사용 ............ 15

메모리 병목 .................. 16
배경 .................. 16
메모리 부족 발견 ............ 19
메모리 오류에 대한 일반적인 문제 해결 단계 ..30
메모리 오류 ............. 31

I/O 병목  ................. 33
문제 해결 ................. 36

Tempdb .................. 38
tempdb 디스크 공간 모니터링 ............... 39
디스크 공간 문제 해결 ........... 40
과도한 DDL 및 할당 작업 .............. 45

느린 쿼리 .............. 46
차단 .................. 47
인덱스 사용량 모니터링 ................ 55

결론 .................. 58
부록 A: DBCC MEMORYSTATUS 설명 ...... 58
부록 B: 차단 스크립트(Blocking Scripts) ... 58
인덱스 사용 정보 분석 ........... 59
Wait states ................ 71

SQL Server 2005 고가용성 구축 및 운영 가이드

Product: SQL Server 2005
Download: http://download.microsoft.com/download/C/1/6/C168DEF7-D671-471A-8007-581219F78D37/SQL2005_High_Availibility_guide.PDF
Language: Korean

1. SQL Server 2005 Enterprise Edition 고가용 솔루션 소개

2. 데이터베이스 미러링

3. 피어 투 피어 복제

4. 고가용성을 위한 SQL Server 2005 추가 기능

Windows 대화형 로그온 (Interactive Logon) 작동 과정

Windows 에 로그온하는 형식은 여러가지가 있습니다. 그중에 일반적으로 CTRL+ALT+DEL 로그온하는 방식을 대화형 로그온 이라고 하는데요.

로그온 유형: http://www.wssplex.net/TipnTech.aspx?Seq=328


TechNet 문서중에 로컬 로그온과 도메인 로그온 형식에 대해서 잘 설명해 놓은 문서가 있네요.^^

How Interactive Logon Works
http://technet.microsoft.com/en-us/library/cc780332.aspx


<로컬 로그온>




<도메인 로그온>




23-Interactive-Logon-Works-Local.gif
23-Interactive-Logon-Works-Domain.gif

2008년 9월 23일 화요일

ADO.NET, SQL 2005 미러링 Failover Partner SqlConnection

닷넷 2.0 프레임워크 기반에서는, 미러링된 데이터베이스의 장애조치에 의해서 보조 서버로 연결이 전환되는 기능을 지원하는 SQL Native Client 프로바이더 기능을 System.Data.SqlClient 네임스페이스에서 알아서 해줍니다.

SqlConnection Con = new SqlConnection("server=db1;Failover Partner=db2;database=wssplex.net;user id=wssplex;password=xxxxx");
SqlCommand Cmd = new SqlCommand();
Cmd.Connection = Con;

그런데,. 종종 아래와 같이 역할 전환이 된 상태에서 보조서버로의 연결이 잘안되는 경우가 있습니다. 최근의 닷넷 프레임워크 업데이트라면 패치가 된 상태이지만,. 버그 입니다.

처리되지 않은 예외: System.Data.SqlClient.SqlException: 로그인에서 요청한 데이터베이스 "wssplex.net"을(를) 열
수 없습니다. 로그인이 실패했습니다.
사용자 'wssplex'이(가) 로그인하지 못했습니다.
  위치: System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
  위치: System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) ............................

http://support.microsoft.com/kb/912151

윈도우 업데이트를 통해서 닷넷 프레임워크 관련 모든 업데이트를 완료하였다면 위와 같은 문제는 발생하지 않습니다...  이미 버그픽스가 완료된 상태라....^^


2008년 9월 22일 월요일

myodbc3!LoadByOrdinal, 작업자 프로세스 재생시 COM+ 오류 이벤트

이벤트 형식: 오류
이벤트 원본: COM+
이벤트 범주: 알 수 없음
이벤트 ID: 4689
설명:
런타임 환경이 내부 상태에서 불일치를 감지했습니다. 이것은 프로세스가 잠재적으로 불안정함을 나타내며, COM+ 응용 프로그램에서 실행 중인 구성 요소, 이들 구성 요소에서 사용하는 구성 요소 또는 기타 요소가 그 원인이 될 수 있습니다. d:\nt\com\complus\src\comsvcs\threads\stawork.cpp(156)의 오류, hr = 80010108: Callback failure handled by IAsyncErrorNotify


Windows Server 2003 Standard, Service Pack 1, IIS6

작업자 프로세스(w3wp.exe) 에서의 지속적인 메모리 증가 및 응용프로그램 풀의 메모리 제한값에 도달하여 재생이 되는 과정에서의 오류

'wssplex.net' 응용 프로그램 풀을 처리하는 '5320' 작업 ID인 작업자 프로세스가 메모리 제한에 도달했으므로 재생을 요청했습니다.

응용 프로그램 풀 'wssplex.net'을(를) 지원하는 프로세스를 종료하는 동안 제한 시간이 초과되었습니다. 프로세스 ID는 '5320'입니다.


해당 작업자 프로세스를 디버깅 해보면 가장 메모리 소비가 많은 힙은 myodbc3!LoadByOrdinal 이며, 이 서버의 MySQL ODBC Driver 는 MySQL ODBC 3.51 Driver (3.51.12.0)

mysql.com 커뮤니티를 보면 해당 마이너 버젼에 문제가 있다고 여러건 올라오고 있는것 같으며, 현재 3.x 대의 가장 마지막으로 릴리즈된 버젼은 3.51.26

http://dev.mysql.com/downloads/connector/odbc/3.51.html


2008년 9월 20일 토요일

ClusSvc / ID: 1073

서버 클러스터 내에서 비일관성을 방지하기 위해 클러스터 서비스를 중지했습니다. 오류 코드는 5892입니다.

ClusSvc / ID: 1177

구성원 엔진이 쿼럼 장치를 조정하지 못했기 때문에 클러스터 서비스를 종료하고 있습니다. 현재 쿼럼 소유자와 네트워크로 연결되어 있지 않기 때문일 수 있습니다. 실제 네트워크 구조를 확인하여 이 노드와 서버 클러스터에 있는 다른 노드 사이의 통신이 원래대로 설정되어 있는지 확인하십시오.

2008년 9월 17일 수요일

NTDS KCC / ID: 1925

VMWARE환경 입니다.
DNS를 구성하고(주영역,보조영역) AD를 설치한 후에 나온 에러 입니다.
서로 복제를 못하고 있습니다. ㅜㅜ
어찌 해야 할까요;

내용입니다.
===============================================================================


다음 쓰기 가능한 디렉터리 파티션으로 복제의 연결을 만들려고 시도했으나 실패했습니다.?
?
디렉터리 파티션:?
DC=ace,DC=com?
원본 도메인 컨트롤러:?
CN=NTDS Settings,CN=NS2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ace,DC=com?
원본 도메인 컨트롤러 주소:?
d13accb5-f01a-4711-a13a-9cc3d39d3edf._msdcs.ace.com?
사이트 간 전송(있을 경우):?
?
?
이 문제가 해결되기 전에는 이 도메인 컨트롤러가 해당 원본 도메인 컨트롤러와 복제할 수 없습니다. ?
?
사용자 작업?
원본 도메인 컨트롤러에 액세스할 수 있는지 또는 네트워크 연결을 사용할 수 있는지 확인하십시오.?
?
추가 데이터?
오류 값:?
8524 DNS 조회를 실패했으므로 DSA 작업을 진행할 수 없습니다.

2008년 9월 10일 수요일

2008년 9월 마이크로소프트 보안 공지

GDI+의 취약점으로 인한 원격 코드 실행 문제점 (954593)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-052.mspx

요건 정말 자주 나오는 듯... -_-;;;;;;;;
그외,....

Windows Media 인코더 9의 취약점으로 인한 원격 코드 실행 문제점 (954156)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-053.mspx

Windows Media Player의 취약점으로 인한 원격 코드 실행 문제점 (954154)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-054.mspx

Microsoft Office의 취약점으로 인한 원격 코드 실행 문제점 (955047)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-055.mspx

2008년 9월 9일 화요일

IIS Config / ID: 51228

메타베이스 파일을 저장하는 동안 오류가 발생했습니다. 이 오류는 다른 프로그램에서 메타베이스 XML 파일을 사용 중이거나 디스크가 꽉 찼을 때 발생할 수 있습니다. 이벤트 로그에서 해당 이벤트를 확인하십시오.
ErrorCode : 0x80070020

2008년 9월 8일 월요일

Schannel / ID: 36869

SSL 서버 자격 증명의 인증서에 올바르게 첨부된 개인 키 정보가 없습니다. 이는 인증서가 올바르게 백업되지 않고 나중에 복원되었을 때 흔히 발생할 수  있습니다. 이 메시지는 또한 인증서 등록 실패를 의미할 수  있습니다.


2008년 9월 4일 목요일

OLE/DB 공급자 'SQLOLEDB'이(가) 분산 트랜잭션을 시작할 수 없음

SQL Server 에서 종종 사용되는,. Linked-Server 를 사용하여 다른 SQL Server 에 접근을 하는 경우 종종 다음과 같은 오류 메시지가 나올수 있습니다.. 물론 웹서버에서도 특정 코드에서 SQL 쿼리시 Transaction 요구가 되도록 되어 있다면 이와 비슷한 오류 메시지가 나옵니다. -_-;;

ASP 페이지에서 데이터 트랜잭션을 처리하는 방법
http://support.microsoft.com/kb/299637/ko

OLE/DB 공급자 'SQLOLEDB'이(가) 분산 트랜잭션을 시작할 수 없으므로 작업을 수행할 수 없습니다.
[OLE/DB provider returned message: 지정한 트랜잭션 코디네이터에 새 트랜잭션을 기록할 수 없습니다. ]
OLE DB 오류 추적 [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].


위 오류는,. Linked-Server 로 구성된 A 서버에서 B 서버로 쿼리시,. A 서버에서는 특정 테이블에 Trigger 가 걸려있고 그 Trigger 코드내에 Linked-Server 에 Insert 를 하게 되어 있습니다. 분산쿼리시 JoinTransaction OLE DB 인터페이스를 사용 합니다.

(읽기(Select) 라면,. 상관없겠지만,..... 데이터가 변경되는 Insert, Update, Delete, alter, create, drop 등등 명시적으로 트랜잭션을 호출하지 않더라도 암시적 트랜잭션이 활성화 됩니다.)

이러한 로컬 트랜잭션이 아닌 분산 Transaction 이 가능하게 해주는 것이 바로 MSDTC(Distributed Transaction Coordinator) 입니다. A 서버와 B서버 사이에의 트랜잭션 처리를 MSDTC가 모두 알아서 해주기 때문에 신경쓸 필요가 없는 것이죠. 위의 오류는 이와 같은 MSDTC 를 활성화 또는 엑세스에 문제가 있을때 발생 합니다.




그래서 MSDTC 활성화가 필요한데,.. MSDTC 활성화에 대한 자세한 설명이 있는 아티클이 있으므로  다음 포스트를 참조하는것이 더 이로울듯 싶습니다.^^

MS-DTC Setting on Windows 2003
http://www.simpleisbest.net/archive/2005/07/04/173.aspx

(*DTC 로그온 계정의 경우 다른 계정으로 설정을 했다가 원래 계정으로 복구를 할려면 굳이 msdtc 를 재설치 할필요까지는 없습니다. NT Authority\NetworkService 계정을 넣어주면 됩니다.  여기에서 설정한 계정은 서비스 관리자의 에서 Distributed Transaction Coordinator 의 실행 계정 입니다.)

MSDTC 는,. 다른 호스트의 MSDTC 엑세스를 위해서 RPC 통신을 하게 됩니다.

Linked-Server 에서 라면,. 쿼리 업데이트를 위한 1433 말고도 MSDTC 를 위한 135 포트가 접근이 가능해야 하는데,. 인증을 하게 되어 있는 경우 컴퓨터 인증이므로 Active Directory 환경이 아니고서는 되지 않습니다.

DCEPRC
     Auth type: NTLMSSP (10)
     Auth level: Packet integrity (5)
     NTLMSSP
          NTLMSSP identifier: NTLMSSP
          NTLM Message Type: NTLMSSP_NEGOTIATE (0x00000001)

컴퓨터 인증이기 때문에,. 워크 그룹 환경에서는 인증을 이용할수 없고 다음과 같은 이벤트가 발생하게 되겠지요.

로그온 시도: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
로그온 계정: WSSPLEX-A2$
워크스테이션: WSSPLEX-A2
오류 코드: 0xC0000064

로그온 실패:
  원인:  알 수 없는 사용자 이름 또는 잘못된 암호
  사용자 이름: WSSPLEX-A2$
  도메인:  WORKGROUP
  로그온 유형: 3
  로그온 프로세스: NtLmSsp
  인증 패키지: NTLM
  워크스테이션 이름: WSSPLEX-A

물론,.  "인증 필요 없음" 이 체크되어 있더라도 Linked-Server 의 옵션에서 RPC 사용이 체크되어 있으면 RPC 로그온을 시도하게 됩니다.



만약,. 한쪽에서만 허용이 되어 있다거나 접속이 가능한 조건이 라면,. 다음과 같은 이벤트가 발생 합니다.

이벤트 형식: 경고
이벤트 원본: MSDTC
MS DTC가 원격 시스템에 있는 MS DTC와 통신할 수 없습니다. 주 시스템에 있는 MS DTC가 보조 시스템에 있는 MS DTC와 RPC 바인딩을 만들었지만 시간을 초과하기 전에 보조 시스템이 주 MS DTC 시스템으로 역방향 RPC 바인딩을 만들지 못했습니다. 두 시스템 간에 네트워크 연결이 되어 있는지 확인하십시오. 오류 설명:d:\nt\com\complus\dtc\dtc\cm\src\iomgrsrv.cpp:1318, Pid: 2680
No Callstack,
CmdLine: C:\WINDOWS\system32\msdtc.exe


MSDTC 구성에 관련해서 위의 참조 링크를 통해서도 해결이 되지 않는다면 다음 링크를 통해서 트러블 슈팅을 해보면 도움이 될것 같습니다.

Troubleshooting Problems with MSDTC
http://msdn.microsoft.com/en-us/library/aa561924.aspx

만약 오류에 의해서 트랜잭션이 실패하거나 중단되는 것은, MSTDC 트랜잭션 통계를 통해서 확인이 가능할텐데요.. 물론 이러한 통계는 msdtc 가 시작된 이후로의 통계 이므로 재시작 되면 없어 집니다.





04-msdtc-net-config.gif
04-msdtc-rpc.gif
04-msdtc-transaction.gif

2008년 9월 3일 수요일

웹방화벽 WebKnight 2.2 릴리즈

IIS 기반의 웹방화벽으로 잘알려진 WebKnight2.2 버젼으로, 9월 2일자 배포가 되고 있습니다. 몇몇 패치와 개선을 했다고 합니다.

(* Microsoft 에서 배포하는 UrlScan도 현재 2.0 베타 상태로 곧 정식 릴리즈가 될것 같습니다.)

개발자 사이트 다운로드: http://www.aqtronix.com/?PageID=99



공개용 웹 방화벽 프로그램을 이용한 홈페이지 보안 - krcert
http://www.wssplex.net/TipnTech.aspx?Seq=312


2008년 8월 29일 금요일

System Center Data Protection Manager 2007 설치 및 관리자 가이드

Product: System Center Data Protection Manager 2007
Download: http://www.mspsr.co.kr/regist/ServerGuide/Part1/SCDPM2007.pdf
Language: Korean

System Center Data Protection Manager 2007 설치 및 관리자 가이드

Internet Security Acceleration Server 2006 설치 및 관리자 가이드

Product: Internet Security Acceleration Server 2006
Download: http://www.mspsr.co.kr/regist/ServerGuide/Part1/ISA2006.pdf
Language: Korean

Internet Security Acceleration Server 2006 설치 및 관리자 가이드

System Center Configuration Manager 2007 설치 및 관리자 가이드

Product: System Center Configuration Manager 2007
Download: http://www.mspsr.co.kr/regist/ServerGuide/Part1/SCCM2007.pdf
Language: Korean

System Center Configuration Manager 2007 설치 및 관리자 가이드

System Center Operations Manager 2007 설치 및 관리자 가이드

Product: System Center Operations Manager 2007
Download: http://www.mspsr.co.kr/regist/ServerGuide/Part1/SCOM2007.pdf
Language: Korean

System Center Operations Manager 2007 설치 및 관리자 가이드

Microsoft Forefront Client Security 설치 및 관리자 가이드

Product: Microsoft Forefront
Download: http://www.mspsr.co.kr/regist/ServerGuide/Part1/FCS.pdf
Language: Korean

Microsoft Forefront Client Security 설치 및 관리자 가이드

Exchange Server 2007 설치 및 활용 가이드

Product: Exchange Server 2007
Download: http://www.mspsr.co.kr/regist/ServerGuide/Part2/Exchange2007설치및활용가이드.pdf
Language: Korean

Exchange Server 2007 설치 및 활용 가이드

SQL2005 관리자 운영 가이드

Product: SQL Server 2005
Download: http://www.mspsr.co.kr/regist/ServerGuide/Part1/SQL2005운영가이드.pdf
Language: Korean

SQL2005 관리자 운영 가이드

2008년 8월 26일 화요일

ASP 에서 Socket 통신 코드 예제

Asp 에서는 Socket 통신을 할려면 별도의 구성요소(컴포넌트)가 필요 합니다.

여타 웹 스크립트 언어 자체에서 모든 기능을 제공하는 대신 Asp 는 Server.CreateObject 라는 구조를 통해서 무한한 가능성을 열어주는 대신에,.. 직접 만들어야 하다는 단점.,.. 각설하고...

http://tech.dimac.net/ 에서,. Socket 통신이 가능한 간단한 컴포넌트를 배포하고 있습니다. 다운로드 할려면 이메일 쓰고 등록해야 하더군요. 뭐 간단하지만,.. 그래서 SkyDrive 에..



물론 소스코드는 Microsoft 에서 배포하는 것을 참조하였으므로,. readme.txt 에서도 ftp://ftp.microsoft.com/bussys/winsock/winsock2/ 에서도 가능하겠고요. ^^

- 닷넷이라면,.. System.Net 네임스페이스 에서 가능 -

예제 입니다. 간단 합니다.
아래 예제는 후이즈 서버에서 도메인 정보를 받아오는 것입니다.

<%

Set Socket = Server.CreateObject("Socket.TCP")

Socket.host = "whois.internic.net:43"
Socket.timeout = 2000
Socket.Open()
Socket.sendLine( "wssplex.net"&VbCrLf )
Socket.WaitForDisconnect()

Response.write Socket.buffer

Socket.close()
Set Socket = Nothing

%>

소켓을 통해서 보내지는 데이터는 해당 프로토콜 형식에 맞게 전달되어야 겠고, 받아온 데이터 역시 해당 소켓 서버에서 평문이 아닌 특정 형식이라면 추가적인 데이터 조작이 필요할 것이고요...^^

사용은,. 해당 dll 을 regsvr32 를 통해서 레지스트리 클래스 항목에 등록을 하고,. 혹시 웹에서 객체 생성시 권한 오류가 발생 한다면 웹사이트 익명 계정에 적절한 권한을 설정해 주면 됩니다.


해당 컴포넌트를 들여다 보면,. 구현된 Public 메소드와 속성은 위와 같습니다.



25-Socket.png

WinRM - Windows Remote Management 기능 활성화

WinRM(Windows Remote Management) 은 Windows Server 2003 R2 부터 포함이 되기 시작한 윈도우 기반 관리를 위한 새로운 인터페이스 입니다. 이전 까지는 WMI 를 통해서 윈도우 리소스 접근이 되었는데,. 물론 매우 훌륭한 시스템 입니다. 그런데,. 이 WMI 는 DCOM 를 통해서 가능하기에 현재의 네트워크 보안 인프라에서는 제약이 많은게 사실 입니다.

이러한 제한을 뛰어 넘기 위한 것과,.. 그것도 그렇거니와, 하드웨어 및 운영체제 마다 각자의 독자적인 관리 인터페이스 때문에 다양한 인프라로 구축된 환경에서는 관리가 매우 까다로웠습니다. 

이를 테면,. Windows 관리를 위한 System Center 제품도 기존에는 Microsoft 외 Linux 나 Oracle 등 다른 제품은 해당 벤더에서 System Center 용 관리팩을 별도로 제공을 해주었습니다. 그러나 이제는 표준 인터페이스가 마련이 되어 있으므로 Microsoft 에서 타사 제품에 대한 관리팩을 직접 제공을 해줄수가 있게 된것 이죠.

그래서,.  AMD, DELL, Intel, Microsoft, Sun Microsystems 등 여러 하드웨어 및 운영체제 업체등 에서 업계 표준의 공통의 관리 인프라 인터페이스를 Http 기반의 Soap 메시지 형태의 WS-Management protocol 를 만들었습니다. 최근의 거의 대부분의 운영체제에서 지원하고 있으며, Windows 의 경우, XP 부터 별도의 WinRM 패키지를 설치하면 가능해 집니다. 

물론 운영체제에 대한 것은 역시 WinRM 를 통해서 요청이 WMI 로 라우트 됩니다. 실제 정보는 계속해서 WMI 가 담당 합니다.하드웨어 관리도 가능하기는 한데,. 하드웨어 모듈인 BMC 컨트롤러가 있는 장비의 경우에는 하드웨어 관리까지 가능합니다.



<그림. TechNET>

도움말:
Windows Remote Management(WinRM) 서비스는 원격 관리를 위한 WS-Management 프로토콜을 구현합니다. WS-Management는 원격 소프트웨어 및 하드웨어 관리에 사용되는 표준 웹 서비스 프로토콜입니다. WinRM 서비스는 네트워크에서 WS-Management 요청을 수신하여 처리합니다. WinRM 서비스가 네트워크에서 요청을 수신하려면 winrm.cmd 명령줄 도구를 사용하거나 그룹 정책을 통해 수신기를 구성해야 합니다. WinRM 서비스는 WMI 데이터에 대한 액세스를 제공하고 이벤트를 수집할 수 있도록 합니다. 이벤트를 수집하고 이벤트에 가입하려면 이 서비스가 실행되고 있어야 합니다. WinRM 메시지는 HTTP 및 HTTPS를 전송 수단으로 사용합니다. WinRM 서비스는 IIS에 의존하지 않지만 동일한 컴퓨터에서 IIS와 포트를 공유하도록 미리 설정되어 있습니다. WinRM 서비스는 /wsman URL 접두사를 예약합니다. IIS와의 충돌을 방지하려면 관리자가 IIS에서 호스트되는 웹 사이트가 /wsman URL 접두사를 사용하지 않도록 해야 합니다.


전체적인 WinRM 구조는 위 Diagram 을 보면 알수 있을것 같고,. 앞서 얘기한 것처럼 WinRM 은 Http 를 이용한다고 하였습니다. 그렇다면,. 해당 서버에 IIS 를 운영하는 경우에는 어떻게 되는 것이냐? 라는 자연스러운 궁금증이 있을것 같습니다.

이와 같은 궁금중은,. 지난 IIS 6 에서부터 IIS Core 가 변경되어 Http 요청을 커널모드에서 처리를 하는 Http.sys 에서 찾을수 있습니다. Http.sys 는 포트 공유를 통해서 Http를 통해서 들어온 요청을 구분하여 처리를 하게 됩니다. 아래 Diagram 을 보시면 훨씬더 쉽게 이해를 할수 있을것 같습니다.

<그림. http://blogs.technet.com/otto/ >

WinRM 에 대한 요약은 위 도움말을 참조하면 될것 같고, 주의 사항중에 IIS 에서 사이트 구성서 /wsman 만 사용하지 않으면 될것입니다. WS-Management protocol 에 대한 관련 상황 설명을 각설하고,.. 보다 자세한 사항은 다음 링크를 참조하시면 좋겠습니다.

http://www.dmtf.org/standards/wsman
http://en.wikipedia.org/wiki/DMTF

- 그렇고 보면,.. RPC over Http/s 도 이와 흡사한 구조 입니다. 차이점 이라면,. Http 프록시 -특정 모듈(dll)- 웹주소에 직접 요청을 전달하고 받는 다는 것과 IIS 가 필수로 작동 되어야 한다는 점 일것 같습니다. -


이 글을 쓰는 본인도,.. WMI 로만 서버관리를 하고 있는 중이라,.

새로운 인터페이스인 WinRM 에 대해서 알고 있는 지식이 현재 얕은지라.... -_-;; 솔직히 Windows Server 2003 R2에 포함이 되었을 때에도 별로 관심이 없었죠. 왜냐하면 Windows 만 운영을 하고 있으니깐,. 그리고 WMI 로도 충분 했으니깐요.^^;;;;

이제,. WinRM 을 서버(관리되는)측에 설치 및 구성하는 방법 입니다. 물론 이미 알려져 있는 내용이기는 합니다 만,. 스스로 한번더 되새겨볼 기회를 갖고자.....,

Windows 구성요소에는 2가지가 있습니다. 서버측 역할 도구와 클라이언트 역할 도구 입니다. 서버측 역할 도구는 Winrm.vbs 이고, 클라이언트는 Windows Remote Shell(WinRS.exe) 입니다.

C:\>winrm
Windows Remote Management 명령줄 도구

Windows Remote Management(WinRM)는 Microsoft가 구현한
WS-Management 프로토콜로서, 웹 서비스를 사용하여 로컬 및 원격 컴퓨터와
안전하게 통신할 수 있는 방법입니다.

사용:
  winrm OPERATION RESOURCE_URI [-SWITCH:VALUE [-SWITCH:VALUE] ...]
        [@{KEY=VALUE[;KEY=VALUE]...}]

Winrm.vbs 는 서버측에서 요청된 응답을 하기 위해서 관련 환경을 구성하기 위한 도구 입니다. 서버측에서 응답해 줄수 있는 리소스를 구성하고,. 또한 리소스를 얻기 위해서 서버측에 접속할수 있도록 접속 환경을 구성 합니다.




명령행에서의 구성 도구인 Winrm 은 WSMAN COM API 개체(C:\Windows\system32\WSMAUTO.DLL)를 이용한 Vbscript 입니다. 이 말은,. 외부에서 해당 COM 개체를 이용해서 WSMAN 기반의 관리 도구를 따로 만들수 있다는 얘기가 될수 있겠지요.^^

Set Wsman = CreateObject("Wsman.Automation")
Set xmlFile = CreateObject( "MSxml.DOMDocument")
Set Session = Wsman.CreateSession Response = Session.Get("http://schemas.microsoft.com/wbem/wsman/" _ & "1/wmi/root/cimv2/Win32_Service?Name=Spooler")
xmlFile.LoadXml(Response)
xmlFile.Save( "c:\RawOutput.xml")

WsmCL.dll - C 에서 사용할수 있는 라이브러리
WsmSvc.dll - WinRM 리스너 서비스
WsmProv.dll - 공급자 하위시스템
WsmRes.dll - 리소스 파일
WsmWmPI.dll - WMI 플러그인


C:\>winrs -?

사용법
=====
(모두 대문자인 텍스트 = 사용자가 제공해야 하는 값입니다.)

winrs [-/SWITCH[:VALUE]] COMMAND

COMMAND - cmd.exe 셸에서 명령으로 실행할 수 있는 문자열입니다.

WinRS.exe 는 클라이언측 에서 지정 대상(로컬 또는 원격)으로 WS-Management 를 통해서 접속후 지정된 장비의 리소스를 가져오기 위한 도구 이며,. Soap 메시지 특성상 구조적 데이터 형식의 XML로 반환을 받을수 있습니다.  이것은,. C# 이나 VB, C++  등 개발 언어에서 Soap 요청을 통해서 XML 을 반환받고 그 데이터를 다른 형식으로 또는 용도로 사용이 쉽다는 것입니다.

서버운영자에게는,. 강력한 쉘 도구인 PowerShell 을 이용하는 것도 매우 좋은 방법입니다. 특히 PowerShell V2 (현재 CTP)에서는 Remoting 을 지원하는데 이때 원격 호스트 접속 방법으로 WinRM 을 사용합니다.


간단한 예로 WinRS 클라이언트 에서의 요청 입니다.

C:\>winrs -r:http://localhost "dir c:"
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: A036-5CE5

C:\Users\Administrator 디렉터리

2008-06-26  오후 05:31    <DIR>          .
2008-06-26  오후 05:31    <DIR>          ..
2008-06-26  오후 05:10    <DIR>          Contacts
2008-08-19  오후 02:34    <DIR>          Desktop ................
               0개 파일                   0 바이트
              13개 디렉터리   8,552,103,936 바이트 남음

위 예제는,. 로컬 호스트에 대한 쿼리 결과 입니다. 물론 원격지는 localhost 대신에 원격지 주소와 권한이 있는 인증 정보를 제공하면 동일한 결과를 받아 볼수 있습니다.

앞서 언급한 것처럼, Windows Server 2003 R2 에는 추가 구성요소로 내장되어 있고 -제어판의 프로그램 추가/삭제 에서 구성요소 설치 필요-, Windows Server 2008 은 추가 설치 없이 사용이 가능합니다. 그리고 그외 버젼의 경우에는 WinRM 패키지를 다운로드 받아서 설치가 가능합니다.

- Windows Server 2003 R2에 설치된 패키지 보다는 다운로드 해서 최신 버젼을 설치하는 것이 좋습니다. -
 
다운로드: WS-Management v1.1


Windows Server 2008 은,. 기본값으로 WinRM 이 비활성화 되어 있습니다.

외부에서 접속이 가능하도록 리스너 설정을 해줘야 합니다. winrm quickconfig (또는 winrm qc ) 을 통해서 기본적인 작동이 가능할 정도는 쉽게  활성화가 가능 합니다.

(*참고로, Windows Server 2003 R2 에서는 quickconfig 스위치가 작동하지 않으며 각 설정을 개별적으로 해야 합니다.)

C:\Users\Administrator>winrm quickconfig
WinRM이 이 컴퓨터에 관리를 위해 원격으로 액세스할 수 있도록 설정되지 않았습니다.
다음 사항을 변경해야 합니다.

이 컴퓨터에서 모든 IP 주소로 WS-Man 요청을 수락하려면  HTTP://*에서 WinRM 수신기를 만드십시오.
WinRM 방화벽 예외를 사용합니다.

변경하시겠습니까[y/n]? y

원격 관리를 위한 WinRM이 업데이트되었습니다.

이 컴퓨터에서 모든 IP 주소로 WS-Man 요청을 수락하려면 HTTP://*에서 WinRM 수신기를 만드십시오.
WinRM 방화벽 예외를 사용합니다.

C:\Users\Administrator>winrm enumerate winrm/config/listener
Listener
    Address = *
    Transport = HTTP
    Port = 80
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 10.0.0.17, 127.0.0.1, ::1, 2001:0:cf2e:308c:2c0e:d42:f5ff:ffee, fe80::5efe:10.0.0.
17%11, fe80::2c0e:d42:f5ff:ffee%12, fe80::34d9:7fb6:afa3:b046%10


물론,. 지정된 IP 주소나 Http나 Https 같은 프로토콜, 인증서 등 해당 호스트에 맞는 설정을 해줘야 합니다. 기본으로 구성되는 것만 보면,. IP 제한이 없고,. Http(80)이며 인증서 설정이 되어 있지 않습니다.

각 설정방법은 도움말을 참고하시면 쉽게 설정이 가능합니다.
각 설정에 대한 자세한 정보는 도움말(WinRM 스위치 -?)을 참조하면 됩니다.

인증서 설정이 필요한 이유는, Http 프로토콜 특성상 ClearText 형태 이므로 실제 원격지에서의 리소스 요청시 리소스 접근이 가능한 계정 정보를 넘겨줘야 하는 경우와 받아온 리소스가 XML 이므로 쉽게 노출이 됩니다. 물론 인증이 기본 인증 이상인 경우 인증 정보는 암호화가 되지만....

인증 방법은, 다음과 같은 종류의 방식이 가능 합니다. 물론,. Clinet 측에서는 활성화되어 이용할 인증 방법이 Server 측에서 비활성화 되어 있으면 인증이 되지 않겠지요.^^

Basic Authentication
Digest Authentication
Negotiate Authentication
Kerberos Authentication
Client Certificate-based Authentication

시간이 된다면,. 다음번에는 WinRM 을 Windows Server 2003 R2에서 활성화 하는 방법과 WinRM 을 이용한 몇가지 활용법을 정리해볼 생각입니다. ^^;;


25-Windows-Remote-Management-Architecture.png
25-WS-Man-Architecture.jpg
25-Windows-Service-Windows-Remote-Management-WinRM.png

2019년 10월 MS 취약점 패치 주요 사항

CVE-2019-1166 | Windows NTLM 변조 취약성 https://portal.msrc.microsoft.com/ko-KR/security-guidance/advisory/CVE-2019-1166 CVE-2019-1230 | Hype...