UFW Firewall Kuralları: Linux Sunucularda Pratik Ağ Güvenliği Yönetimi
Linux sunucularınızın ağ güvenliğini sağlamak için UFW (Uncomplicated Firewall) kullanımı, temel komutlar, port yönetimi ve gerçek dünya senaryolarına dayalı kural yapılandırmaları.
Caner Serbest
Sistem ve Altyapı
4 dk okuma
UFW Firewall Kuralları: Linux Sunucularda Pratik Ağ Güvenliği Yönetimi
Bir Linux sunucuyu internete açtığınız anda, arka planda çalışan servislerin taranması ve otomatik botlar tarafından yetkisiz erişim denemelerinin başlaması kaçınılmazdır. Sistem yöneticisi olarak ilk yaptığımız işlerden biri, işletim sisteminin ağ katmanını güvenli hale getirmektir. Çoğu modern Linux dağıtımında çekirdek seviyesinde paket filtreleme yapan netfilter altyapısı bulunur. Ancak bu altyapıyı doğrudan yönetmek, özellikle iptables gibi karmaşık sözdizimlerine sahip araçlarla çalışırken hata yapma olasılığını artırır.
İşte bu noktada UFW (Uncomplicated Firewall) devreye girer. Adından da anlaşılacağı üzere, karmaşık iptables kurallarını yönetmeyi son derece basitleştiren, sezgisel bir arayüz sunar. Bu yazıda, üretim ortamındaki sunucularınızda UFW kullanarak nasıl sağlam bir güvenlik duvarı katmanı oluşturabileceğinizi, sık yapılan hataları ve pratik senaryoları ele alacağız.
UFW Nasıl Çalışır? Varsayılan Politikalar Neden Önemlidir?
Güvenlik duvarı yapılandırmasında altın kural “varsayılan olarak engelle” (default deny) yaklaşımıdır. Güvenlik duvarını ilk etkinleştirdiğinizde kural yazmamış olsanız bile tüm trafiğin kesileceğini düşünmek yanlış olur; doğru yapılandırılmış bir UFW politikası, içeriye gelen tüm bağlantıları reddederken, dışarıya giden bağlantılara izin verir.
Sisteminize UFW’nin kurulu olup olmadığını kontrol etmek ve varsayılan politikaları belirlemek için şu adımları izleriz:
sudo apt update
sudo apt install ufw
Kurulum tamamlandıktan sonra varsayılan kuralları netleştirelim:
sudo ufw default deny incoming
sudo ufw default allow outgoing
- deny incoming: Dışarıdan sunucunuza gelen tüm bağlantı talepleri (siz özellikle izin vermediğiniz sürece) reddedilir.
- allow outgoing: Sunucunuzun dış dünya ile iletişim kurması (güncellemeleri indirmesi, dış API’lere istek atması vb.) engellenmez.
Bu iki satır, güvenlik duvarı mimarimizin temel taşıdır. Üzerine ekleyeceğimiz her kural, bu temel politikanın istisnalarını oluşturacaktır.
SSH Bağlantısını Kaybetmeden UFW’yi Etkinleştirmek
UFW yönetirken yapılan en klasik ve en sinir bozucu hata, SSH portuna izin vermeden güvenlik duvarını aktif hale getirmektir. Uzaktaki bir sunucuda çalışıyorsanız ve SSH erişiminiz kesilirse, fiziksel erişiminiz yoksa sunucuya müdahale etmek imkansız hale gelebilir.
Bu yüzden, ufw enable komutunu vermeden mutlaka SSH portuna izin vermelisiniz:
sudo ufw allow 22/tcp
Eğer SSH servisiniz varsayılan 22 numaralı port dışında farklı bir portta çalışıyorsa (örneğin 2222), kuralı buna göre uyarlamalısınız:
sudo ufw allow 2222/tcp
Artık UFW’yi güvenle aktif edebiliriz:
sudo ufw enable
Sistem size mevcut oturumunuzun kopabileceğine dair bir uyarı verecektir. Onayladıktan sonra durumunu kontrol edebilirsiniz:
sudo ufw status verbose
Bu komut, aktif kuralları, varsayılan politikaları ve logging (günlükleme) durumunu detaylıca gösterir.
Temel Port ve Servis Yönetimi
Sunucunuz üzerinde çalışan her uygulama dış dünyadan erişim gerektirmez. Örneğin, veritabanı sunucunuz (PostgreSQL veya MySQL) sadece aynı yerel ağdaki (LAN) uygulama sunucularına hizmet vermelidir. Web sunucumuz ise tüm dünyaya açık olmalıdır.
Web Trafiğine İzin Vermek
Standart HTTP (80) ve HTTPS (443) portlarına izin vermek için port numaralarını veya doğrudan servis isimlerini kullanabilirsiniz:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Veya UFW’nin /etc/services dosyasından okuduğu servis tanımlarını kullanabilirsiniz:
sudo ufw allow http
sudo ufw allow https
Belirli Bir IP Adresine Erişim Vermek (IP Whitelisting)
Üretim ortamındaki hassas servislere (örneğin yönetim panelleri veya veritabanları) sadece belirli bir IP adresinden erişilmesini isteyebilirsiniz. Örneğin, şirket ofisinizin statik IP adresinden (203.0.113.50) gelen SSH bağlantılarına izin vermek için:
sudo ufw allow from 203.0.113.50 to any port 22 proto tcp
Bu yaklaşım, brute-force saldırılarını büyük ölçüde engeller çünkü ofis dışından gelen tüm SSH denemeleri doğrudan düşecektir.
Alt Ağ (Subnet) Bazlı Kurallar
Şirket içi VPN ağınızdan (10.8.0.0/24) gelen tüm bağlantılara izin vermek için:
sudo ufw allow from 10.8.0.0/24
İleri Düzey UFW Senaryoları
Günlük operasyonlarda sadece “izin ver” veya “engelle” komutları yetersiz kalabilir. Belirli arayüzleri yönetmek veya kuralları sıra numaralarına göre düzenlemek gerekebilir.
Belirli Bir Ağ Arayüzüne Kural Uygulamak
Sunucunuzda birden fazla ağ kartı (interface) bulunabilir. Örneğin eth0 internete bakan dış bacak, eth1 ise dahili yönetim ağı olabilir. Sadece dahili ağ üzerindeki bir arayüze kural yazmak için:
sudo ufw allow in on eth1 to any port 3306
Belirli Bir IP Adresini Tamamen Engellemek
Sürekli olarak loglarınızı kirleten, şüpheli istekler atan bir IP adresini (198.51.100.15) tamamen engellemek için deny komutu kullanılır:
sudo ufw deny from 198.51.100.15
Kuralları Listelemek ve Numaralandırmak
Var olan kuralları silmek veya değiştirmek için önce hangi sırada olduklarını bilmemiz gerekir. numbered parametresi ile listeleme yapabiliriz:
sudo ufw status numbered
Çıktı şu şekilde olacaktır:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
Eğer 2 numaralı kuralı (80/tcp) kaldırmak istersek, port numarası yerine satır numarasını kullanabiliriz:
sudo ufw delete 2
Bu yöntem, aynı porta ait birden fazla kural olduğunda yaşanabilecek karışıklıkları önler.
Loglama ve Sorun Giderme
Güvenlik duvarının arkasında nelerin yaşandığını görmek, olası bir saldırı girişimini fark etmek veya yanlış yazılmış bir kuralı tespit etmek için loglama hayati önem taşır. UFW loglarını etkinleştirmek için:
sudo ufw logging on
Farklı log seviyeleri mevcuttur (low, medium, high, full). Üretim ortamlarında genellikle low veya medium seviyesi tercih edilir, aksi takdirde disk alanı hızla dolabilir. Loglar genellikle /var/log/ufw.log veya /var/log/syslog dosyalarına yazılır.
Bir kuralın çalışıp çalışmadığını test etmek için dışarıdan ncat veya telnet araçlarıyla bağlantı testi yapabilirsiniz:
nc -zv sunucu_ip_adresi 443
En İyi Pratikler ve Özet
- Her Zaman Plan Yapın: Kuralları uygulamadan önce sunucunun kimlerle konuşması gerektiğini kağıt üstünde listeleyin.
- Rate Limiting Kullanın: SSH gibi kritik servisler için
allowyerinelimitkomutunu kullanarak brute-force saldırılarını yavaşlatabilirsiniz:
(Bu komut, 30 saniye içinde aynı IP adresinden 6’dan fazla bağlantı denemesi yapılırsa geçici olarak engeller.)sudo ufw limit 22/tcp - Düzenli Kontrol:
sudo ufw status numberedkomutu ile dönemsel olarak kurallarınızı gözden geçirin; artık kullanılmayan, unutulmuş eski test kurallarını temizleyin.
UFW, basit komut setinin arkasında oldukça güçlü bir netfilter mimarisi barındırır. Doğru yapılandırıldığında, Linux sunucularınızın yüzey alanını daraltarak dış tehditlere karşı güçlü bir bariyer oluşturur.
Bu yazı Gemini ile otomatik oluşturulmuştur.