Merhaba, daha öncesinde bu tarz konularda sorularımın cevapsız kaldığı ile ilgili bir konu açarak öğrendiklerimi forumda paylaşacağımı söylemiştim.
Bu konu içerisinde yanlış anlattığım veya yanlış bildiğim kısımlar olabilir, ingilizce bir udemy kursundan anladıklarımı ve aldığım notları sizinle paylaşıyorum eğer yanlış bir şey aktarırsam beni düzeltmekten çekinmeyin.
(İzlediğim UDEMY Kursu için buraya tıklayabilirsin)

Ön Açıklama
Öncelikle linux çekirdeğini kullanan işletim sistemlerinde güvenlik duvarı olarak iptables / netfilter altyapısı kernel üzerinde yani işletim sisteminin çekirdeğinde çalışarak çeşitli kurallar koymanızı sağlar. Bu kurallar sayesinde sisteminiz gelen internet paketleri ve isteklerine karşı bir filtreleme yapar, burada filtrelemeden kastımız "google.com" adresinden gelen TCP 80 portundaki pakete izin verme ancak "google.com" adresinden gelen TCP 443 portundaki pakete izin ver anlamında sizin belirttiğiniz şekilde sisteminizin gelen isteklere karşı alacağı aksiyonu tanımlama eylemidir.

IPTABLES TEMELLERİ
iptables yapısını anlayabilmemiz için TABLE - CHAIN ve RULE kavramlarını anlamamız gerekmektedir.


TABLE: Iptables içerisinde 4 farklı table bulundurur, her bir table farklı bir amaç için kullanılır, table kavramı için içerisinde chainleri bulunduran tablo katmanı diyebiliriz, dilerseniz burada mevcut tabloları inceleyerek detaylandıralım.
1. FİLTER: iptables içerisindeki varsayılan yani default tablodur, gelen giden ve yönlendirilen paketler için çeşitli kurallar yazarak erişim izinlerini yönetebileceğiniz ve en çok kullanılan tablodur. İçerisinde INPUT - OUTPUT ve FORWARD chainlerini bulundurur.
2. NAT: SNAT ve DNATyani port yönlendirmeleri için özelleştirilmiş tablodur. İçerisinde PREROUTING ve POSTROUTING chainlerini içermektedir ek olarak sistem içerisinde oluşturulmuş yerel paketler için OUTPUT chainleri de bu tabloda mevcuttur.
3. MANGLE: Paketlerin değiştirilmesi için kullanılan tablodur, PREROUTING, POSTROUTING, INPUT, OUTPUT ve FORWARD chainlerini içerir.
4. RAW: Bu tablo paketleri işaretlemek ve takip etmek için kullanılmaktadır, bazı performans ayarları yani load-balance gbi ayarlar için önemlidir. İçerisinde PREROUTING ve OUTPUT chainleri bulunur.

CHAİN: Chain kavramı içerisinde yazmış olduğumuz kuralları yani rule bulunduran yapının adıdır, örnek olarak gelen paketler (incoming) için INPUT, giden paketler (outgoing) için OUTPUT bu kavram için örnek 2 chaindir.

RULE: Rule dediğimiz yapı bizim belirttiğimiz parametreleri işleyen programcılıkta bildiğimiz IF yapısı gibi bir deyimdir, içerisine yazdığımız değerler eğer TRUE sonuç döndürüyorsa belirttiğimiz eylemi gerçekleştirir. Türkçede kural olarak çevirilen bu yapı CHAIN yapılarının içine yazılarak en temeldeki yapıdır.
NOT: Kurallar chain içerisinde okunurken yukarıdan aşağıya doğru okunmaktadır.

Bu kadarlık temel teorik bilginin yeterli olduğunu düşünüyorum aşağıda birkaç örnek komut paylaşacağım eğer bu komutları test etmek isterseniz Ubuntu distrosunu kullanabilirsiniz.


Söz dizimi (syntax):
iptables -t (tabloadı) (komut) (CHAIN) (match "kontrol edilecek parametreler") -j (eylem)


Örnek:
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP


İnceleme:
Yukarıdaki örnekte görebileceğiniz üzere birçok renk ayrımı bulunmakta buradaki renklerin her biri aslında söz dizimindeki bir kısmı ifade etmektedir, söz dizimini daha kolay anlayabilmek için kendi kurallarınızı yazıp test etmeniz gerekli.


"iptables" kısmı iptables komutun başlangıcıdır bu sayede sistem sizin netfilter servisine yönelik bir işlem yapacağınızı algılar.

"-t filter" burada göreceğiniz kırmızı renkli kısım hangi table ile çalışacağınızı belirlemenizi sağlayan parametredir, yeşil renkli kısımda ise tablo'nun adı yer almaktadır burada önemli olan nokta tablo adları her zaman küçük harfler ile yazılmalıdır.

"-A INPUT" mavi renkli kısım bir komut parametresidir iptables içerisinde birçok komut yer almaktadır burada -A komutu yazdığım bu kuralın en alta eklenmesini sağlayacaktır. Yeşilrenkli kısımda ise CHAIN adını görmektesiniz bu hangi CHAIN üzerine bu kuralın ekleneceğini sisteme belirtir CHAIN isimleri her zaman büyük harfler ile yazılmalıdır.

"-p tcp" kırmızı renk ile gösterilmiş olan parametre protokol parametresidir bu gelen paketin hangi protokol üzerinden geldiğini ifade etmek için kullanılmaktadır, en çok kullanılan protokoller TCP UDP ICMP protokolleridir. Yeşil kısımda görmüş olduğunuz iseprotokolün adıdır.

"--dport 22" burada --dport kısmı destination port'un kısaltmasıdır yani gelen paketin hangi porta ulaşacağını ifade eden paremetredir bu parametre ile birlikte sadece 22 portuna gelen paketler üzerinde işlem yapmak istediğimizi sisteme belirtiyoruz.

"-j DROP" kırmızı renkli parametre eylem parametresidir buraya kadar birçok match yani kontrol edilecek parametre yazdık ve eğer bu parametrelerin tamamı sağlanırsa eylem parametresinde belirttiğimiz aksiyon çalışacaktır. Bizim senaryomuzda bu DROP aksiyonu yani gelen paketin firewall tarafından durdurulması ve izin verilmemesi durumudur.

Hep birlikte bir örnek kural yazdık ve inceledik ancak siz bu kadar parametreyi isimleri nereden bulacağınızı veya hatırlayacağınız konusunda bir soru işaretine sahip olabilirsiniz.
Terminale iptables --help veya iptables -h komutlarını yazarak iptables hakkındaki bilgileri görebilirsiniz, burada syntax örnekleri ve anlamları yer almakta ancak daha okunabilir bir görüntü için man iptables yazarak dokümantasyona ulaşabilirsiniz burada tablo isimleri chain isimleri eylemler ve parametreler hakkında birçok bilgi yer almakta.

iptables -h
iptables --help
man iptables
Testlerinizi yaparken işinize yarayacak komutlar
# iptables içerisinde varsayılan olarak belirli FILTER tablosu içerisinde bulunan tüm kuralları silmenize olanak sağlar
iptables -F
# iptables içerisinde yazdığınız kuralları detaylıca listelemenize olanak sağlar.
iptables -vnL
# basit bir şekilde listelemek isterseniz parametreleri tek tek kullanarak da denemeler yapabilirsiniz
iptables -L
Not: Konuyu açıklamaya çalışırken karmaşık cümleler kurmuş olabilir veya anlamsız tariflerde bulunmuş olabilirim, bu konuda beni ağır olarak eleştirmeniz çok hoş olmayacak ve heves kıracaktır nedeni ise ben bir öğretmen veya eğitimci olmak için değil sadece forumda en azından kaynak bulunsun diye bu konuları yazmaya başlamış olmamdandır. Eğer bir yeri eksik veya yanlış anlattığımı düşünüyorsanız bunu belirtebilirsiniz bunda hiçbir sıkıntı yok konuya katkılarınız okuyanlar için daha faydalı olacaktır ancak anlatım tarzın şöyle böyle gibi eleştirilere kapalıyım burada yazanlar defterimde aldığım bölük börçük notların biraz daha toparlanmış ve açıklamalı hali olduğu için aktarması zor olabilir.


Edit yararlı linkler:
https://www.informit.com/articles/ar...21057&seqNum=4
Okuyan ve vakit ayıran herkese teşekkür ederim, iyi forumlar.