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ılarAllow
ş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
- PowerShell'i Yönetici olarak açın.
- Güvenlik politikasını geçerli kılmak için:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
- 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 denemeleriUser-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ı! 🛡️