6.5 KiB
6.5 KiB
11 — Güvenlik Sertleştirme (Security Hardening)
Kısa özet: saha cihazının güvenlik tabanı: UFW default DENY, WireGuard arayüz izinleri, Docker-UFW bypass çözümü, SSH sertleştirme. Teknik ekip ve denetim içindir.
- Dosya:
docs/11-SECURITY-HARDENING.md- İlgili kararlar:
24-DECISION-LOG.md#K-05,#K-10,#K-13- Durum: [ ] Taslak
1. Amaç
700 saha cihazında varsayılan-kapalı ağ + en az ayrıcalık ilkesiyle saldırı yüzeyini küçültmek; Docker'ın UFW'yi baypas etme davranışını standart çözüme bağlamak.
2. Kapsam
- Kapsam içi: UFW politikası, WireGuard arayüz kuralları, Docker bypass çözümü, SSH/userspace sertleştirme, denetim komutları.
- Kapsam dışı: WireGuard kurulum detayı (08), Docker işletimi (12), kullanıcı/anahtar dağıtımı (06).
3. Kararlar
KARAR: UFW varsayılan politika: incoming DENY, outgoing ALLOW; izinler tek tek açılır.
GEREKÇE: Varsayılan-kapalı, unutulan portu dışa kapatır; 700 cihazda en güvenli varsayılan budur.
ALTERNATİF: Varsayılan ALLOW + kara liste — unutulan servis dışa açılır, elendi.
RİSK: Kural unutulursa meşru trafik kesilir; azaltma: LAB'da kural seti test edilir, bf-status denetler.
MALİYET: Ücretsiz.
LİSANS: UFW (Ubuntu paketi, GPL bileşenler) — https://manpages.ubuntu.com/manpages/resolute/en/man8/ufw.8.html (doğrulanma: 2026-09-15).
KARAR: SSH (22) ve RDP (3389) yalnızca WireGuard arayüzünden (`wg0`) kabul edilir; herkese açık internete kapalıdır.
GEREKÇE: K-05 gereği yönetim düzlemi tünel arkasındadır; dış taramada port görünmez.
ALTERNATİF: İnternete açık SSH + fail2ban — kaba-kuvvet yüzeyini gereksiz büyütür, elendi.
RİSK: WireGuard çökerse SSH erişimi kesilir; azaltma: RustDesk/MeshCentral bağımsız kanallar (K-04).
MALİYET: Ücretsiz.
LİSANS: Yok (yapılandırma).
KARAR: Docker-UFW bypass sorununun çözümü: yayımlanan tüm saha portları `127.0.0.1`'e bağlanır; `iptables:false` varsayılan çözüm değildir.
GEREKÇE: Docker, yayımlanan portlarda UFW kurallarını baypas eder (resmi belgeli); localhost-bind, servisi dış arayüzden görünmez kılar, erişim WireGuard üzerinden olur.
ALTERNATİF: `iptables:false` — resmi doküman "çoğu kullanıcı için uygun değil" diye uyarır; yedek seçenek olarak tutulur.
RİSK: Yanlış bind ile port dışa açılır; azaltma: `docker ps` + `ss -tlnp` denetimi imaj final-check'te.
MALİYET: Ücretsiz (Docker CE).
LİSANS: Docker CE ücretsiz — https://docs.docker.com/engine/network/packet-filtering-firewalls/ (doğrulanma: 2026-09-15).
KARAR: SSH sertleştirme: `blueforce` bakım kullanıcısı + anahtar zorunlu, password auth kapalı, root SSH kapalı (K-13 uygulanır).
GEREKÇE: Kaba-kuvvet ve tek-key blast-radius riskini kapatır.
ALTERNATİF: Password auth — saldırı yüzeyi nedeniyle elendi.
RİSK: Anahtar kaybı erişimsizlik; azaltma: per-admin anahtar + Ansible ile merkezi dağıtım.
MALİYET: Ücretsiz.
LİSANS: OpenSSH (BSD-lisanslı), ücretsiz.
4. Neden Bu Karar?
Üç filtre: (1) varsayılan-kapalı (UFW DENY + WG-arkası yönetim), (2) Docker gerçeğine uyum (bypass inkâr edilmez, localhost-bind ile etkisizleştirilir), (3) ücretsiz katman (ek güvenlik ürünü yok).
5. Alternatifler
| Alternatif | Artı | Eksi | Sonuç |
|---|---|---|---|
| Varsayılan ALLOW + kara liste | Kolay | Unutulan port dışa açılır | Elendi |
| İnternete açık SSH + fail2ban | Basit | Kaba-kuvvet yüzeyi | Elendi |
iptables:false |
Bypass'ı kökten keser | Docker ağ işlevlerini bozar, resmi uyarı var | Yedek |
| Ücretli EDR/host güvenlik ajanı | Merkezi konsol | Lisans maliyeti, sadelik ihlali | Elendi |
6. Avantajlar
- Tek standart kural seti 700 cihaza aynen uygulanır; denetimi Ansible ile otomatik.
- Docker bypass'ı mimari düzeyde çözülür, kural-dışı port açığı kalmaz.
7. Dezavantajlar
- localhost-bind, konteyner portunu doğrudan LAN'dan kullanılamaz kılar (erişim WG üzerinden olur — bilinçli tercih).
- UFW kural değişikliği hatalı playbook ile filoya yayılabilir; önce LAB(2).
8. Riskler
| Risk | Olasılık | Etki | Azaltma |
|---|---|---|---|
| Bypass yüzünden MEG portu dışa açılır | Orta | Yüksek | localhost-bind + final-check denetimi |
| Kural hatası WG trafiğini keser | Düşük | Yüksek | LAB testi + ufw --dry-run + konsol erişimi |
| Semaphore Community'de 2FA yok | Orta | Orta | Semaphore yalnızca WG arkasında |
9. Uygulama Planı
- UFW varsayılanları ve taban kuralları uygulanır.
- WireGuard arayüzüne SSH/RDP izni, dış dünyaya ret yazılır.
- Docker portları
127.0.0.1bind ile doğrulanır. - SSH sertleştirme (
PasswordAuthentication no,PermitRootLogin no) uygulanır.
# UFW taban politikası
ufw default deny incoming
ufw default allow outgoing
ufw allow in on wg0 to any port 22 proto tcp
ufw allow in on wg0 to any port 3389 proto tcp
ufw allow 51820/udp
ufw enable
# durum denetimi
ufw status verbose
ss -tlnp | grep -v '127\.0\.0\.1'
# SSH sertleştirme denetimi
sshd -T | grep -Ei 'passwordauthentication|permitrootlogin'
10. Test Planı
| Test | Beklenen sonuç | Ortam |
|---|---|---|
ufw status verbose |
default DENY incoming | LAB(2) |
| Dış taramada 22/3389 | Kapalı (filtreli) | P1(5) |
ss -tlnp bind denetimi |
0.0.0.0 bind yok |
LAB(2) |
| Password ile SSH denemesi | Red | LAB(2) |
| WG down iken dış SSH | Bağlantı yok | P1(5) |
11. Rollback
- Hatalı kuralda önceki UFW profili geri yüklenir (
ufw reset+ bilinen-iyi kural seti Ansible'dan). - SSH kilitlenmesinde konsol/RustDesk üzerinden düzeltilir.
- Son çare: golden image yeniden kurulumu (17-RECOVERY).
12. Kontrol Listesi
ufw default deny incomingtüm sahada aktif.- 22/3389 yalnızca
wg0üzerinden erişilebilir. - Docker
0.0.0.0bind yok. PasswordAuthentication no,PermitRootLogin nodoğrulandı.
13. Açık Sorular
- WireGuard port numarası standardı (51820 varsayılan mı?) — 08 yazarı + LAB (sahibi: Faz 3).
- Ek UFW log seviyesi/rate-limit değerleri — PİLOT ölçümü (sahibi: 11 yazarı).
Ek: Mermaid — Güvenlik katmanları
flowchart LR
INT["Internet"] --> UFW["UFW<br/>default DENY in"]
UFW -->|51820/udp| WG["WireGuard wg0"]
WG -->|22, 3389| MGMT["SSH/RDP"]
UFW -->|RustDesk/MeshCentral<br/>giden| RD["Bağımsız kanallar"]
DKR["Docker<br/>127.0.0.1 bind"] -.->|dışa kapalı| UFW