ağ filtresi - Netfilter

ağ filtresi
kararlı sürüm
5.14.7  Bunu Vikiveri'de düzenleyin / 22 Eylül 2021 ; 0 gün önce ( 22 Eylül 2021 )
Önizleme sürümü
5.15-rc2  Bunu Vikiveri'de düzenleyin / 19 Eylül 2021 ; 3 gün önce ( 19 Eylül 2021 )
Yazılmış C
İşletim sistemi Linux
Tip
Lisans GNU GPL'si
İnternet sitesi netfilter .org

Netfilter , Linux çekirdeği tarafından sağlanan ve ağ ile ilgili çeşitli işlemlerin özelleştirilmiş işleyiciler biçiminde uygulanmasına izin veren bir çerçevedir . Netfilter, paketleri bir ağ üzerinden yönlendirmek ve paketlerin ağ içindeki hassas konumlara ulaşmasını engellemek için gereken işlevselliği sağlayan paket filtreleme , ağ adresi çevirisi ve bağlantı noktası çevirisi için çeşitli işlevler ve işlemler sunar .

Netfilter , Linux çekirdeği içindeki bir dizi kancayı temsil eder ve belirli çekirdek modüllerinin , çekirdeğin ağ yığını ile geri arama işlevlerini kaydetmesine izin verir . Genellikle trafiğe filtreleme ve değiştirme kuralları biçiminde uygulanan bu işlevler, ağ yığını içindeki ilgili kancayı geçen her paket için çağrılır.

Tarih

Image
Farklı Netfilter bileşenlerinin (bazılarının) ilişkisi

Rusty Russell , netfilter/iptables projesini 1998'de başlattı ; ayrıca projenin öncülü olan ipchains'in de yazarıydı . Proje büyüdükçe, 1999'da Netfilter Core Team'i (ya da kısaca coreteam ) kurdu. Ürettikleri yazılım ( bundan sonra netfilter olarak anılacaktır) GNU General Public License (GPL) lisansını kullanıyor ve Mart 2000'de sürüm 2.4 ile birleştirildi. Linux çekirdeği ana hattının x .

Ağustos 2003'te Harald Welte çekirdek ekibin başkanı oldu. Nisan 2004 yılında projenin yazılım dağıtan kişiler üzerinde proje tarafından bir çatlak-down aşağıdaki gömülü içinde yönlendiriciler GPL, bir uymadan Alman Welte tarihi bir verilen mahkeme tedbir karşı Sitecom GPL'nin şartlarını yerine getirmeyi reddetti Almanya, (bkz GPL- ilgili anlaşmazlıklar ). Eylül 2007'de, geçmiş yıllarda gelişmeye öncülük eden Patrick McHardy, çekirdek ekibin yeni başkanı olarak seçildi.

İptables öncesinde, Linux güvenlik duvarları oluşturmak için baskın yazılım paketleri vardı ipchains Linux çekirdeği 2.2.x ve ipfwadm Linux çekirdeği 2.0.x sırayla dayanıyordu hangi BSD 'nin ipfw'den . Hem ipchains hem de ipfwadm, Netfilter'ın tanıtımına kadar Linux çekirdeğinde genel bir paket kontrol çerçevesi bulunmadığından, paketleri manipüle edebilmeleri için ağ kodunu değiştirirler.

ipchains ve ipfwadm, paket filtreleme ve NAT'ı (özellikle maskeleme , bağlantı noktası yönlendirme ve yeniden yönlendirme olarak adlandırılan üç özel NAT türü ) birleştirirken, Netfilter, paket işlemlerini aşağıda açıklanan birden çok parçaya ayırır. Her biri, paketlere erişmek için farklı noktalarda Netfilter kancalarına bağlanır. Bağlantı izleme ve NAT alt sistemleri, ipchains ve ipfwadm içindeki ilkel sürümlerden daha genel ve daha güçlüdür.

2017'de IPv4 ve IPv6 akış boşaltma altyapısı eklenerek, yazılım akış tablosu yönlendirme ve donanım boşaltma desteğinin hızlandırılması sağlandı.

Kullanıcı alanı yardımcı programları

Image
Eski iptables paket filtreleme ile Netfilter üzerinden ağ paketlerinin akışı

iptables

ip_tables, ip6_tables, arp_tables(alt çizgi adın bir parçasıdır) adlı çekirdek modülleri ebtables, Netfilter kanca sisteminin eski paket filtreleme bölümünü oluşturur. Paketleri filtreleyebilen veya dönüştürebilen güvenlik duvarı kurallarını tanımlamak için tablo tabanlı bir sistem sağlarlar. Tablolar, kullanıcı alanı araçları iptables, ip6tables, arptables, ve aracılığıyla yönetilebilir ebtables. Hem çekirdek modüllerinin hem de kullanıcı alanı yardımcı programlarının benzer adlara sahip olmasına rağmen, bunların her birinin farklı işlevlere sahip farklı bir varlık olduğuna dikkat edin.

Her masa aslında kendi kancasıdır ve her masa belirli bir amaca hizmet etmek için tanıtıldı. Netfilter söz konusu olduğunda, belirli bir tabloyu diğer tablolara göre belirli bir sırayla çalıştırır. Herhangi bir tablo kendisini çağırabilir ve ayrıca ek işleme ve yineleme için olanaklar sağlayan kendi kurallarını da yürütebilir.

Kurallar zincirler halinde düzenlenir, diğer bir deyişle "kurallar zinciri". Bu zincirler INPUT, OUTPUTve dahil olmak üzere önceden tanımlanmış başlıklarla adlandırılır FORWARD. Bu zincir başlıkları, Netfilter yığınındaki kaynağı tanımlamaya yardımcı olur. Örneğin paket alımı, yerel olarak teslim edilen verileri temsil PREROUTINGederken, INPUTiletilen trafik de FORWARDzincire düşer . Yerel olarak üretilen çıktı OUTPUTzincirden geçer ve gönderilecek paketler POSTROUTINGzincirdedir.

Tablolar halinde organize edilmeyen Netfilter modülleri (aşağıya bakınız), çalışma modlarını seçmek için menşei kontrol etme yeteneğine sahiptir.

iptable_raw modül
Yüklendiğinde, diğer Netfilter kancalarından önce çağrılacak bir kancayı kaydeder. Paketleri Bağlantı İzleme gibi daha fazla bellek gerektiren işlemlere ulaşmadan önce filtrelemek için kullanılabilecek, ham adlı bir tablo sağlar .
iptable_mangle modül
Pakette değişiklik yapılabilmesi için Bağlantı İzleme'den sonra (aşağıya bakın) (ancak yine de başka herhangi bir tablodan önce) çalıştırılacak bir kanca ve parça tablosu kaydeder . Bu, NAT veya daha fazla filtreleme gibi, takip eden kurallara göre ek değişikliklere olanak tanır.
iptable_nat modül
İki kanca kaydeder: Hedef Ağ Adresi Çevirisi tabanlı dönüşümler ("DNAT") filtre kancasından önce uygulanır, Kaynak Ağ Adresi Çevirisi tabanlı dönüşümler ("SNAT") daha sonra uygulanır. Ağ adresi için iptables uygun hale getirilir tablosu (ya da "nat"), sadece bir "yapılandırma veritabanı" bir NAT sadece ve her türlü filtre edilmesi için tasarlanmıştır dönüşümler.
iptable_filter modül
Sicil filtre genel amaçlı filtreleme (güvenlik duvarı) için kullanılan tablo.
security_filter modül
SECMARKve CONNSECMARKhedefleri tarafından etkinleştirilenler gibi Zorunlu Erişim Denetimi (MAC) ağ kuralları için kullanılır . (Bu "hedefler" olarak adlandırılanlar, Güvenliği Geliştirilmiş Linux işaretçilerine atıfta bulunur.) Zorunlu Erişim Kontrolü, SELinux gibi Linux Güvenlik Modülleri tarafından uygulanır. Güvenlik tablosu, filtre tablosunun çağrısını takiben çağrılır ve filtre tablosundaki herhangi bir İsteğe Bağlı Erişim Kontrolü (DAC) kuralının herhangi bir MAC kuralından önce yürürlüğe girmesine izin verir. Bu tablo aşağıdaki yerleşik zincirleri sağlar: INPUT(bilgisayarın kendisine gelen paketler için), OUTPUT(yönlendirmeden önce yerel olarak oluşturulmuş paketleri FORWARDdeğiştirmek için ) ve (bilgisayar aracılığıyla yönlendirilen paketleri değiştirmek için).

nftables

nftables, Netfilter'ın yeni paket filtreleme kısmıdır. nftyerini yeni kullanıcı alanı aracıdır iptables, ip6tables, arptablesve ebtables.

nftables çekirdek motoru , bir ağ paketini incelemek ve bu paketin nasıl ele alınması gerektiğine karar vermek için bayt kodunu çalıştırabilen Linux çekirdeğine basit bir sanal makine ekler . Bu sanal makine tarafından uygulanan işlemler kasıtlı olarak basitleştirilmiştir: paketin kendisinden veri alabilir, ilişkili meta verilere (örneğin gelen arabirim) bakabilir ve bağlantı izleme verilerini yönetebilir. Aritmetik, bitsel ve karşılaştırma operatörleri, bu verilere dayalı kararlar vermek için kullanılabilir. Sanal makine aynı zamanda veri kümelerini (tipik olarak IP adresleri) manipüle edebilir ve çoklu karşılaştırma işlemlerinin tek bir küme aramasıyla değiştirilmesine olanak tanır.

Bu, protokol farkındalığının kodun içinde o kadar derin bir şekilde yerleşik olduğu eski Xtables (iptables, vb.) kodunun aksine, dört kez çoğaltılması gerekti‍—‌IPv4, IPv6, ARP ve Ethernet köprüleme‍—‌güvenlik duvarı olarak motorlar, genel bir şekilde kullanılamayacak kadar protokole özgüdür. iptablesLinux çekirdeği ABI'sinin basitleştirilmesi, kod tekrarının azaltılması , gelişmiş hata raporlaması ve daha verimli yürütme, depolama ve filtreleme kurallarının artımlı, atomik değişiklikleri, temel avantajlardır .

Paket birleştirme

nf_defrag_ipv4Onlar NetFilter bağlantı izleme (ulaşmadan modül IPv4 paketleri birleştirmek olacaktır nf_conntrack_ipv4modülü). Bu, çekirdek içi bağlantı izleme ve NAT yardımcı modülleri ("mini- ALG'lerin " bir biçimidir ) için, parçalar üzerinde değil, yalnızca tüm paketler üzerinde güvenilir bir şekilde çalışan için gereklidir.

IPv6 birleştiricisi kendi başına bir modül değildir, modüle entegre edilmiştir nf_conntrack_ipv6.

Bağlantı izleme

Netfilter çerçevesinin üzerine inşa edilen önemli özelliklerden biri bağlantı izlemedir. Bağlantı izleme, çekirdeğin tüm mantıksal ağ bağlantılarını veya oturumlarını izlemesini ve böylece bu bağlantıyı oluşturabilecek tüm paketleri ilişkilendirmesini sağlar. NAT, ilgili tüm paketleri aynı şekilde çevirmek için bu bilgilere güvenir ve bu bilgileri iptablesdurum bilgisi olan bir güvenlik duvarı olarak hareket etmek için kullanabilir.

Ancak bağlantı durumu, TCP veya SCTP durumu gibi herhangi bir üst düzey durumdan tamamen bağımsızdır. Bunun bir nedeni, yalnızca paketleri iletirken, yani yerel teslimat olmadığında, TCP motorunun mutlaka hiç çağrılmayabilmesidir. UDP , IPsec (AH/ESP), GRE ve diğer tünel protokolleri gibi bağlantısız mod iletimleri bile en azından bir sahte bağlantı durumuna sahiptir. Bu tür protokoller için buluşsal yöntem genellikle, sona erme süresi dolduktan sonra bir Netfilter bağlantısının kesildiği eylemsizlik için önceden ayarlanmış bir zaman aşımı değerine dayanır.

Her Netfilter bağlantısı benzersiz bir şekilde (katman-3 protokolü, kaynak adresi, hedef adres, katman-4 protokolü, katman-4 anahtarı) tanımlama grubu ile tanımlanır. Katman-4 anahtarı, aktarım protokolüne bağlıdır; TCP/UDP için bağlantı noktası numaralarıdır, tüneller için tünel kimlikleri olabilir, ancak aksi takdirde, demetin bir parçası değilmiş gibi sadece sıfırdır. Her durumda TCP bağlantı noktasını inceleyebilmek için paketler zorunlu olarak birleştirilecektir.

Netfilter bağlantıları, kullanıcı alanı aracıyla değiştirilebilir conntrack.

iptablespaket filtreleme kurallarını daha güçlü ve yönetimi daha kolay hale getirmek için durumlar, durumlar ve daha fazlası gibi bağlantı bilgilerini kontrol etmeyi kullanabilir. En yaygın durumlar şunlardır:

NEW
yeni bir bağlantı oluşturmaya çalışmak
ESTABLISHED
zaten var olan bir bağlantının parçası
RELATED
yeni bir bağlantı başlatan ve "beklenen" bir pakete atanmış; yukarıda bahsedilen mini-ALG'ler, örneğin nf_conntrack_ftpmodül bir FTP " PASV" komutu gördüğünde , bu beklentileri oluşturur.
INVALID
paketin geçersiz olduğu bulundu , örneğin, TCP durum şemasına uymadı
UNTRACKED
belirli bir paket için bağlantı izlemeyi atlamak üzere yönetici tarafından atanabilen özel bir durum (yukarıdaki ham tabloya bakın).

Normal bir örnek, bağlantı alt sisteminin gördüğü ilk paketin "yeni" olarak sınıflandırılması, yanıtın "kurulu" olarak sınıflandırılması ve bir ICMP hatasının "ilgili" olması olabilir. Bilinen herhangi bir bağlantıyla eşleşmeyen bir ICMP hata paketi "geçersiz" olur.

Bağlantı izleme yardımcıları

Eklenti modüllerinin kullanımı yoluyla, bağlantı takibine uygulama katmanı protokolleri hakkında bilgi verilebilir ve böylece iki veya daha fazla farklı bağlantının "ilişkili" olduğu anlaşılır. Örneğin, FTP protokolünü düşünün . Bir kontrol bağlantısı kurulur, ancak veri aktarıldığında, onu aktarmak için ayrı bir bağlantı kurulur. Ne zaman nf_conntrack_ftpmodül yüklendiğinde bunun mantıksal olarak varolan bir bağlantının parçası olarak, bir FTP veri bağlantısının ilk paket yerine "yeni" nin "ile ilgili" olarak sınıflandırılır.

Yardımcılar bir seferde yalnızca bir paketi denetler, bu nedenle, bağlantı izleme için hayati bilgiler, IP parçalanması veya TCP bölümlenmesi nedeniyle iki paket arasında bölünürse , yardımcının kalıpları tanıması gerekmez ve bu nedenle işlemini gerçekleştirmez. IP parçalanması, TCP segmentasyonu işlenmemesine rağmen, birleştirme gerektiren bağlantı izleme alt sistemi ile ilgilenilir . FTP durumunda, segmentasyonun PASVstandart segment boyutlarında olduğu gibi bir komutun "yakınında" olmadığı kabul edilir , bu nedenle Netfilter'da da ele alınmaz.

Ağ adresi çevirisi

Her bağlantının, başlangıçta aynı şekilde başlayan bir dizi orijinal adresi ve yanıt adresi vardır. Netfilter'deki NAT, yalnızca yanıt adresini ve istendiğinde bağlantı noktasını değiştirerek uygulanır. Paketler alındığında, bağlantı demetleri de yanıt adres çifti (ve bağlantı noktaları) ile karşılaştırılacaktır. Parçasız olmak da NAT için bir gerekliliktir. (Gerekirse, IPv4 paketleri normal, Netfilter olmayan IPv4 yığını tarafından parçalanabilir.)

NAT yardımcıları

Bağlantı izleme yardımcılarına benzer şekilde, NAT yardımcıları bir paket incelemesi yapacak ve orijinal adresleri, yükteki yanıt adresleriyle değiştirecektir.

Diğer Netfilter projeleri

Netfilter kodunu doğrudan kullanan çekirdek modüller olmasa da, Netfilter projesi birkaç önemli yazılıma daha ev sahipliği yapıyor.

bağlantı araçları

conntrack-toolssistem yöneticilerinin Bağlantı İzleme girdileri ve tablolarıyla etkileşime girmesine izin veren Linux için bir dizi kullanıcı alanı aracıdır. Paket, conntrackdarka plan programını ve komut satırı arabirimini içerir conntrack. Kullanıcı alanı arka plan programı conntrackd, yüksek kullanılabilirlikli küme tabanlı durum bilgisi olan güvenlik duvarlarını etkinleştirmek ve durum bilgisi olan güvenlik duvarı kullanımının istatistiklerini toplamak için kullanılabilir. Komut satırı arabirimi conntrack, bağlantı izleme sistemine eski /proc/net/nf_conntrack'ten daha esnek bir arabirim sağlar .

ipset

Bağlantı İzleme gibi diğer uzantıların aksine , çekirdek Netfilter kodundan ipsetdaha çok ilişkilidir iptables. ipsetörneğin Netfilter kancalarını kullanmaz, ancak aslında iptablesIP setleriyle eşleştirmek ve minimum değişiklik (ayarla/temizle) yapmak için bir modül sağlar .

Adlandırılan kullanıcı alanı aracı ipset, Linux çekirdeğinde "IP kümeleri" olarak adlandırılan kurmak, sürdürmek ve denetlemek için kullanılır. Bir IP seti genellikle bir dizi IP adresi içerir , ancak "türüne" bağlı olarak başka ağ numaraları da içerebilir. Bu kümeler, çıplak iptableskurallardan çok daha verimlidir , ancak elbette daha büyük bir bellek ayak izi ile gelebilir. ipsetKullanıcının optimum çözümü seçmesi için farklı depolama algoritmaları (bellekteki veri yapıları için) sağlanmıştır .

Bir kümedeki herhangi bir giriş, karmaşık eşleştirme işlemlerine izin vererek başka bir kümeye bağlanabilir. Bir küme, ancak iptablesona atıfta bulunan herhangi bir kural veya başka küme yoksa kaldırılabilir (yok edilebilir) .

SYN proxy'si

SYNPROXYhedef, bu gibi durumlarda bağlantı izleme tarafından uygulanan büyük performans cezaları olmadan büyük SYN taşmalarının ele alınmasını mümkün kılar. İlk SYNistekleri SYNPROXYhedefe yeniden yönlendirerek , bağlantılar doğrulanmış bir son ACKduruma ulaşana kadar bağlantı izleme içinde kaydedilmez ve bağlantı izlemeyi çok sayıda potansiyel olarak geçersiz bağlantının muhasebeleştirilmesinden kurtarır. Bu şekilde, büyük SYNtaşkınlar etkili bir şekilde ele alınabilir.

3 Kasım 2013'te SYNproxy işlevi, Linux çekirdeği ana hattının 3.12 sürümünün yayınlanmasıyla Netfilter ile birleştirildi.

ulogd

ulogdNetfilter alt sistemlerinden paketleri ve olay bildirimlerini almak ve günlüğe kaydetmek için bir kullanıcı alanı arka plan programıdır. ip_tablespaketleri kullanıcı alanı kuyruk mekanizması aracılığıyla kendisine teslim edebilir ve bağlantı izleme, ulogdpaketler veya olaylar hakkında daha fazla bilgi alışverişi yapmak için etkileşim kurabilir (bağlantı yırtılması, NAT kurulumu gibi).

Kullanıcı alanı kitaplıkları

Netfilter ayrıca libnetfilter, kullanıcı alanından farklı görevleri gerçekleştirmek için kullanılabilen, adlarının ön eki olan bir dizi kitaplık sağlar . Bu kitaplıklar GNU GPL sürüm 2 altında yayınlanır. Spesifik olarak, bunlar şunlardır:

libnetfilter_queue
iptables ile birlikte kullanıcı alanı paket kuyruğa alınmasına izin verir; dayalılibnfnetlink
libnetfilter_conntrack
kullanıcı alanından bağlantı izleme girişlerinin değiştirilmesine izin verir; dayalılibnfnetlink
libnetfilter_log
iptables tarafından oluşturulan günlük mesajlarının toplanmasına izin verir; dayalılibnfnetlink
libnl-3-netfilter
kuyruklar, bağlantı izleme ve günlükler üzerinde işlemlere izin verir; libnlprojenin bir parçası
libiptc
iptables güvenlik duvarı kural kümelerinde değişiklik yapılmasına izin verir; herhangi bir netlinkkitaplığa dayalı değildir ve API'si , iptablesyardımcı programlar tarafından dahili olarak kullanılır.
libipset
IP setlerinde işlemlere izin verir; dayalı libmnl.

Netfilter atölyeleri

Netfilter projesi, geliştiriciler için devam eden araştırma ve geliştirme çabalarını tartışmak için kullanılan yıllık bir toplantı düzenler. 2018 Netfilter çalıştayı, Haziran 2018'de Almanya'nın Berlin kentinde gerçekleşti.

Ayrıca bakınız

Referanslar

Dış bağlantılar