giriiş
Iptables, çoğu Linux sistemi için ağ güvenliğinde temel bir rol oynayan bir güvenlik duvarıdır. Birçok iptables eğitimi, sunucunuzu güvence altına almak için güvenlik duvarı kurallarının nasıl oluşturulacağını öğretirken, bu eğitim güvenlik duvarı yönetiminin farklı bir yönüne, yani kuralları listelemeye ve silmeye odaklanmaktadır.
Bu eğitimde, aşağıdaki iptables görevlerinin nasıl gerçekleştirileceğini ele alacağız:
- Kuralları listeleyin
- Paket ve bayt sayaçlarını temizle
- Kuralları sil
- Bir zinciri temizleme (bir zincirdeki tüm kuralları silme)
- Tüm zincirleri ve tabloları temizleyin, tüm zincirleri kaldırın ve tüm trafiği kabul edin
Ön koşullar
Bu eğitim, iptables komutunun yüklü olduğu ve kullanıcınızın sudo ayrıcalıklarına sahip olduğu bir Linux sunucusu kullandığınızı varsayar. Bu ilk kurulumda yardıma ihtiyacınız olursa, lütfen Ubuntu 20.04 ile ilk sunucu kurulumu kılavuzuna bakın.
Şartnameye göre listeleme kuralları
Öncelikle kuralların nasıl listeleneceğine bakalım. Etkin iptables kurallarını görüntülemenin iki farklı yolu vardır: bir tabloda veya kural özelliklerinin bir listesi olarak. Her iki yöntem de aşağı yukarı aynı bilgileri farklı biçimlerde sağlar.
Tüm etkin iptables kurallarını belirtimlerine göre listelemek için iptables komutunu -S seçeneğiyle çalıştırın:
sudo iptables -SOutput
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
...Gördüğünüz gibi, çıktı, önceki iptables komutu olmadan, bunları oluşturmak için kullanılan komutlarla tamamen aynıdır. Daha önce iptables-persistent veya iptables save kullandıysanız, bu da iptables kuralları yapılandırma dosyalarına benzer olacaktır.
Belirli bir zinciri listeleme
Çıktıyı belirli bir zincire (INPUT, OUTPUT, TCP, vb.) sınırlamak istiyorsanız, seçeneğin hemen ardından zincir adını belirtebilirsiniz. -S Örneğin, TCP zincirindeki tüm kuralları göstermek için şu komutu çalıştırın:
sudo iptables -S TCPOutput
-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPTŞimdi aktif iptables kurallarını kural tablosu olarak görüntülemenin alternatif bir yoluna bakalım.
Tablolardaki liste kuralları
iptables kurallarını bir tablo görünümünde listelemek, farklı kuralları birbirleriyle karşılaştırmak için faydalı olabilir. Bir tablodaki tüm etkin iptables kurallarını çıktı olarak almak için iptables komutunu -L seçeneğiyle çalıştırın:
sudo iptables -LBu, zincir bazında sıralanmış tüm mevcut kuralları üretecektir.
Çıktıyı belirli bir zincire (INPUT, OUTPUT, TCP, vb.) sınırlamak istiyorsanız, -L seçeneğinden hemen sonra zincir adını belirtebilirsiniz.
Giriş zinciri örneğine bakalım:
sudo iptables -L INPUTOutput
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP icmp -- anywhere anywhere ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachableÇıktının ilk satırı, zincirin adını (bu durumda INPUT) ve ardından varsayılan politikasını (DROP) gösterir. Sonraki satır, tablodaki her sütunun başlıklarını ve ardından zincir kurallarını içerir. Her başlığın neyi temsil ettiğini inceleyelim:
- Hedef: Bir paket bir kuralla eşleşirse, hedef onunla ne yapılacağını belirtir. Örneğin, bir paket kabul edilebilir, bırakılabilir, kaydedilebilir veya daha fazla kuralla karşılaştırılmak üzere başka bir zincire gönderilebilir.
- prot: tcp, udp, icmp veya tümü gibi protokol
- opt: Nadiren kullanılan bu sütun IP seçeneklerini gösterir
- kaynak: Trafiğin veya herhangi bir yerin kaynak IP adresi veya alt ağı
- hedef: Trafiğin veya herhangi bir yerin hedef IP adresi veya alt ağı
Etiketlenmemiş son sütun, bir kuralın seçeneklerini gösterir. Bu, önceki sütunlarda gösterilmeyen kuralın herhangi bir parçasıdır. Kaynak ve hedef portlardan paket bağlantısının durumuna kadar her şey olabilir.
Paket sayısını ve toplam boyutu görüntüle
iptables kurallarını listelerken, her bir kurala uyan paket sayısını ve toplam paket boyutunu bayt cinsinden göstermek mümkündür. Bu, hangi kuralların hangi paketlerle eşleştiğine dair genel bir fikir edinmeye çalışırken genellikle faydalıdır. Bunu yapmak için -L ve -v seçeneklerini birlikte kullanın.
Örneğin, -v seçeneğiyle INPUT zincirine tekrar bakalım:
sudo iptables -L INPUT -vOutput
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 DROP all -- any any anywhere anywhere ctstate INVALID
396 63275 UDP udp -- any any anywhere anywhere ctstate NEW
17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW
396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable
2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHEDListenin artık iki ek sütuna sahip olduğunu fark edin, paketler Ve bayt Öyledir.
Artık etkin güvenlik duvarı kurallarını farklı şekillerde nasıl listeleyeceğinizi öğrendiğinize göre, paket ve bayt sayaçlarını nasıl sıfırlayabileceğinizi görelim.
Paket sayısını ve toplam boyutu sıfırla
Kurallarınız için paket ve bayt sayaçlarını temizlemek veya sıfırlamak istiyorsanız -Z seçeneğini kullanın. Ayrıca, yeniden başlatma sırasında da sıfırlanırlar. Bu, sunucunuzun mevcut kurallarınızla eşleşen yeni trafik alıp almadığını görmek istiyorsanız kullanışlıdır.
Tüm zincirler ve kurallar için sayaçları temizlemek için şu seçeneği kullanın: -Z Tek başına kullanım:
sudo iptables -ZBelirli bir zincirdeki tüm kuralların sayaçlarını temizlemek için şu seçeneği kullanın: -Z Zinciri kullanın ve belirtin. Örneğin, zincir sayaçlarını temizlemek için GİRİŞ Şu komutu çalıştırın:
sudo iptables -Z INPUTBelirli bir kuralın sayaçlarını temizlemek istiyorsanız, zincir adını ve kural numarasını belirtin. Örneğin, zincirdeki ilk kuralın sayaçlarını temizlemek için: GİRİŞ, şunu çalıştırın:
sudo iptables -Z INPUT 1Artık iptables paket ve bayt sayaçlarının nasıl sıfırlanacağını öğrendiğimize göre, bunları kaldırmak için kullanılabilecek iki yönteme bakalım.
Belirtimlere dayalı kuralları silin
Iptables kurallarını kaldırmanın bir yolu, kuralları belirtmektir. Bunu yapmak için, iptables komutunu -D seçeneğiyle ve ardından kural belirtimi ile çalıştırabilirsiniz. Kuralları bu yöntemi kullanarak kaldırmak isterseniz, yardım için kural listesinin çıktısı olan iptables -S komutunu kullanabilirsiniz.
Örneğin, geçersiz giriş paketlerini düşüren bir kuralı kaldırmak istiyorsanız (-A INPUT -m conntrack –ctstate INVALID -j DROP), şu komutu çalıştırabilirsiniz:
sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROPKuralın oluşturulduğu andaki konumunu belirtmek için kullanılan -A seçeneğinin burada atlanması gerektiğini unutmayın.
Zincir ve sayıya göre kuralları sil
iptables kurallarını kaldırmanın bir diğer yolu da zincir ve satır numarası kullanmaktır. Bir kuralın satır numarasını belirtmek için, kuralları tablo biçiminde listeleyin ve --line-numbers seçeneğini ekleyin:
sudo iptables -L --line-numbersOutput
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT all -- anywhere anywhere
3 DROP all -- anywhere anywhere ctstate INVALID
4 UDP udp -- anywhere anywhere ctstate NEW
5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6 ICMP icmp -- anywhere anywhere ctstate NEW
7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
8 REJECT tcp -- anywhere anywhere reject-with tcp-reset
9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHEDBu, başlıkla ilişkili her kural satırına bir satır numarası ekler. sayı Gösterildi.
Hangi kuralı kaldırmak istediğinize karar verdikten sonra, zincir numarasını ve kural satırını not edin. Ardından iptables -D komutunu çalıştırın ve ardından zincir numarasını ve kuralı girin.
Örneğin, geçersiz paketleri düşüren gelen kuralını kaldırmak istediğimizde, kural 3'ün INPUT zincirinde olduğunu görürüz. Bu nedenle şu komutu çalıştırmamız gerekir:
sudo iptables -D INPUT 3
Artık güvenlik duvarı kurallarının nasıl silineceğini öğrendiğinize göre, kural zincirlerinin nasıl temizleneceğine bakalım.
Zincirleri parlatmak
Iptables, bir zincirdeki tüm kuralları kaldırmanın veya bir zinciri temizlemenin bir yolunu sunar. Bu bölümde bunu yapmanın çeşitli yollarını ele alacağız.
Bir zinciri yıkamak
Zincirdeki tüm kuralları kaldıran belirli bir zinciri temizlemek için -F veya eşdeğeri olan -flush seçeneğini ve temizlenecek zincir adını kullanabilirsiniz.
Örneğin, zincirdeki tüm kuralları silmek için GİRİŞ, şu komutu çalıştırın:
sudo iptables -F INPUTTüm zincirleri yanıp sönüyor
Tüm zincirleri temizlemek ve tüm güvenlik duvarı kurallarını kaldırmak için -F seçeneğini veya eşdeğeri olan -flush seçeneğini tek başına kullanabilirsiniz:
sudo iptables -FTüm kuralları temizleyin, tüm zincirleri kaldırın ve tüm kuralları kabul edin.
Bu bölüm, tüm güvenlik duvarı kurallarınızı, tablolarınızı ve zincirlerinizi nasıl temizleyeceğinizi ve tüm ağ trafiğine nasıl izin vereceğinizi gösterir.
Öncelikle, dahili zincirlerin her biri için varsayılan politikaları ACCEPT olarak ayarlayın. Bunu yapmanızın temel nedeni, SSH üzerinden sunucunuzun kilitlenmemesini sağlamaktır:
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPTDaha sonra nat ve mangle tablolarını temizleyin, tüm zincirleri temizleyin (-F) ve varsayılan olmayan tüm zincirleri kaldırın (-X):
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -XGüvenlik duvarınız artık tüm ağ trafiğine izin verecektir. Kurallarınızı listelediğinizde, hiçbir kural olmadığını ve yalnızca üç varsayılan zincirin (GİRİŞ, İLETİM ve ÇIKIŞ) kaldığını göreceksiniz.
Sonuç
Bu eğitimi tamamladıktan sonra, iptables güvenlik duvarı kurallarınızı nasıl listeleyip sileceğinizi görmüş olacaksınız. iptables komutuyla yapılan tüm iptables değişikliklerinin geçici olduğunu ve sunucu yeniden başlatmalarında kalıcı olması için kaydedilmesi gerektiğini unutmayın. Bu konu, Ortak Güvenlik Duvarı Kuralları ve Komutları eğitiminin Kuralları Kaydetme bölümünde ele alınmıştır.









