Linux'ta Hizmetlere Uzaktan Erişimi Etkinleştirmek için Iptables Güvenlik Duvarı Nasıl Kurulur - Bölüm 8


Linux Vakfı Sertifikasyon Programına Giriş

Bu LFCE (Linux Foundation Sertifikalı Mühendis) serisinin 1. Kısım – Iptable'ları Hakkında bölümünde güvenlik duvarının ne olduğuna dair temel bir açıklama verdiğimizi hatırlayacaksınız: yönetilecek bir mekanizma Ağa giren ve çıkan paketler. “Yönetmek” derken aslında şunu kastediyoruz:

  1. Belirli paketlerin ağımıza girmesine veya ağımızdan çıkmasına izin vermek veya engellemek için.
  2. Diğer paketleri ağın bir noktasından diğerine iletmek için.

önceden belirlenmiş kriterlere dayanmaktadır.

Bu makalede, temel paket filtrelemenin nasıl uygulanacağını ve güvenlik duvarının, güvenlik duvarı için kullanılan yerel bir çekirdek modülü olan netfilter'ın ön ucu olan iptables ile nasıl yapılandırılacağını tartışacağız.

Güvenlik duvarının çok geniş bir konu olduğunu ve bu makalenin bu konuda bilinmesi gereken her şeyi anlamaya yönelik kapsamlı bir kılavuz olmayı amaçlamadığını, bunun yerine bu konunun daha derinlemesine incelenmesi için bir başlangıç noktası olduğunu lütfen unutmayın. Ancak, Linux'ta güvenlik duvarının birkaç spesifik kullanım durumunu incelerken bu serinin Bölüm 10'unda konuyu tekrar ele alacağız.

Güvenlik duvarını, yolcu uçaklarının neredeyse 7/24 gelip gittiği uluslararası bir havaalanı olarak düşünebilirsiniz. Bir kişinin pasaportunun veya menşe ülkesinin (birkaç örnek vermek gerekirse) geçerliliği gibi bir takım koşullara bağlı olarak, kişinin belirli bir ülkeye girmesine veya ayrılmasına izin verilebilir veya verilmeyebilir.

Aynı zamanda, havaalanı görevlileri, örneğin Gümrük Hizmetlerinden geçmeleri gerektiğinde, gerektiğinde insanlara havaalanında bir yerden başka bir yere gitmeleri talimatını verebilir.

Bu eğitimin geri kalanında havaalanı benzetmesini faydalı bulabiliriz. İlerlerken aşağıdaki ilişkileri aklınızda bulundurun:

  1. Kişiler=Paketler
  2. Güvenlik Duvarı=Havaalanı
  3. Ülke #1=Ağ #1
  4. Ülke #2=Ağ #2
  5. Memurlar tarafından uygulanan havaalanı düzenlemeleri=güvenlik duvarı kuralları

Iptables – Temel Bilgiler

Düşük düzeyde, zincirler veya cümleler halinde gruplandırılmış kurallara dayalı olarak paketlerle ne yapılacağına "karar veren" çekirdeğin kendisidir. Bu zincirler, bir paketin kendileri tarafından belirlenen kriterlere uyması durumunda hangi önlemlerin alınması gerektiğini tanımlar.

iptables tarafından gerçekleştirilen ilk eylem, bir paketle ne yapılacağına karar vermek olacaktır:

  1. Kabul et (ağımıza girmesine izin ver)?
  2. Reddetmek mi istiyorsunuz (ağımıza erişmesini engellemek)?
  3. (Başka bir zincire) iletilsin mi?

Bu araca neden iptables denildiğini merak ediyorsanız, bunun nedeni, bu zincirlerin tablolarda düzenlenmiş olmasıdır; filtre tablosu en iyi bilinen ve en çok kullanılanıdır. Üç varsayılan zinciriyle paket filtrelemeyi uygulamak için kullanılır:

1. INPUT zinciri, yerel programlara yönelik olan, ağa gelen paketleri yönetir.

2. OUTPUT zinciri, yerel ağdan kaynaklanan ve dışarıya gönderilecek olan paketleri analiz etmek için kullanılır.

3. FORWARD zinciri, başka bir hedefe (yönlendirici durumunda olduğu gibi) iletilmesi gereken paketleri işler.

Bu zincirlerin her biri için, paketler zincirdeki kurallardan herhangi biriyle eşleşmediğinde varsayılan olarak ne yapılması gerektiğini belirleyen bir varsayılan politika vardır. Aşağıdaki komutu çalıştırarak her zincir için oluşturulan kuralları ve varsayılan politikayı görüntüleyebilirsiniz:

iptables -L

Mevcut politikalar aşağıdaki gibidir:

  1. KABUL → paketin geçmesine izin verir. Zincirdeki herhangi bir kuralla eşleşmeyen herhangi bir paketin ağa girmesine izin verilir.
  2. DROP → paketi sessizce bırakır. Zincirdeki herhangi bir kuralla eşleşmeyen paketlerin ağa girişi engellenir.
  3. REJECT → paketi reddeder ve bilgilendirici bir mesaj döndürür. Özellikle bu, varsayılan politika olarak çalışmaz. Bunun yerine paket filtreleme kurallarını tamamlaması amaçlanmıştır.

Hangi politikayı uygulayacağınıza karar vermeye gelince, yukarıda açıklandığı gibi her yaklaşımın artılarını ve dezavantajlarını göz önünde bulundurmanız gerekir; tek boyutlu bir uyum olmadığını unutmayın -hepsi çözüm.

Kural Ekleme

Güvenlik duvarına bir kural eklemek için iptables komutunu aşağıdaki şekilde çağırın:

iptables -A chain_name criteria -j target

Neresi,

  1. -A Ekle anlamına gelir (geçerli kuralı zincirin sonuna ekler).
  2. zincir_adı GİRİŞ, ÇIKIŞ veya İLERİ'dir.
  3. hedef bu durumda uygulanacak eylem veya politikadır (KABUL, REDDET veya BIRAK).
  4. kriter, paketlerin inceleneceği koşullar kümesidir. Aşağıdaki bayraklardan en az birinden (büyük olasılıkla daha fazlasından) oluşur. Dikey bir çubukla ayrılmış parantez içindeki seçenekler birbirine eşdeğerdir. Geri kalanı isteğe bağlı anahtarları temsil eder:
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

Test Ortamımız

İlk ikisi için aşağıdaki test ortamını kullanarak tüm bunları 3 klasik örneğe yapıştıralım:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

Ve bu son örnek için

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
ÖRNEK 1: DROP ve REJECT politikaları arasındaki farkın analiz edilmesi

Güvenlik duvarımıza yapılan giriş ping'leri için öncelikle bir DROP politikası tanımlayacağız. Yani icmp paketleri sessizce bırakılacaktır.

ping -c 3 192.168.0.15
iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

REJECT kısmına geçmeden önce, paketlerimizin bu yeni kuralla test edileceğinden emin olmak için INPUT zincirindeki tüm kuralları temizleyeceğiz:

iptables -F INPUT
iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
ping -c 3 192.168.0.15

ÖRNEK 2: dev2'den dev1'e ssh girişlerini devre dışı bırakma/yeniden etkinleştirme

Giden trafiği yönetirken OUTPUT zinciriyle de ilgileneceğiz:

iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

ÖRNEK 3: NFS istemcilerinin (192.168.0.0/24'ten itibaren) NFS4 paylaşımlarını bağlamasına izin verme/engelleme

Her türlü trafik için 2049 ve 111 numaralı bağlantı noktalarını kapatmak üzere NFSv4 sunucusunda/güvenlik duvarında aşağıdaki komutları çalıştırın:

iptables -F
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Şimdi bu portları açalım ve ne olacağını görelim.

iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Gördüğünüz gibi trafiği açtıktan sonra NFSv4 paylaşımını mount edebildik.

Kural Ekleme, Ekleme ve Silme

Önceki örneklerde kuralların INPUT ve OUTPUT zincirlerine nasıl ekleneceğini gösterdik. Bunları önceden tanımlanmış bir konuma eklemek istiyorsak bunun yerine -I (büyük harf i) anahtarını kullanmalıyız.

Kuralların birbiri ardına değerlendirileceğini ve bir DROP veya ACCEPT politikası eşleştiğinde değerlendirmenin duracağını (veya atlayacağını) hatırlamanız gerekir. Bu nedenle zincir listesinde kuralları gerektiği gibi yukarı veya aşağı taşıma ihtiyacı içinde kendinizi bulabilirsiniz.

Bunu göstermek için önemsiz bir örnek kullanacağız:

Aşağıdaki kuralı yerleştirelim,

iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

GİRİŞ zincirinde 2. konumda (böylece önceki #2, #3 olarak hareket eder)

Yukarıdaki kurulum kullanılarak, 2049 bağlantı noktasını kontrol etmeden önce trafiğin 80 bağlantı noktasına yönlendirilip yönlendirilmediği kontrol edilecektir.

Alternatif olarak, bir kuralı silebilir ve kalan kuralların hedefini REDDET olarak değiştirebilirsiniz (-R anahtarını kullanarak):

iptables -D INPUT 1
iptables -nL -v --line-numbers
iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Son olarak, güvenlik duvarı kurallarının kalıcı olması için, bunları bir dosyaya kaydetmeniz ve ardından önyükleme sırasında otomatik olarak geri yüklemeniz gerektiğini (tercih ettiğiniz yöntemi veya size sunulan yöntemi kullanarak) hatırlamanız gerekir. dağıtımınız için kullanılabilir).

Güvenlik duvarı kurallarını kaydetme:

iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Kuralları geri yükleme:

iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Burada, yukarıda gösterildiği gibi varsayılan dosya yerine iptables.dump adlı sahte bir dosya kullanarak benzer bir prosedür (güvenlik duvarı kurallarını elle kaydetme ve geri yükleme) görebiliriz.

iptables-save > iptables.dump

Bu değişikliklerin önyüklemelerde kalıcı olmasını sağlamak için:

Ubuntu: /etc/iptables/rules.v4 dosyasına kaydedilen kuralları yükleyecek iptables-persistent paketini yükleyin.

apt-get install iptables-persistent

CentOS: Aşağıdaki 2 satırı /etc/sysconfig/iptables-config dosyasına ekleyin.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: İzin verilen bağlantı noktalarını, protokolleri, adresleri vb.'ni (virgülle ayırarak) /etc/sysconfig/SuSEfirewall2 dosyasında listeleyin.

Daha fazla bilgi için yoğun şekilde yorum yapılan dosyanın kendisine bakın.

Çözüm

Bu makalede verilen örnekler, iptables'ın tüm özelliklerini kapsamamakla birlikte, gelen veya giden trafiğin nasıl etkinleştirilip devre dışı bırakılacağını gösterme amacına hizmet etmektedir.

Güvenlik duvarı hayranı olanlar için, bu LFCE serisinin Bölüm 10'unda bu konuyu daha spesifik uygulamalarla yeniden ele alacağımızı unutmayın.

Herhangi bir sorunuz veya yorumunuz varsa bana bildirmekten çekinmeyin.