Sunucu bir kez kurulur, sonra kendi başına yaşamaya devam eder. Bir ay sonra bazı paketler yükseltme bekler, sertifika bitiş tarihine üç hafta kala yaklaşmıştır, alakasız bir şey kurulduktan sonra SSH yapılandırmasına fazladan bir satır girmiştir ve oturum açmaları izlemesi gereken jail kimse fark etmeden durmuştur. Bunların hiçbiri bağırmaz. Hepsi yalnızca sessizce doğru olmaktan çıkar.
Aşağıda düzenli olarak denetlemeye değer on iki şey var, komutlarıyla birlikte. Tur on beş dakika sürer. Sıra, içeri girilen yerden kendiliğinden bozulana doğru ilerler.
SSH: beş satır
Bakılacak olan dosya değil, geçerli yapılandırmadır: /etc/ssh/sshd_config, sshd_config.d dizininin tamamı ve derlemenin varsayılanlarından oluşur.
sudo sshd -T | grep -iE 'permitrootlogin|passwordauthentication|permitemptypasswords|maxauthtries|x11forwarding'
Görmek istediğimiz: permitrootlogin no, passwordauthentication no, permitemptypasswords no, 3–4 düzeyinde maxauthtries ve x11forwarding no. İlk üçü kapı, son ikisi onun menteşeleri — bağlantı başına deneme sınırı ve sunucunun hiçbir işine yaramayan grafik yönlendirmesi.
İki çekince; ikisi de kendini dışarıda bırakmanın kolay yolu. Birincisi: anahtarınızın çalıştığını doğrulamadan parolayla girişi ve root girişini kapatmayın — ayrı bir oturumda, mevcut oturumu kapatmadan. Bunu root olarak parolayla bağlıyken okuyorsanız, o iki satır tam olarak sizi dışarıda bırakır.
İkincisi: dosyaların sırası. OpenSSH bir parametre için ilk karşılaştığı değeri alır ve sshd_config.d içindeki dosyalar alfabetik okunur. Bulut imajları oraya genellikle bir 50-cloud-init.conf bırakır; dosyanıza 90-hardening.conf gibi bir ad verdiyseniz o dosya sizinkini geçersiz kılar. Kendi ayarlarınız daha küçük bir numaranın altına gider — 00- ya da 10-. Sonuç da dosyayı okuyarak değil, sshd -T ile denetlenir.
Güvenlik duvarı: bir denetim
sudo ufw status verbose
Burada bu çıktının sonuçları değil niyetleri gösterdiğini akılda tutmak gerekir. Bir kural listede durabilir ve hiçbir şeyi kapatmayabilir: UFW’nin kendisi kapalıdır, portu Docker’ın yayımladığı bir şey karşılamaktadır (kendi kurallarını UFW’nin altında iptables’a yazar) ya da trafik sunucuya başka bir yoldan ulaşmaktadır. Bu yüzden kural listesini gerçekte dışarıya kulak veren şeyle karşılaştırmakta yarar var:
sudo ss -tulpn | grep -v '127.0.0.1\|::1'
fail2ban: iki denetim
Hizmetin çalışıyor olması yetmez — SSH için işleyen bir jail de gerekir.
sudo fail2ban-client status
sudo fail2ban-client status sshd
Buradaki en sık dert, suskun bir jail’dir. Debian 12’de ve yeni Ubuntu sürümlerinde /var/log/auth.log hiç bulunmayabilir: rsyslog kurulu değildir ve kayıtlar yalnızca journald içinde yaşar. Fabrika logpath değeriyle gelen bir jail o zaman başlar, kendini etkin olarak bildirir ve hiç kimseyi asla engellemez. Çaresi onu systemd günlüğüne yöneltmektir:
printf '[sshd]\nenabled = true\nbackend = systemd\n' | sudo tee /etc/fail2ban/jail.d/sshd-systemd.local
sudo systemctl restart fail2ban
Bunu yapılandırmaları karıştırmadan yakalatan işaret: fail2ban-client status sshd çıktısında «Currently failed» ve «Total failed» sıfırda dururken günlükte başarısız girişlerin açıkça bulunması.
Güncellemeler: üç denetim
Ayrı ayrı: toplamda kaç paket bekliyor, bunların kaçı güvenlikle ilgili ve sistem çekirdek güncellemesinden sonra yeniden başlatma istiyor mu.
sudo apt update
apt list --upgradable 2>/dev/null | grep -c -- '-security'
ls /var/run/reboot-required 2>/dev/null && echo 'yeniden başlatma gerekli'
Üçüncü denetim, otomatik güvenlik güncellemelerinin açık olup olmadığıdır; böylece ilk ikisi aylık bir ritüele dönüşmez:
systemctl status unattended-upgrades --no-pager
cat /etc/apt/apt.conf.d/20auto-upgrades
Bu dosyada her iki satırda da bir rakamı bulunmalıdır. Paket eksikse: sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades.
Sertifikalar: bir denetim
Bir Let's Encrypt sertifikası doksan gün yaşar ve yenileme, tam olarak çalışmayı bıraktığı güne kadar kendiliğinden işler. Bakılacak yer kayıt şirketinin paneli değil, sunucunun gerçekte sunduğu şeydir:
echo | openssl s_client -connect localhost:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
sudo certbot renew --dry-run
İlk komut, o ad için sunulan sertifikanın bitiş tarihini verir; ikincisi, gerçek süreyi beklemeden yenilemenin geçeceğini doğrular. Sunucunun karşıladığı yalnızca ana alan adını değil, tüm adları gözden geçirmekte yarar var: unutulan, kural olarak sonradan eklenen alt alan adıdır.
Disk: bir denetim
df -h
df -i
İki komut, çünkü alan ile dosya kayıtları birbirinden bağımsız biçimde tükenir. Çoğu sunucuda tavana önce ikincisi vurur — PHP oturumlarındaki ya da uygulama önbelleğindeki milyonlarca küçük dosya, gigabaytlar boşken IUse% değerini 100 yapar. Her iki durumu ayrıntılandıran ayrı bir yazımız var.
Bu listenin nesi eksik
Liste doğrudur, ama bir özelliği vardır: birinin onu hatırlamasını gerektirir. Haftada on beş dakika az bir şeydir — sunucu tekken ve ortada bir neden varken. İki sakin ayın ardından tur atlanır ve jail’in durduğu başkasının günlüklerinden öğrenilir.
Bu yüzden tam olarak bu on iki denetimi ayrı, ücretsiz bir panele koyduk — Arcivéo FREE. Tek komutla kurulur, kendi sunucunuzda çalışır, bize hiçbir şey göndermez ve kayıt gerektirmez. Bir toplayıcı cron’dan beş dakikada bir çalışır ve aynı şeyleri yerel bir veritabanına yazar: SSH oturum açmaları ve reddedilen bağlantılar, UFW ile fail2ban’ın durumu, bekleyen güvenlik güncellemeleri, sertifikaların süreleri, disk alanı. Geçmiş yedi günü kapsar, arayüz 34 dildedir. Fiyat sıfırdır, iş sunucusunda da: lisans, paneli şirket makineleri dahil kendi makinelerinize kurmanıza izin verir; yeniden satmanıza ya da başkalarının sunucuları için hizmet olarak işletmenize izin vermez.
Ücretsiz sürümün yığını mütevazıdır: UFW ile fail2ban’ı kurar ve etkinleştirir, oradan sonra durumu gösterir. ModSecurity, Suricata, AIDE ve diğer modüller onda yoktur, onlar ücretli olana aittir. Ama haftalık turu akılda taşımayı bırakmak için yeterlidir. Aynı verilerin tam panelde nasıl göründüğünü aşağıdaki tanıtım sayfaları gösteriyor.