
UFW firewall (Uncomplicated Firewall), Ubuntu sunucularda güvenlik duvarı kurallarını sade komutlarla yönetmenizi sağlayan bir araçtır. İnternete açık bir sunucuda yalnızca gerçekten ihtiyaç duyulan portların açık kalması, saldırı yüzeyini daraltmanın en temel adımıdır; unutulmuş bir veritabanı portu ya da test amaçlı açılmış bir yönetim paneli, ciddi güvenlik açıklarına davetiye çıkarır. Bu rehberde Ubuntu 22.04 ve 24.04 üzerinde UFW'yi kendinizi sunucunun dışında bırakmadan nasıl etkinleştireceğinizi, en sık kullanılan kural tiplerini, kuralları listeleme ve silme yöntemlerini ve Docker kullananların mutlaka bilmesi gereken bir istisnayı adım adım anlatıyoruz.
UFW Nedir, Nasıl Çalışır?
Linux çekirdeği paket filtrelemeyi netfilter altyapısıyla yapar. Bu altyapıyı doğrudan iptables veya nftables komutlarıyla yönetmek mümkündür, ancak kural sözdizimi karmaşıktır ve hata yapmak kolaydır. UFW bu karmaşıklığı gizler: ufw allow 443/tcp gibi okunabilir komutları arka planda uygun iptables kurallarına çevirir. Güncel Ubuntu sürümlerinde iptables komutları nftables altyapısı üzerinde çalışır; bu ayrıntı UFW kullanıcısı için bir şey değiştirmez.
UFW, Ubuntu sunucu kurulumlarında genellikle yüklü gelir ancak varsayılan olarak devre dışıdır. Yani yeni bir sunucuda siz etkinleştirene kadar ana makine üzerinde bir filtre uygulanmaz.
Kurulum ve Durum Kontrolü
UFW'nin yüklü olup olmadığını ve durumunu şu komutlarla kontrol edebilirsiniz:
sudo apt update
sudo apt install ufw
sudo ufw status verbose
Çıktıda Status: inactive görüyorsanız güvenlik duvarı henüz devrede değildir. Etkinleştirmeden önce aşağıdaki sırayı izlemek çok önemlidir.
Kilitlenmeden UFW'yi Etkinleştirmek
UFW'yi SSH iznini tanımlamadan açarsanız mevcut bağlantınız kesilebilir ve sunucuya SSH ile bir daha giremezsiniz. Doğru sıra şöyledir:
- Varsayılan politikaları belirleyin: gelen trafik reddedilsin, giden trafik serbest olsun.
- SSH portuna izin verin (port değiştirdiyseniz yeni portu yazın).
- Kuralları kontrol edin, ardından UFW'yi etkinleştirin.
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH varsayılan portta (22) ise
sudo ufw allow OpenSSH
# SSH'ı örneğin 2222 portuna taşıdıysanız
sudo ufw allow 2222/tcp
sudo ufw show added
sudo ufw enable
ufw enable komutu mevcut SSH bağlantılarının etkilenebileceği uyarısını verip onay ister. SSH kuralını eklediyseniz y ile devam edebilirsiniz. Etkinleştirme kalıcıdır; sunucu yeniden başladığında UFW otomatik olarak devreye girer. Mevcut oturumu kapatmadan yeni bir terminalden bağlanarak her şeyin yolunda olduğunu doğrulayın. SSH portunu değiştirmeyi planlıyorsanız adımları SSH portu değiştirme rehberimizdeki sırayla uygulayın.
Temel UFW Kuralları ve Örnekler
Port açmak
# Web sunucusu
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Protokol belirtmeden (hem TCP hem UDP)
sudo ufw allow 30120
# Port aralığı (aralıklarda protokol belirtmek zorunludur)
sudo ufw allow 6000:6007/tcp
Belirli bir IP veya ağdan erişime izin vermek
Veritabanı ve yönetim panelleri gibi servisleri tüm internete açmak yerine yalnızca güvendiğiniz adreslere açmak çok daha güvenlidir:
# Tek IP'den MySQL erişimi
sudo ufw allow from 198.51.100.20 to any port 3306 proto tcp
# Bir alt ağdan tüm portlara erişim
sudo ufw allow from 10.0.0.0/24
# Belirli bir ağ arayüzüne gelen trafik
sudo ufw allow in on eth0 to any port 80 proto tcp
Engellemek: deny ve reject
sudo ufw deny from 192.0.2.50
sudo ufw reject 23/tcp
deny paketleri sessizce düşürür; karşı taraf yanıt alamaz ve zaman aşımı bekler. reject ise bağlantının reddedildiğini bildiren bir yanıt döner. İnternete dönük kurallarda genellikle deny tercih edilir.
Uygulama profilleri
Bazı paketler kurulduğunda /etc/ufw/applications.d/ altına hazır profiller ekler. Örneğin Nginx kurulduktan sonra şu profiller kullanılabilir hale gelir:
sudo ufw app list
sudo ufw app info 'Nginx Full'
sudo ufw allow 'Nginx Full'
Nginx Full profili 80 ve 443 numaralı TCP portlarını birlikte açar.
Sık Kullanılan Servisler ve Portlar
| Servis | Port / Protokol | Öneri |
|---|---|---|
| SSH | 22/tcp (veya özel port) | Mümkünse yalnızca sabit IP'lerinize açın |
| HTTP / HTTPS | 80/tcp, 443/tcp | Web sunucularında herkese açık |
| HTTP/3 (QUIC) | 443/udp | Web sunucunuz HTTP/3 destekliyorsa |
| MySQL / MariaDB | 3306/tcp | Yalnızca uygulama sunucusunun IP'sine |
| PostgreSQL | 5432/tcp | Yalnızca güvenilir IP'lere |
| WireGuard | 51820/udp | VPN sunucusunda herkese açık olabilir |
| FiveM | 30120/tcp ve udp | Oyun sunucusunda herkese açık |
Kural ekledikten sonra portun dışarıdan gerçekten erişilebilir olduğunu port kontrol aracımızla test edebilirsiniz. Port kapalı görünüyorsa ilgili servisin çalışıp çalışmadığını ss -tlnp ile kontrol edin; UFW kuralı doğru olsa bile dinleyen bir servis yoksa port kapalı görünür.
Kuralları Listelemek, Silmek ve Sıralamak
UFW kuralları yukarıdan aşağıya değerlendirir ve ilk eşleşen kural uygulanır. Bu yüzden bir IP'yi engellemek istediğinizde, o IP'nin trafiğine izin veren genel bir kuraldan önce gelmesi gerekir.
# Numaralı liste
sudo ufw status numbered
# Numaraya göre silme
sudo ufw delete 4
# Kuralın kendisini yazarak silme
sudo ufw delete allow 80/tcp
# Kuralı listenin en başına ekleme
sudo ufw insert 1 deny from 192.0.2.50
Numarayla silerken dikkatli olun: Her silme işleminden sonra numaralar kayar. Birden fazla kural silecekseniz her seferinde listeyi yeniden görüntüleyin.
ufw limit ile SSH Denemelerini Sınırlamak
UFW, basit bir hız sınırlama özelliği de sunar. limit kuralı, aynı IP adresinden son 30 saniye içinde 6 veya daha fazla bağlantı denemesi gelirse yeni bağlantıları reddeder:
sudo ufw limit OpenSSH
# veya özel port için
sudo ufw limit 2222/tcp
Bu özellik, kısa sürede çok sayıda bağlantı açan basit botları yavaşlatır. Daha ayrıntılı kontrol, kalıcı yasaklama ve günlük analizi için UFW'yi Fail2ban ile birlikte kullanmanızı öneririz; kurulumu Fail2ban ile brute force engelleme rehberimizde anlattık.
Sabit bir ofis veya VPN IP adresiniz varsa daha güçlü bir yöntem, SSH portunu yalnızca bu adrese açmaktır. Önce yeni kuralı ekleyip yeni bir oturumla test edin, ardından genel SSH kuralını silin:
sudo ufw allow from 198.51.100.20 to any port 22 proto tcp
sudo ufw delete allow OpenSSH
Bu yapılandırmada sabit IP'niz değişirse SSH erişiminizi kaybedersiniz; böyle bir durumda konsol erişimiyle kuralı güncellemeniz gerekir.
IPv6, Günlükler ve Sıfırlama
UFW, /etc/default/ufw dosyasındaki IPV6=yes ayarı sayesinde varsayılan olarak IPv6 kurallarını da yönetir. ufw allow 443/tcp gibi bir komut hem IPv4 hem IPv6 için kural ekler; ufw status çıktısındaki (v6) satırları bunu gösterir. Sunucunuzda IPv6 adresi varsa bu ayarı kapatmayın, aksi halde IPv6 üzerinden gelen trafik filtrelenmeden kalabilir.
Engellenen bağlantıları görmek için günlük kaydını açabilirsiniz:
sudo ufw logging low
sudo tail -f /var/log/ufw.log
# veya
sudo journalctl -k | grep UFW
Kural setini tamamen temizleyip baştan başlamak isterseniz sudo ufw reset komutu tüm kuralları siler ve UFW'yi devre dışı bırakır. Geçici olarak kapatmak için sudo ufw disable yeterlidir.
Docker Kullanıyorsanız Dikkat
Docker, konteyner portlarını yayımlarken (örneğin -p 8080:80) iptables kurallarını doğrudan kendisi yazar. Bu kurallar UFW'nin işlediği zincirlerden önce değerlendirildiği için yayımlanan konteyner portları UFW kurallarınızdan bağımsız olarak dışarıya açılabilir. ufw status çıktısında görünmeyen bir portun dışarıdan erişilebilir olması bu yüzden sürpriz yaratır.
Basit ve güvenli çözüm, yalnızca yerelde kullanılacak konteyner portlarını localhost adresine bağlamaktır:
docker run -d -p 127.0.0.1:8080:80 nginx
Bu şekilde servis yalnızca sunucunun içinden erişilebilir olur; dışarıya Nginx veya başka bir ters vekil sunucu üzerinden açılır. Daha gelişmiş senaryolarda Docker'ın DOCKER-USER zincirine kural eklemek gerekir. Docker kurulumunu VDS'e Docker kurulumu yazımızda ele aldık.
Sık Sorulan Sorular
UFW etkinleştirdim ve SSH bağlantım koptu, ne yapmalıyım?
Sunucu panelindeki konsoldan giriş yapıp sudo ufw disable komutuyla güvenlik duvarını kapatın, ardından SSH kuralını doğru portla ekleyip yeniden etkinleştirin. Bu durumu önlemenin yolu, her zaman önce SSH iznini tanımlayıp sonra ufw enable çalıştırmaktır.
UFW mu daha iyi, firewalld mi?
İkisi de aynı çekirdek altyapısını kullanır. Ubuntu'da UFW, AlmaLinux ve diğer RHEL tabanlı dağıtımlarda firewalld varsayılan araçtır. Dağıtımın varsayılan aracını kullanmak, belgeler ve paket entegrasyonları açısından işinizi kolaylaştırır. AlmaLinux tarafı için firewalld kullanım rehberimize göz atabilirsiniz.
UFW DDoS saldırılarını engeller mi?
Hayır. UFW sunucunun kendisinde çalışır; büyük hacimli bir saldırı trafiği sunucuya ulaşmadan önce bağlantınızı doldurabilir. Bu tür saldırılara karşı ağ seviyesinde DDoS koruması gerekir. Web uygulamalarına yönelik katman 7 saldırıları için ise Layer 7 WAF ve DDoS koruma hizmeti gibi uygulama seviyesinde bir çözüm daha etkilidir.
Kuralı ekledim ama port hâlâ kapalı görünüyor, neden?
En sık neden, o portta dinleyen bir servisin olmamasıdır. sudo ss -tlnp ile servisin çalıştığını ve doğru adreste (örneğin yalnızca 127.0.0.1 değil, 0.0.0.0) dinlediğini kontrol edin. Sağlayıcı tarafında ek bir ağ güvenlik duvarı varsa orada da izin tanımlanmalıdır.
Giden trafiği de kısıtlamalı mıyım?
Çoğu sunucu için giden trafiğe izin vermek yeterlidir. Yüksek güvenlik gerektiren ortamlarda default deny outgoing kullanılabilir, ancak bu durumda DNS (53), paket depoları (80/443) ve NTP (123/udp) gibi gerekli bağlantıları tek tek açmanız gerekir.
UFW firewall, birkaç komutla Ubuntu sunucunuzda yalnızca ihtiyaç duyduğunuz kapıları açık bırakmanızı sağlar ve her yeni kurulumun ilk adımlarından biri olmalıdır. DDoS korumalı altyapı, NVMe SSD ve Ubuntu kurulum seçenekleri sunan Ubuntu VDS sunucularımızı inceleyerek güvenli bir başlangıç yapabilirsiniz.
Hizmet Sözleşmemiz
Web Koruma
İade Politikamız
