Netfilter connlimit yapısı.

Feb 22nd, 2010

Iptables veya Netfilter yapısı içerisinde bulunan connlimit ile bağlantı sayısını sınırlandırabiliyoruz. Connlimit modülü standart netfilter yapısında uzun zamandır bulunmaktadır.


# iptables -m connlimit -h
iptables v1.4.4
..
..snips
..
connlimit match options:
[!] –connlimit-above n match if the number of existing connections is (not) above n
–connlimit-mask n group hosts using mask

Yukarıdaki yardım satırlarından da anlaşılacağı üzere iki adet opsiyonu var. Connlimit modülünü aktive etmek için iptables için -m connlimit opsiyonunu eklemek yeterli olacaktır.

–connlimit-above n : Buradaki n toplam bağlantı sayısını ifade etmektedir. Yeri gelmişken bağlantının tanımını yapalım. Bu conntrack tablosundaki her NEW satırına karşılık gelmektedir. Bildiğimiz gibi TCP, UDP ve ICMP’de bunlar değişiklik arz etmektedir. Başına ! işareti konularak tersi manası ifade edilebilmektedir. Yani nden fazla yerine nden az.
–connlimit-mask n : Buradaki n netmaskı ifade eder. IPv4 için 0-32, IPv6 için 0-128 aralığındaki bir rakamı ifade eder. Varsayılan değeri 32 dir. Yani IP başına hesaplama yapar.

Man sayfasından örneklerle bitirelim.

1. iptables -A INPUT -p tcp –syn –dport 23 -m connlimit –connlimit-above 2 -j REJECT

Bu ifade 23. porttan (–dport 23) gelen TCP (-p tcp) bağlantı (–syn) isteklerinden 2 tanesini (–connlimit-above 2) kabul eder. Geriye kalan bağlantı isteklerini ise kabul etmez (-j REJECT).

2. iptables -A INPUT -p tcp –syn –dport 23 -m connlimit ! –connlimit-above 2 -j ACCEPT

Bu da yukarıdaki ifadenin tersi şekilde yazılması. ! ile tersi yaptığımızı hatırlayın.

3. iptables -p tcp –syn –dport 80 -m connlimit –connlimit-above 16 –connlimit-mask 24 -j REJECT

Her C sınıfı IP bloğu (–connlimit-mask 24) için 16 adet HTTP bağlantı isteğine izin verir.

4. ip6tables -p tcp –syn –dport 80 -s fe80::/64 -m connlimit –connlimit-above 16 –connlimit-mask 64 -j REJECT

Bu da IPv6 örneği. Link local bağlantılar için toplam 16 bağlantıya izin verir.

Son olarak da kendi örneğimizi verelim. Malum üniversitelerin P2P sorununa yaklaşımları farklı oluyor. Makul kullanım çerçevesinde UDP trafiğinin çok olmadığı varsayılırsa;

iptables -I FORWARD -i eth0 -p udp –dport 53 -j ACCEPT
iptables -I FORWARD -i eth0 -p udp -m connlimit –connlimit-above 100 -j DROP

Burada dikkat ederseniz DNS trafiğine izin verdik. Bu modül kullanıldıktan sonra kullanıcılarınızdan gelebilecek problemlere karşı duyarlı olmakta yarar var. Buradaki sayılar TCP/IP katmanındaki zamanlarla sınırlıdır. Yani;

# sysctl -a | grep net.netfilter.nf_conntrack | grep time

sonucunda çıkacak zamanlara göre sayı sabit kalmaktadır.

hdemir.

Tags:
No comments yet.