search
Categories
Sponsors
VirtualMetric Hyper-V Monitoring, Hyper-V Reporting
Archive
Blogroll

Badges
MCSE
Community

Cozumpark Bilisim Portali
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!"
}

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)

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.