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.
- Filter : Varsayılan default tablo. Standard bir firewall un actionlarını tutar.
- NAT : Network address translation yani Port forwarding
- mangle : paket değiştirmek için kullanılır.
- raw : bazı paketleri bağlantı takibinden hariç tutmak için kullanılır.
- security : zorunlu erişim kontrolü için kullanılır.
en çok filter ve nat kullanılır.
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şme | Tanı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ü |
–dport | Hedef port |
–sport | Kaynak port |
–state | Extension. bağlantı durumu eşleşmesi: INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED. |
–string | Extension. Uygulama katmanının eşleşen data byteları |
–comment | Extension. 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.
Hedef | Tanım |
---|---|
ACCEPT | Kabul eder ve diğer tablolarda da paketin işlenmesi devam eder. |
DROP | Paketi atar bu paket başka bir şekilde işlenmez. |
RETURN | Bu zincirde daha aşağıya bakma bir sonra ki zincire gönder |
LOG | Extension. Paketi Syslog ile loglar |
REJECT | Extension. 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