Linux'taki Güvenlik Duvarı, bir bilgisayar sistemini güvence altına almada hayati bir rol oynar. Sistemi yetkisiz erişimlerden, saldırılardan ve diğer tehditlerden korumak için ağ trafiğini kontrol eden ve filtreleyen bir bariyer görevi görür. Doğru şekilde yapılandırılmış bir Güvenlik Duvarı olmadan, sunucu çeşitli siber saldırı türlerine karşı savunmasız olabilir ve bu da veri güvenliği ve gizliliği açısından ciddi sonuçlara yol açabilir.
Bu makalede, Linux güvenlik duvarını yapılandırmak için kullanılan iki ana araca, firewalld ve iptables'a bakacağız. Özelliklerini, işlevselliğini ve avantajlarını karşılaştırmalı olarak analiz edeceğiz. Ayrıca, bu araçların her birinin kurulumu ve kullanımı için ayrıntılı talimatlar verecek ve Linux platformunda bir güvenlik duvarı ile sisteminizi güvence altına almanın en iyi uygulamalarını ele alacağız. Tüm işlemler, root erişimine sahip bir sanal sunucuda gösterilecektir.
Linux'ta güvenlik duvarını yapılandırma
Firewalld (Güvenlik Duvarı Servisi), Linux işletim sistemlerinde güvenlik duvarını yönetmek için kullanılan bir programdır. Güvenlik duvarı kurallarını yapılandırmak, ağ uygulamalarının bağlantılarına izin vermek veya bunları engellemek için bir kullanıcı arayüzü sağlar. Çoğu sunucu dağıtımında varsayılan olarak önceden yüklenmiştir. Firewalld önceden yüklenmemişse, dağıtımın resmi depolarından bağımsız olarak kurulabilir.
Red Hat sistemleri (RHEL, CentOS, Fedora gibi) için kurulum şu komutla gerçekleştirilir:
yum install firewalld
Debian/Ubuntu için:
apt-get install firewalld
Kurulumdan sonra şu komutla hemen başlatılabilir ve etkinleştirilebilir:
systemctl start firewalld
Daha sonra servisi başlangıca eklemeniz gerekiyor:
systemctl enable firewalld
Bu noktada, ufw'yi devre dışı bırakmanızı öneririz, çünkü bu aracın firewalld veya iptables ile eş zamanlı kullanımı önerilmez. Durumu kontrol edin:
systemctl status ufw
Durdurmak için şu komutu girin:
systemctl stop ufw
Tamamen devre dışı bırakmak için:
ufw disable
Bu işlemlerden sonra artık firewalld'ı yapılandırma aşamasına geçebilirsiniz.
Öncelikle güven bölgelerini tanımlamak gerekir. Firewalld, ağ arayüzleri için güven düzeyini belirlemek için bölge kavramını kullanır. Her arayüze bir bölge atanır ve güvenlik duvarı kuralları bölgeye göre uygulanır. Kullanılabilir tüm bölgelerin listesi şu komutla açılır:
firewall-cmd --get-zones
Genellikle 4 ana bölge kullanılır:
- Açık Alan: Bu bölge güvenli olmadığını düşündüğünüz ağlar içindir;
- Özel Etkinlik: Ev ağları veya diğer güvenilir ağ bağlantıları için geçerlidir;
- İç: Bir kuruluş veya şirket ağı içindekiler gibi dahili ağlar için kullanılır;
- DMZ:Bu bölge genellikle internet üzerinden erişilebilen sunucuların yerleştirildiği yerdir.
Ancak bu sadece bir örnek. Aşağıdaki komutu kullanarak kendi bölgenizi ekleyebilirsiniz:
firewall-cmd --permanent --new-zone=nameyourzone
Ekledikten sonra yeniden yükleme yapılması gerekiyor:
firewall-cmd --reload
Bir bölgeyi silmek için benzer bir yöntem kullanılır
firewall-cmd --permanent --delete-zone=nameyourzone
Bölgeleri tanımladıktan sonra, ihtiyaç duyulan servisler ve portlar için trafiğe izin vermek gerekir. Belirli bir servise izin vermek için şu komutu kullanın:
firewall-cmd --zone=public --add-service=name
Burada "name" hizmetin adıdır. Örneğin, Apache için trafiğe izin vermek için:
firewall-cmd --zone=public --add-service=http
İzin verilen portları tanımlamak için şu komutu kullanın:
firewall-cmd --zone=public --add-port=number/protocol
Örneğin, SSH için standart 22 portu şu şekilde görünecektir:
firewall-cmd --zone=public --add-port=22/tcp
Bu aşamada, ana kurallar zaten oluşturulmuştur. Sonraki adım, trafiğin kaynak, hedef, port ve diğer kriterlere bağlı olarak nasıl işleneceğini belirlemektir. Bir kural eklemek için ( örnek olarak genel bölgeyi kullanarak):
firewall-cmd --zone=public rule
Örneğin, herhangi bir kaynaktan gelen trafiğin 80 (HTTP) portuna gelmesine izin vermek için:
firewall-cmd --zone=public --add-port=80/tcp --permanent
Bir kuralı kaldırmak için:
firewall-cmd --permanent --remove-rule=rule_specification
Burada `rule`, kural türünü (örneğin, port, servis, zengin kural vb.) ve `rule_specification` ise kuralın kendisinin özelliklerini belirtir.
Firewalld yapılandırmasında değişiklikler yaptıktan sonra, bunları kaydedip uygulamak gerekir. Değişiklikleri kaydetmek için şu komutu kullanın:
firewall-cmd --runtime-to-permanent
Değişiklikleri uygulamak için:
firewall-cmd --reload
Kurulumu tamamladıktan sonra, tüm kuralların listesini açarak seçili parametreleri doğrulayabilirsiniz:
firewall-cmd --list-all
Herhangi bir sorun çıkarsa, şu komutla Firewalld kayıtlarını kontrol edin:
journalctl -u firewalld
Not: Burada yalnızca bağlantının kurulmasına ilişkin genel algoritmayı ele aldık. Araç kapsamlı işlevlere sahiptir. Mevcut tüm seçenekler hakkında tam bilgi için resmi belgelere başvurabilir veya yardım bölümünü açabilirsiniz:
firewall-cmd --help
Linux'ta iptables'ı yapılandırma
Firewalld'ın aksine, iptables Linux'ta güvenlik duvarını yönetmek için daha eski ama hala yaygın olarak kullanılan bir araçtır. Linux çekirdek düzeyinde paket filtreleme kurallarına daha doğrudan ve esnek bir yaklaşım sağlar. Ancak, iptables Firewalld'a kıyasla daha gelişmiş bilgi ve deneyim gerektirir ve bu da onu yeni başlayanlar için daha az erişilebilir hale getirir. Aracın önceden yüklenmiş sürümünü şu komutla kontrol edin:
iptables -V
Araç kurulu değilse, kurulması gerekecektir. Ubuntu, Debian'a kurulum için komut:
apt install iptables
Red Hat sistemleri için (örneğin CentOS, Fedora):
yum install iptables
Kurulum sonrası aktivasyon komutu:
systemctl start iptables
Başlangıca eklemek için şunu çalıştırın:
systemctl enable iptables
Iptables yapılandırmasına başlamadan önce, nasıl çalıştığını anlamak önemlidir. Bu, programın sözdizimiyle sağlanır. Aşağıdaki gibi görünür:
iptables -t table action chain additional_parameters
Her bir maddeyi daha derinlemesine inceleyelim.
Iptables'ın dört ana tablosu vardır: filter, nat, mangle ve raw . Her biri belirli paket türlerini işlemek için tasarlanmıştır ve kendi kural zincirlerine sahiptir:
- filtre: Bu, paket filtreleme kurallarını içeren en sık kullanılan tablodur. Paketlere izin verilip verilmeyeceğine karar vermek için kullanılır.
- nat: Bu tablo paketlerdeki ağ adreslerini ve portları değiştirmek için kullanılır. Genellikle maskelemeyi (NAT) ayarlamak için kullanılır.
- bozmak: Bu tabloda, paket başlıklarını değiştirebilirsiniz. İşaretleme gibi özel paket işlemleri için kullanılır.
- çiğ: Bu tablo, bağlantı izleme sisteminden geçmeden önce uygulanacak kuralları yapılandırmak için kullanılır. Genellikle, belirli adreslerden gelen paketleri düşürmek gibi izleme sistemi tarafından değiştirilmemesi gereken kuralları ayarlamak için kullanılır.
Her tablo bir zincir kümesi içerir. Zincirler, sırayla kontrol edilen bir dizi kuraldır. Üç önceden tanımlanmış zincir vardır:
- GİRİŞ (gelen)Bu zincirdeki kurallar gelen paketlerle ne yapılacağını belirler.
- ÇIKTI (giden)Bu zincir, bilgisayarınızın ağdaki diğer cihazlara veya bilgisayarlara gönderdiği tüm paketler için geçerlidir.
- İLERİ (yönlendirme)Bu zincirdeki kurallar iletilen paketlerle ne yapılacağını belirtir.
Son olarak, her zincir bir eyleme (hedefe) sahiptir. Pratikte, 5 ana eylem kullanılır:
- KABUL: Paketin güvenlik duvarından geçmesine izin verin.
- DAMLA: Paketi reddedin ve herhangi bir yanıt almadan atın.
- REDDET: Paketi reddedin ve göndericiye bir ICMP hata mesajı gönderin.
- LOG: Paketi sistem günlüğüne kaydedin ve başka bir eylem gerçekleştirin (örneğin, KABUL ET veya BIRAK).
- DÖNÜŞ: Mevcut zincirdeki kuralları kontrol etmeyi bırak ve çağıran zincire geri dön (eğer varsa).
Kurulumu başlatmak için mevcut kuralların listesini şu komutla açın:
iptables -L
Iptables'ı yapılandırmak için bir rehber olarak, en sık kullanılan komutların pratik örneklerine bakalım. Kolaylık olması açısından, örnekleri belirli zincire bağlı olarak 3 gruba ayıracağız.
Zincir GİRİŞİ :
- TCP protokolü üzerinden 80 numaralı porttan gelen trafiğe izin ver:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. 22 numaralı porttan UDP protokolü üzerinden gelen trafiğe izin verin:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Belirli bir IP adresinden gelen trafiği engelleyin:
iptables -A INPUT -s 192.168.1.100 -j DROP
Zincir ÇIKIŞI :
- TCP protokolü üzerinden 443 numaralı porttan giden trafiğe izin ver:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. 80 numaralı porttan UDP protokolü üzerinden giden trafiğe izin verin:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Belirli bir porta giden trafiği engelleyin (örneğin, 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Zincir İLERİ :
- Belirli bir IP adresi aralığından iletilen trafiği engelle:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Belirli bir ağ arayüzünden gelen paketlerin iletilmesini engelleyin:
iptables -A FORWARD -i eth1 -j DROP
3. Belirli bir port için eş zamanlı bağlantı sayısını sınırlayın (bu örnekte, 10 numaralı portta dakikada 80 bağlantı):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Gördüğünüz gibi, her ayrı durumda ek bir argüman (komut) kullanılır. Olası argümanların tam listesini ve aracın işlevselliği için genel desteği almak için şunu girin:
iptables -h
Ayarların doğru olduğundan emin olmak için, kuralların listesini görüntülemek üzere komutu tekrar girin:
iptables -L
Belirli bir kuralı silmek için şu komutu kullanın:
iptables -D chain rule_number
Örneğin, INPUT zincirinden 1 numaralı kuralı silmek istiyorsanız, komut şu şekilde görünecektir:
iptables -D INPUT 1
Tüm kuralları tek komutla silmek için:
iptables -F
Önemli not : iptables kuralları sistem veya servis yeniden başlatıldıktan sonra otomatik olarak kaydedilmez. Kuralları kaydetmek için, bir yapılandırma dosyasına eklenmeleri ve yeniden başlatmanın ardından geri yüklenmeleri gerekir. iptables-save ve iptables-restore yardımcı programları bu konuda yardımcı olabilir. Kuralları kaydetmek için şu komutu girin:
iptables-save > /etc/iptables/rules.v4
Bu, geçerli iptables kurallarını rules.v4 dosyasına kaydeder. Yeniden başlatmanın ardından geri yüklemek için şunu girin:
iptables-restore < /etc/iptables/rules.v4
Bu komut rules.v4 dosyasındaki kuralları geri yükler.
Sonuç
Linux'ta Firewall'u Firewalld veya iptables kullanarak yapılandırmak, sunucu güvenliğini sağlamanın önemli bir yönüdür. Her iki araç da ağ trafiğini yönetmek ve sistemi yetkisiz erişim ve siber saldırılardan korumak için güvenilir araçlar sunar. Firewalld ve iptables arasındaki seçim, farklı işlevsellikleri ve güçlü yönleri göz önünde bulundurularak kullanıcının belirli ihtiyaçlarına ve tercihlerine bağlıdır.