Geçmiş bir uygulama sunucusunu, erişim kontrolü için hâlâ TCP wrappers kullanmaya dayalı olarak sertlaştırmam gerekti. Hizmetlerimizin çoğu firewalld veya nftables'e geçmiş olsa da, bu bir kutunun /etc/hosts.allow ve /etc/hosts.deny dosyalarını izlemeyi zorunlu kılması gerekiyordu. Bu dosyalardaki her beklenmeyen düzenleme, bir arka kapı açabilir veya bağlantıyı kesintiye uğratabilir. İşte bu dosyaları gerçek zamanlı olarak izlemek için auditd'yi nasıl kurduğumu anlatıyorum.
auditd, TCP wrappers dosyaları için neden tercih edilir
TCP wrappers basit ama kırılgan bir sistemdir. hosts.allow veya hosts.deny dosyalarındaki tek bir yazım hatası, sisteminizi kilitleyebilir veya hizmetleri açığa bırakabilir. Yöneticiler, acil bir düzenleme sırasında bir satırı yanlışlıkla yorum satırı haline getirerek, SSH’yi dünyaya açık bırakmış olabiliyor. Bu dosyalar düz metin olup, sorun giderme sırasında sık sık düzenlendiği için, bütünlük izlemesi için ideal adaylardır. auditd, ayrı bir aracıya ihtiyaç duymadan çekirdek seviyesinde görünürlük sağlar.
Denetim kurallarını ayarlama
İlk olarak auditd'nin çalıştığını doğruladım:
systemctl status auditd
Ardından, hem /etc/hosts.allow hem de /etc/hosts.deny dosyaları için yazma ve öznitelik değişikliği izlemeyi ekledim:
auditctl -w /etc/hosts.allow -p wa -k hosts_file_change
auditctl -w /etc/hosts.deny -p wa -k hosts_file_change
-p wa bayrağı, yazma (w) ve öznitelik değişiklikleri (a) (örneğin chown veya chmod gibi işlemler) olduğunda tetiklenir. -k bayrağı, daha sonra günlükleri kolayca aramamı sağlayacak bir filtre anahtarı tanımlar. Bu kuralların yeniden başlatmalar sonrasında da geçerli kalmasını sağlamak için, bunları /etc/audit/rules.d/hosts_file.rules dosyasına ekledim:
-w /etc/hosts.allow -p wa -k hosts_file_change
-w /etc/hosts.deny -p wa -k hosts_file_change
Kaydettikten sonra kuralları yeniden yükledim:
augenrules --load
Gerçek Zamanlı Değişiklikleri İzleme
Anahtarım üzerinden filtrelemek için ausearch kullanıyorum. Canlı takip için, ausearch’in akış moduyla birleştiriyorum:
ausearch -f /etc/hosts.allow -f /etc/hosts.deny -k hosts_file_change -i
-i seçeneği, okunabilirliği artırmak için kimlikleri kullanıcı ve grup isimlerine dönüştürür. hosts.allow dosyasını düzenleyerek test ettiğimde:
echo "sshd: 10.0.0.5" >> /etc/hosts.allow
Aşağıdaki gibi bir olay hemen görünür:
type=PATH audit(1717000000.123:456): item=0 name="/etc/hosts.allow" inode=12345 dev=08:02 mode=0100644 ouid=0 ogid=0 ruid=0 rgid=0 pid=1234 auid=500 ses=1 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 exe="/usr/bin/bash" hostname=? addr=? terminal=pts/0 res=success
Bu olay, kim tarafından neyi, ne zaman ve hangi terminalden değiştirdiğini gösterir.
Otomatikleştirilmiş Uyarılar
Bir terminali gün içinde izlemek istemiyorum. Bu yüzden rsyslog üzerinden basit bir uyarı sistemi kurdum. İlk olarak, audit olaylarının /var/log/audit/audit.log dosyasına kaydedildiğinden emin oldum (varsayılan olarak böyledir). Ardından aşağıdaki rsyslog parçacığını oluşturdum:
if $programname == 'auditd' and $msg contains 'hosts_file_change' then /var/log/hosts_warnings.log
& stop
Bu parçacığı /etc/rsyslog.d/30-hosts-watch.conf dosyasına yerleştirdim ve rsyslog'u yeniden başlattım. Şimdi eşleşen her audit olayı ayrı bir log dosyasına kopyalanıyor. Buradan, Zabbix veya Prometheus node exporter gibi izleme araçlarına textfile collector üzerinden entegre edebiliyorum.
Yaygın hatalar
Başlangıçta yaptığım bir hata, -p r (okuma) kullanmak yerine wa kullanmamdı. Bu, her sshd veya tcpd aramasını günlüğe dolduruyordu—tamamen faydasız. Belirli bir erişim sorunu hata ayıklarken değilse, yazma ve öznitelik değişikliklerine sadık kal.
Başka bir dikkat etmen gereken durum: dosyayı vim ile düzenlersen, geçici bir swap dosyası oluşturup yeniden adlandırma yapabilir. auditd bu yeniden adlandırmayı yine bir öznitelik değişikliği olarak yakalar, bu yüzden korunmuş olursun. Ancak çok hızlı ardışık birden fazla olay görürsen, bunun bu olasılıklı nedeni budur.
Son düşünceler
TCP wrappers modern değil, ama hâlâ kullanımda. auditd ile yapılandırma dosyalarını izlemek, kurulumu karmaşıklaştırmadan benim için rahatlatıcı. Hafif, çekirdeğe yerleşik ve mevcut audit işlem hatlarıyla entegre olur. hosts.allow/deny kullanan herhangi bir eski sistemin sorumlusundaysanız, bu düşük çaba, yüksek görünürlük sağlayan bir kontrol olarak uygulanması değerd.
Daha önceki journald hız sınırlama gönderimimde de belirttiğim gibi, çekirdek denetimi, akıllı log döndürme ve uyarı ile birleştirildiğinde en etkili şekilde çalışır—sadece veri toplamayın, ona göre hareket edin.
Hızlı referans komutları
- Aktif kuralları listele:
auditctl -l - Son değişiklikleri ara:
ausearch -k hosts_file_change -i - Canlı izle:
ausearch -f /etc/hosts.allow -f /etc/hosts.deny -k hosts_file_change -i - Kuralları kalıcı yap:
/etc/audit/rules.d/hosts_file.rulesdosyasını düzenle, ardındanaugenrules --loadkomutunu çalıştır.
Kapak görseli: West Virginia National Guard · PDM (Openverse / kamu malı) · https://www.flickr.com/photos/163885612@N02/55234262183
