Monday, May 26, 2025

Windows + Nginx: Sade ve Guvenli Firewall Yapilandirmasi

1. Başlangıç Durumu

Windows'un varsayılan güvenlik duvarı:

  • Profil tabanlı (Private/Public/Domain) çalışır.
  • Gelen bağlantılar Block, giden bağlantılar Allow şeklindedir.
  • Yüzlerce "Network Discovery", "Remote Assistance" vb. kural aktif olabilir.

Bu karmaşa dış dünyaya açık kalan portların gözden kaçmasına neden olabilir.

2. Amacımız Nedir?

Servis Durum Açıklama
HTTP (port 80) ✅ Açık Her IP'den erişilsin
SMB (445/139) ✅ Sadece LAN 192.168.1.0/24 ağından erişilsin
UPnP, SSDP, mDNS ❌ Kapalı Güvenlik zaafiyetleri nedeniyle
Diğer tüm servisler ❌ Kapalı Tanımlanmadıkça bloklanacak

3. Kuralları Script ile Tanımlama

firewall_rule_set.ps1 Scripti

# 1. HTTP (80) tüm profillerde açık
New-NetFirewallRule -DisplayName "Allow HTTP on All" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 80 `
    -Profile Any `
    -Action Allow

# 2. SMB sadece LAN'dan
New-NetFirewallRule -DisplayName "Allow SMB from LAN only" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 445,139 `
    -RemoteAddress 192.168.1.0/24 `
    -Action Allow

# 3. SMB dış IP'lere kapalı
New-NetFirewallRule -DisplayName "Block SMB from Others" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 445,139 `
    -RemoteAddress Any `
    -Action Block

# 4. UPnP ve SSDP kapalı
New-NetFirewallRule -DisplayName "Block UPnP" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 2869 `
    -Action Block

New-NetFirewallRule -DisplayName "Block SSDP" `
    -Direction Inbound `
    -Protocol UDP `
    -LocalPort 1900 `
    -Action Block

Scripti Çalıştırma

  1. PowerShell'i Yönetici olarak açın.
  2. Güvenlik politikasını geçerli kılmak için:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  1. Scripti çalıştırın:
powershell -ExecutionPolicy Bypass -File "firewall_rule_set.ps1"

4. Nginx Loglarını Temizleme ve Takip Etme

Logları sıfırla:

Clear-Content "C:\nginx\logs\access.log"
Clear-Content "C:\nginx\logs\error.log"

Anlık log takibi:

Get-Content "C:\nginx\logs\access.log" -Wait

Gelen istekleri, IP adreslerini ve durum kodlarını gerçek zamanlı izleyebilirsiniz.

5. Kötü Niyetli IP'leri Engelleme

Loglarda aşağıdakiler görülürse:

  • GET /login.rsp gibi zaafiyet denemeleri
  • User-Agent: sqlmap, Hello World, curl vb. bot imzaları
  • Kara liste IP'lerden gelen bağlantılar

Engellemek için:

New-NetFirewallRule -DisplayName "Block malicious IP 196.251.81.93" `
  -Direction Inbound `
  -RemoteAddress 196.251.81.93 `
  -Action Block

(Opsiyonel) Nginx'te engelleme:

server {
    deny 196.251.81.93;
}

6. Otomatik IP Analizi (PowerShell)

$log = "C:\nginx\logs\access.log"
$loglines = Get-Content $log -Tail 100

$blocklist = @()
foreach ($line in $loglines) {
    if ($line -match "login\.rsp" -or $line -match "Hello World" -or $line -match "sqlmap" -or $line -match "curl") {
        if ($line -match "^(\d+\.\d+\.\d+\.\d+)") {
            $ip = $matches[1]
            if (-not ($blocklist -contains $ip)) {
                $blocklist += $ip
                Write-Host "Engelleniyor: $ip"
                New-NetFirewallRule -DisplayName "AutoBlock $ip" -Direction Inbound -RemoteAddress $ip -Action Block
            }
        }
    }
}
Bu script tekrar çalıştırıldığında sadece yeni IP’leri ekler. Görev Zamanlayıcı ile otomatikleştirilebilir.

7. Durum Kontrolleri

Aktif ağ profili:

Get-NetConnectionProfile | Format-Table Name, InterfaceAlias, NetworkCategory

Aktif kurallar özeti:

Get-NetFirewallRule -Enabled True | Format-Table DisplayName, Direction, Action, Profile, LocalPort, Protocol -AutoSize

Dinlenen portlar:

Get-NetTCPConnection -State Listen | Sort-Object LocalPort | Format-Table LocalAddress, LocalPort, OwningProcess

8. Sonuç

  • Sadece tanımlı servisler aktif olur
  • Minimum port dışa açıktır
  • Loglar temiz ve okunabilirdir
  • Profil bazlı karmaşa ortadan kalkar
  • Saldırgan IP'ler anında engellenebilir
  • Otomatik analiz ile sürekli güvenlik sağlanır

Güvenli, sade ve kontrollü bir Windows + nginx ortamı! 🛡️