Posted in
Windows Powershell |
2 Comments | 5,408 views | 31/07/2011 23:17
Merhaba,
Bildiğiniz gibi 5651 gereği web, ftp ve mail loglarını şartnameye uygun olarak imzalamalı ve bu imzalı logları 6 ay boyunca saklamalısınız. Şartnamede logların nasıl imzalanacağıyla ilgili söyle bir şematik anlatım var.
Yukardaki anlatımda da görebileceğiniz gibi aslında 3 farklı dosya saklamamız gerekiyor. Bunlar:
1. Log dosyası
2. Zaman damgası
3. Log hash’i ile zaman damgasının birleşik hash’i
Aşağıdaki Powershell scripti ile bu şartnameye uygun olarak hashleme yapabilirsiniz. Zaman sunucusu olarak script’te de tubitak kullanılmıştır.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| $Path = "D:\FTP\MailServerLogs"
$TargetFolder = Get-ChildItem "$Path" -Recurse
$CryptoServiceProvider = [System.Security.Cryptography.MD5CryptoServiceProvider];
$HashAlgorithm = New-Object $CryptoServiceProvider
foreach ($File in $TargetFolder)
{
$FileName = $File.Name
$FilePath = $File.DirectoryName
$SigName = $FileName + ".sign"
$SigPath = $FilePath + "\" + $SigName
$DateName = $FileName + ".date"
$DatePath = $FilePath + "\" + $DateName
if ((Test-Path $DatePath) -eq "True")
{
Write-Host "Date file is already exist."
}
else
{
$DateString = Get-Date -uformat "%d.%m.%Y"
$TimeString = (w32tm /stripchart /computer:time.ume.tubitak.gov.tr /samples:1)[-1].split("")[0]
$DateString = $DateString + " " + $TimeString
$DateFile = New-Item -Path "$FilePath" -Name $DateName -type "file" -value $DateString
}
if ((Test-Path $SigPath) -eq "True")
{
Write-Host "Hashtag is already exist."
}
else
{
$Fc = Get-Content $FilePath\$FileName
if ($Fc.Count -gt 0)
{
$Encoding = New-Object System.Text.ASCIIEncoding
$Bytes = $Encoding.GetBytes($Fc)
$HashByteArray = $HashAlgorithm.ComputeHash($Bytes)
$Hashstring = ""
foreach ($Byte in $HashByteArray) {$Hashstring += $Byte.tostring("x2")}
$SigFile = New-Item -Path "$FilePath" -Name $SigName -type "file" -value $Hashstring
Start-Sleep -m 500
}
}
$HashTag = Get-Content $FilePath\$SigName
$HashTag = $HashTag + $DateString
Remove-Item -Path $FilePath\$SigName
$Encoding = New-Object System.Text.ASCIIEncoding
$Bytes = $Encoding.GetBytes($HashTag)
$HashByteArray = $HashAlgorithm.ComputeHash($Bytes)
$Hashstring = ""
foreach ($Byte in $HashByteArray) {$Hashstring += $Byte.tostring("x2")}
$SigFile = New-Item -Path "$FilePath" -Name $SigName -type "file" -value $Hashstring
Write-Host "$FileName is signed!"
} |
$Path = "D:\FTP\MailServerLogs"
$TargetFolder = Get-ChildItem "$Path" -Recurse
$CryptoServiceProvider = [System.Security.Cryptography.MD5CryptoServiceProvider];
$HashAlgorithm = New-Object $CryptoServiceProvider
foreach ($File in $TargetFolder)
{
$FileName = $File.Name
$FilePath = $File.DirectoryName
$SigName = $FileName + ".sign"
$SigPath = $FilePath + "\" + $SigName
$DateName = $FileName + ".date"
$DatePath = $FilePath + "\" + $DateName
if ((Test-Path $DatePath) -eq "True")
{
Write-Host "Date file is already exist."
}
else
{
$DateString = Get-Date -uformat "%d.%m.%Y"
$TimeString = (w32tm /stripchart /computer:time.ume.tubitak.gov.tr /samples:1)[-1].split("")[0]
$DateString = $DateString + " " + $TimeString
$DateFile = New-Item -Path "$FilePath" -Name $DateName -type "file" -value $DateString
}
if ((Test-Path $SigPath) -eq "True")
{
Write-Host "Hashtag is already exist."
}
else
{
$Fc = Get-Content $FilePath\$FileName
if ($Fc.Count -gt 0)
{
$Encoding = New-Object System.Text.ASCIIEncoding
$Bytes = $Encoding.GetBytes($Fc)
$HashByteArray = $HashAlgorithm.ComputeHash($Bytes)
$Hashstring = ""
foreach ($Byte in $HashByteArray) {$Hashstring += $Byte.tostring("x2")}
$SigFile = New-Item -Path "$FilePath" -Name $SigName -type "file" -value $Hashstring
Start-Sleep -m 500
}
}
$HashTag = Get-Content $FilePath\$SigName
$HashTag = $HashTag + $DateString
Remove-Item -Path $FilePath\$SigName
$Encoding = New-Object System.Text.ASCIIEncoding
$Bytes = $Encoding.GetBytes($HashTag)
$HashByteArray = $HashAlgorithm.ComputeHash($Bytes)
$Hashstring = ""
foreach ($Byte in $HashByteArray) {$Hashstring += $Byte.tostring("x2")}
$SigFile = New-Item -Path "$FilePath" -Name $SigName -type "file" -value $Hashstring
Write-Host "$FileName is signed!"
}
Script’in path’ini değiştirmeniz ve bir cronjob olarak tanımlamanız yeterli olacaktır.
Posted in
Windows Powershell,
Windows Server |
No Comment | 5,784 views | 17/01/2010 12:03
5651 yasasıyla birlikte, ofisinize ait DHCP loglarını 6 aylık bir süre boyunca imzalayarak saklamanız gerekiyor. DHCP servisi, farklı bir sunucu üzerinde bulunuyorsa, DHCP loglarını Powershell sayesinde herhangi bir FTP programına ihtiyaç olmadan imzalama yapacağınız sunucuya gönderebilirsiniz. Bu işlem ile sadece DHCP loglarının değil HTTP loglarının da arşivlenmesini sağlayabilirsiniz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| # 5651 Log Sender
# Yusuf Ozturk - http://www.yusufozturk.info
# In God We Trust, All Others We Use Powershell
# Get Yesterday
$Day = Get-Date -uformat %A
$Date = (Get-Date).AddDays(-1).ToString("yyyyMMdd")
If ($Day -eq "Pazar")
{
$Day = "Sat"
}
ElseIf ($Day -eq "Cumartesi")
{
$Day = "Fri"
}
ElseIf ($Day -eq "Cuma")
{
$Day = "Thu"
}
ElseIf ($Day -eq "Perşembe")
{
$Day = "Wed"
}
ElseIf ($Day -eq "Çarşamba")
{
$Day = "Tue"
}
ElseIf ($Day -eq "Salı")
{
$Day = "Mon"
}
ElseIf ($Day -eq "Pazartesi")
{
$Day = "Sun"
}
# Get DHCP IPV4
$DHCPV4Log = "C:\Windows\System32\dhcp\DhcpSrvLog-" + $Day + ".log"
# Get DHCP IPV6
$DHCPV6Log = "C:\Windows\System32\dhcp\DhcpV6SrvLog-" + $Day + ".log"
# FTP Paths
$DHCPv4Dir = "ftp://username:password@yusufozturk.info/Data/RH_Ofis_DHCPv4_" + $Date + ".log"
$DHCPv6Dir = "ftp://username:password@yusufozturk.info/Data/RH_Ofis_DHCPv6_" + $Date + ".log"
# Prepare Files
$Webclient = New-Object System.Net.WebClient
$DHCPv4Uri = New-Object System.Uri($DHCPv4Dir)
$DHCPv6Uri = New-Object System.Uri($DHCPv6Dir)
# Send to Log Server
$Webclient.UploadFile($DHCPv4Uri, $DHCPv6Log)
$Webclient.UploadFile($DHCPv6Uri, $DHCPv4Log) |
# 5651 Log Sender
# Yusuf Ozturk - http://www.yusufozturk.info
# In God We Trust, All Others We Use Powershell
# Get Yesterday
$Day = Get-Date -uformat %A
$Date = (Get-Date).AddDays(-1).ToString("yyyyMMdd")
If ($Day -eq "Pazar")
{
$Day = "Sat"
}
ElseIf ($Day -eq "Cumartesi")
{
$Day = "Fri"
}
ElseIf ($Day -eq "Cuma")
{
$Day = "Thu"
}
ElseIf ($Day -eq "Perşembe")
{
$Day = "Wed"
}
ElseIf ($Day -eq "Çarşamba")
{
$Day = "Tue"
}
ElseIf ($Day -eq "Salı")
{
$Day = "Mon"
}
ElseIf ($Day -eq "Pazartesi")
{
$Day = "Sun"
}
# Get DHCP IPV4
$DHCPV4Log = "C:\Windows\System32\dhcp\DhcpSrvLog-" + $Day + ".log"
# Get DHCP IPV6
$DHCPV6Log = "C:\Windows\System32\dhcp\DhcpV6SrvLog-" + $Day + ".log"
# FTP Paths
$DHCPv4Dir = "ftp://username:password@yusufozturk.info/Data/RH_Ofis_DHCPv4_" + $Date + ".log"
$DHCPv6Dir = "ftp://username:password@yusufozturk.info/Data/RH_Ofis_DHCPv6_" + $Date + ".log"
# Prepare Files
$Webclient = New-Object System.Net.WebClient
$DHCPv4Uri = New-Object System.Uri($DHCPv4Dir)
$DHCPv6Uri = New-Object System.Uri($DHCPv6Dir)
# Send to Log Server
$Webclient.UploadFile($DHCPv4Uri, $DHCPv6Log)
$Webclient.UploadFile($DHCPv6Uri, $DHCPv4Log)
Yukarda dikkat etmeniz gereken nokta, DHCP loglarının tarihe göre değil günlere göre tutulduğudur. Sistem lokasyonu Türkiye olduğu için Get-Date yaptığınızda Pazartesi gibi gelecektir günler. Bu yüzden her güne karşılık olarak bir önceki günün İngilizce adını yazdım. Böylece bu scripti Cronjob ile her gece saat 3 gibi çalıştırmanız durumunda, hep bir önceki günün loglarını FTP üzerinden sunucuya gönderecektir. Kolay gelsin.