Iptables: “-p udp --stat KURULDU”


18

Giden DNS'e izin vermek için sıklıkla kullanılan bu iki iptables kuralına bakalım:

iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 
   -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp --sport 53 --dport 1024:65535
   -m state --state ESTABLISHED -j ACCEPT

Sorum şu: UDP'deki KURULU durumu tam olarak nasıl anlamalıyım? UDP vatansızdır.

İşte sezgim - bunun yanlış olup olmadığını veya nerede olduğunu bilmek istiyorum:

Man sayfası bana şunu söylüyor:

durum

Bu modül, bağlantı izleme ile birleştirildiğinde,
Bu paket için bağlantı izleme durumu.

  --durum ...

Yani, iptables temel olarak giden paket için kullanılan port numarasını hatırlar (bir UDP paketi için başka ne hatırlayabilir?) Ve sonra kısa bir süre içinde geri gönderilen ilk gelen pakete izin verir? Bir saldırganın bağlantı noktası numarasını tahmin etmesi gerekir (bu gerçekten çok zor olur mu?)

Çatışmalardan kaçınma hakkında:

Çekirdek hangi bağlantı noktalarının engellendiğini izler (diğer hizmetler veya önceki giden UDP paketleri tarafından), böylece bu bağlantı noktaları zaman çerçevesi içinde yeni giden DNS paketleri için kullanılmaz mı? (Yanlışlıkla zaman dilimi içinde bu bağlantı noktasında bir hizmet başlatmaya çalışırsam ne olur - bu girişim reddedilir / engellenir mi?)

Lütfen yukarıdaki metindeki tüm hataları bulun :-) Teşekkürler,

Chris

Yanıtlar:


12

Yani, iptables temel olarak giden paket için kullanılan port numarasını hatırlar (bir UDP paketi için başka ne hatırlayabilirdi?),

UDP için kaynak ve hedef portların ve adreslerin saklandığından eminim.

Durum tablolarını incelemek isterseniz conntrack ve / veya netstat-nat komutlarını yükleyin.

(Yanlışlıkla zaman dilimi içinde bu bağlantı noktasında bir hizmet başlatmayı denersem ne olur - bu girişim reddedilir / engellenir mi?)

OUTPUT ve INPUT'u kullandığınız için yerel hizmetler hakkında konuşuyorsunuz. Bağlantı noktası zaten kullanılıyor Sisteminizin başka bir hizmeti başlatmanıza izin vereceğine inanmıyorum çünkü o bağlantı noktasında bir şey zaten dinliyor. Sanırım ilk hizmeti durdurabilir ve gerçekten isteseniz başka bir tane başlatabilirsiniz, bu durumda yanıt muhtemelen hizmetinize ulaşacaktır. Hizmetin paketle ne yaptığı, paketin içeriğinin ne olduğuna ve hangi hizmete bağlı olduğuna bağlıdır.


8080 numaralı bağlantı noktasında bir Tomcat örneği demeye başlarsam, yanlışlıkla aynı bağlantı noktasında bir DNS sorgusu çalışıyorsa, başlatma işleminin başarısız olma olasılığı 1: (65535-1023) olur. Yoksa sadece zaman aralığının dolmasını bekleyecek mi? Zaman aralığı varsayılan olarak ne kadardır?
Chris Lercher

6
Linux'ta geçici bağlantı noktası aralığının genellikle 32768-61000 (bkz. / Proc / sys / net / ipv4 / ip_local_port_range) olduğuna inanıyorum ki bu 8080 örnek bağlantı noktanızı içermeyecektir. geçici aralık dahilinde. Tablodaki bir UDP giriş durumlarının süresi genellikle 30 saniyedir (bkz. / Proc / sys / net / netfilter / nf_conntrack_udp_timeout)
Zoredache

2
+1 Özellikle / proc yolları için teşekkürler!
Chris Lercher

1
Herhangi birinin udp_timeout'u uzatmak istemesi durumunda,echo "net.netfilter.nf_conntrack_udp_timeout = 180" >> /etc/sysctl.conf
Kiran

8

Not: Bu cevap düzenlendi.

Man sayfalarının söylediklerine rağmen ESTABLISHED"durum bilgisi" anlamına geliyor. UDP için bu, her bir giden UDP paketini ("src ip, src port dst ip, dst port" demet) bir süreliğine hatırlamak ve yanıtlarını tanımak anlamına gelir.

FWIW, DNS trafiği için benim normal kurallarým şöyle olurdu:

# permit any outbound DNS request (NB: TCP required too)
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53  -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 53  -j ACCEPT

# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

yani OUTPUTzincir üzerindeki trafiği kontrol edin ve ardından iptablesdurum modüllerinin INPUTzincirdeki diğer her şeyi halletmesine izin verin .

Ayrıca bu ilgili soruya bakın .


1
TCP'ye de izin vermem gerektiğini biliyorum. Peki İLGİLİ UDP için ne anlama gelir? Manpage: "İLGİLİ paketin yeni bir bağlantı başlattığı, ancak var olan bir bağlantıyla ilişkili olduğu anlamına geliyor ..." UDP bağlantıları mı? Belki de KURULDUĞU'ndan daha mantıklı, ama bunu öğrenmek istiyorum.
Chris Lercher

Kurallarınızı kullandığımda, ancak udp INPUT öğesini İLGİLİ olarak sınırlandırdığımda, DNS sorgularım çalışmıyor. KURULDU'ya izin vermem gerekiyor gibi görünüyor. İLGİLİ'ye (UDP için) izin vermek için herhangi bir neden var mı?
Chris Lercher

tamam, Görünüşe göre KURULDU, man sayfasının söylediğinden daha fazlası anlamına geliyor. Her halükarda, benimki gibi ÇIKIŞ filtreleri kullanırsanız ve inbonud trafiğini kabul etmezseniz, INPUT kuralı hiç ihtiyacınız olmayacaktır.
Alnitak

1
Bulduklarımız göz önüne alındığında, İLGİLİ udp paketleri AFAIK yok. Ancak (örneğin) bu kutudan giden FTP yaparsanız, veri kanalı için İLGİLİ bir durum kuralına ihtiyacınız vardır. Tek "KURULU, İLGİLİ" kural AFAIK, giriş trafiği için en uygun tek kuraldır.
Alnitak

1
aslında, RTP için RELATEDUDP paketleri mevcut olabilir .
Alnitak

1

İptables geliştiricileri, iki istemci arasındaki protokol ne olursa olsun, paketler her iki yönde de görüldüğünde bir "KURULDU" durumu olduğunu düşünmüşlerdir.

durum uzantısı bağlantının bir parçasıdır. Çekirdek durumu tablodan anlıyor

/proc/net/nf_conntrack

Gönderen bakış açısından nf_conntrack tablosundaki UDP için iptable durumlarına örnek. UDP'de bir DNS sorgusu gönderdiğinizi düşünelim

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
 [UNREPLIED] src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

Bir paket gönderildi. Cevap vermedi ve oh, tablo karşılığında beklenenler için veriler var (DNS cevabı için paket).

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
  src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

Yanıt geldi, yanıtlanmayan bayrak gitti, bu UDP bağlantısının sisteminizde tanımlı küçük bir süre için KURULDU durumunda olduğu anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.