Kernel Hardening (Sysctl)
Bu bölüm, Linux çekirdeğini (kernel) ağ saldırılarına ve yetki yükseltme (privilege escalation) girişimlerine karşı "çelik yelek" giydirmeyi hedefler.
[!NOTE] > Bu ayarlar ne işe yarar? Varsayılan Linux ayarları "maksimum uyumluluk" içindir. Biz bunu "maksimum güvenlik" olarak değiştireceğiz.
📖 Detaylı Açıklama: Hangi ayarın (0 veya 1) ne anlama geldiğini,
rp_filter,accept_redirectsgibi terimlerin ne olduğunu merak ediyorsanız Kernel Parametreleri Sözlüğü (Glossary) sayfasına bakın.
1. Uygulama
⚠️ Docker/Kubernetes Kullanıcıları DİKKAT!
Eğer Docker veya Kubernetes kullanıyorsanız:
IP Forwarding KAPATILAMAZ!
# Bu satırları YORUMA ALIN veya SİLİN:
# net.ipv4.conf.all.forwarding = 0
# net.ipv6.conf.all.forwarding = 0
Neden? Docker container'lar arası iletişim için IP forwarding gerekir.
Kontrol:
# Docker varsa:
docker ps &>/dev/null && echo "Docker aktif, forwarding=1 olmalı"
# Forwarding durumu:
sysctl net.ipv4.conf.all.forwarding
# Docker çalışıyorsa çıktı: 1 (normal)
IPv6 Kapalıysa
Eğer IPv6 kapalıysa (örn: sysctl -a | grep ipv6 boş çıkıyorsa), IPv6 ayarları hata verecektir. Bu normaldir, görmezden gelin.
1. Hazırlık ve Envanter 📋
Kernel ayarlarını değiştirmek risklidir. Önce sistemimizde ne var ne yok bakalım.
# Docker veya Kubernetes var mı?
command -v docker &>/dev/null && echo "⚠️ Docker bulundu: IP Forwarding KAPATILMAMALI!" || echo "✅ Docker yok, Forwarding kapatılabilir."
2. Mevcut Ayarları Yedekle 💾
Bir şeyler ters giderse geri dönmek için:
3. Geçici Test (Reboot ile Sıfırlanır) 🧪
Ayarları hemen kalıcı yapmayın. Önce geçici olarak uygulayıp sunucunun çalışıp çalışmadığını (SSH, Web, Docker) test edin.
# === AĞ GÜVENLİĞİ ===
sudo sysctl -w net.ipv4.conf.all.rp_filter=1
sudo sysctl -w net.ipv4.conf.default.rp_filter=1
sudo sysctl -w net.ipv4.conf.all.accept_redirects=0
sudo sysctl -w net.ipv4.tcp_syncookies=1
# === KERNEL GÜVENLİĞİ ===
sudo sysctl -w kernel.dmesg_restrict=1
sudo sysctl -w kernel.yama.ptrace_scope=1
sudo sysctl -w fs.suid_dumpable=0
sudo sysctl -w kernel.sysrq=176
echo "✅ Geçici ayarlar uygulandı. Şimdi SSH ve servisleri test edin!"
Sorun Çıktı mı? Sunucuyu yeniden başlatın (
reboot). Her şey eski haline döner.
4. Kalıcı Uygulama (Scenario Seçimi) 🚀
Testler başarılıysa ayarları kalıcı yapalım. Durumunuza uygun profili seçin:
Docker, Kubernetes veya VPN KULLANMIYORSANIZ bu en güvenli profildir. IP Forwarding kapatılır.
sudo tee /etc/sysctl.d/99-hardening.conf << 'EOF'
# ==============================================
# NETWORK SAFETY - SADE SUNUCU (NO DOCKER)
# ==============================================
# IP Forwarding KAPAT (Docker yoksa güvenli)
net.ipv4.conf.all.forwarding = 0
net.ipv6.conf.all.forwarding = 0
# IP Spoofing & Source Routing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# ICMP Redirect Kapat
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# TCP SYN Flood & Keepalive
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_keepalive_time = 600
# ICMP Rate Limiting
net.ipv4.icmp_ratelimit = 100
# ==============================================
# KERNEL SAFETY
# ==============================================
kernel.dmesg_restrict = 1
kernel.yama.ptrace_scope = 1
fs.suid_dumpable = 0
kernel.kptr_restrict = 2
kernel.sysrq = 176
dev.tty.ldisc_autoload = 0
net.core.bpf_jit_harden = 2
kernel.unprivileged_bpf_disabled = 1
kernel.perf_event_paranoid = 3
EOF
Docker veya Kubernetes KULLANIYORSANIZ bu profili kullanın. IP Forwarding açık bırakılır.
sudo tee /etc/sysctl.d/99-hardening.conf << 'EOF'
# ==============================================
# NETWORK SAFETY - DOCKER/K8S PROFİLİ
# ==============================================
# ⚠️ IP Forwarding AÇIK KALMALI (Yoksa Container'lar bozulur!)
# net.ipv4.conf.all.forwarding = 1
# IP Spoofing & Source Routing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# ICMP Redirect Kapat
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# TCP SYN Flood & Keepalive
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_keepalive_time = 600
# ICMP Rate Limiting
net.ipv4.icmp_ratelimit = 100
# ==============================================
# KERNEL SAFETY
# ==============================================
kernel.dmesg_restrict = 1
kernel.yama.ptrace_scope = 1
fs.suid_dumpable = 0
kernel.kptr_restrict = 2
kernel.sysrq = 176
dev.tty.ldisc_autoload = 0
net.core.bpf_jit_harden = 2
kernel.unprivileged_bpf_disabled = 1
kernel.perf_event_paranoid = 3
EOF
3. Aktifleştirme
Ayarları sisteme yüklemek için:
4. Doğrulama
Tüm ayarları kontrol et:
# Tüm hardening ayarlarını göster:
sudo sysctl -a | grep -E "rp_filter|accept_redirects|tcp_syncookies|dmesg_restrict|ptrace_scope"
Beklenen Çıktı (Örnekler):
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.tcp_syncookies = 1
kernel.dmesg_restrict = 1
kernel.yama.ptrace_scope = 1
5. Sorun Çıkarsa (Geri Alma)
Eğer bu ayarlar uygulamanızı bozarsa (örneğin Kubernetes IP Forwarding ister), dosyayı silip ayarları eski haline getirebilirsiniz.