Her Linux Yöneticisinin Bilmesi Gereken 25 Faydalı IPtable Güvenlik Duvarı Kuralı


Ağ trafiğini yönetmek, sistem yöneticilerinin uğraşması gereken en zorlu işlerden biridir. Güvenlik duvarını, sistemi saldırılara karşı savunmasız bırakmadan, hem gelen hem de giden bağlantılarda sistem ve kullanıcı gereksinimlerini karşılayacak şekilde yapılandırması gerekir.

iptables'ın kullanışlı olduğu yer burasıdır. Iptables, sistem yöneticilerinin gelen ve giden trafiği bir dizi yapılandırılabilir tablo kuralı aracılığıyla yönetmesine olanak tanıyan bir Linux komut satırı güvenlik duvarıdır.

Iptables, yerleşik veya kullanıcı tanımlı kurallar içeren zincirlere sahip bir dizi tablo kullanır. Bunlar sayesinde bir sistem yöneticisi, sisteminin ağ trafiğini uygun şekilde filtreleyebilir.

iptables kılavuzuna göre şu anda 3 tür tablo vardır:

    1. FİLTRE – bu, aşağıdakiler için yerleşik zincirleri içeren varsayılan tablodur:

      1. INPUT  – yerel soketlere yönelik paketler
      2. İLERİ – paketler sistem üzerinden yönlendirilir
      3. ÇIKTI – yerel olarak oluşturulan paketler
    2. NAT – bir paket yeni bir bağlantı oluşturmaya çalıştığında başvurulan tablo. Aşağıdaki yerleşik özelliklere sahiptir:

      1. PREROUTING – bir paketi alınır alınmaz değiştirmek için kullanılır
      2. OUTPUT – yerel olarak oluşturulan paketleri değiştirmek için kullanılır
      3. POSTROUTING – paketler dışarı çıkmak üzereyken bunları değiştirmek için kullanılır
    3. MANGLE – bu tablo paket değiştirmek için kullanılır. Çekirdek sürümü 2.4'e kadar bu tablonun yalnızca iki zinciri vardı, ancak şimdi bunlar 5'tir:

      1. PREROUTING – gelen bağlantıları değiştirmek için
      2. OUTPUT – yerel olarak oluşturulan paketleri değiştirmek için
      3. INPUT – gelen paketler için
      4. POSTROUTING – paketler dışarı çıkmak üzereyken bunları değiştirmek için
      5. İLERİ – kutudan yönlendirilen paketler için

Bu makalede, Linux kutusu güvenlik duvarınızı iptables aracılığıyla yönetmenize yardımcı olacak bazı yararlı komutlar göreceksiniz. Bu makalenin amacı doğrultusunda, daha basit komutlarla başlayacağım ve daha karmaşık komutlarla sonuna kadar gideceğim.

1. Iptables Güvenlik Duvarını Başlat/Durdur/Yeniden Başlat

Öncelikle iptables hizmetini farklı Linux dağıtımlarında nasıl yöneteceğinizi bilmelisiniz. Bu oldukça kolaydır:

SystemD tabanlı Linux Dağıtımlarında

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

SysVinit tabanlı Linux Dağıtımlarında

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Tüm IPtables Güvenlik Duvarı Kurallarını kontrol edin

Mevcut kurallarınızı kontrol etmek istiyorsanız aşağıdaki komutu kullanın:

iptables -L -n -v

Bu, aşağıdakine benzer bir çıktı döndürmelidir:

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Belirli bir tablonun kurallarını kontrol etmeyi tercih ederseniz, -t seçeneğini ve ardından kontrol etmek istediğiniz tabloyu kullanabilirsiniz. Örneğin, NAT tablosundaki kuralları kontrol etmek için şunları kullanabilirsiniz:

iptables -t nat -L -v -n

3. IPtables Güvenlik Duvarında Belirli IP Adreslerini Engelleyin

Bir IP adresinden olağandışı veya kötüye kullanım amaçlı bir etkinlik bulursanız, bu IP adresini aşağıdaki kuralla engelleyebilirsiniz:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

"xxx.xxx.xxx.xxx"'i gerçek IP adresiyle değiştirmeniz gereken yer. Bu komutu çalıştırırken çok dikkatli olun çünkü yanlışlıkla kendi IP adresinizi engelleyebilirsiniz. -A seçeneği, kuralı seçilen zincirin sonuna ekler.

Yalnızca o IP adresinden gelen TCP trafiğini engellemek istiyorsanız protokolü belirten -p seçeneğini kullanabilirsiniz. Bu şekilde komut şu şekilde görünecektir:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. IPtables Güvenlik Duvarında IP Adresinin engelini kaldırın

Belirli bir IP adresinden gelen istekleri artık engellemek istemediğinize karar verdiyseniz aşağıdaki komutu kullanarak engelleme kuralını silebilirsiniz:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

-D seçeneği, seçilen zincirden bir veya daha fazla kuralı siler. Daha uzun seçeneği kullanmayı tercih ederseniz --delete komutunu kullanabilirsiniz.

5. IPtables Güvenlik Duvarındaki Belirli Bağlantı Noktasını Engelleyin

Bazen belirli bir bağlantı noktasındaki gelen veya giden bağlantıları engellemek isteyebilirsiniz. Bu iyi bir güvenlik önlemidir ve güvenlik duvarınızı kurarken bu konuyu gerçekten düşünmelisiniz.

Belirli bir bağlantı noktasındaki giden bağlantıları engellemek için şunu kullanın:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

Gelen bağlantılara izin vermek için şunları kullanın:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

Her iki örnekte de "xxx"'i izin vermek istediğiniz gerçek bağlantı noktasıyla değiştirin. TCP yerine UDP trafiğini engellemek istiyorsanız, "tcp"'yi "udp" ile değiştirmeniz yeterlidir. iptables kuralının üstünde.

6. Çoklu Bağlantı Noktasını Kullanarak IPtable'larda Çoklu Bağlantı Noktalarına İzin Verme

Çoklu bağlantı noktasını kullanarak aynı anda birden fazla bağlantı noktasına izin verebilirsiniz; aşağıda hem gelen hem de giden bağlantılar için bu kuralı bulabilirsiniz:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. IPtable'larda Belirli Bağlantı Noktasında Belirli Ağ Aralığına İzin Ver

Belirli bir bağlantı noktasındaki belirli bağlantıları belirli bir ağla sınırlamak isteyebilirsiniz. Diyelim ki 22 bağlantı noktasından 192.168.100.0/24 ağına giden bağlantılara izin vermek istiyorsunuz.

Bunu şu komutla yapabilirsiniz:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. IPtables Güvenlik Duvarında Facebook'u engelleyin

Bazı işverenler çalışanlarının Facebook'a erişimini engellemeyi tercih ediyor. Aşağıda Facebook'a gelen trafiğin nasıl engelleneceğine bir örnek verilmiştir.

Not: Sistem yöneticisiyseniz ve bu kuralları uygulamanız gerekiyorsa iş arkadaşlarınızın sizinle konuşmayı bırakabileceğini unutmayın :)

Öncelikle Facebook tarafından kullanılan IP adreslerini bulun:

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Daha sonra bu Facebook ağını şununla engelleyebilirsiniz:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Facebook tarafından kullanılan IP adresi aralığının ülkenize göre değişebileceğini unutmayın.

9. IPtables'da Port Yönlendirmeyi Ayarlayın

Bazen bir hizmetin trafiğini başka bir bağlantı noktasına iletmek isteyebilirsiniz. Bunu aşağıdaki komutla başarabilirsiniz:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Yukarıdaki komut, eth0 ağ arayüzündeki tüm gelen trafiği 25 bağlantı noktasından 2525 bağlantı noktasına iletir. Bağlantı noktalarını ihtiyacınız olanlarla değiştirebilirsiniz.

10. IPtables ile Apache Bağlantı Noktasındaki Ağ Taşmasını Engelleyin

Bazen IP adresleri web sitenizdeki web bağlantı noktalarına çok fazla bağlantı talep edebilir. Bu, birçok soruna neden olabilir ve bu tür sorunları önlemek için aşağıdaki kuralı kullanabilirsiniz:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

Yukarıdaki komut, dakika başına gelen bağlantıları 100 ile sınırlandırır ve bir sınır artışını 200 olarak ayarlar. Limiti ve limit patlamasını kendi özel gereksinimlerinize göre düzenleyebilirsiniz.

11. IPtable'larda Gelen Ping İsteklerini Engelleyin

Bazı sistem yöneticileri güvenlik kaygılarından dolayı gelen ping isteklerini engellemeyi tercih etmektedir. Tehdit o kadar büyük olmasa da bu tür isteklerin nasıl engelleneceğini bilmek güzel:

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Geri döngü erişimine izin ver

Geridöngü erişimi (127.0.0.1 adresinden erişim) önemlidir ve onu her zaman aktif bırakmalısınız:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. IPtables'da Bırakılan Ağ Paketlerinin Günlüğünü Tutun

Bırakılan paketleri eth0 ağ arayüzünde günlüğe kaydetmek istiyorsanız aşağıdaki komutu kullanabilirsiniz:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

"--log-prefix"'den sonraki değeri kendi seçiminize göre değiştirebilirsiniz. Mesajlar /var/log/messages dosyasına kaydedilir ve bunları şu şekilde arayabilirsiniz:

grep "IPtables dropped packets:" /var/log/messages

14. IPtable'larda Belirli MAC Adresine Erişimi Engelleyin

Aşağıdakileri kullanarak sisteminize belirli MAC adresinden erişimi engelleyebilirsiniz:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Elbette "00:00:00:00:00:00" adresini engellemek istediğiniz gerçek MAC adresiyle değiştirmeniz gerekecektir.

15. IP Adresi Başına Eşzamanlı Bağlantı Sayısını Sınırlayın

Belirli bir portta tek IP adresinden çok fazla eşzamanlı bağlantı kurulmasını istemiyorsanız aşağıdaki komutu kullanabilirsiniz:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Yukarıdaki komut istemci başına 3 bağlantıdan fazlasına izin vermez. Elbette port numarasını farklı hizmetlerle eşleşecek şekilde değiştirebilirsiniz. Ayrıca --connlimit-above da gereksinimlerinize uyacak şekilde değiştirilmelidir.

16. IPtables Kuralı İçinde Arama Yapın

iptables kurallarınızı tanımladıktan sonra zaman zaman arama yapmak isteyeceksiniz ve bunları değiştirmeniz gerekebilir. Kurallarınız dahilinde arama yapmanın kolay bir yolu şunları kullanmaktır:

iptables -L $table -v -n | grep $string

Yukarıdaki örnekte, $table'ı içinde arama yapmak istediğiniz gerçek tabloyla ve $string'i aradığınız gerçek dizeyle değiştirmeniz gerekecektir.

İşte bir örnek:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Yeni IPTable Zincirini Tanımlayın

iptables ile kendi zincirinizi tanımlayabilir ve özel kuralları burada saklayabilirsiniz. Bir zinciri tanımlamak için şunu kullanın:

iptables -N custom-filter

Artık yeni filtrenizin orada olup olmadığını kontrol edebilirsiniz:

iptables -L
Örnek Çıktı
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. IPtables Güvenlik Duvarı Zincirlerini veya Kurallarını Temizleyin

Güvenlik duvarı zincirlerinizi temizlemek istiyorsanız şunları kullanabilirsiniz:

iptables -F

Zincirleri belirli bir tablodan aşağıdakilerle temizleyebilirsiniz:

iptables -t nat -F

"nat"'ı, temizlemek istediğiniz zincirleri gerçek tabloyla değiştirebilirsiniz.

19. IPtables Kurallarını Dosyaya Kaydetme

Güvenlik duvarı kurallarınızı kaydetmek istiyorsanız iptables-save komutunu kullanabilirsiniz. Kurallarınızı bir dosyaya kaydetmek ve saklamak için aşağıdakileri kullanabilirsiniz:

iptables-save > ~/iptables.rules

Dosyayı nerede saklayacağınız ve nasıl adlandıracağınız size kalmış.

20. IPtables Kurallarını Bir Dosyadan Geri Yükleme

İptables kurallarının bir listesini geri yüklemek isterseniz iptables-restore'u kullanabilirsiniz. Komut şuna benzer:

iptables-restore < ~/iptables.rules

Elbette kurallar dosyanızın yolu farklı olabilir.

21. PCI Uyumluluğu için IPtables Kurallarını Ayarlayın

Bazı sistem yöneticilerinin sunucularını PCI uyumlu olacak şekilde yapılandırmaları gerekebilir. Farklı PCI uyumluluk satıcılarının birçok gereksinimi vardır, ancak birkaç ortak gereksinim vardır.

Çoğu durumda birden fazla IP adresine ihtiyacınız olacaktır. Sitenin IP adresi için aşağıdaki kuralları uygulamanız gerekecektir. Aşağıdaki kuralları kullanırken çok dikkatli olun ve bunları yalnızca ne yaptığınızdan eminseniz kullanın:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Eğer cPanel veya benzeri bir kontrol paneli kullanıyorsanız portlarını da engellemeniz gerekebilir. İşte bir örnek:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Not: PCI satıcınızın gereksinimlerini karşıladığınızdan emin olmak için raporlarını dikkatlice kontrol edin ve gerekli kuralları uygulayın. Bazı durumlarda, belirli bağlantı noktalarındaki UDP trafiğini de engellemeniz gerekebilir.

22. Kurulan ve İlgili Bağlantılara İzin Ver

Ağ trafiği gelen ve giden olarak ayrı olduğundan, yerleşik ve ilgili gelen trafiğe izin vermek isteyeceksiniz. Gelen bağlantılar için bunu şununla yapın:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Giden kullanım için:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. Geçersiz Paketleri IPtables'a Bırakın

Bazı ağ paketlerinin geçersiz olarak işaretlenmesi mümkündür. Bazı insanlar bu paketleri günlüğe kaydetmeyi tercih edebilir, ancak diğerleri bunları bırakmayı tercih eder. Geçersiz paketleri bırakmak için şunları kullanabilirsiniz:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. Ağ Arayüzünde Bağlantıyı Engelleyin

Bazı sistemlerde birden fazla ağ arayüzü bulunabilir. Bu ağ arayüzüne erişimi sınırlayabilir veya belirli IP adreslerinden gelen bağlantıları engelleyebilirsiniz.

Örneğin:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

“xxx.xxx.xxx.xxx ” öğesini engellemek istediğiniz gerçek IP adresiyle (veya ağla) değiştirin.

25. IPTables Aracılığıyla Giden Postaları Devre Dışı Bırakın

Sisteminizin herhangi bir e-posta göndermemesi gerekiyorsa SMTP bağlantı noktalarındaki giden bağlantı noktalarını engelleyebilirsiniz. Örneğin şunu kullanabilirsiniz:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Çözüm

Iptables, kolayca yararlanabileceğiniz güçlü bir güvenlik duvarıdır. Her sistem yöneticisinin en azından iptables'ın temellerini öğrenmesi hayati önem taşımaktadır. İptables ve seçenekleri hakkında daha ayrıntılı bilgi edinmek istiyorsanız kılavuzunu okumanızı önemle tavsiye ederiz:

man iptables

Bu listeye daha fazla komut eklememiz gerektiğini düşünüyorsanız lütfen bunları aşağıdaki yorum bölümüne göndererek bizimle paylaşın.