Güvenlik duvarı günlüğünde beklemediğiniz bir satır var: bir ACK paketi, conntrack durumu NEW, sizin olmayan bir kaynak adres, hedef port açık. Bunu kimsenin yetkilendirmediği yeni bir gelen bağlantı olarak okumak cezbedici. Satırın gerçekte söylediği daha dar: o paket bu hook’a ulaştığında izleyicinin eşleşen bir durumu yoktu ve paket bir ACK taşıyordu. Bunlar iki farklı şey hakkında iki gerçektir ve ikisi de el sıkışmanın tam dökümü değildir. Bir sonuca varmadan önce geçtiğim sıra şudur.

Hükümden değil, paketten başlayın

Yorumlamadan önce gözlemleri ayırın. TCP bayrakları bu paketi tanımlar, izleyicinin durumu o hook’ta ne bildiğini tanımlar ve yakalamanız yalnızca kaydettiğiniz pencereyi tanımlar.

Bu üçünü karıştırmak, bir ACK’ın “sağlayıcı birini içeri aldı”ya dönüşme biçimidir.

NEW hook’ta gerçekte ne anlama gelir

iptables conntrack eşleşmesi NEW’ı bir bağlantı başlatan paket ya da henüz iki yönde trafik görmemiş bir bağlantıya ait paket olarak belgeler. ESTABLISHED, izleyicinin iki yönde de paket gördüğü anlamına gelir. İki tanımın hiçbiri paketin SYN olduğunu ya da geçmişsiz geldiğini söylemez.

Bir akışı ortasından izlemeye başlayan izleyici, sonraki paketi bildiğine göre sınıflandırır ve bu hiçbir şey olmayabilir. Bu, izleyicinin belleği hakkında bir ifadedir, uzak ana bilgisayarın niyeti hakkında değil.

Gevşek izleme ACK sürprizlerinin çoğunu açıklar

Çekirdek belgeler nf_conntrack_tcp_loose, bu da izleyicinin başlangıcını görmediği TCP bağlantılarını devralmasına izin verir. Ayar varsayılan değerinde olduğunda, akışın ortasından gelen bir ACK kurulmuş akış olarak kabul edilebilir. Kapatın ve aynı paket NEW yerine INVALID olarak sınıflandırılmaya daha yatkın olur. İki sonuç da izleyicinin kurallarını açıklar, uygulamanın geçmişini değil.

Bu yüzden etiket üzerine teori kurmadan önce o ayarı kontrol edin.

Sıkıcı nedenleri bu sırayla eleyin

İzlediğim NEW-on-ACK olaylarının çoğu bunlardan biriyle sonuçlandı ve hepsini kontrol etmek ucuz:

  • conntrack tablosu boşaltıldı ya da izleyici yeniden başlatıldı.
  • Ana bilgisayar yeniden başlatıldı ya da akış başka bir namespace veya aygıta taşındı.
  • Asimetrik yönlendirme SYN’i yakalamadığınız bir yoldan çıkardı.
  • NAT tuple’ı yeniden yazdı, bu yüzden giriş artık okuduğunuzla eşleşmiyor.
  • Yakalama geç başladı ve başlangıcı hiç görmedi.

Bunların her biri önceki paketleri izleyicinin görüş alanından çıkarır, sonrakileri ise dokunulmadan bırakır. Yeniden başlatma ya da tablonun boşaltılması uptime ve günlüklerden doğrulanması en kolay olanlardır. Asimetrik yönlendirme tek yönlü bir yakalama olarak görünür. NAT sinsi olandır, çünkü izleyicinin sakladığı tuple günlüğe basılan tuple değildir.

Devam etmeden önce bunlardan hangilerini ve nasıl elediğinizi yazın.

Tuple’ı, arayüzü ve hook’u okuyun

Bir conntrack girdisi adresler, portlar ve protokolle anahtarlanır, bu yüzden her çeviri hangi girdinin eşleştiğini değiştirir. Arayüzü ve hook’u da kaydedin, çünkü yanlış arayüzde ya da başka bir zincirden sonra görülen bir paket yolun şemadaki gibi olmadığını söyler. Olay bir VPN içerdiğinde, iç pakete mi yoksa dış taşıyıcıya mı baktığınıza karar verin. Ardından ağ geçidinin aynı beş parçalı tuple için günlüğe yazdığıyla karşılaştırın.

Aynı akışın birbiriyle çelişen iki görünümü, ikisinden herhangi birinden daha çok bilgi verir.

Ne zaman yükseltmeye değer

Erişilebilir olan ve olmaması gereken bir hizmeti akış, buna izin veren politika ve iki uçtan kanıtlarla gösterebiliyorsanız yükseltin. Tek bir durum etiketine ya da tek bir kısmi yakalamaya dayanarak sağlayıcı kusuru bildirmeyin, çünkü o bildirim az önce okuduğunuz açıklamayla kapatılacaktır. Hizmet gerçekten açıksa, o sınırın sahibi bunu düzeltmesi gereken doğru kişidir ve devredilmiş bir port eşlemesi ya da istenmeyen bir dinleyici, hatadan daha olası bir nedendir.

Ardından tek bir paketin bütün bir oturum gibi görünmesine izin veren görünürlük boşluğunu kapatın.

İlgili makaleler