Daha önce ki yazımda; Match : Paket header’ina bakılarak söz konusu paketin belirli şartlara uyup uymadığını anlamak için kullanılır. örneğin filter içerisinde -source match kullanılarak paketin belirli bir ip den gelip gelmediğine bakılabilir. şeklinde açıklamıştık. Bu yazının oldukça uzun olduğunun farkındayım. iptables aktif olarak kullanmayı düşünüyorsanız match ve target lerin anlaşılması iptables in yeteneklerini kavramak açısından son derece önemlidir. Match yada target’lerin komple ezberlenmesinin hiç bir gerekliliği yoktur. iptables ile yapabileceklerinizi ve nasıl yapıldığını bir kere kavramış olmanız son derece yeterlidir. şimdi iptables ile kullanılan match’lere daha yakından göz atalım.
Genel Match’ler
1. -p , –protocol
bash-3.2# iptables -A INPUT -p tcp
bash-3.2#
TCP,UDP,ICMP gibi protokolleri kontrol etmek amacıyla kullanılır. bir protokol başına ! konularak hariç bırakılabilir örneğin !tcp tcp hariç şeklinde, tcp,udp gibi stadart protokoller haricinde switchler ve routerlar tarafından kullanılan diğer protokolleride destekler. desteklemiş olduğu protokol listesini “/etc/protocols” dosyasından bakabilirsiniz.kullanılmayan bir protokol girildiğinde hata döner.
2. -s , –src, –source
bash-3.2# iptables -A INPUT -s 192.168.1.1
bash-3.2#
Source yani kaynak ip adresini belirtmek amacı ile kullanılır. Subnet veya CIDR kullanılabilir ( 192.168.1.1/255.255.255.0 veya CIDR 192.168.1.1/24 ) yine “!” değil manasında kullanılabilir. Hiç bir kaynak adresi belirtilmediğinde default olarak herhangi bir source olarak kabul edilir.
3. -d, –dst, –destination
bash-3.2# iptables -A INPUT -d 192.168.1.1
bash-3.2#
Source’un tersine Hedef adresi veya adreslerini belirtmek için kullanılır. kullanımı –source ile aynıdır.
4. -i, –in-interface
bash-3.2# iptables -A INPUT -i eth0
bash-3.2#
Gelen interface’i belirtmek için kullanılır. Birden çok interface üzerinden ( örneğin wireless ethernet aynı anda yada birden fazla ethernet ) bağlantı sağlayan sistemlerde oldukça kullanışlıdır. gelen interface belirtildiği için sadece INPUT,FORWARD,PREROUTING chain’leri ile birlikte kullanılabilir. “+” karakteri herhangi bir karakter anlamında kullanılabilir. örneğin eth+ şeklinde belirttiğimizde eth0,eth1,eth2 …… şeklinde eth ile başlayan tüm interface’leri ifade eder. değil manasında “!” ile kullanılabilir. !eth0 eth0 hariç tüm interface’ler şeklinde.
5. -o, –out-interface
bash-3.2# iptables -A FORWARD -o eth0
bash-3.2#
Giden interface’i belirtmek için kullanılır. kullanımı “-i” ile aynıdır. sadece OUTPUT,FORWARD,POSTROUTING chain’leri ile birlikte kullanılabilir.
6. -f, –fragment
bash-3.2# iptables -A INPUT -f
bash-3.2#
fragmented ( parçalanmış ) paketleri belirtmek için kullanılır. Bazı durumlarda kablo üzerinden paketler gönderilemeyecek kadar büyük olabilir ( MTU vb sebepler ), bu durumda paketler parçalanarak hedefe gönderilir. özellikle multiplayer oyunlarda fragmented paketler çoktur. yinede fragmented paketler bir çok yerde saldırı amaçlı kullanılabiliyor. örneğin : jolt2 attack bir çok başlangıcı olmayan fragmented paket göndererek işletim sistemini ( hemen hemen her os ) boğarak işlevsiz hale getiren bir saldırıdır. “!f” şeklinde fragmented olmayan paketleri göstermek için kullanılabilir. connection tracking ve natd kullanılan yapılarda ise linux NETFILTER koduna gelmeden önce tüm fragmente olmuş paketler bir araya getirildiği için -f kullanmak gereksizdir.
TCP MATCHES
Sadece tcp protokolü ile kullanılabilen matchler.
1. –sport, –sourceport
bash-3.2# iptables -A INPUT -p tcp –sport 22
bash-3.2#
tcp paketinin kaynak portunu belirtmek için kullanılır. 0-65535 arasında bir rakam olabilir. kullanım şekli “!” ile değil şeklinde kullanılabilir, 22 yazarak 22 nolu port un kaynak olduğu paketlerin kesilmesi şeklinde olabilir, “:22″ , 0 dan 22 ye kadar tüm portlar, “22:” , 22 den 65535 e kadar tüm portlar , “22:80″ , 22 den 80 e kadar olan portlar veya bunların ! eklenerek değil şeklinde hariç tutulması şeklindedir. Yine /etc/services dosyasından port yerine isim kullanılabilir örneğin : 80 yerine www gibi. çok büyük rule yapılandırılmasında yüklemelerde ciddi performans sorunları yaşattığı için tavsiye edilmez.
2. –dport, –destinationport
bash-3.2# iptables -A INPUT -p tcp –dport 22
bash-3.2#
Kullanımı sourceport ile aynıdır. tek farkı kaynak portu yerine hedef portunu göstermesidir.
3. –tcp-flags
bash-3.2# iptables -A INPUT -p tcp –dport 22 –tcp-flags SYN,FIN,ACK SYN
bash-3.2#
TCP flagları ve çalışma şeklini iptables connection tracking le beraber ayrıntılı olarak anlatmıştım. bu match tcp flagları belirtmemize yarar.
4. –syn
bash-3.2# iptables -A INPUT -p tcp –dport 22 –syn
bash-3.2#
bir önceki tcp-flags örneğimizdeki “–tcp-flags SYN,FIN,ACK SYN ” ile tamamen aynıdır. iptables içerisinde tutulma sebebi geriye dönük uyumluluk olup –tcp-flags kullanımı tavsiye edilir.
5. –tcp-option
bash-3.2# iptables -A INPUT -p tcp –dport 22 –tcp-option 6
bash-3.2#
TCP optionsları belirtmek için kullanılır. Kesinlikle tavsiye etmiyorum. o yüzden açıklamasına girmeyeceğim. firewall da koyduğunuz her kuralın ikinci bir güvenlik açığına sebebiyet verebileceğine güzel bir örnektir. bir çok DDOS açığı oluşturur örneğin : TCP Option Matching Denial of Service Vulnerability
UDP MATCHES
UDP –sport, –source-port , –dport , –destination-port mathlerini destekler. kullanımı ve işlevleri TCP dekiler le aynıdır.
bash-3.2# iptables -A INPUT -p udp –dport 53
bash-3.2# iptables -A INPUT -p udp –sport 53
bash-3.2#
ICMP Matches
–icmp-type
bash-3.2# iptables -A INPUT -p icmp –icmp-type 8
bash-3.2#
RFC 792 de belirtilen numerik icmp tiplerini belirtmek için kullanlır. icmp tiplerini daha önceki Connection tracking yazımda belirtmiştim. Numerik yerine “–icmp-type echo-request” şeklinde kullanımıda mümkündür.
Addrtype Match
1. –src-type
bash-3.2# iptables -A INPUT -m addrtype –src-type UNSPEC
bash-3.2#
Layer 3 source adres tipi , BROADCAST,MULTICAST,LOCAL,UNSPEC, ANYCAST gibi layer3 adres tiplerini içerebilir. buradaki örnekte UNSPEC yani sınıflandırılmamış gerçek bir manası olmayan kaynak adresi tipini belirttik.
2. –dst-type
bash-3.2# iptables -A INPUT -m addrtype –dst-type UNICAST
bash-3.2#
addrtype match source un tersine paketin hedef adresini belirtir. “src-type” ile kullanımı aynıdır.
AH/ESP Match
–ahspi
bash-3.2# iptables -A INPUT -p 51 -m ah –ahspi 500
bash-3.2#
IPsec bileşeni olan AH Security Parameter Index ( SPI )’i belirtmek için kullanılır. Konumuz ipsec olmadığı için ayrıntılarına girmeyeceğim. “-p” ile protokol mutlaka belirtilmelidir ( 51 = Authentication Header IPSEC-AH ) “–ahspi 500″ yerine 500:520 şeklinde 500 den 520 ye kadar şeklinde tanımlanabilir.
–espspi
bash-3.2# iptables -A INPUT -p 50 -m esp –espspi 500
bash-3.2#
Yine IPsec bileşeni olan ESP counterpart Security Parameter Index (SPI) belirtmek için kullanılır. kullanımı AH ile aynıdır.
Comment Match
Comment match iptables kuralları içerisinde açıklama girebilmemiz için vardır. yazmış olduğunuz rule’ların daha anlaşılır olması amacı ile kullanılır.
–comment
bash-3.2# iptables -A INPUT -m comment –comment “Comment Match için örnek rule”
bash-3.2#
Fazla söze gerek olduğunu sanmıyorum. koymuş olduğumuz rule için açıklama girdik. açıklamalar maksimum 256 karakter olabilirler.
Connmark Match
Connmark match, CONNMARK ile işaretlenmiş, paketleri belirtmeye yarar, daha önce de iproute2 ile veya diğer firewall’lar ile haberleşmek için iptables’in paketleri mark ( işaret )’layabildiğini belirtmiştik.Elbetteki connmark match ile paketleri belirtebilmemiz için daha önceden işaretlenmiş olması zorunludur.
–mark
bash-3.2# iptables -A INPUT -m connmark –mark 12 -j ACCEPT
bash-3.2#
Daha önceden “12″ olarak işaretlenmiş olan paketleri belirterek kabul ettik. mark match’in kullanımının ilginç olduğu nokta çoklu match belirtmek için mark numaralarını binary e çevirip 1/1 şeklinde kulllanarak ( –mark 1/1 ) , ilk bit in “1″ olduğu mark ları komple işaretleyebiliriz. yani 33=10001 1= 00001 3= 00011 gibi ikilik sayı sistemine çevrildiğinde, ilk bit’i “1″ e eşit olan tüm işaretlemiş paketleri seçmiş olduk. ( pek bir anlam veremedim sanırım iptables’i yazanlar fanteziye girmişler biraz, fantezi amaçlıda kullanılabilir veya çoklu mark belirtiminde ufak performans avantajları sağlayabilir.)
State Match
State match, stateful firewalling için daha önceki yazımda belirttiğim ip_conntrack modulü ile birleşerek, statefull paket belirtimini sağlar.
–state
bash-3.2# iptables -A INPUT -m state –state RELATED,ESTABLISHED
bash-3.2#
–state match, hangi durumlardaki ( state ) paketin uygun olduğunu belirtmek için kullanırlır. 4 çeşit state vardır bunlar; RELATED,ESTABLISHED,NEW ve INVALID’dir. state’lerin kullanımı için daha önceki States yazımı okumanızı öneririm.
Conntrack Match
Conntrack Match, –state match’e benzemekle beraber ip_conntrack ile takip edilen paketler üzerinde daha derinlemesine belirtimler yapmamızı sağlar.
Conntrack match’i daha iyi anlamak için orjinal source address ,reply source address ve orjinal veya relpy destination adres kavramlarını biraz açıklamak yerinde olacak. ctorigsrc ve ctreplsrc MASQUERADE veya DNAT ( port yönlendirme ) yapıldığında kullanışlı parametrelerdir.şimdi DNAT ile yapılandırılmış birörneğe bakalım.
local host = 10.0.0.2
NAT router = 1.2.3.4
remote host = 87.65.43.21
<Dışa giden bağlantı>
ctorigsrc = 10.0.0.2
ctorigdst = 87.65.43.21
ctreplsrc = 87.65.43.21
ctrepldst = 1.2.3.4
<Gelen bağlantı>
ctorigsrc = 87.65.43.21
ctorigdst = 1.2.3.4
ctreplsrc = 10.0.0.2
ctrepldst = 87.65.43.21
10.0.0.2 linux router’in lokal ip adresi , 1.2.3.4 internet ip adresi , 87.65.43.21 ise servise ulaşan başka bir internet ip adresi. 10.0.0.2 den dışarı ulaştığımızda ctorigdst == ctreplsrc yani bağlantı dışra giden , ctorigdst != ctreplsrc olduğunda ise bağlantı içeriye gelen bir bağlantı oluyor. Sisteminizde NAT yoksa conntrack içerisinde bunları göremezsiniz.
1. –cstate
bash-3.2# iptables -A INPUT -p tcp -m conntrack –ctstate RELATED
bash-3.2#
–state match ile oldukça benzerlik götserir. conntrack tarafından takip edilen paketlerin state’lerini belirtmemize yarar örneğimizde RELATED durumdaki tcp paketleri belirttik. “–cstate” ile kullanabileceğimiz state’ler
INVALID paketin bilinen bir bağlantı ile alakası yok.
NEW paketin yeni başlatılmış bir bağlantıyı ifade eder.( 3 way handshake tamamlanmamış )
ESTABLISHED iki yönde gerçekleştirilip tamamlanmış bir bağlantıyı ifade eder.
RELATED başka bir bağlantı tarafından oluşturulmuş bağlantı örneğin ftp icmp error
SNAT paket header’da kaynak adresinin değiştirildiğini gösterir.
DNAT paket header’da hedef adresin değiştirildiğini gösterir.
NONE bu satırdan sonra yazacağım state lerin hiç birine uymadığını gösterir.
EXPECTED bir helper tarafından beklenen bağlantı ftp helper vb.
SEEN_REPLY iki taraftan haberleşme meydana gelip bağlantının henüz ESTABLISHED olmadığını gösterir.
ASSURED tamamen gerçekleşmiş bağlantı. ( erken expire olmayacak )
2. –ctorigsrc
bash-3.2# iptables -A INPUT -p tcp -m conntrack –ctorigsrc 192.168.0.0/24
bash-3.2#
conntrack içerisinde takip edilen bağlantılarda source ip adresini belirtmek için kullanılır. buradaki örnekte olduğu gibi CIDR kullanılarak subnet belirtilebilir.
3. –ctorigdst
bash-3.2# iptables -A INPUT -p tcp -m conntrack –ctorigdst 192.168.0.0/24
bash-3.2#
bir önceki –ctorigsrc ile aynı olup farkı destination ip veya subnet belirtilmesidir.
4. –ctreplsrc
bash-3.2# iptables -A INPUT -p tcp -m conntrack –ctreplsrc 192.168.0.0/24
bash-3.2#
Reply ( cevap veren veya beklenen ) kaynak adresini belirtmek için kullanılır. kullanımı –ctorigsrc ile aynıdır.
5. –ctreplsrc
bash-3.2# iptables -A INPUT -p tcp -m conntrack –ctrepldst 192.168.0.0/24
bash-3.2#
Reply destination ( hedef ) adresini belirtmek için kullanılır.
6. –ctstatus
bash-3.2# iptables -A INPUT -p tcp -m conntrack –ctstatus ASSURED
bash-3.2#
conntrack içerisinde bağlantının durumunu belirtmek için kullanılır. Durumlar ASSURED,NONE,EXPECTED,SEEN_REPPLY olabilir.
7. –ctexpire
bash-3.2# iptables -A INPUT -p tcp -m conntrack –ctexpire 100
bash-3.2#
conntrack içerisinde takip edilen paketin expire süresini belirtmek için kullanılır.
8- –ctproto
bash-3.2# iptables -A INPUT -p tcp -m conntrack –ctexpire 100 –ctproto tcp
bash-3.2#
“/etc/protocols” içerisinde belirtilen protokolleri belirtmek için kullanılır, “-p” ile protokol belirtmekten farkı conntrack table içerisinde bulunanları belirtmek için kullanılır “-p” conntrack girdisine bakmaz
9- –ctdir
paketin akış yönünü belirtmek için kullanılır verilebilecek değerler ; ORIGINAL,REPLY’dır.
DSCP Match
DSCP ( RFC 2638 Differentiated Services Code Point ), alanındaki bilgileri belirtmek için kullanılır. konumuz bu olmadığı için DSCP’nin ayrıntısına burada çok girmek istemiyorum.
–dscp
bash-3.2# iptables -A INPUT -p tcp -m dscp –dscp 32
bash-3.2#
Decimal veya hexedecimal olarak DSCP değerini belirtmemize yarar, Hexedecimal olarak belirtmek için değerin başına “0x” koymalıyız.
–dscp-class
bash-3.2# iptables -A INPUT -p tcp -m dscp –dscp-class BE
bash-3.2#
DSCP sınıfını belirtmek için kullanılır. değer olarak tüm DSCP snıfları kullanılabilir ( BE,EF,AFxx,CSx ) bu classlar bir çok farklı RFC de tanımlandığı için tam bir referans veremiyorum.–dscp ve –dscp-class kesinlikle tek kural içerisinde beraber kullanılmamalıdır.
ECN Match
ECN nedir ? sorusuna sanırım biraz daha ayrıntılı bakmanın zamanı geldi, RED ile düşürülecek paketleri işaretlemek için kullanılır diye daha öncekısaca değinmiştik. ECN RFC 2481 ile belirtilmiş DS field içerisinde iki bit ile belirtilir. ECN bitlerin manasına kısaca bakalım
00 ECN değil, ECN yetenekli bir bağlantı olmadığını gösterir
01 ECN1
10 ECN0
11 CE Congestion Expired
ECE Host un ECN yapıp yapamadığını gösteren ECN Echo bit dir.
CWR : Congestion Window Received ECE bit’i işaretlenmiş bir TCP paketi belirtmek için kullanılan tek bit.
nasıl çalıştıklarına kısaca bakacak olursak 00 , peket red için işaretlenmemiş, , “01″ sıkışıklığın meydana geldiği ve bu paketin düşürüleceği, “10″ bu paketin düşürülmeyeceği, “11″ sıkışıklığın sona erdiğini göstermek için kullanılır.
şimdi Match’lerimize geri dönelim.
1- –ecn
bash-3.2# iptables -A INPUT -p tcp -m ecn –ecn-tcp-cwr
bash-3.2#
CWR in 1 olduğunu belirtmek için kullanılır. “!” ile her zamanki gibi kullanılabilir.
2- –ecn-tcp-ece
bash-3.2# iptables -A INPUT -p tcp -m ecn –ecn-tcp-ece
bash-3.2#
ECE nin “1″ olarak işaretlendiğini belirtmek için kullanılır.
2- –ecn-ip-ect
bash-3.2# iptables -A INPUT -p tcp -m ecn –ecn-ip-ect 1
bash-3.2#
ECN bit lerini desimal olarak belirtmeye yara ( 00=0 , 01=1,10=2,11=3 )
Limit Match
1- –limit
bash-3.2# iptables -A INPUT -m limit –limit 3/hour
bash-3.2#
belirtilen zaman aralığında limit koymak için kullanılır. burada saatte 3 limit koyduk zaman hour=saat,minute=dakika,second=saniye,day=gün olarak belirtilebilir. belirtilen limit iptables kural içeriğine göre farklı amaçlarla kullanılabilir örneğin: log limiti, bağlantı limiti vb.bu koyulan limit ortalama limittir.
2- –limit-burst
bash-3.2# iptables -A INPUT -m limit –limit 3/min –limit-burst 6
bash-3.2#
Limit Burst anlaşılması ilk başta biraz karışık gibi görünsede gayet basit. –limit ile dakikada 3 limit belirtiyoruz. sonra Burst yani istek aşımı belirtip dakikadaki limit isteği 3 den fazla gelirse 6 ya kadar izin ver diyoruz, peki limit ile limit-burst arasındaki fark nedir? ortalamamız dakikada 3, anlık 6 olabilir. yani bir dakika içinde 6 bağlantıya kadar kabul edip 7 inci bağlantı bu match e uymayacaktır. 7 inci bağlantının gelebilmesi için 1 dakikanın geçip ortalama bağlantının 3 olduğu garanti edilmelidir. dakikada 3 bağlantı limiti koyduğumuz için 1 dakika = 60 saniye her 20 saniyede bir yeni bir limit boşalacaktır. Böylece ani sıkışmalarda daha sonraki zaman aralıklarından ödünç alma yoluyla bize bir tampon limit oluşturma imkanı sağlar.
Hashlimit Match
Hashlimit match’e kısaca Limit match in daha gelişmişi diyebiliriz. ipt_hashlimit modulünü kullanır, ip_conntrack’a göre çok daha az da olsa sisteminizden ram ve cpu kaynaklarını tükettiğini göz önünde bulundurmalısınız.
1- –hashlimit
bash-3.2# iptables -A INPUT -p tcp –dst 192.168.0.3 -m hashlimit –hashlimit 1000/sec –hashlimit-mode dstip,dstport –hashlimit-name hosts
bash-3.2#
Kısaca Hostun saniyede 1000 paket alabileceğini belirttik. –limit gibi –hashlimit ‘de hour=saat,minute=dakika,second=saniye,day=gün olarak belirtilebilir. –hashlimit in tüm hashlimit match’ler ile kullanılması zaruridir.
2- –hashlimit-mode
Yukarıdaki örnekte kullandığımız için yeniden örnek kullanmıyorum. –hasjlimit-mode hangi değerlerin hashlimit için geçerli olacağını belirtmek için kullanılır. kullanılabilecek değerler, dstip ( Destinaion ip address ), srcipi ( source ip adress ), srcport ( source port address ) ve dstport ( destination port adres ) ‘dir örnekte olduğu gibi “,” ile ayılarak birden fazla mode beraber kullanılabilir. dikkatinizi çekmek istediğim nokta dstport değerinin verilmediğidir. bu durumda her port için bu kural ayrı ayrı belirlenmiş olur mesela burada ip adresi belirtmemiş olsaydık her bir ip adresinin 1000 paket/saniye limiti ayrı ayrı olacaktı. –hashlimit-mode’un tüm hashlimit match’ler ile kullanılması zaruridir.
3- –hashlimit-name
Yine önceki örneğimizde yer aldığı için yeniden örnek vermiyorum. Koymuş olduğunuz hash-limit e isim vermeye yarar, bu isimdeki bağlantıları “cat /proc/net/ipt_hashlimit/hosts” komutu ile görebilirsiniz. ssh,kaka_adamlar gibi ayrı hash-limit ler oluşturabilirsiniz. bu opsiyonun –hash-limit ile kullanılması zorunludur.
4. –hashlimit-burst
bash-3.2# iptables -A INPUT -p tcp –dst 192.168.0.3 -m hashlimit –hashlimit 1000 –hashlimit-mode dstip,dstport –hashlimit-name hosts –hashlimit-burst 2000
bash-3.2#
Kullanım şekli ve amacı –limit-burst ile aynıdır.
5- –hashlimit-htable-size
bash-3.2# iptables -A INPUT -p tcp –dst 192.168.0.3 -m hashlimit –hashlimit 1000 –hashlimit-mode dstip,dstport –hashlimit-name hosts –hashlimit-htable-size 500
bash-3.2#
Makimum kullanılabilecek bucket sayısı, yukarıdaki örneği yorumlayacak olursak en fazla 500 port bağlantısı açılabilir.
6- –hashlimit-htable-max
bash-3.2# iptables -A INPUT -p tcp –dst 192.168.0.3 -m hashlimit –hashlimit 1000 –hashlimit-mode dstip,dstport –hashlimit-name hosts –hashlimit-htable-max 500
bash-3.2#
hashlimit-htable-size ile maksimum açılabilecek port sayısını belirtmiştik. bunun yanında örneğin buradaki name=hosts olduğundan “cat /proc/net/ipt_hashlimit/hosts” dediğimizde dosya içerisinde sadece açık portları değil, aynı zamanda inactive ( aktif olamayan ) bağlantıların bilgilerininde tutulduğunu görürüz ( expire olana kadar tutulur ip_conntrack gibi ) , –hashlimit-table-max bu dosya içerisideki maksimum girdi adedini belirlememize yarar.
7- –hashlimit-htable-gcinterval
bash-3.2# iptables -A INPUT -p tcp –dst 192.168.0.3 -m hashlimit –hashlimit 1000 –hashlimit-mode dstip,dstport –hashlimit-name hosts –hashlimit-htable-gcinterval 1000
bash-3.2#
Garbage interval, Gereksiz süprüntüleri temizleme aralığı gibi çevirilebilir sanırım. değeri milisaniyedir. yaptığı işlem “/proc/net/ipt_hashlimit/” içerisindeki dosyalarda bulunan gereksiz girdilerin ( örneğin inactive ) ne kadar sürede bir temizlenmesi gereken girdilerin ne kadar aralıkla temizlenmesi gerektiğini belirtir. dikkat edilecek nokta, çok düşük bir değer verildiğinde cpu ve ram kullanımına yol açağı, çok yüksek bir değer verildiğinde ise hashlimit table’in dolmasına sebebiyet vereceğidir.
8- –hashlimit-htable-expire
bash-3.2# iptables -A INPUT -p tcp –dst 192.168.0.3 -m hashlimit –hashlimit 1000 –hashlimit-mode dstip,dstport –hashlimit-name hosts –hashlimit-htable-expire 1000
bash-3.2#
Hashlimit table içerisinde bulunan girdinin ne kadar süre ile kullanılmadığında sona ereceğini ve gcinterval tarafından silinmek için bekleyeceğini belirtmek için kullanılır. değeri milisaniye olarak girilir örneğin burada 1000ms = 1sn olarak girilmiştir. genel olarak gcinterval den daha büyük bir değer girilmesi beklenir.
9- –hashlimit-upto
–hashlimit ile kullanım şekli aynı olup girilen değerden yüksek bağlantıları belirtmek için kullanılır.
10- -hashlimit-above
–hashlimit-upto’nun tersine girilen değerden daha düşük bağlantı adedini belirtmek için kullanılır.
11- –hashlimit-srcmask
Kaynak adreslerini gruplamak için kullanılır. Bir bağlantı sağlandığında kaynak adresi belirtilen CIDR değerine ( 0-32 ) göre gruplanır. –hashlimit-srcmask 24 değeri verildiğinde bağlanan ip adresinin 255.255.255.0 subnetmask inde bulunan tüm ip”ler limite dahil olur. Belirtilmediği durumda 0 kabul edilir.
12- –hashlimit-dstmask
–hashlimit-srcmask ile kullanımı aynı olup hedef ip adreslerini gruplar.
MAC Match
–mac-source
bash-3.2# iptables -A INPUT -m mac –mac-source 00:00:00:00:00:01
bash-3.2#
Gelen paketin kaynak MAC adresini belirtmek için kullanılır. sadece PREROUTING,INPUT ve FORWARD chainleri ile birlikte kullanılabilir. ( Route edilmiş bir paketin Source mac adresi değişmiş olacağı için normal olarak diğer chainler ile kullanılamaz. )
Helper Match
–helper
bash-3.2# iptables -A INPUT -p tcp -m helper –helper ftp-21
bash-3.2#
ip_conntrack helper’ları belirtmek için kullanılır irc,ftp vb.
IP Range Match
IP Rannge Match, –source,–destination matchler deki gibi tek bir kaybak yada hedef yerine çoklu kaynak ve hedef belirtimini sağlar.
1- –src-range
bash-3.2# iptables -A INPUT -p tcp -m iprange –src-range 192.168.1.13-192.168.2.19
bash-3.2#
IP kaynak adreslerini belirtmek için kullanılır bu örnekde 19.168.1.13 adresinden 19.168.2.19 a kadar olan tüm IP adreslerini belirttik.
2- –dst-range
bash-3.2# iptables -A INPUT -p tcp -m iprange –dst-range 192.168.1.13-192.168.2.19
bash-3.2#
IP Hedef adreslerini belirtmek için kullanılır. Yukardaki örnek ile aynı olup kaynak adresler yerine hedef adresleri belirtilmiştir.
Multiport Match
Bir çok port veya port alanlarını belirtmek için kullanılırlar.
1- –source-port
bash-3.2# iptables -A INPUT -p tcp -m multiport –source-port 22,53,80,110,70:80
bash-3.2#
Bir çok kaynak portunu belirtmek için kullanılır. farklı portlar “,” ile ayrılıp en fazla “,” ile ayrılmış 15 girdi girilebilir. belirli bir port aralığını belirtmek için “70:80″ örneğinde 70 den 80 e kadarolan port adresleri belirtildiği gibi “:” şeklinde belirtilir.
2 –destination-port
bash-3.2# iptables -A INPUT -p tcp -m multiport –destination-port 22,53,80,110,200:210
bash-3.2#
Birçek hedef port’u belirtmek için kullanılır. kullanımım şekli –source-port ile aynıdır.
3- –port
bash-3.2# iptables -A INPUT -p tcp -m multiport –port 22,53,80,110
bash-3.2#
Hedef ve Kaynak portunu aynı anda belirtmek için kullanılır. kullanım şekli ve limiti –source-port ile aynıdır. bu match in uyması için kaynak ve hedef port aynı olmak zorundadır.
Length Match
–length
bash-3.2# iptables -A INPUT -p tcp -m length –length 1400:1500
bash-3.2#
Paketin kaç byte büyüklüğünde olduğunu belirtmek amacı ile kullanılır. değeri byte’dır. burada 1400-1500 byte arası büyüklükteki paketler belirtilmiştir.
Mark Match
bash-3.2# iptables -t mangle -A INPUT -m mark –mark 1
bash-3.2#
Daha önceden iptables tarafından Mark’lanmış ( işaretlenmiş ) paketleri belirtmek için kullanılır. iptables 32 bit sistemlerde “4294967296″ adet mark yapabilir.
Owner Match
Çalışıan bir proses’in ( proğram ) sahibini belirtmek için kullanılır. yaratılan bir process dışarıya bağlanmak istediğinde iptables ile kural tanımlamamıza olanak sağlar. Dışarıdan gelen paketlerin kullanıcı bilgisini alma ihtmalimiz olmadığı için sadece OUTPUT ve POSTROUTING chain ile kullanılabilir.
1- –uid-owner
bash-3.2# iptables -A OUTPUT -m owner –uid-owner 500
bash-3.2#
User ID ( kullanıcı ) belirtmek için kullanılır. kullanıcı id olarak numerik veya direk isim verilebilir örn : root,alper,hhtpd vs.. numerik verildiğinde 500-600 gibi belirli bir uid aralığı tanımlanabilir.
2- –gid-owner
bash-3.2# iptables -A OUTPUT -m owner –gid-owner 0
bash-3.2#
Grup ID belirtmek için kullanılır. yine numerik yerine isim kullanılabilir.
Packet Type Match
–pkg-type
bash-3.2# iptables -A OUTPUT -m pkttype –pkt-type unicast
bash-3.2#
Paket tipinin unicast,multicast veya broadcast olduğunu belirtmek için kullanılır.
Realm Match
–realm
bash-3.2# iptables -A OUTPUT -m realm –realm 4
bash-3.2#
Routing realm belirtmek için kullanılır direk isim veya buradaki gibi numerik kullanılabilir. ( /etc/iproute2/rt_realms )
Tcpmss Match
–mss
bash-3.2# iptables -A INPUT -p tcp –tcp-flags SYN,ACK,RST SYN -m tcpmss –mss 2000:2500
bash-3.2#
Maksimum Segment Size nedir ? sorusuna kısaca değinelim. TCP paketlerinde 20 byte ipv4 de 40 byte ipv6 da yer tutar source ve destination *2 ekleyerek MTU ( Maksimum Transmission Unit ) =1492 olduğunda 1492-40 = 1450 MSS değerimiz elde edilir. (mtu 1492 adsl içindir ). bu değerden daha büyük tcp paketleri fragmante olarak ( parçalanarak ) iletilirler. bir TCP bağlantının MSS inin nekadar olduğunu belirtmek için kullanılır.
TOS Match
–tos
bash-3.2# iptables -A INPUT -p tcp -m tos –tos 0×16
bash-3.2#
Tos field nedemek ? daha önce TC ile fifo yazımda belirtmiştim. bu match TOS field daki değerleri belirtmek için kullanılır. numerik yerine isim de kullanılabilir bunlar :
iptables -m tos -h komutu ile görebileceğimiz üzere ;
[!] –tos symbol Match TOS field (IPv4 only) by symbol
Accepted symbolic names for value are:
(0×10) 16 Minimize-Delay
(0×08) 8 Maximize-Throughput
(0×04) 4 Maximize-Reliability
(0×02) 2 Minimize-Cost
(0×00) 0 Normal-Service
Şeklinde dir.
TTL Match
1- –ttl-eq
bash-3.2# iptables -A OUTPUT -m ttl –ttl-eq 60
bash-3.2#
TTL değerinin tam olarak kaç olduğunu belirtmek için kullanılır. veya “!” ile kaç olmayacağını
2- –ttl-gt
bash-3.2# iptables -A OUTPUT -m ttl –ttl-gt 60
bash-3.2#
Belirtilen değerden daha yüksek TTL değerlerini belirtmek için kullanılır. buradaki örnekte 60 dan büyük ttl değerleri belirtilmiş.
3- –ttl-lt
bash-3.2# iptables -A OUTPUT -m ttl –ttl-lt 60
bash-3.2#
Belirtilen değerden daha düşük TTL değerlerini belirtmek için kullanılır.
Recent Match
Recent Match, Paketlerin ne kadar süre önce kullanıldığı ve kaç defa kullanıldığı gibi bilgileri bellirtmemize yarayan Match’dir. örneğin : dakikada 3 den fazla ssh bağlantısı yapılmaya çalışıldığını belirtmek gibi.
Recent Match, çoğu kişi tarafından tam anlaşılmayan, bazı durumlarda çok önemli bazı durumlarda ise sisteme ciddi bir yük ve yavaşlık getiren bir match olmasıdır. Recent match “ipt_recent” modulünü kullanır. “/proc/net/ipt_recent” içerisinde dosyalar oluşturup bilgileri buraya yazarak takip eder. örnek bir çıktı ;
src=10.70.20.1 ttl: 64 last_seen: 83912663 oldest_pkt: 3 83879026, 83895619, 83912663
src : isteği yapan kaynak adresi
ttl : gelen paketin TTL değeri
last_seen = paket en son görüldüğü zaman
oldest_pkt :
83879026 = en eski paketin zamanı ve bundan sonra paketlerin sırasıyla görüldüğü zamanlar.
buradaki zaman = uptime saniye / jiffie dir.
/proc/net/ipt_recent içerisindeki listelerin yönetimi :
‘echo xx.xx.xx.xx > /proc/net/ipt_recent/DEFAULT‘ DEFAULT listesine xx ile belirtilen adresi ekler.
‘echo -xx.xx.xx.xx > /proc/net/ipt_recent/DEFAULT‘ xx ile belirtilen adresi DEFAULT listesinden çıkarır
‘echo clear > /proc/net/ipt_recent/DEFAULT‘ DEFAULT isimli listeyi temizler.
Modulün kabul ettiği parametreler :
ip_list_tot=100 ; Tabloda kaç adet adresin hatırlanacağı.
ip_pkt_list_tot=20 ; Her adres için kaç paketin hatırlanacağı geçerli olan 20 dir.
ip_list_hash_size=0 ; Hash tablo büyüklüğü “0″ ip_list_tot a göre otamatik hesaplanması içindir buradaki değeri 512 ye eşittir.
ip_list_perms=0644 ; /proc/net/ipt_recent/* içerisindeki dosyaların izinlerinin ne olduğunu belirtmek için.
debug=0 ;
1- –name
/proc/net/ipt_recent/ içerisinde hangi dosyaya yazılacağını belrtmek için kullanılır. Herhangi bir isim verilmezse DEFAULT dosyasına yazılır.
2- –set
bash-3.2# iptables -A INPUT -m recent –set –name SSH
bash-3.2# ls /proc/net/ipt_recent/
SSH examplelist
bash-3.2#
Bu parametre paketin source adresini listeye ekler. Eğer hali hazırda listede kaynak adresi varsa günceller.
3- –rcheck
bash-3.2# iptables -A OUTPUT -m recent –name examplelist –rcheck
bash-3.2#
rcheck kaynak adresinin hali hazırda listede olup olmadığını kontrol eder.
4- –update
bash-3.2# iptables -A OUTPUT -m recent –name examplelist –update
bash-3.2#
–set ile aynı işi yapmakla beraber hali hazırda listede kaynak adresi yoksa eklemez.
5- –remove
bash-3.2# iptables -A INPUT -m recent –name example –remove
bash-3.2#
kaynak adresinin listede olup olmadığını kontrol eder. hali hazırda listede varsa listeden siler.
6- –seconds
bash-3.2# iptables -A INPUT -m recent –name example –rcheck –seconds 60
bash-3.2#
sadece –rcehck ve –update ile beraber kullanılır. belirtilen saniyeler içerisinde kaynak adresinin kullanılıp kullanılmadığını kontrol eder. örneğin “–seconds 60″ 60 saniye içerisinde kullanılıp kullanılmadığını kontrol etmek amacı ile kullanılır.
7- –hitcount
bash-3.2# iptables -A INPUT -m recent –name example –rcheck –hitcount 20
bash-3.2#
Kısaca kaynak adresinin kaç kere kullanıldığını kontrol etmek için kullanılır.
8- –rttl
bash-3.2# iptables -A INPUT -m recent –name example –rcheck –rttl
bash-3.2#
–rttl kaynak adresinin listede olup olmadığını ve, eğer listede ise yeni paketin ve eski paketin TTL değerlerinin uyup uymadığını kontrol eder.
9- –rsource
bash-3.2# iptables -A INPUT -m recent –set –name example –rsource
bash-3.2#
Kaynak adresinin listeye yazılması için kullanılır. Default’tur yani belirtilmediğinde iptables –rsource var kabul eder.
10- –rdest
bash-3.2# iptables -A INPUT -m recent –set –name example –rdest
bash-3.2#
Destination ( hedef ) adres ve portu listeye yazmak için kullanılır.
Recent match’in diğer Match lerden daha farklı bir yaklaşımı olduğu için tam anlaşılmadığının farkındayım, iptables yazımın sonunda verecek olduğum örneklerle çok daha iyi anlaşılacaktır.
Connbytes Match
Connbytes bir paketin ( bağlantının ) veya birden fazla bağlantının oluşturduğu veri akışının byte olarak ölçülerek büyüklüğünü belirtmek için kullanılır. mesela 300 mbyte dan fazla paket transferi yapan bir bağlantının download olduğunu analiz etmek gibi. çok dikkat edilmesi gereken nokta; Connbytes sayaçları 64 bit dir. maksimum değeri 0xffff0000 byte yani 3.99 gbyte dir. yani daha yüksek değerler için connbytes kullanılamaz !
bash-3.2# iptables -A INPUT -m connbytes –connbytes 10000:100000 –connbytes-dir both –connbytes-mode bytes
bash-3.2#
1- –connbytes from[:to]
Yukardaki örnekde’de görüldüğü gibi belirtilen değere göre paket veya byte olarak büyüklüğü ifade eder bu örnekde 10000 byte ile 10000 byte arası verilmiş “10000:”
10000 ve daha büyük, “:10000″ 10000 ve daha küçük şeklinde kullanılabilir. “! 10000:” şeklinde 10000 ve daha büyük olmayan şekilde belirtilebilir.
2- –connbytes-dir {original|reply|both}
Hangi paketin göz önüne alınacağını belirtmek için kullanılır. ( hangi yön )
3- –connbytes-mode {packets|bytes|avgpkt}
bytes : değerlerin byte olarak gösterildiğini, packets: değerlerin paket olarak gösterildiğini, avgpkt; bir paketin ortalama kaç byte olacağını belirtmek için kullanılır.
Connlimit Match
Connlimit Match –limit match le benzerlik gösterir. paralel bağlantıları belirtmemize yarar. örneğin http server imize bir ip adresinden veya network bloğundan kaç adet http bağlantısının aynı anda yapılabileceğini belirtmek gibi.
–conlimit-above
bash-3.2# iptables -A INPUT -p tcp –syn –dport 23 -m connlimit –connlimit-above 2 -j REJECT
bash-3.2#
Belirtilen değerden daha yüksek bağlantının aynı anda olduğunu belirtmek için kullanılır. Yukarıdaki örneğimizde aynı anda 2 den fazla telnet bağlantısının bir ip adresinden yapılmasını engelledik.
–connlimit-mask
bash-3.2# iptables -A INPUT -p tcp –syn –dport 23 -m connlimit –connlimit-above 2 –connlimit-mask 24 -j REJECT
bash-3.2#
CIDR mask belirtmek için kullanılır. yukarıdaki örnekde herhangi bir 24 bit network’den telnet bağlantısını 2 ile sınırlandırdık. ( 192.168.0.1 ip adresinden 1 bağlantı kurulursa 192.168.0.1 netmask 255.255.255.0 network ü için komple limitimiz 2 olur. )
DCCP Match
DCCP RFC 4340 ile belirtilmiş, Datagram Congestion Control Protocol ( Mesaj tabanlı ulaşım katmanı protokü) dür. Konumuzun dışında kaldığı için şimdilik ayrıntısına girmeyeceğim.
–dccp-types
DCCP paket tiplerini belirtmek için kullanılır. farklı tipler “,” ile ayrılarak belirtilebilir. Kullanılabilecek DCCP MAsk’leri ; EQUEST RESPONSE DATA ACK DATAACK CLOSEREQ CLOSE RESET SYNC SYNCACK INVALID
PHSYDEV Match
–phsydev linux bridge için geçerli olan bir match’dir. Sadece Bridge le beraber kullanılır ve Transparent bridging firewall’i enable eder.Sadece Bridged network’ün geçerli olduğu durumlarda kullanılır.
1- –physdev-in
bash-3.2# iptables -A FORWARD -p tcp –dport 22 -m physdev –physdev-in eth1 –physdev-out eth0 -j ACCEPT
bash-3.2#
Hangi bridge interface i üzerinden paketin alındığını belirtmek için kullanılır. Sadece INPUT,FORWARD,PREROUTING chain’ler ile beraber kullanılabilir. interface isminin sonuna “+” eklendiğinde örneğin “eth+” dendiğinde eth* şeklinde ismi eth ile başlayan tüm interface’leri ifade eder.
2- phsydev-out
–physdev-in in aksine giden interface’i ifade eder. Kullanımı aynıdır, Sadece FORWARD,OUTPUT,POSTROUTING chainler ile beraber kullanılabilir.
3- –physdev-is-in
Paketin herhangi bir Bridge interface tarafından alınıp alınmadığını belirtmek için kullanılır ( interface ismi değil )
4- –phsy-is-out
Paketin herhangi bir bridge interface üzerinden gidip gitmeyeceğini belirtmek içn kullanılır.
5- –physdev-is-bridged
bash-3.2# iptables -A FORWARD -p tcp -m physdev –physdev-is-bridged -j ACCEPT
bash-3.2#
Paketin Bridge yapılıp yapılmadığını belirtmek için kullanılır. belirtilen paket bridge yapılmıştır route edilmemiştir. Sadece FORWARD ve POSTROUTING chainler ile kullanılabilir. örnekte bridge yapılmış tcp paketlerini belirttik.
Policy Match
Bu match Ipsec tarafından kullanılan policy’leri belirtmek için kullanılır. Konumuz ipsec olmadığı için fazla ayrıntılarına girmeyeceğim. ipsec konusuna yabancı olmayan arkadaşların kolayca anlayabileceğini düşünüyorum.
1- –dir {in|out}
Yazılan policy match’in decapsulate yada encapsulate edileceğini belirtmek için kullanılır. in ( decapsulation ) PREROUTING,INPUT ve FORWARD chain’de kullanılabilir. out ( Encapsulation ) POSTROUTING,OUTPUT ve FORWARD chain’de kullanılabilir.
2- –pol {none|ipsec}
Paketin ipsec ile işlenip işlenmeyeceğini belirtir.
3- –strict
girilen policy nin tam Match sağlayıp sağlamadığını kontrol etmek içn kullanılır.
3- –reqid id
reqid belirtmek için kullanılır ( setkey ile ipsec için belirtilmişse )
4- –spi spi
SA nin SPI değerini belirtmek için kullanılır.
5- –proto {ah|esp|ipcomp}
Paketin hangi protokolle Encapsule edildiğini belirtmek için kullanılır.
6- –mode {tunnel|transport}
Encapsulation modu
7- –tunnel-src addr[/mask]
Tunnel mode SA için end point ( tunelin nerede sonlanacağı source tarafı) sadece –mode tunnel ile beraber kullanılabilir.
8- –tunnel-dst addr[/mask]
Tunnel mode SA için end point hedefini belirtir. ( tunelin nerede sonlanacağı destination tarafı) sadece –mode tunnel ile beraber kullanılabilir.
9- -next
bir sonraki policy elementini tayin etmek için kullanılır sadece –strict ile beraber kullanılabilir.
örnek :
iptables -A FORWARD -m policy –dir out –pol ipsec –mode tunnel –tunnel-src 10.1.2.0/24 –tunnel-dst 10.1.1.0/24 -j DROP
iptables -A FORWARD -m policy –dir in –pol ipsec –mode tunnel –tunnel-dst 10.1.2.0/24 –tunnel-src 10.1.1.0/24 -j DROP
iptables -A FORWARD -m policy –dir in –pol ipsec –mode tunnel –tunnel-src 10.1.2.0/24 –tunnel-dst 10.1.1.0/24 -j DROP
iptables -A FORWARD -m policy –dir out –pol ipsec –mode tunnel –tunnel-dst 10.1.2.0/24 –tunnel-src 10.1.1.0/24 -j DROP
Elimde ipsec yapısı bulunmadığı ( ve bu yazı hali hazırda çok uzun sürdüğü ) için örnekleri direk olarak uygulayamadım. Örnekler komut diziminde yardımcı olacaktır.
Quota Match
iptables ile transfer kotaları tanımlamamıza yarar, iptables’in çalıştığı makina devamlı açık olmalı ve firewall kuralları resetlenmemelidir aksi takdirde kota sayaçları sıfırlanır.
–quota
bash-3.2# iptables -A INPUT -p tcp -m quota –quota 2147483648 -j ACCEPT
bash-3.2#
byte olarak kota belirlememizi sağlar. örneğimizde 2GB tcp bağlantılar için kota tanımladık. kota durumları iptables -v -L ile görüntülenebilir.
bash-3.2# iptables -v -L INPUT
Chain INPUT (policy ACCEPT 5432 packets, 3037K bytes)
pkts bytes target prot opt in out source destination
313 129K ACCEPT tcp – any any anywhere anywhere quota: 2147483648 bytes
bash-3.2#
129 Kbytes alışveriş yapıldığı görülüyor.
Statistic Match
Statistic match ( istatistik ), daha önceki iptables sürümlerinde NTH ve random match lerin birleşimidir. ikisini ayrı ayrı “–mode” opsiyonu ile birlikte kullanabilirsiniz. NTH ve Random eski kullanımları için patch-o-matic ile yüklenmelidirler. Statistic match randomize işlemleri gerçekleştirmek için kullanılır. genellikle loadbalance gibi amaçlarla kullanım alanı bulur.
1- –mode
İlgili rule için mod’u temsil eder “nth” veya “random”
2- –probability
1 pakete kuralın rasgele denk gelme ihtimali ( sadece random mode ile çalışır ). değeri 0 ila 1 arasındadır. 1 %100 ihtimaline denk gelir 0.5 = %50
3- –every
Sadece nth modla çalışır. her nth paketten her birini ifade eder örneğin –every 3 her 3 paketten manasına gelir.
4- –packet
Başlangıç sayaç değeri ( 0 < değer < (every değeri -1) olarak belirtilmiş iptables man’inda. every ile belirtilen değerden kaç’ı ? şeklinde yorumlanabilir örneğin “–every 3 –packet 1″ her 3 paketten 1 ini.
örnekler :
Statistic match en çok load balancing için kullanılıyor.
Örnek 1 :
iproute2 ile load balance yapılmış 2 isp ( ipadresleri 10.0.0.1 ve 192.168.0.1 oalrak kabul edilmiştir. ) örneğin adsl bağlantıları arasında load balance. bu yapıda gelen paketlerden 0,2,4,6… gibi sayaç saymaya başladığında paketlerin çift olanları ilk isp’ye tek olanlarıda ikinci isp ye gidecektir.
bash-3.2# iptables -t nat -A POSTROUTING -m statistic –mode nth –every 2 –packet 0 -j SNAT –to-source 10.0.0.1
bash-3.2# iptables -t nat -A POSTROUTING -m statistic –mode nth –every 2 –packet 1 -j SNAT –to-source 192.168.0.1
bash-3.2#
Örnek 2 :
Yukarıdaki örneğin random mode ile uygulaması
bash-3.2# iptables -t nat -A POSTROUTING -m statistic –mode random –probability 0.5 -j SNAT –to-source 10.0.0.1
bash-3.2# iptables -t nat -A POSTROUTING -m statistic –mode random –probability 0.5 -j SNAT –to-source 192.168.0.1
bash-3.2#
Örnek 3 :
Herbir 2 icmp paketinden 1 inin düşürülmesi ( every 2 packet 1 DROP )
bash-3.2# iptables -A INPUT -p icmp -m statistic –mode nth –every 2 –packet 1 -j DROP
bash-3.2#
Sonuç :
— 10.70.20.3 ping statistics —
22 packets transmitted, 10 packets received, 54.5% packet loss
round-trip min/avg/max/stddev = 0.854/1.377/2.559/0.513 ms
[root@gariban /home/alper]#
String Match
Paket string’leri belirtmeye yarar. örneğin command.exe, veya hotmail.com yahut irc de nickinizin geçtiği paketi düşürmek gibi işemlerde kullanılabilir. Gerçekten kullanımında çok dikkat edilmesi gereken match. öncelikle CPU kullanımı çok yüksektir. gerçek bir IDS in yerini asla tutmaz IDS önleme sistemleri kolayca geçebilir. dolayısıyla kesin bir güvenilirliği yoktur . “exe” nin yasaklanmasının “msexell” in erişimini de yasaklayacağı için içerisinde msexcell kelimesinin geçtiği bir site açılmayacaktır ( http için kullanıldığında ), ne yaptığınızı bilmiyorsanız veya kesinlikle ihtiyacınız yoksa asla kullanmayın !
1- –algo
Paket math stratejisini seçmek için kullanılır . (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)
2- –from ofset
Paketin neresinden itibaren bakılacağını belirtir. ( default 0 )
3- –to ofset
paketin neresinde aramanın sonlanacağını belirtir ( default paket büyüklüğü )
4- –string pattern
Match edecek kelimeyi belirtir. örneğin “–string google” içerisinde google geçen paketlerin belirtiminde kullanılır.
4- –hex-string pattern
Stringle aynıdır değeri hex olarak girmek için kullanılır.
örnekler :
bash-3.2# iptables -A INPUT -p tcp -m string –string “google” –algo kmp -j DROP
bash-3.2#
Herhangi bir tcp paketinde google kelimesini arar. ve droplar. örneğin irc de google kelimesinin kullanılması veya http de.
bash-3.2# iptables -A INPUT -p tcp -m string –string “google” –algo kmp -m string –string “yahoo” –algo kmp -j DROP
bash-3.2#
aynı anda hem yahoo ve google kelimesinin geçtiği paketleri işaret eder.
Time Match
Time Match, zamana bağlı veya belirlenen zaman aralığında iptables kurallarını çalıştırmak için kullanılan match dir.
1- –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
2- –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
datestart başlangıç ve datestop bitiş olmak üzere kuralın hangi tarihlerde çalışacağını belirtmek için kullanılır. time formatı ISO 8601 “T” formatında olmalıdır. örneğin : 2009-05-21T00:00:00 , 2009 yılı, Mayıs ayı, Ayın 21′i , saat 00:00:00′i işaret eder. herhangi bir datestart değeri verilmezse default “1970-01-01T00:00:00″ kabul edilir. datestop değeri verilmezse “2038-01-19T04:17:07″ default değeri kabul edilir.
3- –timestart hh:mm[:ss]
4- –timestop hh:mm[:ss]
timestart başlangıç, timestop bitiş saatini belirtir. saat aralıkları 00:00:00 ile 23:59:59 arasında verilmelidir. saniyeler gerektiğinde “18:00″ gibi göz ardı edilebilir.
5- –monthdays day[,day...]
Ayın hangi gününde kuralın çalışıcağını belirtmek için kullanılır. Ayın 1 inde 7 sinde şeklinde belirtmek için “–monthdays 1,7″ şeklinde kullanılır. 31 gibi tarihler girildiğinde ayın o gününü içermeyen aylarda ( örneğin şubat ) kural Match etmez herhangi bir hata alınmaz.
6- –weekdays
Haftanın hangi günlerinde Match edeceğini belirtmek için kullanılır. İngilizce günlerin kısaltılması şeklindedir. Mon, Tue, Wed, Thu, Fri, Sat, Sun, veya ilk iki harfleri, istenirse haftanın günü rakam olarak da kullanılabilir. pazartesi =1 pazar =7 “–weekdays 1,7″ şeklinde.
7- –utc
Kuralların UTC’ye göre çalışması için.
8- –localtz
Kuralların lokal saate göre çalışması için kullanılır ( lokal zaman defaulttur. )
örnekler :
bash-3.2# iptables -A OUTPUT -o eth0 -m time –weekdays Sa,Su -j DROP
bash-3.2#
eth0 interface’i üzerinden Saturday ve Sıunday ( Cumartesi ve Pazar ) giden paketleri engelledik.
bash-3.2# iptables -A OUTPUT -o eth0 -m time –weekdays Fr –monthdays 22,23,24,25,26,27,28 -j DROP
bash-3.2#
Aynı kural ayın son haftası cuma günleri için belirledik.
Rateest
Rateest match tek başına anlaşılması güç olduğu için rateest target ile beraber ayrı bir yazımda anlatacağım.
u32 Match
u32 match, tcp header ve payload gibi bir çok değeri belirtebildğimiz bir match dir. u32 match’i daha iyi anlaşılabilmesi için ayrı bir yazımda yazmayı tercih ediyorum.