Yeni bir VPS üzerindeki ilk Lynis çalıştırması genellikle 60 civarında bir değer ve önce hangisine el atılacağı belli olmayan uzun bir öneri listesi verir. İyi haber: 80–85 bir akşamlık iştir ve adımların çoğu göstermelik değil, gerçekten yapmaya değerdir. Kötü haber: son on beş puan kiralık bir sanal makinede ulaşılamaz ve peşlerinden koşmak hatadır.

İndeks neyi gösterir, neyi göstermez

Sertleştirme indeksi, ağırlıklarıyla birlikte geçilen testlerin toplama oranıdır — güvenliğin yüzdesi değil. Lynis üç yüz kadar test çalıştırır ve iki ayrı liste üretir: gerçek sorun gibi görünen warnings ve iyileştirilebilecek şeyler olan suggestions. Her zaman uyarılarla başlanır; sayıları genellikle bir elin parmaklarını geçmez.

Yüz puan diye bir şey yoktur: bazı öneriler sistem kurulurken verilmiş kararları gerektirir (/home, /tmp ve /var için ayrı bölümler), bazıları bir VPS’te bulunmayan önyükleyici erişimini ister, bazıları da birbiriyle çelişir. Kendi indeksinizi başkasınınkiyle karşılaştırmak da anlamsızdır: Lynis, makinede çalışan her şey için puan düşer. Çalışan her servis bir açık port daha, kendi yapılandırması ve bir düzine yeni öneri demektir; yüksek rakamların SSH dışında hiçbir şeyin çalışmadığı yerlerde daha sık görülmesinin nedeni budur. Sitesi, veritabanı ve postası olan çalışan bir sunucu için 85 iyi bir sonuçtur.

root olarak çalıştırın

sudo lynis audit system

sudo olmadan Lynis, sistem dosyalarına ihtiyaç duyan bütün testleri atlar ve daha düşük bir indeks bildirir — sunucu kötü olduğu için değil, kontroller görünmez kaldığı için. Rapor /var/log/lynis-report.dat dosyasına, okunabilir günlük ise /var/log/lynis.log dosyasına yazılır.

Çıktının her satırı SSH-7408 ya da KRNL-6000 gibi bir test kimliğiyle başlar. Hem açıklamayı hem de testi kapatma yolunu bu kimlikle bulursunuz — biçimini aklınızda tutun, aşağıdaki her şey onun etrafında döner.

Rakamı gerçekten ne değiştirir

SSH (SSH-7408). En ağır blok: tek bir test aynı anda bir düzine parametreyi kontrol eder. sshd_config dosyasının tamamını düzenlemeyin; paket güncellemesi emeğinizi silemesin diye ayrı bir dosya bırakın:

sudo tee /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
MaxSessions 2
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
LogLevel VERBOSE
TCPKeepAlive no
EOF
sudo sshd -t && sudo systemctl reload ssh

Servisi yeniden yüklemeden önce sshd -t çalıştırmak zorunludur: oturumunuz açıkken yapılandırmada yapılan bir hata sizi dışarıda bırakır. Ve PasswordAuthentication no yazmadan önce anahtarın gerçekten çalıştığından emin olun — ikinci bir açık terminalden.

Çekirdek parametreleri (KRNL-6000). Test yirmi kadar sysctl değerini kontrol eder. Bunlar için bir dosya:

sudo tee /etc/sysctl.d/99-hardening.conf <<'EOF'
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.sysrq = 0
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.log_martians = 1
EOF
sudo sysctl --system

Eksik araçlar. Önerilerin epeyce bir kısmı yalnızca «olmayanı kurun» demektir: auditd (sistem olaylarının kaydı), aide (dosya bütünlüğü), debsums (paket bütünlüğü), unattended-upgrades (otomatik güvenlik güncellemeleri), sysstat ve acct (süreç muhasebesi), bir zararlı yazılım tarayıcısı. Her biri bir ya da iki öneriyi kapatır, ama onları puan için kurmayın: onlar olmadan bir olaydan sonra hiçbir şeyi geri kuramazsınız.

Emek-kazanç oranı iyi olan küçük şeyler. /etc/login.defs içinde umask 027; aynı dosyada parola yaşlandırma; /etc/issue ve /etc/issue.net içindeki bildirimler; yalnızca root tarafından okunabilen derleyiciler (chmod 700 /usr/bin/gcc). Bildirimler konusunda dürüst olalım: güvenlik açısından hiçbir şey yapmazlar, hukuki bir formalitedir — ama puan verirler.

login.defs içindeki bir tuzak

umask değerini sed ile satır değiştirerek düzenlemek, dosyada aynı anda birkaç UMASK satırı bırakır. Lynis o zaman değeri saymaz ve ayar yapılmış görünse de AUTH-9328 testi kırmızı kalır. Düzenlemeden sonra kontrol edin:

grep -c '^UMASK' /etc/login.defs

Tam olarak bir tane olmalıdır. Aynısı o dosyadaki diğer bütün parametreler için de geçerlidir.

Yanlış pozitifler ve onları doğru biçimde susturmak

Bazı uyarılar sizin sunucunuz için hiç geçerli değildir. Gerçek bir örnek: büyük bir sağlayıcının VPS’inde PKGS-7388 testi hiçbir güvenlik deposu bulunamadığını bildirir — yalnızca depolar bir ayna dosyasına atıf yapan deb822 biçiminde tanımlandığı ve Lynis alışıldık satırı aradığı için. Güvenlik güncellemeleri gayet güzel gelmektedir.

Bunu rapordan satır silerek değil, bir profille susturun. Profil dosyaları .prf uzantısını kullanır (.prof değil — burada yarım saat kaybetmek kolaydır) ve kendi kurallarınız /etc/lynis/custom.prf dosyasına yazılır:

skip-test=PKGS-7388
skip-test=KRNL-5788

Tek bir kural: her satırın yanında testin neden atlandığını söyleyen bir açıklama olmalı. Altı ay sonra, geçerli olmadığı için mi yoksa düzeltmesi fazla zahmetli olduğu için mi kapatıldığını hatırlamayacaksınız — ve bu iki durumun farkı işin tam da özüdür.

Ne yapmamalı

Rakamın peşinden koşmayın. İndeksi rahatsız edici testleri kapatarak şişirmek kolaydır ve belli bir seviyeden sonra tek yol da budur — ama sunucu bundan dolayı bir nebze daha güvenli olmaz. Başka bir şey işe yarar: kendi değerinizi kaydedin ve değişimini izleyin. Bir güncellemeden ya da bir yapılandırmaya yapılan başka birinin düzenlemesinden sonra düşen indeks, mutlak büyüklüğünden çok daha değerli bir sinyaldir.

İşte tam bu yüzden Lynis’i bir kez değil, bir zamanlamaya göre çalıştırmaya ve karşılaştıracak bir şey olsun diye raporları saklamaya değer. Bunun tek sayfada toplanmış hali aşağıdaki demoda: indeks, test kimlikleriyle birlikte uyarı listesi ve önceki çalıştırmadan bu yana neyin değiştiği.