Bir güvenlik duvarı, trafiği filtreleyerek ve özel verilere istenmeyen/yetkisiz erişimi engelleyerek ağı koruyan bir güvenlik cihazıdır (donanım/yazılım). Sunucularınızı ve altyapınızı korumak için uygun bir güvenlik duvarına sahip olmak önemlidir. Sadece istenmeyen trafiği engellemekle kalmaz, aynı zamanda kötü amaçlı yazılımların sisteme bulaşmasını da engelleyebilir.
Linux ekosisteminde, iptables Linux çekirdeğindeki netfilter çerçevesiyle arayüz oluşturan popüler bir güvenlik duvarıdır. Modern Linux sistemlerinin çoğu bu araçlar önceden yüklenmiş olarak gelir. Bu sistemlerden en iyi şekilde yararlanmak için mimarilerini anlamak son derece önemlidir. Aksi takdirde, güvenilir güvenlik duvarı politikaları geliştirmek göz korkutucu olabilir. Çerçeve içinde karmaşık sözdizimleri, birbiriyle ilişkili parçalar vb. oluşturulmasına yol açabilir.
Bu kılavuz, kendi güvenlik duvarı politikalarını oluşturması gereken kullanıcılara yardımcı olmak için iptables mimarisine derinlemesine dalacaktır. Ayrıca iptables aracının netfilter ile nasıl arayüz oluşturduğunu ve çeşitli bileşenlerin birbirine nasıl uyum sağladığını keşfedeceğiz.
Iptables ve Netfilter
Linux'ta, iptables güvenlik duvarı en yaygın olanıdır. Linux çekirdeğinin ağ yığınındaki paket filtreleme kancalarıyla arayüz oluşturarak çalışır. Toplu olarak netfilter çerçevesi olarak adlandırılan bu çekirdek kancalarıdır.
Sistemdeki her gelen/giden paket, yığın boyunca ilerlerken bu kancaları tetikleyecektir. Böylece, bu kancalara kayıtlı programlar önemli noktalarda trafikle etkileşime girebilir. Son olarak, iptables ile ilişkili çekirdek modülleri, belirtilen güvenlik duvarı kurallarını uygulamak için bu kancalara bağlanır.
Netfilter Kancaları
Programların bağlanması için beş farklı netfilter kancası vardır. Paketler yığın boyunca ilerledikçe, kancalar kendilerine kayıtlı çekirdek modüllerini tetikler. Tetikleme koşulu, paket yönü (gelen/giden), paket hedefi, paketin önceki bir noktada bırakılıp/reddedilip reddedilmediği vb. koşullara bağlıdır.
Bunlar, ağ yığınındaki çeşitli iyi tanımlanmış noktaları temsil eden kancalardır:
-
NF_IP_PRE_ROUTING: Bu kanca, herhangi bir gelen trafik tarafından tetiklenir. Tetikleme, paketin hedefiyle ilgili herhangi bir yönlendirme kararı verilmeden önce gerçekleşir.
-
NF_IP_LOCAL_IN: Bu kanca, gelen bir paket yönlendirildikten sonra tetiklenir. Paketin ayrıca yerel sistem için hedeflenmiş olması gerekir.
-
NF_IP_FORWARD: Bu kanca da gelen bir paket yönlendirildikten sonra tetiklenir. Ancak, paket başka bir ana bilgisayara yönlendirilecekse tetiklenir.
-
NF_IP_LOCAL_OUT: Herhangi bir yerel giden trafik, ağ yığınına ulaştığı anda bu kancayı tetikler.
-
NF_IP_POST_ROUTING: Bu kanca, yönlendirme gerçekleştikten sonra, paket kabloya ulaşmadan önce herhangi bir giden/yönlendirilen trafik tarafından tetiklenir.
Bu kancalara kaydolmak isteyen çekirdek modülleri bir öncelik numarası sağlamalmalıdır. Bu değer, kanca tetiklendiğinde hangi sırayla çağrılacaklarını belirlemeye yardımcı olur. Böyle bir mekanizma, birden fazla modülün (farklı modüller veya aynı modülün birden fazla kopyası) kancaların her birine belirli bir sırayla bağlanmasına olanak tanır. Her modül, paketleri işledikten sonra netfilter çerçevesine bir karar döndürecektir.
Iptables'ta Tablolar ve Zincirler
Kurallarını düzenlemek için iptables güvenlik duvarı tabloları kullanır. Tablolar, kuralları verdikleri kararların türüne göre kategorize eder. Örneğin, bir kural NAT (ağ adresi çevirisi) ile ilgiliyse, kural nat tablosu altına konur. Benzer şekilde, bir kural bir paketin hedefine ulaşmasına izin verilip verilmeyeceğine/reddedilip reddedilmeyeceğine karar veriyorsa, filter tablosuna eklenir.
Her bir iptables tablosunun içinde, kurallar ayrıca ayrı “zincirler” altında düzenlenir. Tablo, tuttukları kuralların türünü temsil ederken, zincirler kuralları tetikleyen netfilter kancalarını tanımlar. Kısacası, zincirler kuralın ne zaman değerlendirileceğini belirler.
İşte iptables'ın yerleşik zincirleri. İlginç bir şekilde, zincir adları aynı zamanda ilişkili netfilter kancalarının adlarını da yansıtır:
| Zincir (iptables) | Kullanım Alanı |
| PREROUTING | NF_IP_PRE_ROUTING |
| INPUT | NF_IP_LOCAL_IN |
| FORWARD | NF_IP_FORWARD |
| OUTPUT | NF_IP_LOCAL_OUT |
| POSTROUTING | NF_IP_POST_ROUTING |
Yöneticiler, zincirleri kullanarak kuralın paket teslimatının hangi aşamasında değerlendirileceğini belirleyebilirler. Her tablo birden fazla zincir içerdiğinden, işleme sürecinin birden fazla noktasında da etkisini gösterebilir. Belirli kararlar yalnızca ağ yığınının belirli noktalarında anlamlıdır. Bu nedenle, her tablonun her çekirdek kancasına kayıtlı bir zinciri olmayacaktır.
The netfilter çerçevesi yalnızca 5 çekirdek kancası sunar. Bu nedenle, kancaların her bir noktasında birden fazla tablonun zincirleri kayıtlıdır. Örneğin, eğer üç tablo PREROUTING zincirine sahipse, o zaman bu zincirler NF_IP_PRE_ROUTING kancasına kaydedilir. Her birinin, her tablonun PREROUTING zincirinin hangi sırayla çağrılacağını belirleyen bir öncelik sağlaması gerekir. En yüksek öncelikli PREROUTING zinciri ilk önce değerlendirilir, bir sonraki en yüksek öncelikli olan ikinci olarak değerlendirilir ve bu şekilde devam eder.
iptables Tabloları
Bir adım geri atalım ve iptables tarafından sunulan tablolara bir göz atalım. Daha önce de belirtildiği gibi, her tablo, paket değerlendirmesi için ilgi alanına göre düzenlenmiş farklı kural kümelerini temsil eder.
-
filter Tablosu
In iptables içinde, filter tablosu en popüler olanlardan biridir. Bir paketin hedefine devam etmesine izin verilip verilmeyeceğini belirlemek için kullanılır. Güvenlik duvarı terminolojisinde bu işlem paketleri “filtreleme” olarak bilinir.
İnsanların güvenlik duvarlarından bahsederken (çoğunlukla) kastettikleri, filter tablosunun işlevleridir.
-
nat Tablosu
Bu tablo, NAT’ı düzenleyen kuralları uygular. Paketler ağ yığınına girdiğinde, bu tabloda tanımlanan kurallar paketin kaynak/hedef adresinin nasıl değiştirileceğine karar vererek paketin yönlendirilmesini ve her türlü yanıt trafiğini etkiler.
Çoğu zaman, nat tablosu, doğrudan erişimin olmadığı ağlara paketleri yönlendirmek için kullanılır.
-
mangle Tablosu
Bu tablo, paketlerin IP başlıklarını çeşitli şekillerde değiştiren kuralları tutar. Örneğin, paketin dayanabileceği geçerli ağ atlama sayısını uzatarak/kısaltarak bir paketin TTL (Time to Live) değerini değiştirebilir. Ek olarak, mangle tablosu diğer IP başlıklarını da benzer şekilde değiştirebilir.
Bu tablonun ayrıca, diğer tabloların ve ağ araçlarının daha sonraki işlemler için alabileceği, paket üzerine dahili bir çekirdek “işareti” koymasına da izin verilir. Bu işaret gerçek pakete dokunmaz, bunun yerine işareti çekirdeğin paketi temsil etme biçimine ekler.
-
raw Tablosu
The iptables güvenlik duvarı durum bilgilidir (stateful), yani paketler önceki paketlerle olan ilişkileri bağlamında değerlendirilir. netfilter çerçevesi üzerinde geliştirilen bağlantı izleme özelliği, iptables tarafından paketlerin ayrı, ilişkisiz paketler akışı yerine devam eden bir bağlantının veya oturumun parçası olarak görülmesini sağlar. Genellikle, bağlantı izleme mantığı paket ağ arayüzüne ulaştıktan hemen sonra uygulanır.
The raw tablosu çok dar tanımlanmış bir işlevle birlikte gelir. Bu tablonun tek amacı, bağlantı izlemenin dışında kalmak amacıyla paketleri işaretlemek için bir mekanizma sağlamaktır.
-
security Tablosu
The security tablosu, paketler üzerine dahili SELinux güvenlik bağlamı işaretleri koyar. Bu da SELinux’un (veya SELinux güvenlik bağlamlarını yorumlayan diğer tüm uygulamaların) paketleri nasıl işleyeceğini etkiler.
SELinux işaretleri paket başına veya bağlantı başına uygulanabilir.
Her Tabloda Uygulanan Zincirler
Şimdiye kadar tablolar ve zincirler hakkında ayrı ayrı konuştuk. Her tabloda hangi zincirlerin mevcut olduğunu inceleme zamanı. Bu konu, aynı kancaya kayıtlı zincirlerin değerlendirilme sırası hakkındaki tartışmayı genişletmektedir. Örneğin, üç tabloda PREROUTING zinciri varsa ne olur? Değerlendirilme sıraları nedir?
Ardından, aşağıdaki tabloya göz atın. Bu tablo, her bir iptables tablosunda bulunan zincirleri gösterir.
| PREROUTING | INPUT | FORWARD | OUTPUT | POSTROUTING | |
|
(yönlendirme kararı) |
✓ | ||||
|
raw |
✓ | ✓ | |||
|
(bağlantı takibi etkinleştirildi) |
✓ | ✓ | |||
|
mangle |
✓ | ✓ | ✓ | ✓ | ✓ |
|
nat (DNAT) |
✓ | ✓ | |||
|
(yönlendirme kararı) |
✓ | ✓ | |||
|
filter |
✓ | ✓ | ✓ | ||
|
security |
✓ | ✓ | ✓ | ||
|
nat (SNAT) |
✓ | ✓ |
Soldan sağa okunduğunda, hangi tabloların hangi zincirleri içerdiğini açıklar. Örneğin, raw tablosu hem PREROUTING hem de OUTPUT zincirlerine sahiptir. Yukarıdan aşağıya okunduğunda ise, ilişkili netfilter kancası tetiklendiğinde her bir zincirin hangi sırayla çağrıldığını açıklar.
Unutmayın ki nat tablosu, DNAT işlemleri (bir paketin hedefini değiştirme) ile SNAT işlemleri (bir paketin kaynağını değiştirme) arasında, sıralamalarını daha net belirtmek için ikiye ayrılmıştır. Tablo ayrıca yönlendirme kararlarının alındığı ve bağlantı takibinin etkinleştirildiği temsil noktalarını da içermektedir.
Bir paketin tetikleyeceği kancalar (sütunlar); paketin niteliğine (gelen/giden), alınan yönlendirme kararlarına ve paketin filtreleme kriterlerini karşılayıp karşılamadığına bağlıdır.
Belirli olaylar, işlem sırasında bir tablonun zincirini atlayabilir. Örneğin, bir bağlantıdaki yalnızca ilk paket, nat tablosu tarafından tanımlanan NAT kurallarına göre değerlendirilecektir. Aynı bağlantıdaki sonraki tüm paketlere, ek bir değerlendirme yapılmaksızın aynı nat kararları uygulanacaktır. NAT bağlantılarına verilen yanıtlar, düzgün yönlendirme için otomatik olarak ters NAT kurallarının uygulanmasını sağlayacaktır.
Zincir Geçiş Sırası
Sunucunun paket yönlendirme kurallarını bildiği ve güvenlik duvarı kurallarının iletime izin verdiği varsayılırsa, aşağıdaki akışlar farklı yolların nasıl geçileceğini temsil eder:
-
Yerel sistem hedefli gelen paketler: PREROUTING >> INPUT
-
Başka bir ana bilgisayar hedefli gelen paketler: PREROUTING >> FORWARD >> POSTROUTING
-
Yerel olarak oluşturulan paketler: OUTPUT >> POSTROUTING
Sonuç olarak, şimdiye kadar tartıştığımız tüm bilgileri bir araya getirdiğimizde, yerel sistem hedefli gelen herhangi bir paketin PREROUTING zincirleri olan raw, mangle, ve nat tablolarına göre değerlendirileceğini görebiliriz. Ardından, INPUT zincirleri olan mangle, filter, security, ve nat tablolarından geçerek nihayet yerel sokete ulaşacaktır.
Iptables Kuralları
The iptables güvenlik duvarı kuralları, belirli bir tablonun belirli bir zinciri içine yerleştirilir. Bir zincir çağrıldığında, söz konusu paket zincirdeki her bir kurala göre değerlendirilecektir. Her kuralın iki bileşeni vardır: bir eşleşme bileşeni ve bir eylem bileşeni.
-
Eşleşme
Bir kuralın eşleşme kısmı, belirtilen eylem (veya “hedef”) yürütülmeden önce bir paketin karşılaması gereken koşulları belirtir.
Eşleşme sistemi inanılmaz bir esneklik sunar. İşlevselliği, iptables eklentileri yardımıyla da genişletilebilir. Kurallar; paketleri protokol türüne, kaynak/hedef adresine, kaynak/hedef bağlantı noktasına, kaynak/hedef ağına, giriş/çıkış arayüzüne, üstbilgilere, bağlantı durumuna ve diğer kriterlere göre eşleştirecek şekilde tanımlanabilir. Bir kural, bu koşulların bir kombinasyonuna da sahip olabilir ve bu da farklı trafik türlerini ayırt etmek için karmaşık kural kümeleri oluşturulmasını sağlar.
-
Hedefler
Hedef, bir paket bir kuralın eşleşme kriterlerini karşıladığında gerçekleştirilen eylemdir. Genel olarak hedefler iki gruba ayrılır:
-
-
Sonlandırıcı hedefler: Zincir içindeki değerlendirme sürecini sonlandırır ve kontrolü netfilter kancasına geri döndürür. Dönüş değerine bağlı olarak, kanca paketin yolculuğuna devam etmesine izin verir veya paketi düşürür.
-
Sonlandırıcı olmayan hedefler: Hedef bir eylem gerçekleştirir ve zincirdeki değerlendirme devam eder. Her zincirin nihai bir sonlandırma kararından geçmesi gerekse de, öncesinde herhangi bir sayıda sonlandırıcı olmayan hedef yer alabilir.
-
Kurallar dahilindeki her bir hedefin kullanılabilirliği bağlama bağlıdır. Örneğin, zincir ve tablo türü hedeflerin kullanılabilirliğini etkileyebilir. Diğer olası faktörler arasında kuraldaki etkinleştirilmiş uzantılar ve eşleşen ifadeler yer alır.
Kullanıcı Tanımlı Zincirler
Ayrıca sonlandırıcı olmayan özel bir hedef sınıfı daha vardır: atlama (jump) hedefi. Atlama hedefleri, değerlendirme ek işlem için bir zincirden diğerine geçtiğinde gerçekleştirilen eylemlerdir. Şimdiye kadar, şunlarla yakından bağlantılı olan yerleşik zincirlerden bahsettik: netfilter kancaları. Ancak, iptables da yöneticilerin kendi özel zincirlerini oluşturmalarına olanak tanır.
Kullanıcı tanımlı zincirlerdeki kurallar da yerleşik zincirlerdekilere benzer. Temel fark, kullanıcı tanımlı zincirlere yalnızca bir kuraldan onlara “atlanarak” ulaşılabilmesidir. Bunun nedeni, kullanıcı tanımlı zincirlerin herhangi bir netfilter kancasıyla bağlantılı olmamasıdır.
Kullanıcı tanımlı zincirleri, başlangıçta onları çağıran zincirin uzantıları olarak düşünebilirsiniz. Örneğin, kullanıcı tanımlı bir zincirde, kural listesinin sonuna ulaşılırsa veya eşleşen bir kural bir RETURN hedefi çalıştırırsa, değerlendirme çağıran zincire geri döner. İlginç bir şekilde, kullanıcı tanımlı bir zincir, değerlendirmeyi başka bir kullanıcı tanımlı zincire de “atlatabilir”.
Bu özellik, daha iyi bir organizasyon için zemin hazırlar ve sağlam dallanma için gerekli çerçeveyi sağlar.
Bağlantı Takibi
Şu tabloyu ele alırken: raw tablosunu ve bağlantı durumu eşleşme kriterlerini tartışırken, bağlantı takip sisteminin netfilter çerçevesi üzerinde uygulandığını ele almıştık. Bu özellik, iptables 'ın paketleri devam eden bir bağlantı bağlamında görmesini sağlar. Bağlantı takip sistemi ayrıca iptables 'a “durumlu” işlemler gerçekleştirmek için gereken işlevselliği sağlar.
Bir paket ağ yığınına girdikten hemen sonra bağlantı takibi uygulanır. raw tablosu zincirleri ve bazı temel bütünlük kontrolleri, paketleri bir bağlantıyla ilişkilendirmek için kullanılan tüm mantığı oluşturur.
Sistem her paketi mevcut bağlantılar kümesine göre kontrol eder. Gerekirse sistem mevcut bağlantıların durumunu günceller veya yenilerini oluşturur. Herhangi bir raw tablosu zincirinde NOTRACK hedefiyle işaretlenmiş paketler, sonraki bağlantı takip rutinlerini atlayacaktır.
-
Kullanabilir Durumlar
Bağlantı takip sistemi tarafından takip edilen bağlantılara aşağıdaki durumlardan herhangi biri atanacaktır:
-
-
NEW : Mevcut bir bağlantıyla ilişkili olmayan ancak ilk paket olarak da geçersiz olmayan bir paket geldiğinde, sisteme bu etiketle yeni bir bağlantı eklenir. Bu durum hem bağlantı odaklı protokoller (örneğin TCP) hem de bağlantısız protokoller (örneğin UDP) için geçerlidir.
-
ESTABLISHED: Bir bağlantının durumu, NEW durumundan ESTABLISHED durumuna, karşı yönden geçerli bir yanıt aldığında güncellenir. TCP bağlantıları için bu, bir SYN/ACK anlamına gelir. UDP ve ICMP trafiği için bu, orijinal paketin kaynak ve hedefinin yer değiştirdiği bir yanıtı ifade eder.
-
RELATED: Bir bağlantının parçası olmayan ancak kurulmuş bir bağlantıyla ilişkili olan paketler şu şekilde etiketlenir: RELATED . Bu, yardımcı bir bağlantı (örneğin, FTP veri iletim bağlantısında) veya diğer protokollerin bağlantı girişimlerine verilen ICMP yanıtları anlamına gelebilir.
-
INVALID: Kurulmuş bir bağlantının parçası olmayan, yeni bir bağlantı açmak için uygunsuz kabul edilen, tanımlanamayan, yönlendirilemeyen vb. paketler şu şekilde etiketlenir: INVALID.
-
UNTRACKED: Bir paket şu şekilde etiketlenebilir: UNTRACKED eğer bir raw tablosu zincirinde takibi atlamak üzere hedeflenmişlerse.
-
SNAT: Kaynak adres bir NAT işlemiyle değiştirildiğinde ayarlanan sanal bir durumu ifade eder. Yanıt paketlerinde kaynak adreslerin dönüştürülmesi için bağlantı takip sistemi tarafından işlenir.
-
DNAT: Şuna benzer: SNAT, hedef adres bir NAT işlemiyle değiştirildiğinde sanal bir durumu ifade eder. Bağlantı izleme sistemi, yanıt paketlerini yönlendirirken hedef adresi tekrar geri çevirmeyi bilmesi için bunu yönetir.
-
Bağlantı izleme sistemi tarafından izlenen bu durumlar, yöneticilerin bir bağlantı ömrünün belirli noktalarını hedefleyen özel kurallar oluşturmasına olanak tanır. Daha kapsamlı ve güvenli kurallar için gerekli işlevselliği sağlar.
Son Düşünceler
Linux'ta, netfilter çerçevesi ve iptables güvenlik duvarı, çoğu güvenlik duvarının temelini oluşturur. Netfilter kancaları, sistem tarafından işlenen paketler üzerinde güçlü bir kontrol sağlamak için ağ yığınına yeterince yakındır. Bu yeteneklerden yararlanan iptables güvenlik duvarı, politika gereksinimlerini çekirdeğe iletmek için esnek bir yol sunar.
Bu kılavuz, netfilter çerçevesinin ve iptables güvenlik duvarının iç yapısını derinlemesine incelemektedir. Ek olarak, bağlantı izleme sistemini ele almaktadır. Bu parçaların birbirine nasıl uyduğunu anlayarak, daha sağlam ve güvenli sunucu ortamları oluşturmak için onlardan daha iyi yararlanabilirsiniz.
Son olarak, bu kılavuz iç işleyişi ele alırken, bunları uygulamaya geçirmek için iptables'ı yapılandırma kılavuzuna göz atabilirsiniz. Ek olarak, UFW güvenlik duvarının further simplifies iptables'ı nasıl daha da basitleştirdiğini görebilirsiniz. Ayrıca, iptables güvenlik duvarı kurallarını listelemeyi ve silmeyi.
öğrenmek de faydalı olacaktır. İyi çalışmalar!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.