Giriş: 2026'da Linux Çekirdek Güvenliği Neden Bu Kadar Kritik?
Linux çekirdeği, dünya genelinde sunucuların, bulut altyapılarının, IoT cihazlarının ve konteyner platformlarının bel kemiği. Bunu zaten biliyorsunuz muhtemelen. Ama işin boyutunu rakamlarla ortaya koyalım: 2025 yılında Linux çekirdeğine ait CVE kayıtları tam 5.530'a ulaştı — günde ortalama 8-9 yeni güvenlik açığı demek bu. 2024'teki 3.529 CVE ile kıyaslarsanız, artışın ne kadar ciddi olduğunu hemen görürsünüz.
Saldırganlar artık klasik arabellek taşması (buffer overflow) yöntemlerinin çok ötesine geçti. Misafir/ana makine sınırlarını, konteyner sandbox izolasyonunu ve ayrıcalık yükseltme mekanizmalarını hedef alıyorlar. Yani eskiden "çekirdeği güncel tut, yeter" diyebilirdik; artık durum o kadar basit değil.
Bu rehberde, 2026 itibarıyla Linux çekirdeğinizi sıkılaştırmak için uygulamanız gereken tüm adımları ele alacağız. Pratik komut örnekleri, yapılandırma dosyaları ve otomasyon betikleriyle destekledik — çünkü teori güzel de, asıl önemli olan uygulamaya dökebilmek.
1. Çekirdek Sürümü Yönetimi ve Yama Stratejileri
1.1 Güncel Çekirdek Sürümünü Doğrulama
Güvenlik sıkılaştırmasının ilk adımı, aslında en basit olanı: çalıştırdığınız çekirdek sürümünü doğrulamak. Minimum 6.x serisi çekirdek kullanmanız şiddetle önerilir. Mevcut sürümünüzü kontrol etmek için:
uname -r
# Örnek çıktı: 6.8.12-300.fc40.x86_64
# Daha detaylı bilgi için:
cat /proc/version
# Çekirdek yapılandırma seçeneklerini görüntülemek:
zcat /proc/config.gz | grep -i security
1.2 Otomatik Güvenlik Güncellemeleri
Çekirdek güncellemelerini zamanında uygulamak, bilinen açıkların istismar edilmesini önlemenin en etkili yolu. Bunu söylerken abartmıyorum — 2025'te aktif olarak istismar edilen CVE-2024-1086 ("Flipping Pages") güvenlik açığı, keşfedilmeden önce on yıldan fazla süre çekirdekte varlığını sürdürmüştü. On yıl! Bu tür riskleri minimize etmek için otomatik güncelleme yapılandırması şart:
# RHEL/CentOS/AlmaLinux için dnf-automatic yapılandırması
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic-install.timer
# /etc/dnf/automatic.conf dosyasını düzenleyin:
[commands]
upgrade_type = security
apply_updates = yes
random_sleep = 360
# Debian/Ubuntu için unattended-upgrades
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# /etc/apt/apt.conf.d/50unattended-upgrades dosyasını düzenleyin:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
1.3 Canlı Yama (Live Patching) ile Kesintisiz Güvenlik
Üretim ortamlarında yeniden başlatma gerektirmeden çekirdek yamalarını uygulamak mı? Evet, mümkün. Özellikle yüksek erişilebilirlik gereken sistemlerde canlı yama teknolojileri hayat kurtarıcı olabiliyor:
# Ubuntu için Livepatch
sudo snap install canonical-livepatch
sudo canonical-livepatch enable TOKEN
# RHEL/CentOS için kpatch
sudo dnf install kpatch kpatch-dnf
sudo systemctl enable --now kpatch.service
# Mevcut yamaları kontrol etme
sudo kpatch list
# TuxCare KernelCare alternatifi
curl -s https://repo.cloudlinux.com/kernelcare/kernelcare_install.sh | sudo bash
sudo kcarectl --register KEY
sudo kcarectl --update
2. Çekirdek Parametreleri ile Sıkılaştırma (sysctl)
2.1 Ağ Güvenliği Parametreleri
Linux çekirdeğinin ağ yığını, varsayılan yapılandırmasıyla birçok saldırı vektörüne açık olabilir. Açıkçası, varsayılan ayarlar genellikle kullanılabilirliği ön planda tutar — güvenliği değil. Aşağıdaki sysctl parametreleri, ağ düzeyinde güvenliği ciddi şekilde artıracaktır:
# /etc/sysctl.d/90-network-security.conf
# IP yönlendirmeyi devre dışı bırakma (sunucu router değilse)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
# Kaynak yönlendirmeli paketleri reddetme (IP spoofing koruması)
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# ICMP yönlendirmelerini reddetme
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
# Ters yol filtreleme (Reverse Path Filtering) etkinleştirme
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# SYN flood saldırılarına karşı SYN cookies
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 2
# Şüpheli paketleri günlüğe kaydetme
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# ICMP broadcast isteklerini yok sayma (Smurf saldırı koruması)
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
# TCP zaman damgalarını etkinleştirme
net.ipv4.tcp_timestamps = 1
2.2 Bellek ve İşlem Güvenliği Parametreleri
Çekirdek seviyesinde bellek koruması, ayrıcalık yükseltme saldırılarına karşı en etkili savunma hatlarından biri. 2025'te keşfedilen CVE-2025-21756 ("Attack of the Vsock") gibi sanal makine kaçış güvenlik açıkları, bu parametrelerin ne kadar önemli olduğunu bir kez daha kanıtladı:
# /etc/sysctl.d/91-memory-security.conf
# Çekirdek adres alanı düzeni rastgeleleştirme (KASLR desteği)
kernel.randomize_va_space = 2
# Çekirdek işaretçi sızıntısını engelleme
kernel.kptr_restrict = 2
# dmesg erişimini kısıtlama (yetkisiz kullanıcılar çekirdek günlüğü okuyamaz)
kernel.dmesg_restrict = 1
# Çekirdek çökme dökümlerini sınırlama
kernel.core_pattern = |/bin/false
fs.suid_dumpable = 0
# ptrace erişimini kısıtlama (işlem izleme koruması)
kernel.yama.ptrace_scope = 2
# BPF JIT sıkılaştırma
net.core.bpf_jit_harden = 2
# Yetkisiz kullanıcıların BPF kullanmasını engelleme
kernel.unprivileged_bpf_disabled = 1
# Yetkisiz kullanıcıların user namespace oluşturmasını engelleme
kernel.unprivileged_userns_clone = 0
# Performans izleme erişimini kısıtlama
kernel.perf_event_paranoid = 3
# Sihirli SysRq tuşunu devre dışı bırakma
kernel.sysrq = 0
# Parametreleri uygulama
sudo sysctl --system
2.3 Dosya Sistemi Güvenliği Parametreleri
Dosya sistemi düzeyindeki çekirdek parametreleri sıklıkla göz ardı edilir, ama kötü amaçlı yazılımların yayılmasını sınırlamak için oldukça etkilidir:
# /etc/sysctl.d/92-filesystem-security.conf
# Sabit bağlantı (hardlink) koruması
fs.protected_hardlinks = 1
# Sembolik bağlantı (symlink) koruması
fs.protected_symlinks = 1
# FIFO ve düzenli dosya koruması
fs.protected_fifos = 2
fs.protected_regular = 2
# Aktif parametreleri doğrulama
sudo sysctl -a | grep protected
3. Çekirdek Modülü Güvenliği
3.1 Gereksiz Modülleri Devre Dışı Bırakma
Her kullanılmayan çekirdek modülü, potansiyel bir saldırı kapısı. Düşünün: sunucunuzda Bluetooth veya FireWire ne işe yarıyor? Büyük ihtimalle hiçbir şeye. Gereksiz protokol ve dosya sistemi modüllerini kara listeye almak, saldırı yüzeyinizi daraltmanın en kolay yollarından biri:
# /etc/modprobe.d/blacklist-security.conf
# Kullanılmayan ağ protokollerini devre dışı bırakma
install dccp /bin/false
install sctp /bin/false
install rds /bin/false
install tipc /bin/false
# Kullanılmayan dosya sistemlerini devre dışı bırakma
install cramfs /bin/false
install freevxfs /bin/false
install jffs2 /bin/false
install hfs /bin/false
install hfsplus /bin/false
install squashfs /bin/false
install udf /bin/false
# USB depolama (sunucularda genellikle gereksiz)
install usb-storage /bin/false
# FireWire (DMA saldırı vektörü)
install firewire-core /bin/false
install thunderbolt /bin/false
# Bluetooth (sunucularda gereksiz)
install bluetooth /bin/false
install btusb /bin/false
# Kablosuz ağ (sunucularda genellikle gereksiz)
install cfg80211 /bin/false
install mac80211 /bin/false
3.2 Modül İmza Doğrulaması
Linux çekirdeğinin kilitleme modu (Lockdown Mode), imzasız veya kötü amaçlı modüllerin yüklenmesini engellemek için 2025-2026 döneminde önemli iyileştirmeler aldı. Bunu aktifleştirmemek için gerçekten hiçbir mazeret yok:
# Mevcut çekirdek yapılandırmasında modül imza desteğini kontrol etme
grep CONFIG_MODULE_SIG /boot/config-$(uname -r)
# Beklenen çıktı:
# CONFIG_MODULE_SIG=y
# CONFIG_MODULE_SIG_FORCE=y
# CONFIG_MODULE_SIG_SHA512=y
# Lockdown modunu etkinleştirme (GRUB yapılandırması)
# /etc/default/grub dosyasında GRUB_CMDLINE_LINUX satırına ekleyin:
GRUB_CMDLINE_LINUX="lockdown=confidentiality"
# GRUB yapılandırmasını güncelleme
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS
sudo update-grub # Debian/Ubuntu
# Lockdown durumunu kontrol etme
cat /sys/kernel/security/lockdown
# Beklenen çıktı: [none] integrity [confidentiality]
4. Zorunlu Erişim Kontrolü (MAC) Sistemleri
4.1 SELinux ile Çekirdek Düzeyinde Erişim Kontrolü
SELinux, çekirdek düzeyinde zorunlu erişim kontrolü sağlayarak bir işlem ele geçirilse bile saldırganın erişebileceği kaynakları ciddi şekilde kısıtlar. Biliyorum, SELinux bazen sinir bozucu olabiliyor — ama "setenforce 0" yapıp geçmek yerine, sorunun kaynağını bulmak her zaman daha doğru bir yaklaşım. 2026'da SELinux politikalarının yönetimi de kolaylaştı, eBPF tabanlı dinamik politika uygulamaları yaygınlaşıyor:
# SELinux durumunu kontrol etme
getenforce
sestatus
# SELinux'u enforcing moduna geçirme
sudo setenforce 1
# Kalıcı yapılandırma (/etc/selinux/config)
SELINUX=enforcing
SELINUXTYPE=targeted
# SELinux ihlal günlüklerini izleme
sudo ausearch -m avc -ts recent
sudo sealert -a /var/log/audit/audit.log
# Özel SELinux politikası oluşturma
sudo audit2allow -a -M mypolicy
sudo semodule -i mypolicy.pp
# SELinux boolean değerlerini listeleme ve ayarlama
getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on
# Dosya bağlamlarını düzeltme
sudo restorecon -Rv /var/www/html/
4.2 AppArmor ile Profil Tabanlı Koruma
Ubuntu ve SUSE tabanlı dağıtımlarda varsayılan olarak gelen AppArmor, uygulama bazlı profiller aracılığıyla erişim kontrolü sağlar. SELinux'a göre öğrenme eğrisi daha düşük, bu yüzden özellikle küçük ekipler için iyi bir tercih olabilir:
# AppArmor durumunu kontrol etme
sudo aa-status
# Tüm profilleri listeleme
sudo aa-status --verbose
# Yeni bir profil oluşturma (etkileşimli mod)
sudo aa-genprof /usr/sbin/nginx
# Profili enforce moduna alma
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
# Şikayet modunda çalıştırma (ihlalleri günlüğe kaydeder ama engellemez)
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
# Özel AppArmor profili örneği (/etc/apparmor.d/usr.local.bin.myapp)
#include <tunables/global>
/usr/local/bin/myapp {
#include <abstractions/base>
#include <abstractions/nameservice>
/usr/local/bin/myapp mr,
/etc/myapp/** r,
/var/log/myapp/** rw,
/tmp/myapp-* rw,
/run/myapp.pid rw,
network inet stream,
network inet dgram,
deny /etc/shadow r,
deny /etc/passwd w,
deny /proc/*/mem rw,
}
# Profili yükleyip uygulama
sudo apparmor_parser -r /etc/apparmor.d/usr.local.bin.myapp
5. Secure Boot ve Önyükleme Güvenliği
5.1 UEFI Secure Boot Yapılandırması
Önyükleme sürecinin güvenliği, çekirdek sıkılaştırmasının temel taşlarından biri. Düşünün: çekirdeğinizi ne kadar sıkılaştırırsanız sıkılaştırın, eğer önyükleme sürecinde bir rootkit araya giriyorsa her şey boşa gider. Secure Boot, yalnızca imzalı çekirdek ve önyükleyici bileşenlerinin yüklenmesine izin vererek tam da bu sorunu çözer:
# Secure Boot durumunu kontrol etme
mokutil --sb-state
# UEFI değişkenlerini kontrol etme
efivar -l | grep SecureBoot
# İmzalı çekirdek modüllerini doğrulama
modinfo -F signer $(modinfo -F filename ext4)
# GRUB şifreleme ile önyükleyici koruması
sudo grub2-setpassword # RHEL/CentOS
# veya
sudo grub-mkpasswd-pbkdf2 # Debian/Ubuntu
# Oluşturulan hash'i GRUB yapılandırmasına ekleme
# /etc/grub.d/40_custom dosyasına:
set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.10000.HASH_DEGERI
5.2 Çekirdek Komut Satırı Parametreleri ile Sıkılaştırma
GRUB aracılığıyla çekirdeğe aktarılan önyükleme parametreleri, donanım düzeyinde güvenlik özelliklerini etkinleştirmek için kullanılır. Bu parametrelerin her birinin ne yaptığını bilmek önemli, körü körüne kopyala-yapıştır yapmaktan kaçının:
# /etc/default/grub dosyasında GRUB_CMDLINE_LINUX parametreleri:
GRUB_CMDLINE_LINUX="lockdown=confidentiality \
init_on_alloc=1 \
init_on_free=1 \
page_alloc.shuffle=1 \
slab_nomerge \
pti=on \
vsyscall=none \
debugfs=off \
oops=panic \
module.sig_enforce=1 \
random.trust_bootloader=off \
random.trust_cpu=off \
intel_iommu=on \
amd_iommu=force_isolation \
iommu.passthrough=0 \
iommu.strict=1 \
mitigations=auto,nosmt"
# Yapılandırmayı güncelleme
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Peki bu parametreler tam olarak ne yapıyor? İşte kısa açıklamaları:
- init_on_alloc=1, init_on_free=1: Bellek tahsis ve serbest bırakma işlemlerinde sıfırlama yaparak bilgi sızıntısını önler
- slab_nomerge: SLAB birleştirmeyi devre dışı bırakarak heap tabanlı saldırıları zorlaştırır
- pti=on: Sayfa tablosu izolasyonu ile Meltdown benzeri saldırılara karşı koruma sağlar
- vsyscall=none: Eski vsyscall arayüzünü kapatarak ROP saldırılarını zorlaştırır
- debugfs=off: Hata ayıklama dosya sistemini kapatarak bilgi sızıntısını önler
- oops=panic: Çekirdek hatasında sistemi durdurup istismarı engeller
- module.sig_enforce=1: Yalnızca imzalı çekirdek modüllerinin yüklenmesine izin verir
- mitigations=auto,nosmt: Spekülatif yürütme saldırılarına karşı donanım düzeyinde koruma sağlar
6. eBPF Güvenliği ve Sıkılaştırma
6.1 eBPF Risklerini Anlama
eBPF, Linux çekirdeğinde yeniden derleme gerektirmeden dinamik uzantılar çalıştırmaya olanak tanıyan müthiş güçlü bir teknoloji. Ama güç, sorumluluk getirir (klişe ama doğru). 2025'te keşfedilen birçok güvenlik açığı, eBPF doğrulama mekanizmasının atlatılmasıyla ilgiliydi. 2026'da imzalı eBPF programları ve güçlendirilmiş doğrulama mekanizmalarıyla bu riskler azaltılmaya çalışılıyor:
# Yetkisiz kullanıcıların eBPF programı yüklemesini engelleme
echo 1 | sudo tee /proc/sys/kernel/unprivileged_bpf_disabled
# Kalıcı yapılandırma
echo "kernel.unprivileged_bpf_disabled = 1" | sudo tee /etc/sysctl.d/93-bpf-security.conf
# BPF JIT derleyicisini sıkılaştırma
echo 2 | sudo tee /proc/sys/net/core/bpf_jit_harden
# Yüklü BPF programlarını listeleme
sudo bpftool prog list
# BPF haritalarını (maps) görüntüleme
sudo bpftool map list
# Belirli bir BPF programının detaylarını görme
sudo bpftool prog show id 42
6.2 eBPF Tabanlı Güvenlik İzleme
eBPF teknolojisi doğru yapılandırıldığında, aynı zamanda güçlü bir güvenlik izleme aracına dönüşür. Kendi tecrübemden söyleyebilirim ki Cilium Tetragon, çekirdek düzeyinde gerçek zamanlı tehdit algılamada oldukça etkili:
# Tetragon kurulumu (Kubernetes ortamı için)
helm repo add cilium https://helm.cilium.io
helm install tetragon cilium/tetragon -n kube-system
# Bağımsız kurulum
curl -LO https://github.com/cilium/tetragon/releases/latest/download/tetragon-linux-amd64.tar.gz
tar xzf tetragon-linux-amd64.tar.gz
sudo mv tetragon /usr/local/bin/
# Dosya erişim izleme politikası örneği (TracingPolicy)
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: file-access-monitoring
spec:
kprobes:
- call: "fd_install"
syscall: false
args:
- index: 0
type: int
- index: 1
type: "file"
selectors:
- matchArgs:
- index: 1
operator: "Prefix"
values:
- "/etc/shadow"
- "/etc/passwd"
- "/etc/sudoers"
7. Konteyner Ortamlarında Çekirdek Güvenliği
7.1 Seccomp Profilleriyle Sistem Çağrısı Filtreleme
Konteynerler, ana makine çekirdeğini paylaşır — bu çoğu zaman unutulan ama kritik bir detay. Bir konteynerdeki çekirdek açığı, tüm sistemi tehlikeye atabilir. Seccomp profilleri, konteynerlerin yapabileceği sistem çağrılarını kısıtlayarak bu riski ciddi ölçüde azaltır:
# Özel seccomp profili (/etc/docker/seccomp-strict.json)
{
"defaultAction": "SCMP_ACT_ERRNO",
"defaultErrnoRet": 1,
"archMap": [
{
"architecture": "SCMP_ARCH_X86_64",
"subArchitectures": [
"SCMP_ARCH_X86",
"SCMP_ARCH_X32"
]
}
],
"syscalls": [
{
"names": [
"read", "write", "open", "close", "stat",
"fstat", "lstat", "poll", "lseek", "mmap",
"mprotect", "munmap", "brk", "ioctl",
"access", "pipe", "select", "sched_yield",
"dup", "dup2", "nanosleep", "getpid",
"socket", "connect", "accept", "sendto",
"recvfrom", "bind", "listen", "clone",
"execve", "exit", "wait4", "kill",
"fcntl", "flock", "fsync", "fdatasync",
"getcwd", "chdir", "mkdir", "rmdir",
"creat", "unlink", "chmod", "chown",
"getuid", "getgid", "geteuid", "getegid",
"epoll_create", "epoll_ctl", "epoll_wait",
"exit_group", "set_tid_address",
"set_robust_list", "futex", "clock_gettime"
],
"action": "SCMP_ACT_ALLOW"
}
]
}
# Docker ile seccomp profili kullanma
docker run --security-opt seccomp=/etc/docker/seccomp-strict.json nginx:alpine
# Podman ile seccomp profili kullanma
podman run --security-opt seccomp=/etc/docker/seccomp-strict.json nginx:alpine
7.2 Linux Yeteneklerini (Capabilities) Kısıtlama
Linux yetenekleri, root ayrıcalıklarını daha ince tanecikli bir şekilde kontrol etmenize olanak tanır. Varsayılan konteyner yapılandırmalarında gereğinden fazla yetenek verildiğini sıkça görüyorum. En iyi yaklaşım: hepsini kaldır, sadece gerekenleri ekle.
# Tüm yetenekleri kaldırıp sadece gerekenleri ekleme
docker run \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--cap-add=CHOWN \
--cap-add=SETUID \
--cap-add=SETGID \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid \
--security-opt=no-new-privileges:true \
nginx:alpine
# Kubernetes Pod güvenlik bağlamı
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
seccompProfile:
type: RuntimeDefault
containers:
- name: app
image: myapp:latest
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
volumeMounts:
- name: tmp
mountPath: /tmp
volumes:
- name: tmp
emptyDir:
medium: Memory
sizeLimit: 100Mi
7.3 Kök Kullanıcısız (Rootless) Konteynerler
2026'da rootless konteynerler artık lüks değil, zorunluluk. Root yetkisi olmadan çalışan konteynerler, çekirdek düzeyindeki güvenlik açıklarının etkisini büyük ölçüde azaltır. Podman zaten varsayılan olarak rootless çalışıyor — Docker'da ise birkaç adım gerekiyor:
# Rootless Docker kurulumu
dockerd-rootless-setuptool.sh install
# Rootless Podman (varsayılan olarak rootless çalışır)
podman run --rm -it alpine:latest whoami
# Rootless konteyner için kullanıcı ad alanı yapılandırması
echo "user.max_user_namespaces = 28633" | sudo tee /etc/sysctl.d/userns.conf
sudo sysctl --system
# /etc/subuid ve /etc/subgid yapılandırması
echo "appuser:100000:65536" | sudo tee -a /etc/subuid
echo "appuser:100000:65536" | sudo tee -a /etc/subgid
8. Çekirdek Denetimi ve İzleme
8.1 Linux Audit Framework (auditd) Yapılandırması
auditd, çekirdek düzeyinde sistem etkinliklerini izleyen ve günlüğe kaydeden güçlü bir denetim aracı. Güvenlik olaylarını tespit etmek ve uyumluluk gereksinimlerini karşılamak için kapsamlı bir denetim politikası şart. Aşağıdaki kurallar, yıllar içinde birçok üretim ortamında test edilmiş bir temel oluşturur:
# auditd kurulumu ve etkinleştirme
sudo dnf install audit audit-libs # RHEL/CentOS
sudo apt install auditd # Debian/Ubuntu
sudo systemctl enable --now auditd
# Güvenlik odaklı denetim kuralları (/etc/audit/rules.d/security.rules)
# Zaman değişikliklerini izleme
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-w /etc/localtime -p wa -k time-change
# Kullanıcı ve grup değişikliklerini izleme
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity
# Ağ yapılandırma değişikliklerini izleme
-w /etc/sysconfig/network -p wa -k network-config
-w /etc/sysconfig/network-scripts/ -p wa -k network-config
-a always,exit -F arch=b64 -S sethostname -S setdomainname -k network-config
# Erişim kontrolü değişikliklerini izleme
-w /etc/selinux/ -p wa -k MAC-policy
-w /etc/apparmor/ -p wa -k MAC-policy
-w /etc/apparmor.d/ -p wa -k MAC-policy
# Ayrıcalık yükseltme girişimlerini izleme
-w /usr/bin/sudo -p x -k privilege-escalation
-w /usr/bin/su -p x -k privilege-escalation
-w /etc/sudoers -p wa -k privilege-escalation
-w /etc/sudoers.d/ -p wa -k privilege-escalation
# Çekirdek modülü yükleme/kaldırma izleme
-a always,exit -F arch=b64 -S init_module -S delete_module -k kernel-modules
-a always,exit -F arch=b64 -S finit_module -k kernel-modules
-w /sbin/insmod -p x -k kernel-modules
-w /sbin/rmmod -p x -k kernel-modules
-w /sbin/modprobe -p x -k kernel-modules
# Dosya silme işlemlerini izleme
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k file-deletion
# Kuralları uygulama ve doğrulama
sudo augenrules --load
sudo auditctl -l
8.2 Gerçek Zamanlı Çekirdek İzleme
Denetim günlükleri güzel de, bir saldırıyı gerçek zamanlı tespit etmek bambaşka bir şey. Falco gibi araçlar bu konuda gerçekten fark yaratıyor:
# Aureport ile özet raporlar
sudo aureport --summary
sudo aureport -au --summary # Kimlik doğrulama özeti
sudo aureport -m --summary # Modül değişiklikleri
sudo aureport --failed # Başarısız işlemler
# Ausearch ile belirli olayları arama
sudo ausearch -k privilege-escalation --start today
sudo ausearch -m EXECVE -c sudo --start recent
# Falco kurulumu (çekirdek düzeyinde çalışma zamanı güvenliği)
curl -fsSL https://falco.org/repo/falcosecurity-packages.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.gpg
# Falco kuralı örneği (/etc/falco/rules.d/custom-rules.yaml)
- rule: Sensitive File Access
desc: Detect access to sensitive files
condition: >
open_read and
(fd.name startswith /etc/shadow or
fd.name startswith /etc/sudoers or
fd.name startswith /root/.ssh) and
not proc.name in (sshd, sudo, su, passwd)
output: >
Sensitive file accessed
(user=%user.name command=%proc.cmdline
file=%fd.name container_id=%container.id)
priority: WARNING
tags: [filesystem, sensitive_files]
9. Otomasyon ve Uyumluluk Denetimi
9.1 OpenSCAP ile Otomatik Güvenlik Taraması
CIS Benchmarks ve STIG gibi uyumluluk çerçeveleri, çekirdek güvenliği dahil kapsamlı sıkılaştırma kılavuzları sunar. Elle tek tek kontrol etmek mi? Hayır, teşekkürler. OpenSCAP tam da bunun için var:
# OpenSCAP kurulumu
sudo dnf install openscap-scanner scap-security-guide # RHEL/CentOS
sudo apt install libopenscap8 ssg-debian # Debian/Ubuntu
# Mevcut profilleri listeleme
oscap info /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# CIS Level 2 uyumluluk taraması
sudo oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_cis_server_l2 \
--results /tmp/cis-results.xml \
--report /tmp/cis-report.html \
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# Otomatik düzeltme (remediation) uygulanması
sudo oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_cis_server_l2 \
--remediate \
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# Ansible playbook oluşturma
oscap xccdf generate fix \
--profile xccdf_org.ssgproject.content_profile_cis_server_l2 \
--fix-type ansible \
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml > cis-hardening.yml
9.2 Ansible ile Çekirdek Sıkılaştırma Otomasyonu
Büyük ölçekli ortamlarda çekirdek güvenlik yapılandırmalarını tutarlı şekilde uygulamak zorunluluk. Tek tek sunuculara SSH ile girip manuel ayar yapma günleri çoktan geride kaldı. Ansible ile bu işi otomatize edebilirsiniz:
# kernel-hardening.yml - Ansible Playbook
---
- name: Linux Çekirdek Sıkılaştırma
hosts: all
become: true
vars:
sysctl_settings:
kernel.randomize_va_space: 2
kernel.kptr_restrict: 2
kernel.dmesg_restrict: 1
kernel.yama.ptrace_scope: 2
kernel.unprivileged_bpf_disabled: 1
net.core.bpf_jit_harden: 2
kernel.perf_event_paranoid: 3
kernel.sysrq: 0
net.ipv4.conf.all.rp_filter: 1
net.ipv4.tcp_syncookies: 1
net.ipv4.conf.all.accept_redirects: 0
net.ipv4.conf.all.send_redirects: 0
net.ipv4.conf.all.accept_source_route: 0
fs.protected_hardlinks: 1
fs.protected_symlinks: 1
fs.protected_fifos: 2
fs.protected_regular: 2
blacklisted_modules:
- dccp
- sctp
- rds
- tipc
- cramfs
- freevxfs
- hfs
- hfsplus
- usb-storage
- firewire-core
- bluetooth
tasks:
- name: Sysctl güvenlik parametrelerini uygulama
ansible.posix.sysctl:
name: "{{ item.key }}"
value: "{{ item.value }}"
sysctl_file: /etc/sysctl.d/99-security-hardening.conf
reload: true
loop: "{{ sysctl_settings | dict2items }}"
- name: Gereksiz çekirdek modüllerini kara listeye alma
ansible.builtin.copy:
dest: "/etc/modprobe.d/blacklist-{{ item }}.conf"
content: "install {{ item }} /bin/false\n"
owner: root
group: root
mode: '0644'
loop: "{{ blacklisted_modules }}"
- name: Auditd güvenlik kurallarını dağıtma
ansible.builtin.copy:
src: files/audit-security.rules
dest: /etc/audit/rules.d/security.rules
owner: root
group: root
mode: '0640'
notify: Restart auditd
- name: Çekirdek güvenlik güncellemelerini kontrol etme
ansible.builtin.dnf:
name: "kernel*"
state: latest
security: true
when: ansible_os_family == "RedHat"
handlers:
- name: Restart auditd
ansible.builtin.service:
name: auditd
state: restarted
10. Düzenli Güvenlik Bakım Takvimi
Çekirdek güvenliği tek seferlik bir iş değil — sürekli devam eden bir süreç. Aşağıdaki bakım takvimi, güvenlik sıkılaştırmasını sürdürülebilir kılmak için önerdiğim yaklaşım:
Haftalık Görevler
- Çekirdek güvenlik güncellemelerini gözden geçirme ve uygulama
- Denetim günlüklerini inceleme ve anormallikleri tespit etme
- SELinux/AppArmor ihlal raporlarını kontrol etme
- Yüklü çekirdek modüllerini doğrulama
Aylık Görevler
- Açık port ve servis denetimi gerçekleştirme
- sysctl parametrelerinin doğruluğunu kontrol etme
- OpenSCAP uyumluluk taraması çalıştırma
- Konteyner güvenlik yapılandırmalarını gözden geçirme
- BPF program envanterini güncelleme
Üç Aylık Görevler
- Tam uyumluluk denetimi (CIS/STIG) gerçekleştirme
- Erişim kontrolü politikalarını gözden geçirme ve güncelleme
- Felaket kurtarma ve yedekleme testleri yapma
- Yeni çekirdek güvenlik özelliklerini değerlendirme
- Sıkılaştırma Ansible playbook'larını güncelleme
# Hızlı güvenlik sağlık kontrolü betiği (weekly-security-check.sh)
#!/bin/bash
set -euo pipefail
echo "=== Linux Çekirdek Güvenlik Sağlık Kontrolü ==="
echo "Tarih: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo ""
# Çekirdek sürümü
echo "[1] Çekirdek Sürümü: $(uname -r)"
# Güvenlik modülleri
echo "[2] SELinux Durumu: $(getenforce 2>/dev/null || echo 'Yüklü değil')"
echo " AppArmor Durumu: $(aa-status --enabled 2>/dev/null && echo 'Etkin' || echo 'Etkin değil')"
# Sysctl kontrolleri
echo "[3] Kritik sysctl Parametreleri:"
for param in kernel.randomize_va_space kernel.kptr_restrict kernel.dmesg_restrict \
kernel.yama.ptrace_scope kernel.unprivileged_bpf_disabled; do
value=$(sysctl -n "$param" 2>/dev/null || echo "N/A")
echo " $param = $value"
done
# Yüklü modüller
echo "[4] Yüklü Çekirdek Modül Sayısı: $(lsmod | wc -l)"
# Bekleyen güncellemeler
echo "[5] Bekleyen Güvenlik Güncellemeleri:"
if command -v dnf &>/dev/null; then
dnf updateinfo list security 2>/dev/null | tail -5
elif command -v apt &>/dev/null; then
apt list --upgradable 2>/dev/null | grep -i securi | head -5
fi
# Başarısız oturum açma girişimleri
echo "[6] Son 24 Saatteki Başarısız Oturum Açma: $(aureport -au --start today --failed 2>/dev/null | tail -1 || echo 'Bilgi alınamadı')"
echo ""
echo "=== Kontrol Tamamlandı ==="
Sonuç
2026'da Linux çekirdek güvenliği, her zamankinden daha kritik bir konumda. Günde 8-9 yeni çekirdek CVE'si raporlanırken, "daha sonra hallederiz" yaklaşımı artık kabul edilemez. Bu rehberde ele aldığımız adımlar — sysctl sıkılaştırması, modül güvenliği, SELinux/AppArmor yapılandırması, Secure Boot, eBPF güvenliği, konteyner izolasyonu, auditd denetimi ve otomasyon — birlikte uygulandığında çekirdek düzeyinde sağlam bir savunma katmanı oluşturur.
Son bir not: güvenlik sıkılaştırması bir varış noktası değil, süregelen bir yolculuk. Düzenli bakım takvimi oluşturun, güncel tehditleri takip edin ve otomasyon araçlarıyla tutarlılığı sağlayın. Rust'ın çekirdeğe entegrasyonu, imzalı eBPF programları ve geliştirilmiş donanım izolasyonu gibi yenilikler, Linux çekirdek güvenliğinin geleceğini şekillendirmeye devam edecek. Bu değişimlere ayak uydurmak, güvenli bir altyapı işletmenin en temel gerekliliği.