iptables: Sunucunuzu korumak için Linux güvenlik duvarı nasıl yapılandırılır

iptables: Linux güvenlik duvarı nasıl yapılandırılır

iptables, güvenlik duvarı üzerinde kullanılan Linuxtabanlı işletim sistemleri. Son yıllarda varsayılan olarak nftables kurulu olsa da, işletim sistemimizde güvenlik duvarını yapılandırmak için hala iptables sözdizimini kullanabilirsiniz, örneğin Debian, Ubuntu ve hatta Linux tabanlıysa yönlendiricinin güvenlik duvarı. Yerel ağımızı izinsiz girişlerden korumak için iptables'ı bilmek çok önemlidir, çünkü iptables bize istediğimiz trafiğe izin verme veya reddetme imkanı verecektir. Bugün bu yazıda iptables'ın nasıl çalıştığını ve gelişmiş kullanım örneklerini açıklayacağız.

iptables'in başlıca özellikleri

iptables, ağımız üzerinde bir güvenlik duvarı veya güvenlik duvarı görevi görmekten sorumlu bir yazılımdır. İşletim sistemlerinin çok önemli bir parçasıdır ve yetkili erişime izin vermek ve yetkisiz erişimi engellemek için özel olarak tasarlanmıştır. Güvenlik duvarı, hem gelen hem de giden paketler için bir kontrol noktası oluşturur. Ayrıca, bir güvenlik duvarının farklı ağları geçen trafikten koruduğunu, ancak yerel ağı aynı alt ağ içinde meydana gelen saldırılardan korumadığını belirtmek çok önemlidir. .

iptables, 2.4 sürümünden beri Linux sistemlerinde bulunan güvenlik duvarıdır, bu nedenle şu anda nftables dahili olarak kullanılmasına rağmen, bugün iptables eski kabul edildiğinden, Debian, Ubuntu, Linux Mint ve diğerleri gibi sistemlerde varsayılan olarak yerleşiktir. Linux sistem yönetimi dünyasında ve ayrıca ağ yönetimi dünyasında hala yaygın olarak kullanılmaktadır.

Bu güvenlik duvarı, farklı zincirler ve kurallar ekleme olasılığını büyük ölçüde kolaylaştırmak amacıyla varsayılan olarak oluşturulmuş birkaç tabloya sahiptir. Çok önemli bir ayrıntı, varsayılan olarak her şeyi "kabul et" olarak ayarlamış olmamızdır, yani tüm trafiğe izin verilir, trafiği reddetmek için bir kural yoktur, bu nedenle, ilk başta bu güvenlik duvarı izinlidir, ancak varsayılan politikayı çok değiştirebiliriz. kolay ve hızlı.

Ana özelliklerini öğrendikten sonra, size bu güvenlik duvarının çalışmasını ve mimarisini göstereceğiz.

Operasyon ve mimari

Bu güvenlik duvarı birbiri ardına tanıtacağımız kurallara dayanmaktadır, çalışması güvenlik duvarının kendisinin yürütmekten sorumlu olduğu kuralların uygulanmasına dayanmaktadır. Iptables ilk bakışta kullanımı basit gibi görünse de, bunu gelişmiş bir şekilde yapmak isterseniz, daha karmaşıktır. Ardından, iptables'ın nasıl çalıştığına dair bir özet şema görebilirsiniz.

iptables yapısı, çoğu varsayılan olarak zaten oluşturulmuş olan tablolara dayanır. Tabloların içinde, bazılarını varsayılan olarak oluşturduğumuz dizeler var. Son olarak, zincirlerin içinde yapılandırabileceğimiz farklı kurallarımız var. Aşağıdaki fotoğrafta güvenlik duvarı mimarisinin nasıl görüneceğine dair küçük bir şema görebilirsiniz:

Varsayılan olarak toplam dört tablomuz var:

  • filtre tablosu : varsayılan tablodur, kural eklemek için bir tablo tanımlamazsak her zaman filtre tablosuna gider. Bu tabloda, bizi ilgilendiren şeye bağlı olarak toplam üç varsayılan zincirimiz var, bir zincir veya diğerini kullanmamız gerekecek: GİRİŞ (bunlar, güvenlik duvarının kendisine gelen yöndeki paketlerdir), ÇIKIŞ (bunlar giden paketler, sunucu çıkışı) ve İLERİ (bir ağ arabiriminden diğerine giden paketleri filtrelemek için kullanılır).
  • Nat tablo: bu tablo NAT'ın yapılmasından, özel IP'nin genele dönüştürülmesinden ve bunun tersinden sorumludur. NAT içinde üç zincirimiz vardır: PREROUTING (paketleri yönlendirmeden önce değiştirir, burada DNAT veya port yönlendirme yapılır), POSTROUTING (paketleri yönlendirdikten sonra değiştirir, burada SNAT veya MASQUERADE yapılır) ve OUTPUT (yapılandırılan güvenlik duvarı tarafından oluşturulan paketler) NAT geçiş yapacaktır).
  • Bozmak tablo: bu tablo paketleri değiştirmekten sorumludur, QoS'nin hizmet kalitesi, TCP başlıklarını değiştirme vb. için yapılandırıldığı yerdir. Bu tabloda beş zincire sahibiz: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.
  • çiğ tablo – Paketler bağlantı durumu olmadan hareket ettiğinden bu tablo sıklıkla kullanılmaz. PREROUTING ve OUTPUT zincirine sahibiz.

Aşağıdaki resimde, farklı tablolarda sahip olduğumuz zincirlerin küçük bir özetini görebilirsiniz:

Kural ekleme işlemi aşağıdaki gibidir:

  • Zincirlere eklediğimiz kuralların her zaman bir hedefi vardır (kuralda -j).
  • Güvenlik duvarı bir paket aldığında, paketin listelediğimiz bir kuralla eşleşip eşleşmediğini kontrol eder. Eşleşirse hedef komut yürütülür, aksi takdirde zincirin sonuna kadar bir sonraki kurala geçer.
  • Kurallar, ilk kuraldan sonuncuya kadar sıralı bir sırayla kontrol edilir. Sıra çok önemlidir, önce her şeyi engeller, sonra daha spesifik bir şeye izin verirsek, tüm trafiği engelleriz ve en spesifik kural kontrol edilmez.
  • Paketi hiçbir kuralın karşılamaması durumunda, sahip olduğumuz zincirin politikası (global kural) kullanılacaktır.

Farklı kuralların amaçları şunlardır:

  • KABUL: paketi kabul eder ve bir sonraki seviyeye, bir web sunucusuna, SSH'ye, FTP'ye vb. iletir.
  • DROP: paketi bloke eder ve bir sonraki seviyeye geçmez.
  • KUYRUK: paketi, kullanıcı alanı işlemesi için tasarlanmış bir kuyruğa geçiren özel bir hedeftir. Bu, diğer harici programları çalıştırmak için kullanılabilir.
  • DÖNÜŞ: Zincirin sonuna ulaşmışız gibi aynı etkiye sahiptir. Kural, varsayılan zincirlerden birindeyse, zincirin ilkesi yürütülür. Kullanıcı tanımlı bir zincirde olan bir kural için, atlandığı kuralın hemen ardından, atlamadan önce zincir boyunca devam ederek çıkılır.

Nasıl çalıştığını ve mimarisini bildiğimizde, farklı eylemleri gerçekleştirmek için farklı komutlar göreceğiz.

 

iptables kullanmak için gerekli komutlar

Bu güvenlik duvarını yapılandırırken hesaba katmamız gereken ilk şey, farklı emirleri yerine getirmek için süper kullanıcı izinlerine ihtiyacımız olmasıdır. Koşmaları kesinlikle gereklidir, aksi halde işe yaramaz. Aşağıdaki komutlarda “sudo” yoktur çünkü zaten süper kullanıcı (sudo su) olduğunuzu varsayıyoruz.

Linux'un en son sürümlerinde iptables hizmetini durdurmak mümkün değildir, tüm ağ trafiğine izin vermek ve güvenlik duvarını varsayılan parametrelerle bırakmak için aşağıdaki komutları yürütmemiz gerekir:

  • sudo iptables -F
  • sudo iptables -X
  • sudo iptables -t nat -F
  • sudo iptables -t nat -X
  • sudo iptables -t mangle -F
  • sudo iptables -t mangle -X
  • sudo iptables -P GİRİŞİ KABUL
  • sudo iptables -P İLERİ KABUL
  • sudo iptables -P ÇIKIŞ KABUL

Bunu yaptıktan sonra güvenlik duvarını “sıfırlayacağız” ve her şeye izin vereceğiz. Artık nasıl sıfırlayacağımızı bildiğimize göre, farklı komutları görelim.

 

Mevcut tabloları görüntüle

Belirli bir tabloda sahip olduğumuz farklı zincirlerin ve kuralların içeriğini görmek istiyorsanız, nasıl görüneceklerini görebilirsiniz:

  • iptables -t filtresi –listesi
  • iptables -t mangle –listesi
  • iptables -t nat –listesi
  • iptables -t ham –listesi

 

Ana argümanlar ve ne için oldukları

  • -t, –table table İstediğimiz tabloyu seçin
  • -A, –append zincir kuralı-belirli bir zincire yeni bir kural ekliyoruz
  • -C, –check zinciri kuralı-belirliliği Belirli bir zincirde belirli bir kuralın olup olmadığını kontrol ederiz.
  • -D, –delete zincir kuralı-belirli bir zincire koyduğumuz kuralı sileriz
  • -D, –delete chain rulenum Belirli bir zincirdeki X numaralı kuralı siliyoruz
  • -I, –insert chain [rulenum] kural spesifikasyonu Belirli bir tabloya bir sayı ile yeni bir zincir ekliyoruz
  • -R, –replace chain rulenum kural belirtimi Sayıyı taşımak için kullanılan bir tabloda verilen bir zinciri değiştirir.
  • -L, –list [zincir] Bir zincirin kurallarının listesini göster
  • -F, –flush [chain] Belirli bir zincirdeki tüm kuralları temizle.
  • -Z, –zero [zincir [rulenum]] Belirli bir kuralın sayaçlarını 0'a ayarlar.
  • -N, –new-chain chain Belirli bir tabloda yeni bir zincir oluşturuyoruz
  • -X, –delete-chain [chain] Belirli bir tablodaki belirli bir zinciri (boş) sileriz
  • -P, –policy chain target Varsayılan politikayı uygularız, zincirlerin hiçbir kuralı yerine getirilmediğinde yerine getirilir.
  • -E, –rename-chain old-chain new-chain Önceden eklenmiş bir zinciri yeniden adlandırın
  • -h, yardım göster
  • -v, –verbose –L komutunun sağladığından daha fazla bilgi görüntülemek için –L ile birlikte kullanılan çıktı.
  • -n, –sayısal IP adresleri ve bağlantı noktası numaraları sayı olarak görünecektir. Örneğin, 80 numaralı bağlantı noktasını filtrelersek, tipik –L www görünür, 80 değil.
  • -x, –exact Değerler için K, M veya G kullanmak yerine paketin ve bayt sayacının tam değerini gösterin.
  • –line-numbers Kural listesi gösterilirken, kuralın tam sayısını gösterecektir. –D ve sayı (sil) veya –I’yi söz konusu kuraldan önce veya sonra tanıtmak için idealdir.

 

Ana koşullar

  • -p , –protokol protokolü. Paketi protokole göre filtreleyin, belirtilen protokol şunlar olabilir: tcp, udp, Idplite, icmp, esp, ah, sctp.
  • -s , –kaynak adresi[/mask][,…] Paketin kaynak IP adresi. Bir IP veya alt ağımız olabilir (maskeyi CIDR formatında gösterir). Ana bilgisayar adlarını da (etki alanları, web siteleri vb.) koyabiliriz, ancak verimli olmadığı için bu kötü bir fikirdir. Birden fazla kaynak adresi belirtilebilir, (192.168.1.1,192.168.1.2) ancak bunları karşılamak için farklı kurallar oluşturacaktır.
  • -d , –hedef adres[/mask][,…] Paketin hedef IP adresi. Tam olarak -s gibi davranır.
  • -m , -maç maçı. Aşağıdakiler gibi belirli eylemleri gerçekleştirmek için genişletilmiş iptables modüllerini çağırmak isteyip istemediğimizi belirtir:
    • Birden çok kaynak ve hedef bağlantı noktası (çoklu bağlantı noktası modülü) koyun.
    • Kontrol bağlantıları (bağlantı modülü).
    • Kaba kuvvetten kaçının (son modül, SSH için ideal).
    • Bağlantı sayısını sınırlayın (modulo limit ve connlimit).
    • IP adresi aralığı (iprange).
  • -j , –atlama hedefi. Paketi kabul etmek, reddetmek ve hatta daha fazla işlem için başka bir zincire iletmek istiyorsak kuralın amacını belirtir. Her zaman herhangi bir kuralda, ne yapmak istediğimizi söylemek için bir -j'ye sahip olacağız. Bir –j eklemezsek, kural eklenecek ve paketleri sayacak, ancak hiçbir şey yapmayacak. -j'yi başka bir zincire iletmek için kullanırsak, diğer zincir bittiğinde orijinaline dönecektir.
  • -g , –goto zinciri. Trafiği başka bir zincire yönlendirmek için kullanılır ancak atlamadan farklı olarak geldiği orijinal zincire geri dönmez.
  • -i , -arayüz adı. Paketin alındığı arabirimin adı. Yalnızca INPUT, FORWARD ve PREROUTING gibi girdi dizeleri için çalışır. Eğer koyarsak, bu arayüz dışındaki her şey anlamına gelir. Adın sonuna + koyarsak, adın başındaki herhangi bir arayüz kontrol için onu yakalayacaktır. eth0, eth1 ve eth2'yi hayal edelim. Üçünü de koymak istiyorsak, sadece eth+ koymak yeterlidir.
  • -o , –out-arayüz adı. Paketin ayrıldığı arabirimin adı. Yalnızca OUTPUT, FORWARD ve POSTROUTING gibi çıktı dizeleri için geçerlidir.

 

Yalnızca TCP veya UDP kullanıyorsanız koşullar

TCP veya UDP protokolünü kullanıyorsanız, kaynak ve/veya hedef bağlantı noktası numarasına göre filtrelemek isteyebilirsiniz, o zaman kullanabileceğiniz iki bağımsız değişkeniniz vardır:

  • –spor –kaynak-port. İzin vermek veya reddetmek için kaynak bağlantı noktalarını seçin. Eğer kullanırsak! hariçtir.
  • –dport –hedef-port. İzin vermek veya reddetmek için hedef bağlantı noktalarını seçin. Eğer kullanırsak! hariç tutar.

Güvenlik duvarının gelişmiş yapılandırması için daha birçok koşul vardır, ancak temel olanları zaten listeledik.

 

Varsayılan politikayı ayarlayın

İlkeler, zincir içinde bir kural bulunmadığında varsayılan ilkenin yürütülmesi için kullanılır. Tüm zincirler için varsayılan politika KABUL'dur, ancak iki seçenek vardır: KABUL ET veya BIRAK

-P, –politika zinciri hedefi

Örnekler:

  • iptables -P GİRİŞ DROP
  • iptables -P İLERİ DAMLA
  • iptables -P ÇIKIŞ DÜŞÜMÜ

Bununla internetimiz bitecek, bu yüzden daha sonra izin veren kurallar oluşturmaya başlamalıyız.

Aşağıda, sahip olduğumuz tüm politikaları farklı tablolarda görebilirsiniz:

  • iptables -t filtre -P (GİRİŞ | ÇIKIŞ | İLERİ) (KABUL | BIRAK)
  • iptables -P (GİRİŞ | ÇIKIŞ | İLERİ) (KABUL | BIRAK)
  • iptables -t mangle -P (GİRİŞ | ÇIKIŞ | İLERİ | ÖN YÖNLENDİRME | SONRASI) (KABUL | BIRAK)

 

Güvenlik duvarı durumunu görüntüle

-L parametresi konfigüre ettiğimiz kuralları gösterir. V, bağlantılar hakkında daha fazla bilgi almanızı sağlar ve N, IP adreslerini ve bunlara karşılık gelen bağlantı noktalarını bir DNS sunucusu.

  • iptables -L -n -v

Bu, güvenlik duvarının durumunu görmek için en önemli komutlardan biridir.

 

iptables modülleri (-m eşleşmesi)

 

çoklu bağlantı noktası

Bize benzer kuralları farklı TCP ve UDP bağlantı noktalarıyla bir arada gruplama imkanı veren iptables'ın bir uzantısıdır. Çoklu bağlantı noktası, birkaç bağlantı noktasını atlamanıza ve ayrıca birkaç bağlantı noktasını arka arkaya koymanıza izin verir, maksimum 15 bağlantı noktası argümanıdır. Misal:

  • iptables –A GİRİŞ –p tcp –m çoklu bağlantı noktası –dports 80,81,1000:1200 –j KABUL

Bu modül sayesinde aynı kuralda birden fazla port kullanma imkanımız var.

 

Ip aralığı

iprange, düzinelerce kural koymaya gerek kalmadan aynı anda birkaç kaynak veya hedef IP adresi koymamızı sağlar. Ayrıca hem kaynak hem de hedef IP koymanıza izin verir, sözdizimi aşağıdaki gibidir:

  • [!]–src aralığı ip-ip
  • [!]–dst aralığı ip-ip

Bu kuralın işleyişi oldukça basittir, biz sadece başlangıç ​​IP'sini ve bitiş IP'sini koyuyoruz.

 

Sınırlamak

Connlimit modülü, bir IP adresi tarafından yapılan eşzamanlı bağlantıların sayısını kısıtlamaktan sorumludur, DoS'tan kaçınmak için bağlantı sayısını sınırlamak için idealdir.

  • – n'ye kadar sınırla. Bağlantı sayısının N'ye eşit veya daha az olup olmadığını kontrol ederiz (bu durumda izin verebilir veya reddedebiliriz).
  • –bağla-yukarıda n . Bağlantı sayısının N'den büyük olup olmadığını kontrol ederiz (bu durumda izin verebilir veya reddedebiliriz).
  • –conlimit-mask öneki_uzunluğu . Alt ağ aralığına göre işaretliyoruz (2 bağlantı yapan bir ana bilgisayarla aynı, aynı alt ağdaki iki ana bilgisayar her biri 1 bağlantı yapıyor).
  • –conlimit-saddr . Sınırlamayı kaynak gruba uygulayın, hiçbir şey belirtilmemişse varsayılandır.
  • -connlimit-daddr . Sınırlamayı hedef gruba uygular.

Örneğin, istemci başına yalnızca iki SSH bağlantısına izin vermek istediğimizi varsayalım:

  • iptables -A INPUT -p tcp –dport 22 -m conlimit –connlimit-above 2 -j DROP

Ancak, tamamlayıcı kuralı 2 bağlantıya kadar kabul ederek yapabiliriz.

 

bağlantı

Bu modül bağlantıları izlemek için kullanılır, bağlantının kurulmasından önce ve sonra paketlerin giriş ve çıkışlarını yönetmek için kullanılır. Bu modülde birkaç seçenek vardır, ancak en önemlisi farklı türdeki paketleri kabul etmemize veya reddetmemize izin veren -ctstate'dir. Ctstate içinde birkaç durumumuz var, aşağıdakiler öne çıkıyor:

  • GEÇERSİZ: Alınan paket geçersiz ve herhangi bir bağlantıya ait değil.
  • YENİ: Yapılan veya henüz çift yönlü olmayan bir bağlantıyla ilişkilendirilen yeni bağlantılar.
  • KURULDU: Kurulan bağlantılar, bir yanıt aldıkları için önce YENİ'den geçerler
  • İLGİLİ: Pasif FTP gibi mevcut bir bağlantıyla ilgili ancak bunun parçası olmayan bir paket.

Diyelim ki herhangi bir siteye erişmek istiyoruz, ancak kesinlikle kimsenin bize erişmesini istemiyoruz.

  • iptables –P GİRİŞ DURUMU
  • iptables -A INPUT -m conntrack –ctstate KURULDU, İLGİLİ -j KABUL

 

Sınırlamak

Limit modülü, bağlantı denemeleri sırasında hem trafiği hem de sistem günlüğüne yazılacak günlük sayısını sınırlamamızı sağlar. İki ana argümanı vardır:

  • -sınır N . Bu bağımsız değişken, izin verilecek saniye (N/s), dakika (N/m), saat (N/s) veya gün (N/d) başına maksimum ortalama eşleşme sayısını belirtir. N sayıyı belirtir
  • – limit patlaması N . Limit –limit kontrol edilmeden önce oluşabilecek en uzun çoğuşmayı gösterir.

Hiçbir şey belirtilmemişse varsayılan değer 3'lik patlamalar halinde saatte 5 eşleşmedir. Şu kuralı hayal edin: “iptables -A INPUT -m limit -j LOG”, işlem aşağıdaki gibidir:

  • Bu kurala ilk vurulduğunda, ilk beş paket günlüğe kaydedilir.
  • Daha sonra, bir paketin bu kuralla yeniden kaydedilmesi için yirmi dakika olacaktır (ortalama olduğu için 3 dakika arasındaki 60 maç 20 dakikaya eşittir).
  • Ayrıca, paket kurala ulaşmadan geçen her yirmi dakikada bir çoğuşma bir paket alacaktır.
  • 100 dakika boyunca hiçbir şey olmazsa, patlama tamamen şarj olur; sonra ilk duruma geri dönün.

 

Son

Son modül, IP düzeyinde saniye başına bağlantı sayısını sınırlamak için kullanılır, bu, bir saldırgan birden fazla parola deneyeceğinden bizi SSH bağlantı noktasına yapılan saldırılardan korumak için idealdir. Örneğin, SSH'mizi korumak istiyorsak aşağıdaki kuralı çalıştırabiliriz:

  • iptables -A INPUT -p tcp –dport 22 -m bağlantı –ctstate YENİ -m son –set –name ssh –rsource
  • iptables -A INPUT -p tcp –dport 22 -m durum –durum YENİ -m son –rcheck –saniye 60 –hitcount 4 –name ssh –rsource -j DROP

Bu kural 60 saniye içinde sadece dört bağlantı denemesine izin verir, “kayan” bir penceredir.

 

NAT

Bu güvenlik duvarı, bağlantımızı NAT yapmaktan da sorumludur. Genel IP'mizin (veya bu genel IP'ye sahip arayüzün) NAT'ını yapmak için şunu koymalıyız:

  • Statik SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 –o eth1 -j SNAT –to IP_eth1
  • Dinamik SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

Normal olan, fiziksel veya mantıksal arabirimin sahip olduğu IP adresinden bağımsız olarak NAT yapmak için MASQUERADE kullanmaktır.

Bağlantı noktalarını açmak için NAT tablosunun PREROUTING zincirine bir kural eklemeliyiz.

  • iptables -t nat -A ÖN ROUTING -i eth1 -p tcp –dport 22 -j DNAT –hedefe 192.168.1.1

PREROUTING tablosu aynı zamanda portları anında değiştirmemize izin verir, böylece eğer 2121 portundan paket alırsak onu 21'e dönüştürebiliriz.

  • iptables -t nat -A ÖN ROUTING -i eth1 -p tcp –dport 2121 -j DNAT –hedefe 192.168.1.1:21

Bu güvenlik duvarını ayrıntılı olarak öğrendikten sonra, temel kullanım örneklerini ve ayrıca en gelişmişlerini göreceğiz.

 

Temel kullanım örnekleri

Bu güvenlik duvarı çok eksiksizdir ve farklı eylemler gerçekleştirmek için yürütebileceğimiz yüzlerce komuta sahibiz. Bu makalede, bu güvenlik duvarına ilk yaklaşım için size anlaşılması kolay bazı örnekler vereceğiz.

192.168.1.10 IP adresinin sunucumuzla iletişim kurmasını engelleyin:

  • iptables -A GİRDİ –s 192.168.1.10 –j DROP

192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 IP adreslerinin sunucumuzla iletişim kurmasını engelleyin:

  • iptables -A GİRDİ –s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 –j DROP

192.168.2.0/24 alt ağının tamamının, izin verilen 192.168.2.20 IP adresi dışında sunucumuzla herhangi bir iletişim kurmasını engelleyin:

  • iptables –A GİRDİ –s 192.168.2.20 –j KABUL
  • iptables –A GİRDİ –s 192.168.2.0/24 –j DROP

192.168.4.50 IP adresini engelleyin ki iletişim kuramayalım:

  • iptables –A ÇIKIŞ –d 192.168.4.50 –j DROP

192.168.4.51 ve 192.168.4.52 IP adreslerini engelleyin ki iletişim kuramayalım:

  • iptables –A ÇIKIŞ –d 192.168.4.51,192.168.4.52 –j DROP

www.google.es'e iptables'tan erişimi engelleyin:

  • iptables –A ÇIKTI –d www.google.es –j DROP

MAC 00:01:02:03:04:05'ten sunucumuza erişimi engellemek istiyoruz ve gerisi her şeye izin veriyor:

  • iptables -A GİRİŞ -m mac –mac-source 00:01:02:03:04:05 -j DROP

Sunucumuza MAC 00:01:02:03:04:06 MAC adresine erişim izni vermek istiyoruz ve gerisi her şeyi reddediyor:

  • iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j KABUL
    iptables -A GİRİŞ -j DROP

Sunucumuzdan ping atmak için 192.168.1.10 IP adresini engelleyin:

  • iptables -A GİRDİ -s 192.168.1.10 -p icmp -j DROP

192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 IP adreslerinin sunucumuza PING göndermesini engelleyin (tek bir kuralda):

  • iptables -A GİRDİ -s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 -p icmp -j DROP

İzin verilen 192.168.2.0 IP adresi dışında sunucumuza PING göndermemeleri için tüm 24/192.168.2.20 alt ağını engelleyin:

  • iptables -A GİRDİ -s 192.168.2.20 -p icmp -j KABUL
    iptables -A GİRDİ -s 192.168.2.0/24 -p icmp -j DROP

192.168.4.50 IP adresini ping atmamamız için engelleyin.

  • iptables -A ÇIKIŞ -d 192.168.4.50 -p icmp -j DROP

192.168.4.51 ve 192.168.4.52 IP adreslerini ping atmamamız için engelleyin.

  • iptables -A ÇIKIŞ -d 192.168.4.51,192.168.4.52 -p icmp -j DROP

www.google.es'e iptables'tan erişimi engelleyin.

  • iptables -A ÇIKTI -d www.google.es -p icmp -j DROP

Gördüğünüz gibi, kaynak ve hedef ile IP'ye dayalı kurallarla işlem oldukça basittir. Bir dizi IP'yi yapılandırmak için iprange modülünü de kullanabiliriz:

192.168.5.1 ile 192.168.5.50 arasındaki bir dizi IP adresinin sunucumuzdan ping yapmasını engelleyin.

  • iptables -A OUTPUT -m iprange –dst-aralığı 192.168.5.1-192.168.5.50 -p icmp -j DROP

Ayrıca ICMP protokolünü daha gelişmiş bir şekilde filtreleyebiliriz. Diyelim ki herhangi bir ana bilgisayara ping atmak isteyen, ancak HERHANGİ BİRİ'nin kendisine ping atmasını istemeyen bir kullanıcımız olduğunu varsayalım. PING'in kendisi çift yönlü iletişime sahipse bunu iptables ile nasıl yapabiliriz?

  • iptables -A GİRİŞ -s IP -p icmp –icmp tipi yankı isteği -j DROP

eth0 arabirimi üzerinden (yalnızca) gelen erişimi engelleyin, böylece eth1 erişimine izin verin.

  • iptables -A GİRİŞ -i eth0 -j DROP
  • iptables -A GİRİŞ -i eth1 -j KABUL

eth0 arabiriminde (yalnızca) giden trafiği engelleyin, böylece eth1 erişimine izin verin.

  • iptables -A ÇIKIŞ -o eth0 -j DROP
  • iptables -A ÇIKIŞ -o eth1 -j KABUL

eth0'da gelen ve giden trafiğe izin verin ve eth1'de gelen veya giden trafiğe izin vermeyin.

  • iptables -A GİRİŞ -i eth0 -j KABUL
  • iptables -A ÇIKIŞ -o eth0 -j KABUL
  • iptables -A GİRİŞ -i eth1 -j DROP
  • iptables -A ÇIKIŞ -o eth1 -j DROP

TCP ve UDP protokolünün nasıl çalıştığını görmeye başlamak istiyorsanız, işte bazı örnekler:

Örneğin, www.google.es'e web erişimini engelleyin ve diğer her şeye izin verin (ping).

  • iptables -A ÇIKIŞ -d www.google.es -p tcp –dport 80 -j DROP

Herhangi bir IP veya etki alanına FTP erişimini engelleyin ve diğer her şeye izin verin.

  • iptables -A ÇIKIŞ -p tcp –dport 21 -j DROP

IP 192.168.1.50'e SSH erişimini engelleyin ve diğer her şeye izin verin.

  • iptables -A ÇIKIŞ -d 192.168.1.50 -p tcp –dport 22 -j DROP

Telnet'in 192.168.2.0 alt ağına erişimini engelleyin ve diğer her şeye izin verin.

  • iptables -A ÇIKIŞ -d 192.168.2.0/24 -p tcp –dport 23 -j DROP

Web sunucumuza 192.168.1.50 erişimini engelleyin.

  • iptables -A GİRİŞ -s 192.168.1.50 -p tcp –dport 80 -j DROP

SSH sunucumuza 192.168.1.150 ve 192.168.1.151 erişimini engelleyin.

  • iptables -A GİRİŞ -s 192.168.1.150,192.168.1.151 -p tcp –dport 22 -j DROP

192.168.2.0/24 alt ağının tamamının telnet hizmetimize erişimini engelleyin

  • iptables -A GİRİŞ -s 192.168.2.0/24 -p tcp –dport 23 -j DROP

İzin verilen 77.77.77.77 IP adresi dışında herkesin OpenVPN sunucusuna erişimini engelleyin.

  • iptables -A GİRDİ -s 77.77.77.77 -p tcp –dport 1194 -j KABUL
  • iptables -A GİRİŞ -p tcp -dport 1194 -j DAMLA

Örneğin, 8.8.8.8'e DNS erişimini engelleyin ve diğer her şeye izin verin (ping).

  • iptables -A ÇIKIŞ -d 8.8.8.8 -p tcp –dport 53 -j DROP
  • iptables -A ÇIKIŞ -d 8.8.8.8 -p udp –dport 53 -j DROP

1194 numaralı bağlantı noktasına herhangi bir IP veya etki alanına erişimi engelleyin ve diğer her şeye izin verin.

  • iptables -A GİRİŞ -p udp –dport 1194 -j DROP

Sunucumuzda bir DNS sunucumuz var. Yalnızca 192.168.1.0/24 alt ağındaki bilgisayarların onunla iletişim kurabilmesini ve diğer tüm erişimleri engellemesini istiyoruz.

  • iptables -A GİRİŞ -s 192.168.1.0/24 -p tcp –dport 53 -j KABUL
  • iptables -A GİRİŞ -s 192.168.1.0/24 -p udp –dport 53 -j KABUL
  • iptables -A GİRİŞ -p tcp -dport 53 -j DAMLA
  • iptables -A GİRİŞ -p udp –dport 53 -j DROP

eth192.168.100.0 arayüzünden gelen 24/0 IP aralığından web sunucumuza erişimi engelleyin.

  • iptables -A GİRİŞ -s 192.168.100.0/24 -i eth0 -p tcp –dport 80 -j DROP

eth192.168.100.0 arayüzünden gelen 24/1 IP aralığından ssh sunucumuza erişimi engelleyin.

  • iptables -A GİRİŞ -s 192.168.100.0/24 -i eth1 -p tcp –dport 22 -j DROP

 

Gelişmiş Kullanım Örnekleri

iptables hakkında daha fazla bilgi edinmek istiyorsanız, connlimit modülünü kullandığımız bazı örnekler.

İstemci başına yalnızca 10 Telnet bağlantısına izin verin.

  • iptables -A INPUT -p tcp –dport 23 -m conlimit –connlimit-above 10 –connlimit-mask 32 -j DROP

Bir istemci tarafından web üzerinde yapılan 5 numaralı bağlantıya kadar reddet (pek anlamlı değil ama bu bir örnek).

  • iptables -A INPUT -p tcp –dport 80 -m conlimit –connlimit-upto 5 –connlimit-mask 32 -j DROP

İstemci başına yalnızca 10 Telnet bağlantısına izin verin (bunu yukarıdakinden farklı yapın).

  • iptables -A INPUT -p tcp –dport 23 -m conlimit –connlimit-to 10 –connlimit-mask 32 -j KABUL
  • iptables -A GİRİŞ -p tcp -dport 23 -j DAMLA

10/10.0.0.0 IP aralığında yalnızca 8 web bağlantısına izin verin ve bu sayıyı aşarsa reddedin.

  • iptables -A INPUT -s 10.0.0.0/8 -p tcp –dport 80 -m conlimit –connlimit-above 10 –connlimit-mask 8 -j DROP

Her istemci için yalnızca 20 HTTP bağlantısına izin verin, aşılır aşılmaz bir TCP Sıfırlama göndeririz.

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 32 -j REJECT –reject-tcp-reset ile

Veya bu şekilde:

  • iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 32 -j REJECT-tcp-reset ile reddet

Gördüğünüz gibi, bu güvenlik duvarı gerçekten tamamlandı ve tüm gelen ve giden bağlantıları ayrıntılı olarak kontrol etmek için birçok çok gelişmiş yapılandırma yapabiliriz.