30/12/2021

IPTables

Linux kernelinde IP paketlerinin filtrelenmesi amacıyla tablolar oluşturulması, ayarlanması ve incelenmesini sağlar.

Netfilter projesi ile oluşturulmuş linux kernelinde bulunan firewall ile konşmayı sağlayan CLI aracıdır.

Trafiği Network katmanından Uygulama katmanına kadar aralıkta filtrelemeye yarar.

Datalink layerinda olan ARP gibi protocoller filtrelenmeyecektir.

IPTables ismindeki “tables” kelimesinden anlaşılacağı gibi çeşitli tabloları işletmektedir.

  1. Filter : Varsayılan default tablo. Standard bir firewall un actionlarını tutar.
  2. NAT : Network address translation yani Port forwarding
  3. mangle : paket değiştirmek için kullanılır.
  4. raw : bazı paketleri bağlantı takibinden hariç tutmak için kullanılır.
  5. security : zorunlu erişim kontrolü için kullanılır.

en çok filter ve nat kullanılır.

https://4.bp.blogspot.com/-USZGvtcdshs/U84o3LI_JlI/AAAAAAAAD7A/txcdT53ApZ0/s1600/nfk-traversal.png

Yukarıda ki şekilden de görüldüğü üzere bir paket sisteme eriştikten sonra sırayla belirli aşamalardan geçiyor. bu sıralı aşamalara zincir deniyor.

Biraz daha basit hali.

Kurallar

Kurallar paketleri filtreleme işini yaparlar. Bunu yaparken bir veya daha fazla şartın eşleşmesi ve bir hedefe gönderilmesi işini yapar. Hedef paket şartları sağlarsa hangi actionın yapılacağıdır.

Eşleşme / match

EşleşmeTanım
–source (-s)kaynak IP veya Kaynak Network
–destination (-d)hedef IP veya hedef network
–protocol (-p)eşleşilecek protokol hemen hepsi, tcp, udp, icmp…
–in-interface (-i)Input arayüzü (Ör: eth0)
–out-interface (-o)Output arayüzü
–dportHedef port
–sportKaynak port
–stateExtension. bağlantı durumu eşleşmesi: INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED.
–stringExtension. Uygulama katmanının eşleşen data byteları
–commentExtension. kurallara comment yazmamızı sağlıyor

Hedef

Hedefler eşleşme olunca yapılacak işlemdir. Ya Built-in dir yada extension ile yapılır. Normalda bir işlemken bazen de kullanıcı tanımlı bir zincir olabilir ub durumda paket işlenmeye devam eder.

hedefler -j veya –jump optionu ile eklenirler.

HedefTanım
ACCEPTKabul eder ve diğer tablolarda da paketin işlenmesi devam eder.
DROPPaketi atar bu paket başka bir şekilde işlenmez.
RETURN Bu zincirde daha aşağıya bakma bir sonra ki zincire gönder
LOGExtension. Paketi Syslog ile loglar
REJECTExtension. Paketi atar ve uygun bir karşılık gönderir.

Kurallar yukarıda de belirtildiği üzere sırayla yazılırlar bu nedenle gelen paket ilk kuraldan son kurala kadar bir eşleşme olana kadar işlenir.

  • Iptables komutu root yetkisi gerektirir.
  • Iptables in default table i “filter” dır diğer tablelar için “-t” optionu kullanılmalıdır. Ör: iptables -t mangle
  • eğer SSH ile bağlıysanız ve drop ve REJECT komutlarını yanlış girerseniz sistemden kendinizi atmış olursunuz.

Kuralları Listele

# iptables -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-FTP
-N fail2ban-MAIL
-N fail2ban-SSH
-N fail2ban-VESTA
-N vesta
-A INPUT -p tcp -m tcp --dport 8083 -j fail2ban-VESTA
-A INPUT -p tcp -m multiport --dports 25,465,587,2525,110,995,143,993 -j fail2ban-MAIL
-A INPUT -p tcp -m tcp --dport 21 -j fail2ban-FTP
-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 89.22.121.93/32 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 21,12000:12100 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 25,465,587,2525 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 110,995 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 143,993 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 3306,5432 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8083 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A fail2ban-FTP -j RETURN
-A fail2ban-MAIL -s 212.70.149.57/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-MAIL -s 212.70.149.72/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-MAIL -s 87.246.7.229/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-MAIL -s 87.246.7.213/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-MAIL -j RETURN
-A fail2ban-SSH -j RETURN
-A fail2ban-VESTA -j RETURN

Kuralları kaydet/ geri yükle

$ iptables-save > /root/iptables.rules      
$ iptables-restore < /root/iptables.rules   

Ek bilgi ile listeleme

$ iptables -nvL

Default policy

iptables -P FORWARD REJECT

Yeni zincir oluşturma

$ iptables -N YENI_ZINCIR

Oluşturulan zincire paket yönlendirme

$ iptables -A INPUT -p tcp --dport 443 -j YENI_ZINCIR -m comment --comment "https paketleri islenecek"

Örnekler :

1)

$ iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Daha önceden kurulmuş olan veya aktif bağlantılara izin ver.

2)

$ iptables -I INPUT -p tcp --dport 22 -s 192.168.0.210 -j ACCEPT -m comment --comment "SSH jump host"

192.168.0.210 dan gelen port 22 ye giden TCP bağlantısına izin ver.

3)

kural değiştirme

 iptables -R INPUT 2 -p tcp --dport 22 -j REJECT --reject-with icmp-port-unreachable

-R Replace, INPUT zincirinin 2 nci kuralını değiştiriyorum. yenisi şu…..

4)

satır numaralarını görmek için

$ iptables -L --line-number

5)

Local dataya izin verme

$  iptables -A INPUT -i lo -p all -j ACCEPT -m comment --comment "tum local trafige izin ver"

6)

Ping’e izin verme

$ iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Daha enfes örnekler için :

https://linuxconfig.org/collection-of-basic-linux-firewall-iptables-rules

Enfes bir örnekleme ve firewall yapımı :

https://wiki.archlinux.org/title/simple_stateful_firewall

ve son olarak pek çok özelliğin en güzel anlatıldığı yer MANUAL PAGES

https://linux.die.net/man/8/iptables

Leave a Reply