VPS'inizde güvenlik duvarı neden ilk savunma hattıdır
Bir Ubuntu sunucusu bir genel IP adresine bağlandığı andan itibaren otomatik tarama trafiğine maruz kalır. SSH, veritabanı portları veya yönetim panelleri gibi servisler varsayılan olarak dinlemede kalırsa, bu servislere gelen bağlantı denemelerini kim gönderdiğine bakmaksızın engelleyecek hiçbir mekanizma yoktur. Güvenlik duvarı bu boşluğu kapatır: hangi portların dışarıdan erişilebilir olacağını açıkça tanımlayarak saldırı yüzeyini daraltır. Yalnızca gerçekten ihtiyaç duyduğunuz servisler (örneğin SSH, HTTP, HTTPS) dışarıya açık kalır, geri kalan her şey varsayılan olarak reddedilir.
UFW nedir, iptables ile ilişkisi ne
UFW (Uncomplicated Firewall), Ubuntu ve Debian'da iptables/nftables'ın karmaşık sözdizimini basitleştiren resmi bir önyüzdür (frontend). Doğrudan iptables kuralı yazmak yerine ufw allow 22/tcp gibi okunabilir komutlarla çalışırsınız; UFW bu komutları arka planda gerekli çekirdek düzeyindeki paket filtreleme kurallarına çevirir. Böylece karmaşık zincir (chain) mantığıyla uğraşmadan, okunabilir ve sonradan denetlenebilir bir kural seti oluşturabilirsiniz.
Kurulum, varsayılan politikalar ve durumu kontrol etme
Ubuntu sunucularının çoğunda UFW önceden kurulu gelir; kurulu değilse apt install ufw ile eklenebilir. UFW'yi etkinleştirmeden önce yapılması gereken ilk şey varsayılan politikaları belirlemektir. Standart ve güvenli temel yapılandırma şudur: gelen tüm bağlantıları varsayılan olarak engelleyin, yalnızca açıkça izin verdiklerinize izin verin, giden bağlantılara ise dokunmayın.
sudo ufw default deny incoming
sudo ufw default allow outgoing
Bu iki satır üzerine eklediğiniz her allow, deny veya limit kuralı sırayla uygulanır. Kurallar eklendikçe UFW bunları numaralı bir listede tutar; sudo ufw status numbered ile bu sırayı, sudo ufw status verbose ile ise etkin politikaları ve tüm kuralları görebilirsiniz. Yapılandırmayı bitirdikten sonra sudo ufw enable ile etkinleştirilir, gerektiğinde sudo ufw disable ile kapatılabilir.
Temel UFW komutları
| Komut | Açıklama |
|---|---|
sudo ufw allow 22/tcp | 22 numaralı TCP portuna (SSH) her yerden izin ver |
sudo ufw deny 23 | 23 numaralı portu (Telnet) reddet |
sudo ufw allow from 203.0.113.10 to any port 22 | Yalnızca belirli bir IP'den SSH'a izin ver |
sudo ufw allow 6000:6007/tcp | Bir port aralığına izin ver |
sudo ufw limit ssh | SSH portuna hız sınırlamalı koruma uygula |
sudo ufw delete allow 80 | Daha önce eklenen bir kuralı sil |
sudo ufw status verbose | Etkin kuralları ve politikaları görüntüle |
Port numarası yerine servis adı da kullanılabilir; UFW /etc/services dosyasındaki tanımlardan ssh, http, https gibi adları port numarasına çevirir. Belirli bir kaynaktan gelen trafiği sınırlamak istediğinizde from ... to any port ... proto ... kalıbı kullanılır; bu, örneğin bir yönetim panelini yalnızca ofis IP'nizden erişilebilir kılmak için kullanışlıdır.
UFW ayrıca uygulama profilleri destekler: sudo ufw app list komutu, kurulu paketlerin (örneğin Nginx veya OpenSSH) kaydettiği önceden tanımlı profilleri listeler. sudo ufw allow 'Nginx Full' gibi bir profil adıyla, hem 80 hem 443 portunu tek komutla açabilirsiniz; bu, port numaralarını ezbere yazmak yerine daha okunabilir bir alternatiftir.
Kural sırası neden önemlidir
UFW, gelen bir paketi listedeki kurallarla sırayla karşılaştırır ve ilk eşleşen kuralı uygular; listenin geri kalanı değerlendirilmez. Bu nedenle daha spesifik bir deny kuralının, ondan önce gelen genel bir allow kuralı tarafından geçersiz kılınmaması gerekir. Belirli bir IP'yi listenin başına eklemek için sudo ufw insert 1 deny from 198.51.100.5 to any komutu kullanılabilir; böylece bu kural, sonradan eklenmiş diğer tüm kurallardan önce değerlendirilir.
SSH'ı kaba kuvvet saldırılarına karşı koruma: ufw limit
SSH portu (varsayılan 22), internete açık her sunucuda en çok taranan ve otomatik giriş denemesine maruz kalan porttur. Sadece ufw allow 22/tcp kullanmak bağlantıya izin verir ama deneme sayısını sınırlamaz. UFW'nin limit eylemi bunun için tasarlanmıştır: bir IP adresi 30 saniye içinde aynı porta 6 veya daha fazla bağlantı denemesi yaparsa, UFW o IP'yi otomatik olarak reddetmeye başlar. sudo ufw limit ssh veya sudo ufw limit 22/tcp komutuyla etkinleştirilir. Bu, kaba kuvvet (brute-force) SSH giriş denemelerine karşı basit ama etkili bir korumadır.
ufw enable çalıştırmayın. UFW etkinleştiği anda gelen her şeyi (SSH dahil) varsayılan olarak reddetmeye başlar; bir sonraki komutunuz bağlantıyı koparır ve konsol/KVM erişiminiz yoksa sunucuya bir daha giremezsiniz.Sık yapılan hatalar
- SSH portuna izin vermeden ufw enable çalıştırmak: Bu, uzak bağlantıyı anında koparır ve konsol erişimi yoksa sunucuyu kilitler.
- SSH için yalnızca ufw allow 22/tcp kullanıp ufw limit'i atlamak: Bağlantıya izin verir ama otomatik giriş denemelerini sınırlamaz.
- Kural sırasının önemini göz ardı etmek: UFW kuralları sırayla değerlendirilir; belirli bir kaynağı reddetmek için eklenen bir deny kuralı, listede ondan önce gelen daha genel bir allow kuralı tarafından geçersiz kılınabilir.
- IPv6'yı unutmak: Ubuntu'da UFW varsayılan olarak IPv6 için de etkindir (/etc/default/ufw içinde IPV6=yes). Servis adlarıyla eklenen kurallar hem IPv4 hem IPv6 için otomatik uygulanır, ancak belirli bir IPv4 adresine göre yazılan from kuralları IPv6 trafiğini kapsamaz; IPv6 kaynaklar için ayrı bir kural gerekir.
- Değişiklik yaptıktan sonra ufw status verbose ile doğrulamayı atlamak: Kuralların gerçekten beklenen sırada ve etkin olduğundan emin olmadan devam etmek hatalı varsayımlara yol açar.
Bu komutları elden yazarken sözdizimi hatası yapmak kolaydır; özellikle birden fazla kural art arda eklenirken yanlış protokol, eksik to any port kalıbı veya unutulan bir from ifadesi kuralın işe yaramamasına neden olabilir. Aşağıdaki araç, seçtiğiniz eylem, port, protokol ve kaynak IP'ye göre doğru ufw komutunu otomatik oluşturur ve SSH güvenlik uyarısını her script'in başına sabit olarak ekler.
Eylem, port, protokol ve kaynak IP seçerek doğru ufw komutunu oluşturun, tüm kuralları tek script halinde kopyalayın.