Windows

[Windows] 로컬 보안 정책을 배치파일로 만들기

Victory_HA 2023. 5. 25. 11:16
  • 실무에서 파일 전송 중 파일 전송이 실패하고, 서비스가 끊기는 등의 일들이 빈번했습니다.
  • 그 중 SMB를 사용하며 발생한 문제들이 많았는데, 파헤쳐보니 애초에 잘못 만들었다는 글들을 확인했습니다.
  • 아래는 실무에서 SMB 관련 오류를 발견하고 조치했던 기록들을 발췌했습니다.

SMB 관련 오류분석

  • SMB 연결 끊김으로 서비스에서 TimeOut발생 -> 처리 지연 확인했습니다.
  • SMB 연결 끊김 관련하여 주기적으로 연결 끊김 확인하였고, 연결 끊기지 않는 설정 적용했습니다.
    • 추가 모니터링 필요합니다.

이벤트 뷰어 확인

  • 이벤트뷰어 - 응용프로그램 및 서비스 로그 - microsoft - windows - smbclient - connectivity 오류 로그 확인
* 오류
네트워크 연결이 끊겼습니다.

서버: ₩100.100.100.130
서버 주소: ...
연결 형식 :  wsk

지침: 이는 서버에 대한 클라이언트 연결이 끊겼음을 나타냅니다.
---
로그 이름: microsoft-windows-smbclient/connectivity
원본:smbclient
이벤트 ID : 30804 
* 경고
서버에 대한 클라이언트 세션이 끊어졌습니다.

오류: 원격 사용자 세션이 삭제되었습니다.

서버 이름: ₩100.100.100.130
세션 ID:....
---
로그 이름: microsoft-windows-smbclient/connectivity
원본:smbclient
이벤트 id : 30805
  • 30805, 30807 이벤트 코드 발생
    • 해당 이벤트 발생시 smb 연결이 끊깁니다.

SMB 관련 오류분석

참조:https://lokna.no/?p=3053
참조:http://www.nynaeve.net/?p=93

  • smb가 정상 동작중임에도 간헐적으로 세션을 종료 후 재접속 시킨다. (== 기존 smb client 연결을 끊는다)

조치1

  • Windows Defender 방화벽 - Windows Defender 방화벽을 통해 앱 또는 기능 허용
    • SMBDirect를 통한 파일 및 프린터 공유 : 방화벽 허용

조치2

session timeout disable: https://community.spiceworks.com/topic/2305696-smb-share-idle-timeout

  • 로컬 보안 정책 -> 로컬 정책 -> 보안 옵션
    • microsoft 네트워크 서버 : 로그온 시간이 만료되면 클라이언트 연결 끊기 : 사용 -> 사용안함
    • microsoft 네트워크 서버 : 세션을 중단하기 전에 필요한 유휴 시간 : 15분 -> 99999분 (208일)

조치3

https://learn.microsoft.com/ko-kr/troubleshoot/windows-client/networking/mapped-drive-connection-to-network-share-lost

  • 네트워크 드라이브 연결 끊김 설정 제거합니다.
  • powershell 실행 후 아래 명령어 실행했습니다.
net config server /autodisconnect:-1



---

  • 매번 수동으로 하기 힘드니, 배치파일을 만들어봅시다.

로컬보안정책

  • 약간의 조건이 있는데, 조치3 명령어는 powershell에서 작동시켜야합니다.
    • Powershell에서 동작하는 배치파일의 경우 .ps1 확장자로 파일 생성합니다.
  • 그리고 로컬보안정책과 같은 경우는 레지스트리 값 변경만으로 설정을 할 수 있습니다.
  • 아래와 같은 내용으로 배치파일을 생성했습니다.

Windows NetworkDrive 관련 배치파일 내용

# Smb 설정
echo "net config server /autodisconnect:-1"
net config server /autodisconnect:-1

echo "Set local security config"
# microsoft 네트워크 서버 : 세션을 중단하기 전에 필요한 유휴 시간 : 15분 -> 0분 (사용안함)
$registryPath1 = "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"
$registryName1 = "AutoDisconnect"
$newValue1 = 4294967295

## 레지스트리 값을 변경
Set-ItemProperty -Path $registryPath1 -Name $registryName1 -Value $newValue1


# microsoft 네트워크 서버 : 로그온 시간이 만료되면 클라이언트 연결 끊기 : 사용 -> 사용안함
$registryPath2 = "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"
$registryName2 = "EnableForcedLogOff"
$newValue2 = 0

## 레지스트리 값을 변경
Set-ItemProperty -Path $registryPath2 -Name $registryName2 -Value $newValue2

echo "Success local security config"

Read-Host "Press Enter to continue..."