# Практическая работа № 5
## 5.1 Настройка DFS
Установим требуемые компоненты на серверах dc1 и dc2
```powershell=
Install-WindowsFeature -ComputerName dc1 FS-DFS-Namespace, FS-DFS-Replication -IncludeManagementTools
Install-WindowsFeature -ComputerName dc2 FS-DFS-Namespace, FS-DFS-Replication -IncludeManagementTools
```
Компоненты успешно установлены

Создадим DFS root, а также папку и шару для него
```powershell=
New-Item -Path "C:\DFSRoots" -Name "pt-dfs" -ItemType Directory
New-SmbShare -Name "pt-dfs" -Path "C:\DFSRoots\pt-dfs" -ChangeAccess "Everyone"
New-DfsnRoot -TargetPath "\\dc1\pt-dfs" -Type DomainV2 -Path "\\pt.local\pt-dfs"
```
Корень успешно создан

Перейдем в интегрированную консоль Powershell и выполним данный скрипт
```powershell=
# определям базовый путь до шар
$basePath = "C:\share\"
# создаем хештаблицу соответствия шары и доменной группы
$shares = @{
all_share = "Everyone"
Buhg = "Buhg-sec"
HR = "HR-sec"
Progr = "Progr-sec"
Sysadmins = "Sysadmins-sec"
VIP = "VIP-sec"
}
# бежим по именам шар
$shares.Keys | ForEach-Object{
# создаем папку для шары
New-Item -Path $basePath -Name $_ -ItemType Directory
# расшариваем ее невидимой, настраиваем доступ по сети: выдаем полный доступ группе администраторов домена, доступ на изменение выдаем доменной группе соответствующей шары
New-SmbShare -Name ($_+"$") -Path ($basePath+$_) -FullAccess "Domain Admins" -ChangeAccess $shares[$_]
# настраиваем разрешения NTFS
# Смотрим текущие разрешения
(Get-Acl -Path ($basePath+$_)).Access | Format-Table -Autosize
# создаем запись доступа для соответствующей доменной группы
$ACE = New-Object System.Security.AccessControl.FileSystemAccessRule($shares[$_],"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
# получаем текущий ACL папки
$ACL = Get-Acl -Path ($basePath+$_)
# добавляем к ACL нашу запись доступа ACE
$ACL.AddAccessRule($ACE)
# устанавливаем новый ACL на папку
Set-Acl -Path ($basePath+$_) -AclObject $ACL
# смотрим разрешения
(Get-Acl -Path ($basePath+$_)).Access | Format-Table -Autosize
}
```
Скрипт выполнился успешно


Подключимся удаленно к серверу dc2 напрямую из Powershell ISE


Выполним на dc2 скрипт создания шар. В русской версии группа "Everyone" называется "Все"
```powershell=
New-Item -Path "C:\DFSRoots" -Name "pt-dfs" -ItemType Directory
New-SmbShare -Name "pt-dfs" -Path "C:\DFSRoots\pt-dfs" -ChangeAccess "Все"
# определям базовый путь до шар
$basePath = "C:\share\"
# создаем хештаблицу соответствия шары и доменной группы
$shares = @{
all_share = "Все"
Buhg = "Buhg-sec"
HR = "HR-sec"
Progr = "Progr-sec"
Sysadmins = "Sysadmins-sec"
VIP = "VIP-sec"
}
# бежим по именам шар
$shares.Keys | ForEach-Object{
# создаем папку для шары
New-Item -Path $basePath -Name $_ -ItemType Directory
# расшариваем ее невидимой, настраиваем доступ по сети: выдаем полный доступ группе администраторов домена, доступ на изменение выдаем доменной группе соответствующей шары
New-SmbShare -Name ($_+"$") -Path ($basePath+$_) -FullAccess "Domain Admins" -ChangeAccess $shares[$_]
# настраиваем разрешения NTFS
# Смотрим текущие разрешения
(Get-Acl -Path ($basePath+$_)).Access | Format-Table -Autosize
# создаем запись доступа для соответствующей доменной группы
$ACE = New-Object System.Security.AccessControl.FileSystemAccessRule($shares[$_],"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
# получаем текущий ACL папки
$ACL = Get-Acl -Path ($basePath+$_)
# добавляем к ACL нашу запись доступа ACE
$ACL.AddAccessRule($ACE)
# устанавливаем новый ACL на папку
Set-Acl -Path ($basePath+$_) -AclObject $ACL
# смотрим разрешения
(Get-Acl -Path ($basePath+$_)).Access | Format-Table -Autosize
}
```
Скрипт выполнился успешно


## 5.2 Настройка репликации
```powershell=
# создаем группу репликации
New-DfsReplicationGroup -GroupName "DFS pt.local replication"
# добавляем в группу членов репликации
Add-DfsrMember -GroupName "DFS pt.local replication" -ComputerName "dc1","dc2"
# создаем соединение членов репликации
Add-DfsrConnection -GroupName "DFS pt.local replication" -SourceComputerName "dc1" -DestinationComputerName "dc2"
# создаем папку рекликации
New-DfsReplicatedFolder -GroupName "DFS pt.local replication" -FolderName "share"
# указываем настройки папки репликации и ее источники для первого члена dc1
Set-DfsrMembership -GroupName "DFS pt.local replication" -FolderName "share" -ContentPath "C:\share" -ComputerName "dc1" -PrimaryMember $True -StagingPathQuotaInMB 16384 -Force
# и для второго dc2
Set-DfsrMembership -GroupName "DFS pt.local replication" -FolderName "share" -ContentPath "C:\share" -ComputerName "dc2" -StagingPathQuotaInMB 16384 -Force
```
Репликация успешно настроена

Теперь свяжем наши шары на обоих серверах с адресным простанством DFS
```powershell=
$shares = @{
all_share = "Everyone"
Buhg = "Buhg-sec"
HR = "HR-sec"
Progr = "Progr-sec"
Sysadmins = "Sysadmins-sec"
VIP = "VIP-sec"
}
$shares.Keys | ForEach-Object{
# публикуем шару dc1 в DFS
New-DfsnFolder -Path ("\\pt.local\pt-dfs\"+$_) -TargetPath ("\\dc1\"+$_+"$") -EnableTargetFailback $true
# подключаем реплику с dc2
New-DfsnFolderTarget -Path ("\\pt.local\pt-dfs\"+$_) -TargetPath ("\\dc2\"+$_+"$")
}
```
Шары успешно опубликованы





## 5.3 Настройка мониторинга
Нстроим аудит папки для действий доменных пользователей
```powershell=
# папка для котроля
$share = "C:\\Share"
# контролируемая учетная запись
$principal = "Domain Users"
# контролируюемы типы действий
$perm = "Delete,DeleteSubdirectoriesAndFiles,ExecuteFile,ReadData,ReadPermissions,ReadAttributes,ReadExtendedAttributes"
# устанавливаем параметры наследования
$inherit = "ContainerInherit,ObjectInherit"
# контролируем как успех так и отказ
$type = "Success,Failure"
# создаем запись
$ACE = New-Object System.Security.AccessControl.FileSystemAuditRule($principal,$perm,$inherit,"None",$type)
# устанавливаем ACL
$ACL = Get-Acl $share
$ACL.SetAuditRule($ACE)
Set-Acl $share -AclObject $ACL
```
Настройки успешно применены (dc1, dc2)



На шаре \\pt.local\pt-dfs\all_share создадим папку folder-for-delete.
С копьютера pc1 по пользователем Olga удалим эту папку.

Данным скриптом определим хендл события
```powershell=
$LogParam = @{
LogName = "Security";
ID = "4665","4659","4660","4663"
}
Get-WinEvent -FilterHashtable $LogParam | Where-Object Message -Like "*folder-for-delete*" | Select-Object TimeCreated, ID, Message | Format-Table -Wrap -AutoSize
```
Handle ID 0xb9c

Данным скриптом проверим собщения по событию с определенным хендлом
```powershell=
$LogParam = @{
LogName = "Security";
ID = "4665","4659","4660","4663"
}
Get-WinEvent -FilterHashtable $LogParam | Where-Object Message -Like "*0xb9c*" | Select-Object TimeCreated, ID, Message | Format-Table -Wrap -AutoSize
```

## 5.4 Настройка отправки логов в SIEM
Вклюм сервис сборщика логов командой
```bash=
wecutil qc
```
Сервис успешно включен

Создадим и настроим GPO отправки журналов на logcollector

Включим службу WinRM

Настроим путь до логколлектора gj FQDN указав строчку
```bash=
Server=http://dc1.pt.local:5985/wsman/SubscriptionManager/WEC,Refresh=5
```

Для доступа по winrm необходимо сконфигурировать файрволл
Создадим новое входящее предустановленное правило для файрволла




Настроим доступ к журналам безопасности

Дескриптор безопасности журнал посмотрим на машине pc1 следующей командой
```bash=
wevtutil gl security
```
И установим данный дескриптор O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)(A;;0x1;;;S-1-5-20)

Далее через GPP настроим членство в локльной группе читателей журнала событий
и добавим туда администраторов домена

Отфильтруем применение GPO только для машины PC1


И прилинкуем политику к домену

Настроим прием логов на коллекторе
Создадим подписку на прием логов


Выберем машину с которой будем принимать логи это pc1

Проверим соединение

Выберем нужные журналы

Укажем учетную запись для сбора логов

Подписка создана

Ошибок нет

Дадим доступ сетевой службе
```bash=
wevtutil set-log security /ca:O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)(A;;0x1;;;S-1-5-20)
```
Доступ предоставлен

Логи передаются

Теперь настроим пересылку где инициаторами пересылки будут машины, в нашем случае pc1. Создадим подписку collector-machine-init

Инициаторами будет группа "Domain Computers"

Укажем логи для сбора

В рамках тестирования отключим коллектор collector-get

WinRM на сервере коллекторе уже включен

Включим службу сборщика

Проверим статус нашего коллектора

На этом данная работа завершена