Yeni Başlayanlar İçin iptables Kılavuzu, Linux Güvenlik Duvarı
Iptables, Linux işletim sistemleri için oluşturulmuş son derece esnek bir güvenlik duvarı aracıdır. İster acemi bir Linux meraklısı ister bir sistem yöneticisi olun, muhtemelen iptables'ın sizin için harika bir kullanım olmasının bir yolu vardır. Size en çok yönlü Linux güvenlik duvarını nasıl yapılandıracağınızı gösterdiğimiz için okumaya devam edin.
Fotoğraf ezioman .
İptables hakkında
iptables, trafiğe izin vermek veya trafiği engellemek için ilke zincirlerini kullanan bir komut satırı güvenlik duvarı yardımcı programıdır. Bir bağlantı sisteminizde kendisini kurmaya çalıştığında, iptables kendi listesinde onunla eşleşecek bir kural arar. Bir tane bulamazsa, varsayılan eyleme başvurur.
iptables hemen hemen her zaman herhangi bir Linux dağıtımına önceden yüklenmiş olarak gelir. Güncellemek / kurmak için iptables paketini almanız yeterlidir:
sudo apt-get install iptables
Firestarter gibi iptables'a GUI alternatifleri vardır, ancak iptables birkaç komuta sahip olduğunuzda o kadar da zor değildir. İptables kurallarını yapılandırırken son derece dikkatli olmak istersiniz, özellikle bir sunucuya SSH'deyseniz, çünkü bir yanlış komut, fiziksel makinede manuel olarak sabitlenene kadar sizi kalıcı olarak kilitleyebilir.
Zincir Çeşitleri
iptables üç farklı zincir kullanır: giriş, yönlendirme ve çıkış.
Girdi - Bu zincir, gelen bağlantıların davranışını kontrol etmek için kullanılır. Örneğin, bir kullanıcı PC'nize / sunucunuza SSH'yi denerse, iptables IP adresini ve bağlantı noktasını giriş zincirindeki bir kuralla eşleştirmeye çalışır.
İleri - Bu zincir, aslında yerel olarak teslim edilmeyen gelen bağlantılar için kullanılır. Bir yönlendirici düşünün - veriler her zaman ona gönderilir, ancak nadiren gerçekten yönlendiricinin kendisine gönderilir; veriler sadece hedefine iletilir. Sisteminizde yönlendirme gerektiren bir tür yönlendirme, NATing veya başka bir şey yapmadığınız sürece, bu zinciri bile kullanmayacaksınız.
Sisteminizin ileri zinciri kullanıp kullanmadığını / gerektirmediğini kontrol etmenin kesin bir yolu vardır.
iptables -L -v
Yukarıdaki ekran görüntüsü, birkaç haftadır çalışan ve gelen veya giden bağlantılarla ilgili herhangi bir kısıtlaması olmayan bir sunucuya aittir. Gördüğünüz gibi, giriş zinciri 11 GB'lık paketleri işledi ve çıktı zinciri 17 GB'lık paketler işledi. Öte yandan ileri zincir, tek bir paketi işlemeye ihtiyaç duymadı. Bunun nedeni, sunucunun herhangi bir yönlendirme yapmaması veya geçiş cihazı olarak kullanılmamasıdır.
Çıktı - Bu zincir giden bağlantılar için kullanılır. Örneğin, howtogeek.com'a ping atmaya çalışırsanız, iptables, bağlantı girişimine izin verme veya reddetme kararını vermeden önce, ping ve howtogeek.com ile ilgili kuralların ne olduğunu görmek için çıktı zincirini kontrol edecektir.
Uyarı
Harici bir ana bilgisayara ping atmak, yalnızca çıkış zincirini geçmesi gereken bir şey gibi görünse de, verileri döndürmek için giriş zincirinin de kullanılacağını unutmayın. Sisteminizi kilitlemek için iptables kullanırken, birçok protokolün iki yönlü iletişim gerektireceğini unutmayın, bu nedenle hem giriş hem de çıkış zincirlerinin doğru şekilde yapılandırılması gerekir. SSH, insanların her iki zincire de izin vermeyi unuttukları yaygın bir protokoldür.
Politika Zinciri Varsayılan Davranışı
Belirli kuralları girmeden ve yapılandırmadan önce, üç zincirin varsayılan davranışının ne olmasını istediğinize karar vermelisiniz. Başka bir deyişle, bağlantı mevcut herhangi bir kuralla eşleşmezse iptables'ın ne yapmasını istiyorsunuz?
İlke zincirlerinizin şu anda eşleşmeyen trafikle ne yapmak üzere yapılandırıldığını görmek için iptables -L
komutu çalıştırın .
Gördüğünüz gibi, bize daha temiz çıktı sağlamak için grep komutunu da kullandık. Bu ekran görüntüsünde, zincirlerimizin şu anda trafiği kabul ettiği düşünülüyor.
Çoğu zaman, sisteminizin varsayılan olarak bağlantıları kabul etmesini isteyeceksiniz. Daha önce politika zinciri kurallarını değiştirmediyseniz, bu ayarın zaten yapılandırılmış olması gerekir. Her iki durumda da, varsayılan olarak bağlantıları kabul etme komutu şöyledir:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Kabul kuralını varsayılan olarak, diğer tüm bağlantıları kabul etmeye devam ederken belirli IP adreslerini veya bağlantı noktası numaralarını reddetmek için iptables'ı kullanabilirsiniz. Bu komutlara bir dakika içinde ulaşacağız.
Tüm bağlantıları reddetmeyi ve hangilerinin bağlanmasına izin vermek istediğinizi manuel olarak belirtmeyi tercih ederseniz, zincirlerinizin varsayılan politikasını düşecek şekilde değiştirmelisiniz. Bunu yapmak, muhtemelen yalnızca hassas bilgiler içeren ve bunlara bağlanan yalnızca aynı IP adreslerine sahip sunucular için yararlı olacaktır.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Bağlantıya Özgü Yanıtlar
Varsayılan zincir ilkeleriniz yapılandırıldığında, iptables'a kurallar eklemeye başlayabilirsiniz, böylece belirli bir IP adresinden veya belirli bir IP adresinden veya bağlantı noktasından bir bağlantıyla karşılaştığında ne yapacağını bilir. Bu kılavuzda, en temel ve en sık kullanılan üç "yanıtı" gözden geçireceğiz.
Kabul et - Bağlantıya izin verin.
Bırak - Bağlantıyı kes, hiç olmamış gibi davran. Kaynağın sisteminizin var olduğunu anlamasını istemiyorsanız bu en iyisidir.
Reddet - Bağlantıya izin vermeyin, ancak bir hata gönderin. Belirli bir kaynağın sisteminize bağlanmasını istemiyorsanız, ancak güvenlik duvarınızın onları engellediğini bilmelerini istiyorsanız bu en iyisidir.
Bu üç kural arasındaki farkı göstermenin en iyi yolu, bir PC, bu ayarların her biri için yapılandırılmış iptables ile bir Linux makinesine ping atmaya çalıştığında nasıl göründüğünü göstermektir.
Bağlantıya izin verilmesi:
Bağlantıyı kesme:
Bağlantının reddedilmesi:
Belirli Bağlantılara İzin Verme veya Engelleme
İlke zincirleriniz yapılandırıldığında, artık iptables'ı belirli adreslere, adres aralıklarına ve bağlantı noktalarına izin verecek veya bunları engelleyecek şekilde yapılandırabilirsiniz. Bu örneklerde bağlantıları olarak ayarlayacağız DROP
, ancak ihtiyaçlarınıza ve politika zincirlerinizi nasıl yapılandırdığınıza bağlı olarak bunları ACCEPT
veya REJECT
olarak değiştirebilirsiniz.
Not: Bu örneklerde, iptables -A
mevcut zincire kurallar eklemek için kullanacağız . iptables listesinin en üstünde başlar ve eşleştiğini bulana kadar her kuralı gözden geçirir. Bir diğerinin üzerine bir kural eklemeniz iptables -I [chain] [number]
gerekirse, listede olması gereken sayıyı belirtmek için kullanabilirsiniz .
Tek bir IP adresinden bağlantılar
Bu örnek, 10.10.10.10 IP adresinden tüm bağlantıların nasıl engelleneceğini gösterir.
iptables -A INPUT -s 10.10.10.10 -j DROP
Bir dizi IP adresinden gelen bağlantılar
Bu örnek, 10.10.10.0/24 ağ aralığındaki tüm IP adreslerinin nasıl engelleneceğini gösterir. IP adreslerinin aralığını belirtmek için bir ağ maskesi veya standart eğik çizgi gösterimi kullanabilirsiniz.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
veya
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Belirli bir bağlantı noktasına bağlantılar
Bu örnek, 10.10.10.10'dan itibaren SSH bağlantılarının nasıl engelleneceğini gösterir.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
"Ssh" yi herhangi bir protokol veya bağlantı noktası numarasıyla değiştirebilirsiniz. -p tcp
Kod parçası iptables bağlantısının ne tür protokol kullanır söyler. TCP yerine UDP kullanan bir protokolü engelliyorsanız, -p udp
bunun yerine gerekli olacaktır.
Bu örnek, herhangi bir IP adresinden SSH bağlantılarının nasıl engelleneceğini gösterir.
iptables -A INPUT -p tcp --dport ssh -j DROP
Bağlantı Durumları
Daha önce de bahsettiğimiz gibi, birçok protokol iki yönlü iletişim gerektirecek. Örneğin, sisteminize SSH bağlantılarına izin vermek istiyorsanız, giriş ve çıkış zincirlerinin bunlara eklenmesi gereken bir kural olacaktır. Ancak, ya yalnızca SSH'nin sisteminize girmesine izin verilmesini istiyorsanız? Çıktı zincirine bir kural eklemek, aynı zamanda giden SSH girişimlerine de izin vermez mi?
Bu, size iki yönlü iletişime izin vermeniz gereken ancak yalnızca tek yönlü bağlantıların kurulmasına izin veren yeteneği veren bağlantı durumlarının geldiği yerdir. 10.10.10.10'dan itibaren SSH bağlantılarına izin verildiği, ancak 10.10.10.10'a kadar SSH bağlantılarına izin verilmeyen bu örneğe bir göz atın. Ancak, oturum zaten kurulmuş olduğu sürece sistemin SSH üzerinden bilgileri geri göndermesine izin verilir, bu da bu iki ana bilgisayar arasında SSH iletişimini mümkün kılar.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Değişiklikleri kaydediyor
İptables kurallarınızda yaptığınız değişiklikler, değişiklikleri kaydetmek için bir komut yürütmediğiniz sürece iptables hizmetinin bir sonraki yeniden başlatılışında hurdaya çıkarılacaktır. Bu komut, dağıtımınıza bağlı olarak farklılık gösterebilir:
Ubuntu:
sudo /sbin/iptables-save
Red Hat / CentOS:
/sbin/service iptables save
Veya
/etc/init.d/iptables save
Diğer Komutlar
Şu anda yapılandırılmış iptables kurallarını listeleyin:
iptables -L
-v
Seçeneği eklemek size paket ve bayt bilgisi verir ve eklemek -n
her şeyi sayısal olarak listeler. Başka bir deyişle - ana bilgisayar adları, protokoller ve ağlar sayı olarak listelenir.
Halihazırda yapılandırılmış tüm kuralları temizlemek için, flush komutunu verebilirsiniz.
iptables -F