Linux iptables tabanlı ferm güvenlik duvarı nedir ve nasıl yapılandırılır

In Linuxtabanlı işletim sistemleri, güvenlik duvarı kullandığınız mükemmellik iptables, ancak iptables'ın evrimi olan nftables'ı çok daha verimli ve çok daha “insan” bir sözdizimi ile kullanmanız da mümkündür, ancak tüm dünya hala nftables kullanmıyor. Bugün, sözdizimini öğrenmek zorunda kalmadan güvenlik duvarına çok kolay, hızlı ve basit bir şekilde kurallar eklememizi sağlayacak bir iptables ön ucu olan Ferm (Kolay Kural Oluşturma İçin) kullanarak Linux sunucularında bir güvenlik duvarının nasıl yapılandırılacağını açıklayacağız. iptables.

Ferm güvenlik duvarı nedir ve ne içindir?

Linux iptables tabanlı ferm güvenlik duvarı nedir

Ferm (Kolay Kural Oluşturma için) iptables'ın bir ön yüzüdür, bu, altında, aslında trafiğe izin vermek veya trafiği reddetmek için iptables kullandığı anlamına gelir, ancak sözdizimini öğrenmek zorunda kalmadan güvenlik duvarını çok gelişmiş bir şekilde yapılandırmamıza izin verir. iptables veya iptables kullanarak farklı komut dosyaları oluşturun, ancak bunu doğrudan Ferm ile yapacağız. Bu araç, tanımlayacağımız bir yapılandırma dosyasından kuralları okuyabilir ve daha sonra farklı kuralları tek tek eklemek için iptables'ı "çağırır" ve bunları gerçek zamanlı olarak çekirdeğe ekler.

Ferm'in amacı, sistem ve ağ yöneticilerine tüm güvenlik duvarı kurallarını okumaları ve yazmaları için kolay bir yol sağlamak, birbiri ardına bir kural yazma zorunluluğunu azaltmak, böylece kuralları geliştirmek ve optimize etmek için daha fazla zaman harcayabilmemiz ve onları daha iyi hale getirmek için daha fazla zaman harcamaktır. mümkün olduğunca verimli. Ferm çok basit ama oldukça gelişmiş bir konfigürasyon dili kullanır, değişkenleri, fonksiyonları, dizileri ve hatta blokları kullanabiliriz. Ferm'in diğer çok ilginç seçenekleri, bir dizine diğer yapılandırma dosyalarını eklememize izin vermesi ve tüm bu kuralları otomatik olarak içe aktarma ve uygulama ile ilgilenmesidir.

Ferm hala bir iptables ön yüzüdür, bu nedenle, bu aracı kullandığımızda, iptables komutlarını kullanarak güvenlik duvarını her zaman doğrudan düzenleyebilir ve yapılandırabiliriz. Aslında, Ferm mevcut iptables kurallarını içe aktarabilir ve daha sonra düzenlemek veya genişletmek için bunları otomatik olarak yapılandırma dosyasına koyabilir.

En popüler iptables ön uçlarından biri, sistem ve ağ yöneticileri tarafından güvenlik duvarlarını kolay ve hızlı bir şekilde yapılandırmak için yaygın olarak kullanılan ufw'dir.

Ferm'in kurulumu ve devreye alınması

Ferm kurulumu gerçekten basittir, şu anda farklı Linux tabanlı dağıtımların çoğu deposunda bulunmaktadır, bizim durumumuzda size öğreteceğimiz tüm testleri gerçekleştirmek için Debian'ın en son sürümünü kullandık. Bir iptables frontend olan bu programı kurmak için aşağıdaki komutu uygulamamız gerekiyor:

sudo apt install ferm

Bu komutu çalıştırdığımızda, bunun gibi bir şey görmeliyiz, burada kurmamız gereken ek paketler gösterilecek, temel olarak bu programı doğru şekilde çalıştırabilmek için Perl'i kurmamız gerekiyor.

Ferm yükleyicisi, başlatma sırasında güvenlik duvarı kurallarını /etc/ferm/ferm.conf yolundan yükleyeceğini, yani bu dosyadaki her şeyin trafik ağına izin vermek veya reddetmek için otomatik olarak iptables'a geçirileceğini söyleyecektir. Bu güvenlik duvarının varsayılan yapılandırması, 22 numaralı bağlantı noktası üzerinden SSH ile uzaktan erişim sağlamamıza izin verir, bu bağlantı noktasında yapılandırılmış SSH'niz yoksa, varsayılan değerleri düzenlemeniz ve başlamaması için “hayır” düğmesine tıklamanız gerekir. , aksi takdirde bağlantıyı kaybedersiniz.

Evet veya hayır'ı seçtikten sonra apt, bu programın çalışması için ihtiyaç duyduğumuz tüm ek paketleri yüklemeyi bitirecek.

Kurulduktan sonra / etc / ferm / yoluna gidebiliriz ve hem ferm.conf adlı yapılandırma dosyasını hem de ferm yapılandırma dosyalarımızı içe aktarmak için birleştirebileceğimiz ferm.d adlı bir dizini göreceğiz, bu izin verir. daha fazla modülerliğe sahibiz.

Ferm, varsayılan olarak, herhangi bir zamanda kaldırabileceğimiz bir kurallar listesiyle birlikte gelir, ancak bu, bu iptables ön yüzünün sözdizimi ile başa çıkmamıza yardımcı olacaktır, bu nedenle oldukça yardımcı olacaktır. Sözdizimine bakarsak nftables ile benzer olduğunu ancak iptables tabanlı olduğunu göreceğiz.

Aşağıdaki ekran görüntüsünde, yapılandırılacağı alan adlarının (iptables veya ip6tables), tabloların ve zincirlerin yanı sıra farklı zincirler içinde sahip olduğumuz kuralların nasıl bildirildiğini görebilirsiniz.

Varsayılan olarak birkaç kuralımız olduğunu da görebiliriz:

  • INPUT zincirinde, politika DROP'tur, localhost trafiğine izin verilir, ICMP trafiğine ve bağlantıya IPsec üzerinden ve ayrıca varsayılan portlarla SSH üzerinden izin verilir. Bağlantıların durumu ile ilgili olarak, geçersiz bağlantılar İPTAL edilir, kurulan ve ilgili olanlara izin verilir, ancak özel olarak tanımlanmış olanlar dışında yenilerine izin verilmez.

ÇIKIŞ zincirinde, politikanın her şeyi kabul etmek olduğu tanımlanır ve bağlantının durumu, kurulan ve ilgili olanlara izin verir. FORWARD zincirinde trafik ilke tarafından reddedilir, geçersiz bağlantılar özellikle engellenir ancak kurulur ve ilgili bağlantılara izin verilir.

Ardından, bu yapılandırma dosyasını metin biçiminde görebilirsiniz:

# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;

# bağlantı izleme
mod durumu durumu GEÇERSİZ DROP;
mod durumu durumu (KURULAN İLGİLİ) KABUL;

# yerel pakete izin ver
arayüz ne KABUL;

# ping'e yanıt ver
proto icmp KABUL ET;

# IPsec'e izin ver
proto udp dport 500 KABUL;
@if @eq ($ DOMAIN, ip) {
proto (esp ah) KABUL ET;
} @Başka {
proto (esp) KABUL ET;
}

# SSH bağlantılarına izin ver
proto tcp dport ssh KABUL ET;
}
zincir ÇIKIŞ {
politika KABUL;

# bağlantı izleme
#mod durumu durumu GEÇERSİZ DROP;
mod durumu durumu (KURULAN İLGİLİ) KABUL;
}
zincir İLERİ {
politika DROP;

# bağlantı izleme
mod durumu durumu GEÇERSİZ DROP;
mod durumu durumu (KURULAN İLGİLİ) KABUL;
}
}
}

@include ferm.d /;

En ilginç kısım, son kısımda sahip olduğumuz “@include ferm.d /” kısmıdır, bu, söz konusu dizinde sahip olduğumuz tüm yapılandırma dosyalarını içe aktaracağı anlamına gelir.

Aşağıdaki Ferm güvenlik duvarı iptables kullanır, bu nedenle aşağıdaki komutu uygularsak:

iptables -L

Güvenlik duvarına dahil ettiği tüm kurallarla iptables'ın mevcut durumunu görebiliriz:

Varsayılan Ferm konfigürasyonunu gördükten sonra, yapabileceğimiz farklı konfigürasyon örneklerini göreceğiz.

Ferm Temel Yapılandırma

Ferm'in sözdizimi çok basit ve esnektir, ancak doğru bir konfigürasyon yapmak için onu öğrenmeliyiz. Size tavsiye ederiz resmi Ferm kılavuzuna erişin Yapılandırma dosyasında kullanılacak sözdizimi ve farklı kuralların nasıl bildirilmesi gerektiği ile ilgili tüm detayları burada bulacağınız, bu resmi kılavuz sayesinde bu güvenlik duvarını çok sorun yaşamadan yapılandırabiliriz.

Akılda tutulması gereken ilk şey, tüm Ferm kurallarının parantez ile başlayıp bittiği ve kuralların noktalı virgülle bittiğidir, bu nedenle programlamada iyi bilinen bir sözdizimidir. Diğer ilginç özellikler ise satır sonlarının yok sayılması ve satırın sonuna “#” koyarak istediğiniz yere yorum koyabilmenizdir.

iptables ve ferm sözdizimiyle ilgili olarak bazı farklılıklarımız var:

  • Giriş arayüzünü tanımlamak için: arayüz (eğer)
  • Çıkış arayüzünü tanımlamak için: dış yüz (of)
  • Kökeni tanımlamak için: saddr
  • Bir hedef tanımlamak için: dadr
  • Bir protokol tanımlamak için: proto
  • Menşe limanı: spor
  • Hedef bağlantı noktası: dport
  • Modül yükle: mod
  • Özel bir kurala atla: atla

Ferm'de -A, -I, -C, -R veya -D gibi komutlar yoktur, her şey bir yapılandırma dosyasına yazıldığından, yeni bir dize ekleme, yeniden adlandırma veya silme komutlarında da aynı şey olur, şimdi burada tamamen kayboluyor. Diğer özellikler, ferm'in yapılandırma dosyasında iç içe geçerek diğer kurallar içinde kullanılacak farklı kuralları devralmanıza izin vermesidir.

Sözdiziminin kabaca nasıl olduğunu öğrendikten sonra, iptables ile karşılaştıran bazı örnekler göreceğiz, hepsinde “INPUT” zincirindeki “filtre” tablosu üzerinde çalışacağız.

iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT

Ferm'de bu şu şekilde yazılır (filtre tablosundan OUTPUT ve FORWARD zincirinin politikasını ekleyerek):

domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}

Ferm, GİRİŞ ve ÇIKIŞ'ta aynı kuralları, kuralları tekrar tekrar tekrarlamaya gerek kalmadan kolay ve hızlı bir şekilde tanımlamamızı sağlar. Örneğin, şimdi hem GİRİŞ zincirinde hem de ÇIKIŞ zincirinde TCP protokolünü kabul etmek istediğimizi düşünelim, iptables'ta bu aşağıdaki gibi olacaktır:

iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j ACCEPT

Ferm ile aşağıdakileri yapmak kadar basittir:

domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}

Gördüğünüz gibi, aynı kuralı hem GİRİŞ hem de ÇIKIŞ'a uygulamak çok daha hızlı ve daha kolay.

Bu güvenlik duvarı aynı zamanda çok ilginç işlevleri de içerir, örneğin, bir değişkenin veya işlevin tanımlanıp tanımlanmadığını kontrol edebiliriz, iki değerin aynı veya farklı olup olmadığını kontrol edebilir, bir Boole değerini reddedebilir, alanları doğrudan Ferm'den çözebilir, parametreleri birleştirebilir ve uzun bir fonksiyonların listesi.

Ferm ayrıca, bunları kullanmak için iptables modüllerini "yüklemenize" ve güvenlik duvarını gelişmiş bir şekilde yapılandırmanıza izin verir, örneğin, aşağıdakilere sahibiz:

mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

Tüm yapılandırma dosyası boyunca koyabileceğimiz.

Ferm'de tanıtılan kuralları uygulamak için aşağıdaki komutu yürütmemiz gerekecek:

ferm -i -t 10 /etc/ferm/ferm.conf

iptables kurallarını Ferm'e aktarın

Ferm, halihazırda yürütmekte olduğumuz iptables kurallarını daha sonra değiştirilmek üzere bir Ferm dosyasına kolayca ve hızlı bir şekilde içe aktarmamızı sağlar. Bunu yapabilmek için iptables kurallarını belleğe (şu anda kullanımda) yüklememiz ve şu komutu çalıştırmamız yeterli:

import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf

Çalıştırdığımızda iptables kurallarını doğrudan Ferm'in sözdiziminde görebiliriz.

Bir metin dosyasındaki iptables kurallarını Ferm'e dönüştürmek istiyorsanız aşağıdaki komutu uygulayabilirsiniz:

import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf

Gördüğünüz gibi, ferm, iptables sözdizimini öğrenmek ve bir yapılandırma dosyasında kuralları doğru bir şekilde düzenlemek zorunda kalmadan, onu gelişmiş bir şekilde yapılandırmamıza izin verecek harika bir iptables ön yüzüdür. Ancak bizce, tüm iptables kuralları ile bir bash betiğini doğru bir şekilde yapılandırmanın herhangi bir önyüz veya ek yazılım gerektirmediğine inanıyoruz, ancak bazı insanlar için faydalı olabilir. Nftables'ın, kuralları yalnızca konsol komutları aracılığıyla etkileşimli olarak değil, doğrudan bir yapılandırma dosyasında yapılandırma olasılığını zaten içerdiğini hatırlamalıyız.