Friday, May 30, 2025

PowerShell ile Web Sunucusu Loglarından Saldırgan IP Engelleme

Sunucunuzun erişim loglarını incelerken bazı IP'lerin sürekli olarak phpMyAdmin, sqladmin veya cgi-bin gibi yolları taradığını mı fark ettiniz? Bu yazıda, saldırgan davranışlar sergileyen IP adreslerini loglardan otomatik olarak ayıklayan ve Windows Güvenlik Duvarı'nda engelleyen bir PowerShell scripti paylaşıyorum.

Adım 1 – Log Dosyasını Hazırla

Öncelikle Apache/Nginx gibi bir sunucudan alınmış bir erişim logunuz olmalı. Örnek format:


45.131.155.254 - - [29/May/2025:01:01:46 +0300] "GET / HTTP/1.1" 200 5795 "-" "Mozilla/5.0"

Bu dosyayı örneğin C:\loglar\access.log yoluna yerleştirelim.

Adım 2 – PowerShell Scripti

Yeni bir PowerShell scripti oluşturun:

# Kaydet: block-malicious-ips.ps1

$logFile = "C:\loglar\access.log"
$logLines = Get-Content $logFile
$ipRegex = '(\d{1,3}\.){3}\d{1,3}'

# Şüpheli istekleri filtrele
$suspiciousPatterns = @(
    "/phpmyadmin", "/sqladmin", "/mysql", "/db/php", "/cgi-bin", "/PMA",
    "/MyAdmin", "Sakura.sh", "/Management.asp", "/authLogin.cgi"
)

$badIps = @{}

foreach ($line in $logLines) {
    foreach ($pattern in $suspiciousPatterns) {
        if ($line -match $pattern -and $line -match $ipRegex) {
            $ip = ($line -match $ipRegex) | Out-Null; $matches[0]
            if (-not $badIps.ContainsKey($ip)) {
                $badIps[$ip] = 1
            } else {
                $badIps[$ip] += 1
            }
        }
    }
}

# Engelle
foreach ($ip in $badIps.Keys) {
    Write-Output "Engelleniyor: $ip"
    New-NetFirewallRule -DisplayName "Block $ip" -Direction Inbound -RemoteAddress $ip -Action Block -Profile Any -Enabled True
}

Adım 3 – Scripti Çalıştırma

  1. PowerShell’i Yönetici olarak açın.
  2. Script dosyasının bulunduğu klasöre gidin:
    cd C:\loglar
  3. Scripti çalıştırın:
    Set-ExecutionPolicy RemoteSigned -Scope Process
    .\block-malicious-ips.ps1

İsteğe Bağlı: BAT Dosyası ile Çalıştırmak

Scripti çift tıklamayla başlatmak için aşağıdaki gibi bir .bat dosyası oluşturabilirsiniz:

@echo off
powershell -ExecutionPolicy Bypass -File "C:\loglar\block-malicious-ips.ps1"
pause

Sonuç

Bu PowerShell çözümü ile şüpheli IP'leri loglardan ayıklayıp otomatik olarak Windows güvenlik duvarında engelleyebilirsiniz. Script, özellikle küçük çaplı web sunucuları veya kişisel sistemler için pratik bir güvenlik önlemi sunar.