UFW, bir güvenlik duvarının üç komutla yapılandırılabilmesi için icat edildi ve bunda başarılıdır. Sorun başka yerdedir: ufw status sonuçları değil, niyetleri gösterir. Bir kural listede olabilir ve mutlak surette hiçbir şeyi kapatmıyor olabilir — üç ayrı nedenden, ki üçü de gerçek sunucularda düzenli olarak karşımıza çıkar.
Sizi dışarıda bırakmayan bir başlangıç
Komutların sırası önemlidir. Önce SSH’ye izin verin, sonra etkinleştirin:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
SSH’ye izin vermeden önce ufw enable kendi oturumunuzu keser ve o andan sonra geriye yalnızca sağlayıcının konsolu kalır. Sunucu zaten yapılandırılmışsa ve emin değilseniz ikinci bir bağlantıyı açık tutun — başarısız bir düzenlemeden sağ çıkar.
Ayrıntılı duruma bakın; kısa olan varsayılan politikayı gizler:
sudo ufw status verbose
Birinci hata: kural var, port dünyaya açık
Başkalarının yapılandırmalarındaki en sık görülen satır:
sudo ufw allow 3306
MySQL işte böyle «evden bağlanabileyim diye» açılır — ve bütün internete açılır. İki doğru varyant vardır ve ikisi de daha iyidir:
sudo ufw allow from 203.0.113.25 to any port 3306
ya da daha güvenilir olarak, servisi hiç dışarı bırakmayın: MySQL yapılandırmasında bind-address = 127.0.0.1, dış erişim ise bir SSH tüneli üzerinden. Güvenlik duvarı ikinci hattır; birincisi, servisin genel bir adresi dinlememesidir. UFW’deki bir kural yanlışlıkla silinebilir, oysa bind-address kendiliğinden değişmez.
İkinci hata: IPv6
ufw allow from 203.0.113.25 gibi bir kural yalnızca IPv4 için geçerlidir. Sunucunun bir IPv6 adresi varsa — ki çoğu VPS’te vardır ve etkindir — servis onun üzerinden erişilebilir kalır. Sağlayıcı bir adres verdi, siz onu hatırlamıyorsunuz, tarayıcı hatırlıyor.
v6 filtrelemesinin hiç açık olup olmadığını (/etc/default/ufw içinde IPV6=yes) ve servisin gereksiz yere :: üzerinde dinlemediğini kontrol edin:
ss -tulpn | grep ':::'
Bir adresi açıkça belirten kurallar, protokolün her sürümü için ayrı ayrı yazılmalıdır.
Üçüncü hata: Docker
En sinir bozucu olanı. Docker portları yayımlarken kendi kurallarını iptables zincirlerine, UFW’nin yazdıklarının öncesine ekler. Sonuçta -p 5432:5432 ile başlatılmış bir konteyner, UFW Status: active ve deny incoming politikası bildirse bile internetten erişilebilir olur. Güvenlik duvarı bozuk değildir — yalnızca sırası hiç gelmez.
Çare UFW’de değil, portun nasıl yayımlandığındadır:
ports:
- "127.0.0.1:5432:5432"
Yerel adrese bağlamak en basit ve en güvenilir çözümdür. Dışarıya yalnızca gerçekten ziyaretçilere hizmet eden şey bakmalıdır: genellikle bir ters vekilin 80 ve 443 portları.
Kural sırası
UFW eşleşen ilk kuralı uygular ve orada durur. Yani bir izinden sonra eklenen bir yasak çalışmaz: sırası hiç gelmez. Numaralandırmaya bakın ve gereken yere ekleyin:
sudo ufw status numbered
sudo ufw insert 1 deny from 198.51.100.0/24
sudo ufw delete 7
Kurallar numarayla silinir, ama numaralar her silmeden sonra kayar — teker teker silin ve listeyi yeniden okuyun.
Dışarıdan kontrol
Yerel komutlar neyin yapılandırıldığını gösterir. Gerçekte ne çıktığı yalnızca başka bir makineden görünür:
nmap -Pn -p- 203.0.113.25
nc -zv 203.0.113.25 3306
Herhangi bir başka sunucu ya da ev bilgisayarınız iş görür. Yalan söylemeyen tek kontrol budur ve gözle görülür her yeniden yapılandırmadan sonra çalıştırmaya değer — özellikle «ağı kendi ayarlayan» bir şey kurduktan sonra: Docker, yönetim panelleri, VPN’ler.
Günlükler
UFW varsayılan olarak neredeyse hiçbir şey yazmaz. Şununla açın:
sudo ufw logging low
Kayıtlar /var/log/ufw.log dosyasına gider — ama yalnızca sistemde rsyslog varsa. Debian 12 ve Ubuntu 24.04’te olmayabilir; o zaman her şey systemd günlüğüne gider:
sudo journalctl -k | grep -i '\[UFW'
Boş bir /var/log/ufw.log tek başına hiçbir anlam taşımaz — önce günlüğe bakın.
Bir güvenlik duvarından ne beklenmeli
UFW erişilebilir olmaması gerekeni kapatır. Açık olana gelen isteklerin içeriğini incelemez: 443 portu herkese açıktır ve siteye ne geliyorsa engelsiz gelir. Bu, başka araçların işidir — uygulama düzeyinde bir WAF, trafik düzeyinde bir IDS. Güvenlik duvarının görevi daha mütevazı ve daha önemlidir: açık portların listesinin, sizin ona dair inandığınızla örtüşmesi. O listenin etkin kurallarla birlikte tek sayfada nasıl göründüğü aşağıdaki demoda.