Iptables: ağ güvenliği ve paket filtreleme. Iptables kullanma örnekleri

  • 23.07.2019

Giriş ve tarihçe

ağ filtresi- Güvenlik duvarı (aka güvenlik duvarı, diğer adıyla güvenlik duvarı, diğer adıyla güvenlik duvarı...) 2.4 sürümünden bu yana Linux çekirdeğine yerleştirilmiştir. Netfilter bir yardımcı program tarafından yönetilir iptables(IPv6 - ip6tables için). Önce netfilter/iptables oldu ipchainler, Linux 2.2 çekirdeklerinin bir parçasıydı. Linux'ta ipchains'den önce sözde bir ipfw (IPV4 güvenlik duvarı), BSD'den taşındı. Yönetim yardımcı programı ipfwadm'dir. netfilter/iptables projesi, 1998 yılında Rusty Russell (geçmişteki geliştirmelere de öncülük eden) tarafından kuruldu. 1999'da Netfilter Çekirdek Ekibi (kısaltılmış çekirdek ekip) kuruldu. Geliştirilen güvenlik duvarı resmi olarak netfilter olarak adlandırıldı. Ağustos 2003'te Harald Welte çekirdek ekibin başına geçti.

Projeler ipchainler Ve ipfwadm ortaya çıkmasından önce, Linux çekirdek protokol yığınının işleyişini değiştirdi. ağ filtresiçekirdek mimarisinde ek paket yönetim modüllerini bağlamanın bir yolu yoktu. iptables ana fikri tuttu ipfwadm- kriterlerden oluşan bir kurallar listesi ve paket kriterlerle eşleşirse gerçekleştirilen bir eylem. İÇİNDE ipchainler yeni bir kavram tanıtıldı - yeni kural zincirleri oluşturma ve paketlerin zincirler arasında geçişi yeteneği ve iptables'ta kavram dört tabloya genişletildi (modern netfilter'de - dörtten fazla), göreve göre kural zincirlerini sınırlandırdı: filtreleme, NAT ve paket değişikliği. Ayrıca iptables, Linux'un durum bilgisini genişleterek, oturum düzeyinde çalışan güvenlik duvarları oluşturmanıza olanak tanır.

Netfilter/iptables mimarisi

Önkoşullar ()

Yukarıda bahsedildiği gibi Netfilter, çekirdek sürümü 2.6 (veya en az 2.3.15) gerektirir. Ayrıca, CONFIG_NETFILTER, CONFIG_IP_NF_IPTABLES, CONFIG_IP_NF_FILTER (filtre tablosu), CONFIG_IP_NF_NAT (nat tablosu), CONFIG_BRIDGE_NETFILTER ayarlarına ve ayrıca çok sayıda ek modüle ihtiyacınız varsa: CONFIG_IPACK_NF_CONNTRaux izleme için CONFIG_IPACK_NF_CONNTR ek paket eşleştirme desenleri türleri: LIMIT, MAC, MARK, MULTIPORT, TOS, TCPMSS, STATE, UNCLEAN, OWNER), CONFIG_IP_NF_TARGET_* (kurallardaki ek eylemler: REJECT, MASQUERADE, REDIRECT, LOG, TCPMSS), ipCH ile uyumluluk için CONFIG_IP_NF_COMPAT_IPCHAINSPAT_ , CONFIG_BRIDGE_NF_EBTABLES ve köprü modu için CONFIG_BRIDGE_EBT_*, diğer CONFIG_IP_NF_* ve CONFIG_IP6_NF_*. CONFIG_PACKET belirtmek de yararlıdır.

Görüldüğü gibi, doğal masa Ve parçalamak bir ağ paketinin alıcısını veya göndericisini değiştirebilir. Bu nedenle ağ paketi, yönlendirme tablosuna karşı birkaç kez kontrol edilir.

Durum algılama mekanizması (bağlantı)

"Devlet tanımı" kavramı yukarıdaki metinde birkaç kez dile getirildi, ayrı bir tartışmayı hak ediyor, ancak yine de bu konuya şimdiki yazıda kısaca değineceğim. Genel olarak, durumları belirleme mekanizması (diğer adıyla durum makinesi, diğer adıyla bağlantı Bölüm Izlemek ing, o bağlantı) paket filtresinin bir parçasıdır ve bir paketin hangi bağlantıya/oturuma ait olduğunu belirlemenizi sağlar. Bağlantı olarak işaretlenenler dışındaki tüm paketlerin durumunu ayrıştırır NOTRACK ham tabloda. Bu duruma göre, paket aittir yeni bağlantı (durum YENİ), çoktan kurulmuş bağlantı (durum KURULMUŞ), ek olarak zaten var olana İLİŞKİLİ) veya " bir diğeri"(tanımsız) bağlantı (durum GEÇERSİZ). Paketin durumu, iletilen TCP paketinin başlıklarının analizine dayalı olarak belirlenir. bağlantı modülü oturum düzeyinde bir güvenlik duvarı uygulamanıza olanak tanır (beşinci). Yardımcı program bu mekanizmayı kontrol etmek için kullanılır. Izlemek, iptables yardımcı program parametresinin yanı sıra: -m bağlantı veya -m durumu(modası geçmiş). conntrack, çekirdekteki mevcut bağlantıların durumunu tutar. /proc/net/nf_conntrack (veya /proc/net/ip_conntrack) dosyasında görüntülenebilirler.

Düşüncelerin bir karmaşaya dönüşmemesi için bu kısa bilginin daha fazla materyali anlamak için yeterli olacağını düşünüyorum.

Netfilter Ağ Filtreleme Kurallarını Yönetme (iptables Komutunu Kullanma)

iptables yardımcı programı yönetmek için arayüzdür ağ filtresi güvenlik duvarı. Bu komut, tablo kurallarını, tabloları ve zincirleri düzenlemenizi sağlar. Daha önce de söylediğim gibi - her kural ağ paketlerinin seçimini içeren ve belirtilen kurala uyan paketlerin üzerindeki bir kayıt/satırdır. iptables komutuçalıştırmak için kök izinleri gerektirir.

Genel olarak, komut formatı aşağıdaki gibidir:

iptables [-t]

Köşeli parantez içindeki tüm parametreler - isteğe bağlı. Varsayılan filtre tablosu, başka bir tablo belirtmeniz gerekiyorsa, o zaman anahtarını kullanmalısınız. -T belirten isim. Tablo adını, eylemi tanımlayan , takip eder ( Örneğin: bir kural ekleyin veya bir zincirin sonuna bir kural ekleyin veya bir kuralı silin). seçim parametrelerini ayarlar. kuraldaki seçim kriterleri eşleşirse hangi işlemin yapılması gerektiğini belirtir ( Örneğin: paketi başka bir kurallar zincirine iletin, paketi "bırakın", kaynağa bir hata mesajı verin ...).

iptables yardımcı programı için komutlar ve seçenekler şunlardır:

Parametre Tanım Örnek vermek
Takımlar
--ekle (-A) Belirtilen kuralı belirtilen zincire ve belirtilen tabloyu listenin sonuna ekleyin. iptables -A FORWARD kriterleri -j eylemi
--silindi) Sayı(lar) veya kural(lar) ile belirtilen kuralı/kuralları siler. İlk örnek filtre tablolarında tüm zincirlerde 10,12 numaralı tüm kuralları kaldırır, ikinci örnek PREROUTING zincirinde verilen kuralı mangle tablosundan kaldırır. iptables -D 10.12
iptables -t mangle -D PREROUTING kriterleri -j action
--rename-chain (-E) Zincir adını değiştirin. iptables -E OLD_CHAIN ​​​​NEW_CHAIN
--flush (-F) Geçerli tablo için tüm kuralları temizler. Halihazırda kurulmuş bağlantılarla ilgili tüm paketler için KABUL terminal eylemini uygulayın - atla iptables -F
--insert (-I) Belirtilen kuralı, sayı ile belirtilen konuma ekler. iptables -I FORWARD 5 kriter -j eylem
--liste (kısaltma -L) Mevcut kuralları görüntüleyin (açıkça bir tablo belirtmeden - tüm zincirlerin filtre tablosu görüntülenir). iptables -L
--politika (-P) Verilen zincir için varsayılan ilkeyi ayarlar. iptables -t mangle -P PREROUTING DROP
--değiştir (-R) Numaralandırılmış kuralı, ölçütlerde belirtilenle değiştirir. iptables -R POSROUTING 7 | ölçüt -j eylem
--delete-zincir (-X) TÜM manuel olarak oluşturulan zincirleri silin (yalnızca standart GİRİŞ, ÇIKIŞ, İLERİ, ÖNCEDEN ve SONRASIYI bırakın). iptables -X
--sıfır (-Z) Zincirdeki iletilen verilerin sayaçlarını sıfırlar. iptables -Z GİRİŞİ
parametreler
--sayısal (-n) Çıktı alırken adresleri ve protokolleri çözmez.
--Satır numaraları Çıktı alırken kural numaralarını belirtin (-L ile birlikte kullanılabilir). iptables -L -- satır numaraları
--yardım (-h) onsuz nerede
-t tablosu Üzerinde işlem yapılacak tablonun adını belirtir. Örnek, tüm zincirlerdeki nat tablosunu sıfırlar. iptables -t nat -F
--ayrıntılı (-v) Ayrıntılı çıktı. iptables -L -v

iptables komutunun ağ paketlerini seçmek için kriterler (parametreler)

Ağ paketlerini seçme kriterleriörtük olarak birkaç gruba ayrılır: Genel ölçütler, Örtülü ölçütler, Açık ölçütler. herhangi bir kuralda kullanılabilirler, protokol tipine bağlı değildirler ve eklenti modüllerinin yüklenmesini gerektirmezler. (Aramalıyım genel olmayan), örtük olarak yüklenen ve örneğin genel bir kriter belirtirken kullanılabilir hale gelen kriterler --protokol tcp|udp|icmp. Kullanmadan önce bağlanmanız gerekir ek uzatma(bunlar bir nevi eklentiler netfiltre için). Ek uzantılar parametre kullanılarak yüklenir -m veya --kibrit. Yani örneğin kriterleri kullanacaksak belirtmek, bildirmek, o zaman bunu kural satırında açıkça belirtmeliyiz: -m durumu kullanılan kriterin solundadır. Arasındaki fark açık Ve örtük genel olmayanölçüt, açık olanların açık olarak, örtük olanların ise otomatik olarak yüklenmesi gerektiğidir.

Her koşulda kullanabilirsiniz imza! kriter değerinden önce. Bu, bu kurala tabi olan tüm paketlerin bu parametreyle eşleşmeyin.. Örneğin: kriter --protokol ! tcp tüm paketlerin olduğu anlamına gelir olumsuzluk kural için uygun olan TCP protokolleridir. Ancak, iptables'ın son sürümleri (özellikle 1.4.3.2 ve üstü) artık bu sözdizimini desteklememektedir ve --protokol ! tcp, fakat ! --protokol tcp, aşağıdaki hatayı veriyor:

İçe konumlandırılmış olumsuzlamanın (`--option ! this') kullanılması, ekstrapozisyonlu ('! --option this') lehine kullanımdan kaldırılmıştır.

Aşağıda bir tablo şeklinde yaygın olarak kullanılan paket seçim seçenekleri:

Parametre Tanım Örnek vermek
Ortak parametreler
--protokol
(kısaltma -p)
Protokolü belirtir. Seçenekler tcp, udp, icmp, tümü veya /etc/protocols içinde tanımlanan diğer protokoller iptables -A GİRİŞ -p tcp
--kaynak
(-s, --src)
Paketin kaynak IP adresi. Birkaç şekilde tanımlanabilir:
  • Tek ana bilgisayar: host.domain.tld veya IP adresi: 10.10.10.3
  • Adres havuzu (alt ağ): 10.10.10.3/24 veya 10.10.10.3/255.255.255.0

Netfilter yapılandırma aşamasında DNS düzgün çalışmayabileceğinden, çözümlenmesi (çözülmesi) için DNS sorguları gerektiren alan adlarının kullanılmaması şiddetle önerilir. Ayrıca, zincire bir kural eklerken adların yalnızca bir kez çözüldüğünü unutmayın. Daha sonra, bu isme karşılık gelen IP adresi değişebilir, ancak bu, önceden yazılmış olan kuralları etkilemeyecektir (eski adresi koruyacaklardır). Birkaç IP adresine çözümlenen bir alan adı belirtirseniz, her adres için ayrı bir kural eklenir.

iptables -A GİRDİ -s 10.10.10.3
--hedef
(-D)
Paketin hedef IP adresi. Birden çok şekilde tanımlanabilir (bkz. --source). iptables -A GİRDİ --hedef 192.168.1.0/24
--in-arayüz
(-i)
Paketin geldiği arabirimi belirtir. NAT ve birden çok ağ arabirimine sahip makineler için kullanışlıdır. INPUT, FORWARD ve PREROUTING zincirlerinde kullanılır. "+" işaretini kullanmak mümkündür, ardından + adıyla başlayan tüm arayüzlerin kullanımı ima edilir (örneğin, eth+ - tüm eth arayüzleri). iptables -t nat -A ÖN ROUTING --in-interface eth0
--out-arayüz
(-Ö)
Paketin ayrılacağı arabirimi belirtir. NAT ve birden çok ağ arabirimine sahip makineler için kullanışlıdır. ÇIKIŞ, İLERİ ve POSTROUTING zincirlerinde kullanılır. "+" işaretini kullanabilirsiniz. iptables -t nat -A POSTROUTING --in-interface eth1
Örtük (paylaşılmayan) parametreler
-p protokol -h proto protokolünün örtük parametreleri hakkında yardım gösteriliyor. iptables -p icmp -h
--Kaynak bağlantı noktası
(--spor)
Kaynak bağlantı noktası, yalnızca protokoller için mümkündür --protocol tcp veya --protocol udp iptables -A INPUT --protocol tcp --source-port 25
--hedef-port
(--dport)
Hedef bağlantı noktası, yalnızca protokoller için mümkündür --protocol tcp veya --protemocol udp iptables -A INPUT --protocol udp --destination-port 67
Açık Parametreler
-m durum --state (kullanımdan kaldırıldı)
o
-m bağlantı --ctstate

Bağlantı durumu. Mevcut seçenekler:

  • YENİ(Yeni bir bağlantı kuran tüm paketler)
  • KURULMUŞ(Kurulan bağlantıya ait tüm paketler)
  • İLİŞKİLİ(Kurulan bağlantıya ait olmayan ancak onunla ilişkilendirilen paketler. Örneğin - Aktif modda FTP, veri aktarımı için farklı bağlantılar kullanır. Bu bağlantılar bağlanır.)
  • GEÇERSİZ(Bir nedenden dolayı tanımlanamayan paketler. Örneğin, ICMP hataları mevcut bağlantılara ait değildir)
  • vb. (belgelerde daha fazla ayrıntı)
iptables -A GİRİŞ -m durumu --state YENİ, KURULANIPtables -A GİRDİ -m bağlantı --ctstate YENİ, KURULDU
-m mac --mac-kaynak Paketi gönderen ağ düğümünün MAC adresini belirtir. MAC adresi XX:XX:XX:XX:XX:XX biçiminde olmalıdır. -m mac --mac-source 00:00:00:00:00:0

Paketlerdeki eylemler

Bu başlık daha iyi "olarak yeniden ifade edilirdi. Seçim kriterleriyle eşleşen paketlerdeki eylemler". Yani, herhangi bir taahhütte bulunmak paketlerdeki eylemler, anahtarı ayarlamanız gerekir -j (--atlama) ve hangi özel eylemin gerçekleştirileceğini belirtin.

Paketlerdeki eylemler aşağıdaki değerleri alabilir:

  • KABUL- paket bu zincirden çıkar ve bir sonrakine aktarılır (kelimenin tam anlamıyla - KABUL).
  • DÜŞÜRMEK- paket diğer tablolara / zincirlere aktarılmazken koşulu karşılayan paketi atın.
  • REDDETMEK- paket diğer tablolara/zincirlere iletilmezken gönderene bir ICMP mesajı göndererek paketi bırakın.
  • DÖNÜŞ- paketi önceki zincire geri döndürün ve bir sonraki kuraldan başlayarak geçişine devam edin.
  • SNAT kaynak paketin içinde. Sadece zincirlerde kullanılabilir POSTROUTING ve ÇIKTI nat tablolarında.
  • DNAT- adres çevirisini uygula hedef paketin içinde. Zincirde kullanılabilir ÖN YÖNLENDİRME nat tablosunda. (istisnai durumlarda - ÇIKIŞ zincirinde)
  • KAYIT- paketi (arka plan programına gönderilen) günlüğe kaydedin ve diğer kurallarla işleyin.
  • maskeli balo- bunun yerine kullanılır SNAT dinamik bir IP ile bir bağlantı varsa (yalnızca zincirde belirtilmesine izin verilir) POSTROUTING doğal tablolar).
  • İŞARET- daha sonraki kurallara işlenmek üzere geçirilen paketler üzerindeki etiketleri ayarlamak için kullanılır.
  • ve benzeri.

Bu eylemlere ek olarak, belgelerde bulunabilecek başkaları da var (belki yakında konuya hakim olma sürecinde makaleyi tamamlayacağım). Bazı eylemlerin ek seçenekleri vardır.

Aşağıdaki tablo, ek seçeneklerin örneklerini ve açıklamalarını sağlar:

Parametre Tanım Örnek vermek
DNAT (Hedef Ağ Adresi Çevirisi)
--hedef hedef adres olarak hangi IP adresinin değiştirilmesi gerektiğini belirtir. Örnekte 1.2.3.4 adresine gelen tüm tcp protokol paketlerinde bu adres 4.3.2.1 ile değiştirilecektir. iptables -t nat -A ÖN YÖNLENDİRME -p tcp -d 1.2.3.4 -j DNAT --hedef 4.3.2.1
KAYIT
--log seviyesi Günlük seviyesini () ayarlamak için kullanılır. Örnekte, FORWARD zincirinin filtre tablosundaki tüm tcp paketleri için maksimum günlük kaydı düzeyi ayarlanır. iptables -A FORWARD -p tcp -j LOG --log düzeyinde hata ayıklama
--log-ön eki Tüm mesajların önüne eklenecek metni (önek) belirtir iptables. (sonrası için çok kullanışlıdır) Ön ek, boşluklar dahil en fazla 29 karakter uzunluğunda olabilir. Örnekte, INPUT zincirinin filtre tablosundaki INRUT filtresi ön ekine sahip tüm tcp paketleri syslog'a gönderilir. iptables -A INPUT -p tcp -j LOG --log-prefix "INRUT-filtre"
--log-ip-seçenekleri IP paketi başlığından çeşitli bilgileri girmenize izin verir. iptables -A İLERİ -p tcp -j LOG --log-ip-options
ve benzeri...

Bu, ağ filtresi netfilter / iptables hakkındaki teoriyi tamamlar. Bir sonraki makalede, bu teoride ustalaşmak için pratik örnekler vereceğim.

Özet

Bu yazıda, Linux'ta bir ağ filtresinin temel kavramlarını çok kısaca ele aldık. Netfilter/iptables alt sistemi Linux çekirdeğinin bir parçasıdır ve çeşitli filtreleme şemalarını düzenlemek ve ağ paketlerini işlemek için kullanılır. Bu durumda, her paket geldiği ağ arabiriminden ve daha sonra yerel sistem için mi yoksa "yerel olmayan" için mi tasarlandığına bağlı olarak belirli bir zincir yolu boyunca geçer. Her zincir, sıralı bir dizi kural içeren bir dizi tablodan oluşur. Her kural, bir ağ paketi seçmek için belirli bir kriter/kriterden ve bu kriterleri karşılayan paket üzerinde bazı eylemlerden oluşur. Verilen kurallara göre paket üzerinde herhangi bir işlem yapılabilir (Örneğin sonraki/başka bir zincire aktarım, paketin bırakılması, içeriğin veya başlıkların değiştirilmesi vb.). Her zincirin ve her tablonun paket yolundaki amacı, işlevi ve yeri vardır. Örneğin, paketleri filtrelemek için, üç standart zincirde bulunan ve kullanıcı tanımlı zincirlerde bulunabilen filtre tablosu kullanılır. Paket yolu, giden ağ arabiriminde veya yerel bir işleme/uygulamaya teslim edilerek sonlandırılır.

Edebiyat

Rusça'da oldukça fazla ilginç bilgi burada yer almaktadır:

  • http://www.opennet.ru/docs/RUS/iptables/
  • http://en.wikibooks.org/wiki/Iptables

Burjuvada daha derin materyaller burada mevcuttur:

  • http://www.frozentux.net/documents/ipsysctl-tutorial/
  • http://www.netfilter.org/documentation/index.html

Saygılarımla, Mc.Sim!

IPTables, bir Linux güvenlik duvarı yönetim aracıdır. İstenmeyen bağlantılar için güçlü ve kullanışlı bir araçtır. Tüm süreç, düzenlenebilen ve görüntülenebilen iptables kurallarına sarılmıştır. Makalede daha fazla ayrıntı verilmiştir.

Yaratılış tarihi

Önce Bir Linux sistemindeki IPTable'lar, BSD'den ödünç alınan IPFW güvenlik duvarını kullandı. Ardından, 2.4 Linux çekirdeğinden itibaren, onu yönetmek için Netfilter güvenlik duvarı ve IPTables yardımcı programı ile birlikte geldi. Çalışmasının metodolojisinde, tüm yönler korunmuş ve işlevsel olarak biraz genişletilmiştir.

IPTable'ların yapısı ve yapısı

Bir paket güvenlik duvarına girdiğinde birkaç kontrolden geçer. Bu bir sağlama toplamı veya herhangi bir çekirdek düzeyinde analiz olabilir. O halde, PREROUTING zincirinden geçme zamanı. Ardından, bir sonraki zincire hangi yönlendirmenin gerçekleştiğine göre kontrol edilir. Paketin, örneğin TCP'de olduğu gibi bir adresi yoksa, FORWARD zincirine yönlendirilir. Belirli bir adresin olduğu durumlarda, GİRİŞ zinciri ve ardından amaçlanan arka plan programları veya hizmetleri takip eder. Onlardan gelen yanıt da birkaç zincirden geçmelidir, örneğin ÇIKIŞ. Bu süreçteki son halka POSTROUTING zinciridir.

Şimdi zincirler hakkında biraz. Her biri birkaç tablo içerir. İsimleri tekrar edilebilir, ancak bu, birbirleriyle bağlantılı olmadıkları için çalışmayı hiçbir şekilde etkilemez.

Tablolar sırayla birkaç kural içerir. Aslında bir kural, kontrol edilen paketin uyması gereken belirli bir koşuldur. Sonuca bağlı olarak paket üzerinde belirli bir işlem gerçekleştirilir.

Böylece ağın tüm aşamalarından geçen paket, sırayla tüm zincirleri ziyaret eder ve her birinde belirli bir kuralın koşuluna uygunluğu kontrol edilir. Tablo kullanıcı tarafından oluşturulmamışsa, varsayılan eylem gerçekleştirilir, temel olarak, devam etmenizi sağlayan KABUL ET veya paketi durduran DROP'tur.

Önceden ayarlanmış zincirler aşağıdaki kategorilerde gelir:

  • ÖN YÖNLENDİRME. Gelen tüm paketlerin ilk işlenmesi.
  • GİRİŞ. Bu, doğrudan yerel bilgisayara yönlendirilen paketleri içerir.
  • İLERİ. Yönlendirme tablosunu takip eden "transit paketleri" için kullanılır.
  • ÇIKTI. Giden paketler için kullanılır.
  • POSTROUTING. Tüm zincirlerin giden paketinin geçişindeki son aşama.

Yerleşik zincirlere ek olarak, kullanıcılar kendi zincirlerini oluşturabilir veya silebilir.

IPTables kurallarını görüntüleme ve yönetme

Daha önce de belirtildiği gibi, tüm zincirler paketler için belirli koşullar içerir. IPTables yardımcı programı, IPTables kurallarını görüntülemek ve yönetmek için kullanılır. Her bir kural, sonuca bağlı olarak paketler için bir dizi koşulun yanı sıra bunlarla ilgili eylemleri içeren bir satırdır.

Komutun formatı şuna benzer: iptables [-t işlenecek tablonun adı] [kriter] [yapılacak eylem] çağırma komutu.

İçerisindeki herhangi bir şey atlanabilir. Eğer bir tablo parametresi ise filtre kullanılacaktır. Belirli bir ad kullanmak için -t anahtarını eklemeniz gerekir. Çağrılan komut, örneğin bir IPTables kuralı ekleme veya kaldırma gibi gerekli eylemi çağırmanıza olanak tanır. "Kriterler", seçimin gerçekleştirileceği parametreleri belirtir. Ve "eylem" de koşul sağlanırsa gerçekleştirilecek eylem uygulanır.

IPTables kurallarını oluşturmaya ve görüntülemeye yönelik komutlar

  • Ekle(-A). Komutu kullanırken, gerekli kuralı eklemek istediğiniz zinciri ve tabloyu belirtirsiniz. Takımın değeri, bunu tüm listenin sonunda yapmasıdır.
  • Silindi). Adından da anlaşılacağı gibi, kuralı siler. Parametre olarak hem tam adı hem de bunlara atanan numaraları belirtebilirsiniz.
  • Zinciri (-E) yeniden adlandırın. Zincirin adını değiştirir. Komut eski adı, ardından yeni adı belirtir.
  • Yıkama (-F). Belirli bir tablonun tüm kurallarını kesinlikle temizlemek.
  • (-I) girin. Bu komut, gerekli kuralı sayı ile gösterilen yere ekler.
  • Liste(-L). Iptables kurallarını görüntüleyin. Tablo belirtilmezse, varsayılan filtre kullanılacaktır.
  • Politika (-P). Belirtilen zincir için varsayılan ilke kullanılır.
  • (-R) değiştirin. Belirtilen sayının altındaki kuralı gerekli olanla değiştirir.
  • Zinciri sil (-X). Bu komut, oluşturulan tüm zincirleri siler. Yalnızca önceden ayarlanmış olanlar kalacaktır.
  • Sıfır (-Z). Belirtilen zincirdeki iletilen verilerin sayaçlarını sıfırlar.

Paket seçim seçenekleri hakkında biraz

Kabaca üç türe ayrılabilirler:

  • Genel Kriterler. Herhangi bir kural için belirtilebilirler. Özel uzantıların ve modüllerin bağlanmasını gerektirmezler ve ayrıca hangi protokolün kullanılacağına bağlı değildirler.
  • Genel kriterler değil. Genel kriterleri kullanırken kullanılabilir hale gelirler.
  • Açık. Bu türü kullanabilmek için netfilter için özel eklentiler bağlamanız gerekir. Ayrıca komutta -m anahtarı kullanılmalıdır.

Paket analizinde sıkça karşılaşılan parametrelerden biraz bahsetmekte fayda var:

  • Protokol (-p). Protokolü gösterir.
  • Kaynak(lar). Bu parametre paketin geldiği kaynağın IP adresini belirtir. Birkaç şekilde belirtilebilir. Belirli bir ana bilgisayar, adres veya tüm bir alt ağ.
  • Hedef (-d). Paketin hedef adresi. Ayrıca, önceki gibi, birkaç şekilde tarif edilebilir.
  • Arayüz (-i). Paketin gelen arayüzünü belirtir. Esas olarak NAT için veya birden çok arabirime sahip sistemlerde kullanılır.
  • Dış arayüz (-o). giden arayüz

birkaç örnek

IPTables nat kurallarını görüntülemek için? - "iptables -L -t nat" komutunu kullanmanız gerekir. Güvenlik duvarının genel durumunu öğrenin - "iptables -L -n -v". Ayrıca bu komut, sistem genelinde mevcut olan IPTables kurallarını görüntülemenizi sağlar. Kuralı tabloda belirli bir yere, örneğin birinci ve ikinci satır - "iptables -I INPUT 2 -s 202.54.1.2 -j DROP" arasına yerleştirin. Sonra eklenip eklenmediğine bakın - "iptables -L INPUT -n --line-numbers".

Belirli bir adresi engellemek için, örneğin, 12.12.12.12 - "iptables -A INPUT -s 12.12.12.12 -j DROP".

iptables için yardım - "man iptables". Belirli bir komut hakkında bilgiye ihtiyacınız varsa - "iptables -j DROP -h".

En sonunda

Yanlış yapılandırma (bilmeden) ağ arızalarına veya tamamen arızalanmasına yol açabileceğinden, IPTables komutlarını dikkatli kullanın. Bu nedenle, yapılandırmadan önce kılavuzları ve talimatları ayrıntılı olarak incelemeye değer. Becerikli ellerde, IPTable'lar ağ bağlantılarının güvenilir bir koruyucusuna dönüştürülebilir. Sistem yöneticileri, yetkisiz erişimden izole edilmiş bağlantılar oluşturmak için yardımcı programı aktif olarak kullanır.

Likbez

İnternetin Iptables hakkında makalelerle dolu olmasına rağmen, genellikle belirli bir durum için bir dizi kural önerme isteklerini görüyorum. Durumlar oldukça tipik olduğu için açıklama yapmadan bu notun linkini verebilirsiniz. Tekrar ediyorum, bu okunması gereken bir açıklama değil. Olduğu gibi yeterince iyi, sadece minimum yorumla yeni başlayanlar için kurallar.
Tabii ki, anlamak için söylemeye değer bir şey var:
İlke, -P anahtarı. Eğitimden alıntı:

Verilen zincir için varsayılan ilkeyi ayarlar. Varsayılan politika, zincirdeki hiçbir kuralla eşleşmeyen paketler üzerinde yapılacak eylemi tanımlar. Varsayılan politika DROP ve ACCEPT şeklindedir.

Başka bir deyişle, bir ağ arayüzüne gelen bir paket herhangi bir kural tarafından tanımlanmıyorsa, varsayılan politika tarafından işlenir. Bundan, Iptables'ı (ve herhangi bir güvenlik duvarını) iki şekilde/politikayla yapılandırabilirsiniz:
1. Yasak olmayan her şeye izin verilir. Onlar. herşey serbest.
2. Açıkça izin verilenler dışında her şey yasaktır.
Açıkçası, ikinci yaklaşım daha doğrudur ve daha sonra tartışılacaktır. ÇIKIŞ için politika, KABUL ET'ten ayrılmanızı önerir, aksi takdirde çok sayıda hata düzeltmeniz gerekir. Iptables'ı yeterince iyi bildiğinizde nedenini anlayacaksınız ve DROP'ta kurabilirsiniz.
Ve bir başka önemli not. Kuralların script tarafından uygulandığı ve konsoldan tek tek girilmediği varsayılır. İkinci durumda, iptable -P INPUT DROP komutundan sonra kurulan SSH oturumunun bağlantısı kaybolacaktır. Kuralları komut dosyasına göre uygularken oturum sonlandırılmaz, çünkü Ardından, önceden kurulmuş bağlantıların kabul edilmesine izin verme kuralı gelir.

Kuralları uygulamadan önce mevcut tüm zincirleri, tabloları ve ilkeleri temizlemeniz gerekir:

iptables -P GİRDİ KABUL ET iptables -P İLERİ KABUL iptables -P ÇIKIŞ KABUL ET iptables -t nat -P ÖN YÖNLENDİRME KABUL ET iptables -t nat -P POSTROUTING KABUL ET iptables -t nat -P ÇIKIŞ KABUL ET iptables -t mangle -P PREROUTING KABUL ET mangle -P ÇIKIŞI KABUL ET iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -t nat -X iptables -t mangle -X

Masaüstü için minimum iptables kuralı seti

Görev: Gelen tüm bağlantıları reddet. Giden sınırlı değildir.

# Varsayılan kurallar iptable -P INPUT DROP iptable -P FORWARD DROP iptable -P OUTPUT KABUL # localhost iptables'dan gelen bağlantılara izin ver -A INPUT -i lo -j KABUL # Gelen bağlantılara önceden kurulmuş iptables izin ver -A INPUT -m durum -- durum KURULMUŞ, İLGİLİ -j KABUL

Uygulamaya sahip bir sunucu için minimum iptables kuralları seti

Görev: hizmete erişim verin, 80 numaralı bağlantı noktasında çalışan bir web sunucusu olmasına izin verin, diğer her şeyi yasaklayın.
Bu bir sunucu olduğu için bağlantının SSH üzerinden yönetilmesine izin vermelisiniz. Benzer şekilde, istediğiniz herhangi bir bağlantı noktasını veya bağlantı noktası setlerini açabilirsiniz.

# Varsayılan kurallar iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT KABUL # localhost iptables'dan gelen bağlantılara izin ver -A INPUT -i lo -j KABUL # Gelen bağlantılara önceden kurulmuş iptables izin ver -A INPUT -m durum -- durum KURULDU, İLGİLİ -j KABUL # SSH iptables'a izin ver -A INPUT -p TCP --dport 22 -j KABUL # HTTP bağlantı noktasına izin ver iptables -A INPUT -p TCP --dport 80 -j KABUL

Ağ geçidi için minimum iptables kuralı seti

Görev: 1. İnterneti NAT kullanarak yerel ağa dağıtın. 2. Yerel ağdaki makinelerin harici HTTP, HTTPS ve DNS sunucularına erişmesine izin verin 3. Bağlantı noktasını bu yerel ağda bulunan web sunucusuna iletin.

### Değişkenler # İnternete bakan arabirim INET_IF="eth0" # $INET_IF INET_IP="xxxx"'e ait beyaz IP adresi # Yerel ağdan makineler için İnternet'e erişmesine izin verilen TCP bağlantı noktaları FORWARD_TCP_PORTS="53,80,443 " # Yerel ağdan makineler için İnternet'e erişmesine izin verilen UDP bağlantı noktaları FORWARD_UDP_PORTS="53" # Yerel ağ LOCAL_NET="192.168.0.0/24" # Yerel web sunucusunun IP adresi WEB_SERVER="192.168.0.10" # Sysctl yolu SYSCTL=" /sbin/sysctl -w" # Eğer [ "$SYSCTL" = "" ] ise çekirdek iletme IPv4 paketlerini etkinleştirin ve ardından "1" > /proc/sys/net/ipv4/ip_forward else $SYSCTL net. ipv4.ip_forward=" 1" fi ### Varsayılan Kurallar iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT KABUL ### INPUT # localhost'tan gelen bağlantılara izin ver iptables -A INPUT -i lo -j KABUL # İzin Ver bağlantılar zaten kurulmuş iptables -A GİRİŞ -m durum --durum KURULDU, İLGİLİ -j KABUL # SSH iptables'a izin ver -A GİRİŞ -p TCP --dport 22 -j KABUL ### İÇİN WARD # Var olan yönlendirilmiş bağlantılara izin ver iptables -A FORWARD -m state --state KURULDU, İLGİLİ -j KABUL # Yerel ağ makinelerinin belirtilen TCP bağlantı noktalarında İnternete erişmesine izin ver iptables -A FORWARD -p TCP -s $LOCAL_NET -m çoklu bağlantı noktası - -dport $FORWARD_TCP_PORTS -j iptables KABUL -A FORWARD -p TCP -d $LOCAL_NET -m multiport --dport $FORWARD_TCP_PORTS -j KABUL # LAN makinelerinin internette belirtilen UDP portlarında gezinmesine izin ver iptables -A FORWARD -p UDP - s $LOCAL_NET -m çoklu bağlantı noktası --dport $FORWARD_UDP_PORTS -j iptables KABUL -A FORWARD -p UDP -d $LOCAL_NET -m çoklu bağlantı noktası $FORWARD_UDP_PORTS -j KABUL ### NAT # Yerel alt ağ için NAT'ı etkinleştir iptables -t nat - A POSTROUTING -s $LOCAL_NET -o $INET_IF -j SNAT --to-source $INET_IP # Bağlantı noktasını yerel web sunucusuna yönlendir iptables -t nat -A PREROUTING -p TCP -d $INET_IP --dport 80 -j DNAT -- varış noktası $WEB_SERVER:80

$FORWARD_TCP_PORTS listesinden farklı bir port yönlendiriliyorsa, oraya eklenmesi gerektiğine dikkat edilmelidir, çünkü varsayılan ilke tarafından bırakılacaktır.
Sonuç olarak, ağ geçidi için iptables betiği şöyle görünecektir. Önceki kurallardan farklıdır.

#!/bin/sh # Tüm iptables kurallarını temizle -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPTs -t mangle -P ÖN ROUTING iptables -t mangle -P OUTPUT KABUL iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -t nat -X iptables -t mangle -X ### Değişkenler # İnternet görünümlü arayüz INET_IF="eth0" # $INET_IF'e ait beyaz IP adresi INET_IP="xxxx" # Yerel ağ LOCAL_NET="192.168.0.0/24" # Yerel web sunucusu IP adresi WEB_SERVER="192.168.0.10" # Çekirdekte etkinleştir IPv4 paketlerini ilet # Sysctl yolu SYSCTL="/sbin/sysctl -w" eğer [ "$SYSCTL" = "" ] ise yankı "1" > /proc/sys/net/ipv4/ip_forward else $SYSCTL net.ipv4. ip_forward="1" fi ### Varsayılan kurallar iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT ### INPUT # localhost'tan gelen bağlantılara izin ver iptables -A INPUT -i lo -j KABUL # Halihazırda kurulmuş bağlantıların kabul edilmesine izin ver iptables -A GİRİŞ -m durum --durum KURULDU, İLGİLİ -j KABUL ET # Yalnızca yerel ağdan SSH'ye izin ver iptables -A GİRİŞ -p TCP -s $LOCAL_NET --dport 22 -j KABUL # Sorguların yalnızca yerel ağdan DNS sunucusunu önbelleğe almasına izin ver iptables -A INPUT -p TCP -s $LOCAL_NET --dport 53 -j KABUL iptables -A INPUT -p UDP -s $LOCAL_NET --dport 53 -j KABUL ### FORWARD # Halihazırda kurulmuş olan yönlendirilmiş bağlantılara izin ver iptables -A FORWARD -m state --state KURULU,İLGİLİ -j KABUL # Yerel ağdaki makinelerin İnternet'e erişmesine izin verilen TCP portları FORWARD_TCP_PORTS="80,443" # Yerel izin ver IPtables -A FORWARD -p TCP -s $LOCAL_NET -m multiport --dport $FORWARD_TCP_PORTS -j KABUL ET iptables -A FORWARD -p TCP -d $LOCAL_NET -m multiport --dport $FORWARD_TCP_PORTS -j KABUL ### NAT # Yerel alt ağ için NAT'ı etkinleştir iptables -t nat -A POSTROUTING -s $LOCAL_NE T -o $INET_IF -j SNAT --to-source $INET_IP # Bağlantı noktasını yerel web sunucusuna standart olmayan bağlantı noktasına yönlendir iptables -t nat -A ÖN ROUTING -p TCP -d $INET_IP --dport 80 -j DNAT --to - hedef $WEB_SERVER:8090

Mevcut kuralların türetilmesi

Filtre tablosu için kuralları görüntüleyin, ör. komut, temel iptables kurallarını gösterecektir:

Iptables -L -n

nat ve mangle gibi belirli bir tablo için:

iptables -t nat -L -n iptables -t mangle -L -n

Linux, Netfilter adlı yerleşik bir güvenlik duvarına sahiptir. Projenin resmi web sitesine göre:

netfilter, Linux çekirdeği içindeki, çekirdek modüllerinin ağ yığınından geri arama işlevlerini kaydetmesine izin veren bir dizi sistem mesajıdır. Kayıtlı geri arama işlevi, ağ yığınından geçen her paketi işler.

Linux'ta güvenlik duvarı, IPv4 filtreleme özelliklerine sahip iptables programı tarafından kontrol edilir, ip6tables, IPv6'yı filtreler. Bu kılavuz, Netfilter'ın (iptables) CentOS / RHEL / Fedora / Redhat Enterprise Linux üzerinde nasıl kullanılacağını anlatır. Bu makalede, izinsiz giriş koruması için Linux'ta iptables yapılandırmanın temel örneklerini bulabilirsiniz.

Iptables kullanma örnekleri

  • Bu makalede listelenen eylemlerin çoğu, bash veya başka herhangi bir modern kabuğun kök kullanıcısı olarak gerçekleştirilecekleri varsayımıyla yazılmıştır. Kendinize erişimi devre dışı bırakabileceğiniz için uzak sisteme komut girmeyin.
  • Demo amacıyla ubuntu 10.04 kullandım, ancak komutlar herhangi bir modern dağıtımla çalışmalı.
Güvenlik duvarınızın durumunu görüntüleme
Aşağıdaki komutu root olarak girin:
# iptables -L -n -v
Örnek Cevap:
Chain INPUT (politika 0 paket, 0 bayt KABUL) pkts bayt hedef koruma devre dışı bırakma kaynak hedef Zincir İLERİ (ilke KABUL 0 paket, 0 bayt) pkts bayt hedef koruma devre dışı bırakma kaynak hedef Zincir ÇIKIŞ (politika KABUL 0 paketler, 0 bayt ) pkts bayt hedef koruma, kaynak hedefi devre dışı bırak
Bu yanıt, güvenlik duvarının etkin olmadığı anlamına gelir.
Ve örneğin, bu, Linux'taki güvenlik duvarının etkin olduğunu gösterecektir:

Zincir GİRİŞ (politika 1810K paketleri KABUL, 126M bayt) pkts bayt hedef koruma devre dışı bırakma kaynak hedef 7418K 1070M KABUL udp -- * 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 881 52520 tcp KABUL -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 flags:0x17/0x02 durum YENİ Zincir İLERİ (politika 5628K paketleri KABUL, 482M bayt) pkts bayt hedef koruma devre dışı bırakma kaynak hedef 0 0 tcp KABUL - - eth0 tun0 0.0 0.0.0.0/0 0.0.0.0/0 tcp dpt:1111 durum YENİ, İLGİLİ, KURULDU 599K 539M KABUL EDİP -- eth0 * 0.0.0.0/0 10.1.1.6 udp dpt:1112 durum YENİ, İLGİLİ, KURULDU 4959K paketler, 880M bayt) pkts bayt hedef korumayı devre dışı bırakma kaynak hedef
Örnekteki anahtarlar şu anlama gelir:

  • L: Kuralları listeleyin.
  • v: Ayrıntılı bilgileri görüntüleyin. Bu tuş, arayüz adını, kural parametrelerini ve TOS maskelerini görüntüleyecektir. Paket ve bayt sayaçları da gerekli çarpana bağlı olarak "K" eki, "M" veya "G" ile listede gösterilecektir.
  • n: IP adreslerini çözmeyin, dijital olarak görüntüleyin. Çıkışı hızlandırır.
Bir satır numarasıyla kuralları görüntülemek için --line-numbers anahtarını ekleyin, örneğin:
# iptables -n -L -v --satır-sayılar
GİRİŞ veya ÇIKIŞ kurallarını görüntülemek için şunu yazın:
# iptables -L INPUT -n -v # iptables -L OUTPUT -n -v --line-numbers
Durdur, yeniden başlat, güvenlik duvarını başlat
CentOS / RHEL / Fedora Linux'unuz varsa, şunu girin:
# service iptables stop # service iptables start # service iptables yeniden başlat
iptables kurallarını kendi kendine temizlemek için şunu yazın:
# iptables -F # iptables -X # iptables -t nat -F # iptables -t nat -X # iptables -t mangle -F # iptables -t mangle -X # iptables -P GİRDİ KABUL # iptables -P ÇIKIŞ KABUL # iptables -P İLERİ KABUL
Örnekteki anahtarlar şu anlama gelir:
  • F: Tüm kuralları kaldır (yıkama).
  • x: Bir zincirin silinmesi
  • T <таблица>: Tabloyu seçin ve kuralları silin.
  • P: Varsayılan politikayı ayarlayın (örn. DROP, REJECT veya ACCEPT).
Güvenlik duvarı kurallarını kaldırma
Mevcut kurallarla ilgili diğer bilgilerle birlikte satır numarasını görüntülemek için şunu yazın:
# iptables -L ÇIKIŞ -n --satır-numaralar # iptables -L ÇIKTI -n --satır-numaralar | daha az # iptables -L OUTPUT -n --satır-numaralar | grep 8.8.8.8
Bir IP listesi alacaksınız. Soldaki numaraya bakın ve silmek için numarayı girin. Örneğin, 4 numaralı satırı silerek şunu girin:
# iptables -D GİRİŞİ 4
Veya kaynak IP 202.54.1.1'i bulun ve kuraldan kaldırın:
# iptables -D INPUT -s 202.54.1.1 -j DROP
Örnekteki anahtar şu anlama gelir:
  • D: belirtilen zincirden bir veya daha fazla kuralı kaldır
Güvenlik duvarı kuralları ekleme
Belirli bir zincire bir veya daha fazla kural eklemek için tipik olarak aşağıdaki sözdizimi kullanılır. İlk önce satır numarasını bulun:
# iptables -L GİRİŞ -n --satır-numaralar
Örneğin çıktı:
Chain INPUT (politika DROP) num target prot opt ​​​​source hedef 1 DROP tümü -- 202.54.1.1 0.0.0.0/0 2 KABUL ET -- 0.0.0.0/0 0.0.0.0/0 durum YENİ, KURULDU
1 ile 2 arasında bir kural eklemek için şunu yazın:
# iptables -I INPUT 2 -s 8.8.8.8 -j DROP
Güncellenen kuralları görüntülemek için şunu yazın:
# iptables -L GİRİŞ -n --satır-numaralar
Örneğin çıktı:
Chain INPUT (politika DROP) num hedef prot opt ​​​​kaynak hedef 1 Tümünü BIRAK -- 202.54.1.1 0.0.0.0/0 2 Tümünü BIRAK -- 8.8.8.8 0.0.0.0/0 3 Tümünü KABUL -- 0.0.0.0/0 0.0. 0.0/0 durum YENİ, KURULDU
Güvenlik duvarı kurallarını kaydetme
Güvenlik duvarı kurallarını CentOS/RHEL/Fedora Linux'ta kaydetmek için şunu yazın:
# hizmet iptables kaydetme
Diğer dağıtımlarda
iptables-save > /root/my.active.firewall.rules
veya
iptables-save
Güvenlik duvarı kurallarını geri yükleme
/root/my.active.firewall.rules dosyasından güvenlik duvarı kurallarını geri yüklemek için şunu yazın:
# iptables geri yükleme< /root/my.active.firewall.rules
CentOS / RHEL / Fedora Linux'ta güvenlik duvarı kurallarını geri yüklemek için şunu yazın:
# hizmet iptables yeniden başlatılıyor
Varsayılan güvenlik duvarı ilkelerini ayarlama
Tüm trafiği engelle:
# iptables -P GİRİŞ DROP # iptables -P ÇIKIŞ DROP # iptables -P İLERİ DROP # iptables -L -v -n
Yalnızca gelen trafiği engelle:
# iptables -P GİRİŞ DROP # iptables -P İLERİ DROP # iptables -P ÇIKIŞI KABUL
Harici arayüzde yerel ağın ağ adreslerini engelleme
IP sahtekarlığı, kurbana gönderilen IP paketlerinde geri dönüş adresi olarak kurbanın güvendiği bir ana bilgisayarın IP adresini kullanan bir saldırıdır. Yönlendirilemeyen kaynak adreslerine sahip paketler, aşağıdaki sözdizimi kullanılarak reddedilmelidir:
# iptables -A GİRDİ -i eth1 -s 192.168.0.0/24 -j DROP # iptables -A GİRDİ -i eth1 -s 10.0.0.0/8 -j DROP
Özel ağlar için IPv4 adres aralığı (dış arayüzde engellendiklerinden emin olun)
  • 10.0.0.0/8 -j(A)
  • 172.16.0.0/12(B)
  • 192.168.0.0/16 ©
  • 224.0.0.0/4 (ÇOKLU YAYIN D)
  • 240.0.0.0/5(E)
  • 127.0.0.0/8 (GERİ DÖNGÜ)
IP adreslerini engelleme
1.2.3.4 IP adresini engellemek için şunu girin:
# iptables -A GİRDİ -s 1.2.3.4 -j DROP
Bağlantı noktası başına gelen istekleri engelleme
80 numaralı bağlantı noktasındaki tüm istekleri engellemek için şunu yazın:
# iptables -A INPUT -p tcp --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Yalnızca 1.2.3.4 IP adresi için 80 numaralı bağlantı noktasını engellemek için şunu yazın:
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
Giden IP adresi engelleme
Web sitesi gibi belirli bir ana bilgisayardan veya alan adından giden trafiği engellemek için şunu yazın:
host -t bir site
Cevap şöyle olacaktır:
web sitesinin adresi 95.211.41.31
IP adresinizi yazın ve 95.211.41.31'den tüm giden trafiği engellemek için aşağıdaki komutu girin:
# iptables -A ÇIKIŞ -d 95.211.41.31 -j DROP
Maskeleri kullanabilirsiniz:
# iptables -A ÇIKIŞ -d 192.168.1.0/24 -j DÜŞÜR # iptables -A ÇIKIŞ -o eth1 -d 192.168.1.0/24 -j BIRAK
Bir alan adı da kullanabilirsiniz, şunu girin:
# iptables -A OUTPUT -p tcp -d www..ru -j DROP
Belgeler, IP yerine bir alan adı kullanılmasının önerilmediğini söylese de.
Paket günlüğü ve engelleme
eth1 adlı genel arabirimde IP sahteciliğini günlüğe kaydetmek ve engellemek için aşağıdaki komutu girin:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: " # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Varsayılan olarak, her şey bir dosyaya kaydedilir. /var/log/mesajlar.

Yorum :

Bunu yapmamak, özellikle açıkça sol trafik için daha iyidir. LOG sadece -m sınırı ile kesinlikle eklenebilir, aksi takdirde herhangi bir DoS saldırısı çok daha etkili olacaktır: aslında, dolaylı olarak, saldırgan doğrudan sunucunun dosya sistemi üzerinde yoğun bir etkinin doğrudan yolunu alır.
Nasıl doğru yapılır aşağıda yazılmıştır
Sınırlı sayıda günlük girişi olan paketleri günlüğe kaydetme ve engelleme
-m seçeneği, zaman birimi başına oluşturulan günlük girişi sayısını sınırlayabilir. Bu, günlük dosyasında taşmayı önlemek için kullanılır. 5 dakikada en fazla 7 giriş kaydetmek için şunu girin:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: " # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Mac adresinden gelen trafiği engelleme veya buna izin verme
Aşağıdaki sözdizimini kullanın:
# iptables -A INPUT -m mac --mac-source 00:19:99:3C:AB:23 -j DROP ## *mac 00:19:99:3C:AB'den yalnızca TCP bağlantı noktası # 8080 için trafiği kabul eder: 22 * ## # iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:19:99:3C:AB:22 -j KABUL
Ping için ICMP isteklerini reddet veya izin ver
ICMP isteklerini engellemek için aşağıdaki komutu girin:
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP # iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
Ping yanıtı, belirli ağlar veya ana bilgisayarlarla da sınırlandırılabilir:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j KABUL
Aşağıdaki örnek, yalnızca sınırlı türde bir ICMP isteğini kabul eder:
### ** varsayılan INPUT politikasının DROP olarak ayarlandığını varsayar ** ############# iptables -A INPUT -p icmp --icmp-type echo-reply -j iptables -A INPUT KABUL -p icmp --icmp-type target-unreachable -j iptables KABUL -A INPUT -p icmp --icmp-type time-exceeded -j KABUL ## ** pinglere yanıt vermek için tüm sunucumuz ** ## iptables -A INPUT -p icmp --icmp-type echo-request -j KABUL
Bir dizi IP Adresi Açma
Bir dizi IP adresi açmak için aşağıdaki sözdizimini kullanın:
## yalnızca ip 192.168.1.100 ile 192.168.1.200 arasındaysa tcp bağlantı noktası 80'e (Apache) bağlantıyı kabul edin ## iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100- 192.168.1.200 -j KABUL
## nat örneği ## iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25
Ortak bağlantı noktalarını kapatma veya açma
Ortak TCP ve UDP bağlantı noktalarının bağlantı noktalarını açmak ve kapatmak için sözdizimi aşağıdadır:
Bağlantı noktasını engellemek için KABUL ET'i DROP ile değiştirin: ## açık bağlantı noktası ssh tcp bağlantı noktası 22 ## iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168. 1.0/24 -m durum --state YENİ -p tcp --dport 22 -j KABUL ## açık kaplar (yazdırma hizmeti) LAN kullanıcıları için udp/tcp bağlantı noktası 631 ## iptables -A INPUT -s 192.168.1.0/24 - p udp -m udp --dport 631 -j iptables KABUL -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j KABUL ## lan kullanıcıları için NTP üzerinden zaman senkronizasyonuna izin ver (udp portunu aç) 123) ## iptables -A INPUT -s 192.168.1.0/24 -m state --state YENİ -p udp --dport 123 -j KABUL ## tüm ## iptables için tcp port 25 (smtp) -A INPUT - m state --state YENİ -p tcp --dport 25 -j KABUL # tüm ## iptables için açık dns sunucu portları -A INPUT -m state --state YENİ -p udp --dport 53 -j KABUL ET -A INPUT -m state --state YENİ -p tcp --dport 53 -j KABUL ## http/https (Apache) sunucu bağlantı noktasını tüm ## için aç iptables -A INPUT -m state --state YENİ -p tcp --dport 80 -j iptables KABUL -A GİRDİ -m state --state YENİ -p tcp --dport 443 -j KABUL ## tüm ## iptables için açık tcp port 110 (pop3) -A INPUT -m state --state YENİ -p tcp --dport 110 -j KABUL ## tüm ## iptables için açık tcp bağlantı noktası 143 (imap) -A GİRİŞ -m durumu --state YENİ -p tcp --dport 143 -j KABUL ## Yalnızca lan kullanıcıları için Samba dosya sunucusuna açık erişim ## iptables -A GİRDİ -s 192.168.1.0/24 -m durum --durum YENİ -p tcp --dport 137 -j KABUL ET iptables -A GİRİŞ -s 192.168.1.0/24 -m durum --durum YENİ -p tcp -- dport 138 -j KABUL iptables -A INPUT -s 192.168.1.0/24 -m state --state YENİ -p tcp --dport 139 -j KABUL ET iptables -A INPUT -s 192.168.1.0/24 -m state --state YENİ -p tcp --dport 445 -j KABUL ## sadece lan kullanıcıları için proxy sunucusuna açık erişim ## iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 - j KABUL ## mysql sunucusuna yalnızca lan kullanıcıları için açık erişim ## iptables -I INPUT -p tcp --dport 3306 -j KABUL
IP ile istemci başına sunucuya eşzamanlı bağlantı sayısını sınırlayın
Bu limitleri ayarlamak için connlimit modülünü kullanabilirsiniz. Ana bilgisayar başına en fazla 3 SSH bağlantısını sınırlamak için şunu girin:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
HTTP isteklerini 20'ye ayarlayın:
# iptables -p tcp --syn --dport 80 -m conlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
Örnekteki parametreler,
  • --connlimit-above 3: Mevcut bağlantı sayısının 3'ün üzerinde olup olmadığı.
  • --connlimit-mask 24: Grup ana bilgisayarları
Her şey çok basit, bir kez daha forumda Linux dünyasına yeni başlayanlara, anladığım kadarıyla internette sadece iptables ayarlarını değil, aynı zamanda bazı ağ temellerini de açıklayan bir makale bulamayacağınızı açıklıyorum. .
Bu yüzden dikkatinize Linux'ta bir güvenlik duvarı kurma konusunda küçük bir arasöz sunuyorum. Sadece netfilter / iptables kurulumuna geçelim, şüphesiz diğer uygulamalı konulara da değineceğiz çünkü sorularımıza kapsamlı cevaplar alamıyoruz... Ve burada her şeyi olabildiğince açık bir şekilde ifade etmeye çalışacağım.

Nasıl görünüyor

Ofisler ve daireler için tipik bir plan düşüneceğiz, evet, evet, daireler! Çok az kişinin evinde masanın altında kendi küçük sunucusu vardır, ancak evdeki İnternet'in çoğu bir yönlendirici aracılığıyla dağıtılır ve çoğu zaman Linux ile de parlatılır.
Bu tipik bir küçük ofis düzenidir. 1 bilgisayar (sunucu) internete bağlandığında ve diğerleri bu sunucu üzerinden internete bağlandığında.

Yavaş yavaş gidelim...

Peki elimizde ne var:
  • 2 ağ kartı ve Debian Lenny'nin kurulu olduğu sunucu
  • Debian Lenny güvenlik duvarında varsayılan - netfilter/iptables
  • sunucu da dahil olmak üzere tümü bir anahtarla bağlı N bilgisayardan oluşan yerel bir ağ
NAT nedir
Öncelikle, en yaygın NAT'ı (Ağ Adresi Çevirisi) yapılandıracağımızı anlamamız gerekiyor. Susayanlar için son olarak kalamar örneğini kullanarak proxy sunucusundan da bahsedeceğim. Dediğim gibi, hemen hemen her şeyi çiğneyeceğiz.
NAT nedir? Aslında her şey basit, tüm bilgisayarların fiziksel (MAC) ve ağ (IP) adresleri var. Şu anda IP adresleriyle ilgileniyoruz. Aynı ağ içindeki IP adresi benzersiz olmalıdır! Ve mevcut IPv4 standardı ile sadece 4,294,967,296 (2 32) benzersiz olabilir, ki bu çok fazla bir şey değil ve neredeyse bitmek üzere. ama merak etmeyin IPv6 yaygın kullanıma girmek üzere ve bir sürü adres var!
Ancak burada IPv4'ün izin verdiğinden çok daha fazla bilgisayar olduğunu fark edebilir veya evdeki bir arkadaşınızın sizinle aynı adrese sahip olduğunu söyleyebilirsiniz! İşte burada NAT devreye girer - tek IP adresinizi kullanarak bilgisayar ağlarını birbirine bağlamanıza izin verir, güvenlik duvarının eylemlerine SNAT (Kaynak NAT veya kaynak adresi değiştirme) adı verilir. Onlar. vakaların %99'unda, tüm ofisiniz 1 IP adresi altında çevrimiçi oluyor, ofis içinde ise her birinin kendine ait bir IP adresi var. İnternette IP adresi sınıfları hakkında bilgi edinebilirsiniz.

Artık NAT'ın ne olduğunu ve ne için olduğunu bildiğimize göre, doğrudan sunucunun kurulumuna geçebiliriz.

toplu taşıma
Tüm komutlar kök (süper kullanıcı) olarak yürütülür. Debian, varsayılan olarak toplu taşıma trafiğini devre dışı bırakır. varsayılan, yalnızca tek bir makine olarak çalışmaktır. Tahmin edebileceğiniz gibi, transit trafiği olmayan NAT yoktur. Etkinleştirmek için sadece 1 rakamı değiştirin - $ echo 1 > /proc/sys/net/ipv4/ip_forward, ancak bu ayar yeniden başlatmanın ardından başarısız olur, bu nedenle yapılandırmayı düzeltmek daha iyidir - $ nano /etc/sysctl.conf sonra çizgiyi ara #net.ipv4.ip_forward=1 ve satırın başındaki "kafes"i (yorum sembolü) kaldırın ve değerin 1 olup olmadığını kontrol edin! Artık doğrudan iptables'ı yapılandırmaya geçebilirsiniz.
iptables'ı yapılandır
İnternette iptables'ta kuralların nasıl yazılacağı ve bunlarla neler yapabileceğiniz hakkında birçok makale var, bana en eksiksiz ve okuması zevkli gibi geldi.
Ve başlayalım. Başlamak için, gereksiz kurallardan oluşan tabloları temizleyelim, birdenbire gereksiz bir şey oldu ...
$ iptables -F
$ iptables -t nat -F
$ iptables -t mangle -F

Fazlalığı temizledi. iptables içindeki kuralların hiyerarşik olarak uygulandığını anlamak ve hatırlamak çok önemlidir, yani. önce yukarıdaki kural uygulanacaktır. Tüm zincirlerin varsayılan olarak bir KABUL politikası vardır - her şeye izin verirler. bu zincirin kurallarına uymayan.
Yerel ağa bakan arayüzün eth0 olduğunu ve İnternet'e - eth1, yerel ağın 192.168.0.0/24 adresleri olduğunu ve sağlayıcının bize 10.188 statik adresini verdiğini kabul edelim. Çevrimiçi bakabilirsiniz). Ve böylece yazıyoruz:
$ iptables -A İLERİ -i eth0 -o eth1 -s 192.168.0.0/24 -j KABUL
$ iptables -A İLERİ -i eth1 -o eth0 -d 192.168.0.0/24 -j KABUL
$ iptables -P İLERİ DROP

bu nedenle, ip adresleri aralığımız için geçiş paketlerinin güvenlik duvarından geçmesine izin verdik ve diğer her şeyi yasakladık.
Şimdi NAT'ın kendisi:
$ iptables -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source 10.188.106.33
Bu, NAT'ın sizin için çalışması için yeterlidir.
küçük şeyler...
İstemcilerde, seçilen aralıktan bir ip belirleriz ve ip ağ geçidi olarak sunucumuzun adresini belirtiriz (genellikle ilk önce alt ağdan atanır - bunu size bırakacağım). Sunucudaki tüm ağ ayarları şu şekilde yapılabilir:
$ nano /etc/ağ/arayüzler ağ arayüzleriniz için ayarları belirtir.
ağ geçidi veya DNAT aracılığıyla ağın alt toprağına erişim
Ardından, ağ üzerinde RDP aracılığıyla her zaman kolayca erişebildiğiniz bir Windows Sunucunuz olduğunu fark ettiniz ve ardından bu can sıkıcı Debian ağ geçidi ortaya çıktı! Her şey çok basit - iptables'ımıza DNAT kuralını eklemeniz yeterli.
DNAT canavarı nedir? DNAT (Hedef NAT veya alıcı adresi ikamesi) - ağ kartları, yalnızca kendilerine özel olarak gönderilen paketleri kabul edecekleri bir modda çalışırlar ve ofisinizde, eriştiği ip, sunucumuza gitmek için bir düzine daha makineniz var mı? internet? Talep ona nasıl ulaşacak? Aslında, bu tür tüm istekler ağ geçidimize karşıdır. Ve tek yapmamız gereken bu tür paketlerle çalışmak için kuralları belirlemek.
$ iptables -A ÖN YÖNLENDİRME -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --hedef 192.168.0.2
Bu basit kural, Internet'ten ağ geçidine gelen tüm paketleri 3389 numaralı TCP bağlantı noktasına (RDP protokolünün kullandığı şeydir) dahili Windows Sunucunuza iletir. Ve işte, her şey senin için çalışıyor.
peki en sevdiğin kalamarla ne haber
Ve şimdi her şey çalışıyor olsa da, herkesin İnterneti var ve her şey çalışıyor, bazıları hala bir proxy sunucusuna ihtiyaç duyuyor. Kalamar kurmaktan bahsetmeyeceğim, size onu "şeffaf" hale getirmenizi sağlayacak bir kural göstereceğim. Kalamarda, şeffaf sihirli kelimeyi doğru yere yazmanız yeterlidir ve üzerine düşen istekleri doğru bir şekilde işlemeye başlayacaktır.
Biz yazarız $ iptables -A ÖN YÖNLENDİRME -d! 192.168.0.0/24 -i eth0 -p tcp -m çoklu bağlantı noktası --dports 80.443 -j REDIRECT --to-ports 3128.
Ve bize ne veriyor? Artık http(80) ve https(443) protokolleri ile iş istasyonlarınızdan web sayfalarına gelen tüm istekler squid'in dinlediği porta yönlendirilecek.İnternet üzerinden içerik filtreleme, kimin nerede ve ne yaptığı hakkında bilgi alacaksınız. , kullanıcı eskisi gibi çalıştığından şüphelenmeden hiçbir şey yapmaz...
biraz güvenlik
Ağ geçidinizi en azından minimum düzeyde korumalısınız, bu yüzden birkaç kural daha ekleyelim
$ iptables -A GİRDİ -i lo -j KABUL
$ iptables -A GİRDİ -i eth0 -s 192.168.0.0/24 -j KABUL
$ iptables -A GİRDİ -i eth1 -m conntrack --ctstate İLGİLİ, KURULDU -j KABUL
$ iptables -P GİRİŞ DURUMU

Bu nedenle, önceden kurulmuş bağlantılar dışında, ağ geçidi ile doğrudan herhangi bir iletişim yasaklandı, yani. sizin tarafınızdan başlatılanlar ve sadece onlara cevaplar alırsınız. Korkmayın DNAT'ımız bu kurallara uymuyor...
neden bu kadar az?
Makale kauçuk değil ve hala her şeyi anlatamıyorsun ... getirdim asgari Linux'ta bir ağ geçidi olarak böyle bir dev üzerinde uzmanlaşmaya başlayabilmeniz için bir dizi eylem ve kavram. Burada netfilter'ın birçok yönünü ve kapasitesini tartışarak çok, çok uzun bir süre konuşabilirsiniz.

Toplam

Gördüğümüz gibi, her şey gerçekten basit! Ana şey, ağın çalışma prensibini anlamak ve büyük kılavuzları kurmaktan ve okumaktan korkmamaktır.
Umarım Linux tabanlı yazılım yönlendiricileriyle arkadaşlığınızı başlatmak için yeterli bilgiyi bir araya getirmeyi başardım.

Etiketler: iptables, netfilter, NAT