독까의 이야기

1. 감사 사양 설정 및 실행

-- 서버 수준에서 감사 사양 생성
USE master
CREATE SERVER AUDIT ServerAudit
TO FILE (FILEPATH = 'D:\MSSQL\AuditLogs\');

-- 서버 감사 사양을 시작
USE master
ALTER SERVER AUDIT ServerAudit
WITH (STATE = ON);

-- 데이터베이스 수준에서 감사 사양 생성
use MYDATABASENAME
CREATE DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
FOR SERVER AUDIT ServerAudit
ADD (INSERT, UPDATE, DELETE ON DATABASE::MYDATABASENAME BY PUBLIC);

-- 데이터베이스 감사 사양을 시작
use MYDATABASENAME
ALTER DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
WITH (STATE = ON);

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

2. 감사 사양 종료 및 삭제

-- 감사 사양 종료 및 삭제
USE master
ALTER SERVER AUDIT ServerAudit
WITH (STATE = OFF);

-- 서버 감사 사양 삭제
USE master
DROP SERVER AUDIT ServerAudit;

-- 데이터베이스 감사 사양을 종료
use MYDATABASENAME
ALTER DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
WITH (STATE = OFF);

-- 데이터베이스 감사 사양 삭제
use MYDATABASENAME
DROP DATABASE AUDIT SPECIFICATION DatabaseAuditSpec;

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

3. 감사 사양 로그 조회

-- 감사 로그 파일 조회 (로컬 시간으로 변환)
SELECT 
    DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), event_time) AS local_event_time,
    server_instance_name,
    database_name,
    schema_name,
    object_name,
    statement
FROM sys.fn_get_audit_file('D:\MSSQL\AuditLogs\*.sqlaudit', DEFAULT, DEFAULT);

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

4. 에이전트 작업 스케쥴 등록 :  매일 오전 00:00 신규 파일 생성

작업명 : DailyAuditLogRotation

-- T-SQL 작성
DECLARE @currentDateTime NVARCHAR(50);
DECLARE @auditFilePath NVARCHAR(500);
DECLARE @sqlCmd NVARCHAR(MAX);
DECLARE @innerSqlCmd NVARCHAR(MAX);

-- 현재 시간 문자열 생성
SET @currentDateTime = REPLACE(CONVERT(NVARCHAR, GETDATE(), 120), ':', '');

-- 감사 로그 파일 경로 설정 (예: D:\MSSQL\AuditLogs\AuditLog_YYYYMMDD_HHMMSS.audit)
SET @auditFilePath = 'D:\MSSQL\AuditLogs\AuditLog_' + @currentDateTime + '.audit';

-- 새로운 감사 로그 파일 생성을 위한 동적 SQL 명령 준비
SET @innerSqlCmd = '
    ALTER SERVER AUDIT ServerAudit
    WITH (STATE = OFF);

    ALTER SERVER AUDIT ServerAudit
    WITH (STATE = ON);
';

-- 동적 SQL 명령 실행
EXEC sp_executesql @innerSqlCmd;

# Windows Server 2025 Preview 설치 테스트

 

윈도우 서버 신규 버전 iso 등록되어 설치 테스트 진행.

 

1. Windows Server 2025 Preview 기본 설치 진행 

라이센스키 발급 전이라, "제품 키가 없습니다." 선택
하드디스크 리스트 호출
OS 설치 파티션 생성 : 기본값으로 진행
이전 버전 OS 와 동일 구성 확인 됨
제품키 없으니깐 "나중에" 눌러서 다음으로 넘어가기
관리자 계정 패스워드 설정하고 완료

 

 

2. OS 테스트

 

1) 화면 및 기능

부팅시 기본 화면
로그인 화면
진단 데이터 전송이 강제 요소인 것으로 추정.
필수 요소만 선택해서 진행
기본 바탕 화면
시스템 정보
윈도우키 클릭
우측 상단 "모든앱" 클릭시 변경
Windows Tools 아이콘
IIS 버전은 이전과 동일
고급 방화벽도 동일
윈도우 백업도 동일
우측 하단 알림 버튼 클릭시
윈도우 업데이트

 

 

2) 네트워크 설정

네트워크 설정
IP 할당 수정
기본값 : 자동(DHCP) 을 수동으로 바꿔준다.
IPv4 만 활성화 해준다.
사용할 고정 아이피 및 DNS 입력
네트워크 활성화 후 인터넷 연결 테스트 : 정상

 

 

3) 서버 역할 및 기능 설치

서버 관리자 대시보드는 기존 버전과 동일
역할 및 기능 추가 마법사
기존과 크게 달라진 것같지 않음
역할 설치 : IIS 설치
기능 설치 : .Net 3.5 / SNMP / Telnet Client / Windows Server 백업
IIS 역할 서비스 설치
.NET 3.5 포함 설치시에는 항상 오류 발생 / 이전 버전에서도 동일 오류 발생 / 개선 안 됨

 

수동으로 .NET 3.5 설치 진행 : Dism /online /enable-feature /featurename:NetFx3 /All /Source: X: \sources\sxs /LimitAccess

 

 

4) 원격 데스크톱 활성화

윈도우키 - 설정 - 시스템 - 원격 데스크톱 

원격 데스크톱 켜기
기본 설정값 / 원활한 접속을 위해서는 "디바이스에서 ~ ~ " 는 해제 한다.
네트워크 수준 인증 비활성화

 

원격 데스크톱 활성화 확인

 

 

3. 설치 후기

1) GUI 가 윈도우 11과 똑같이 변경 됨

2) 이전 버전에서 사용되던 프로그램 및 기능의 변화 없음

3) 보안 패치 종료 이슈가 없는 이상, 기존에 사용하던 OS 버전을 굳이 변경할 필요는 없음

웹사이트 분석툴인 goaccess 를 IIS 에 적용하고자 한다. 

1. 패키지 다운로드

https://goaccess.io/download

Download 버튼을 누르면 goaccess-1.9.1.tar.gz 파일이 다운 됨. 

goaccess-1.9.1.tar.gz
0.71MB

우선 해당 파일을 C 드라이브에 압축 해제하고 다음 단계 진행. 

 

2. cygwin 설치 및 패키지 다운로드 

goaccess 가 리눅스 기반으로 생성되었기 때문에, 윈도우에서 동작 시키려면 추가 프로그램이 필요 함. 

cygwin 설치

https://www.cygwin.com/install.html

setup-x86_64.exe
1.34MB

설치 파일 실행하고 아래 단계를 진행 

Local Package Directory에는 다운로드한 패키지들을 저장 본인이 알아서 경로 지정.
http://cygwin.mirror.constant.com 선택

이 후, 패키지 검색 화면이 나오는데 기본으로 필요한 패키지와 goaccess 를 위한 패키지를 찾아서 설치.

- gcc

gcc-core 를 선택하고, "Skip" 을 두 번 클릭해서 버전이 나오게 해야 함. 

"다음" 은 누르면 안 됨. 

필요한 패키지 전체 활성화 완료 후에 "다음" 버튼을 눌러서 설치 진행해야 함. 

- gcc-g++

- make

- gdb

- wget

 

그리고 goaccess 개발사에서 안내한 패키지를 다운로드 한다. 위에 설치 된 것과 중복이 있으니 확인 필요.

https://goaccess.io/faq#installation

- libGeoIP

- libncurses / libncursesw10

- automake

- gettext

 

참고로, goaccess 설치 메뉴얼에는 없는 패키지가 있는데 "libmaxminddb" 이것도 설치해야 함. 

./configure 명령어 실행 할 때 해당 패키지 없어서 에러 남. 메뉴얼 없데이트가 안 된 듯. 

- libmaxminddb

 

이제 "다음" 버튼 눌러서 선택한 패키지 확인하고 설치 진행 하면 됨. 

 

# 패키지가 유닉스 계열 압축 파일이므로, 서버에 해당 압축을 해제 할 수 있는 프로그램이 설치되어 있어야 함. 

없으면 다운로드 완료했음에도 압축 해제 할 수 없다고 에러 엄청 나옴. 

 

3. goaccess 설치

바탕화면에 등록 된 아이콘 실행해서 cygwin CLI 실행 

아까 압축 풀어놨던 경로로 이동 : cd c:/goaccess-1.9.1

- 구성 : configure

명령어 실행 : 둘 중에 아무거나 해도 상관없는 것 같음. 

./configure --enable-utf8 --enable-geoip=legacy

or 

./configure --enable-utf8 --enable-geoip=mmdb

오류 없이 완료 되면 정상. 

 

- 빌드 : make

make

 

- 설치 : make install

make install

 

4. goaccess 실행

IIS 웹로그가 저장 된 경로를 지정하여 로그 파일 분석

goaccess -f "C:\inetpub\logs\LogFiles\W3SVC1\u_ex240405.log"

윈도우 IIS 의 로그 형식이니까 W3C 를 "스페이스바"로 선택하고, "엔터"

CLI 로 로그 확인시에는 이런 화면이 호출 됨. 

 

5. html 로 로그 파일을 변환하여 웹브라우저에서 실행하는 방법

IIS 웹로그를 파싱하여 html 로 변환하는 작업을 해야 함. 

goaccess 가 기본적으로는 apache time 및 date 형식을 따르기 때문에 아래와 같이 포맷을 수정해야 정상적으로 변환 됨. 

goaccess --no-global-config "C:\inetpub\logs\LogFiles\W3SVC1\u_ex240405.log" --log-format '%d %t %^ %m %U %^ %^ %^ %h %u %R %s %^ %^ %^ %L' --date-format=%Y-%m-%d --time-format=%T -o "D:\WWW_ROOT\test\log.html"

파싱 작업이 완료되서 웹브라우저에서 "사이트주소/log.html" 실행하면 이런 화면을 볼 수 있음. 

 

참고로, 당일 로그 외에도 기간 설정하여 로그 분석도 가능함. 

예를 들어, 2024.04.01 ~ 2024.04.05 에 생성 된 IIS 웹로그를 분석하고자 하면 

해당 로그들을 통합하여 변환하면 됨

powershell 스크립트로 저장 후 실행 : merge-logs.ps1

$firstFile = 240401
$lastFile = 240415
$targetFolder = "C:\inetpub\logs\LogFiles\W3SVC1"
$outputFile = "C:\inetpub\logs\LogFiles\W3SVC1\merged.log"

# 기존의 합친 파일이 있다면 삭제
If (Test-Path $outputFile) {
    Remove-Item $outputFile
}

# 지정된 범위 내의 파일 병합
$firstFile..$lastFile | ForEach-Object {
    $fileName = "u_ex" + $_ + ".log"
    $filePath = Join-Path -Path $targetFolder -ChildPath $fileName
    If (Test-Path $filePath) {
        Get-Content $filePath | Add-Content $outputFile
    }
}

 

아니면, 폴더를 새로 만들어서 필요한 로그들 복사 후 통째로 통합해도 됨. 이 경우 CMD 로 간단하게 작성 가능

copy C:\inetpub\logs\LogFiles\Merged\u_ex*.log merged.log

 

생성 된 통합 로그 파일을 html 로 변환해서 호출하면 더 많은 정보를 확인 할 수 있음. 

goaccess.exe --no-global-config "C:\inetpub\logs\LogFiles\W3SVC1\merged.log" --log-format '%d %t %^ %m %U %^ %^ %^ %h %u %R %s %^ %^ %^ %L' --date-format=%Y-%m-%d --time-format=%T -o "D:\WWW_ROOT\test\log.html"

 

통합 로그의 기간을 늘리면 이렇게도 됨. 

 

6. 테스트 종료

리눅스 계열과 다르게, 윈도우 기반으로 실행하려면 반드시 cygwin 을 통해야 함. 

CMD 를 통한 실행은 불가. 

일정 주기로 log.html 을 생성하려고 하면

powershell 을 이용해서 cygwin 실행하고 로그 변환하는 방식을 사용할 수 있을 것 같음.