UFW Güvenlik Duvarı Ubuntu'da Neden Önemlidir?
Bir Ubuntu sunucusunu yeni başlattığınızda, varsayılan olarak tüm portlar açıktır. Bu, internet üzerindeki herkesin sunucuda çalışan hizmetlere bağlanabileceği anlamına gelir; SSH'den MySQL'e ve web sunucusuna kadar. Bu durum aslında otomatik tarayıcılar ve brute-force saldırıları için bir davetiyedir. UFW güvenlik duvarı (Uncomplicated Firewall'ın kısaltması) tam olarak bu sorun için tasarlanmış bir araçtır: iptables üzerinde, birkaç kısa komutla gelen trafiği kontrol etmenizi sağlayan basit bir komut satırı arayüzü.
Bu makalede, Ubuntu'da UFW güvenlik duvarını nasıl etkinleştireceğinizi, gerekli portları nasıl açacağınızı ve en önemlisi, kendi SSH erişiminizi kaybetmenize neden olan yaygın hatadan nasıl kaçınacağınızı öğreneceksiniz. Bu kılavuz Ubuntu 20.04 ve sonraki sürümler için geçerlidir.
UFW Güvenlik Duvarının Kurulumu ve İlk Etkinleştirilmesi
Çoğu Ubuntu kurulumunda UFW zaten yüklüdür. Değilse, şu komutla kurun:
sudo apt update
sudo apt install ufw
Her şeyden önce, güvenlik duvarının mevcut durumunu kontrol edin:
sudo ufw status verbose
Çıktı genellikle Status: inactive şeklindedir. Şimdi ilk kuralları ayarlama zamanı. Ancak ciddi bir uyarı: Hemen sudo ufw enable komutunu çalıştırırsanız, büyük olasılıkla SSH erişiminizi kaybedersiniz, çünkü varsayılan kural, tüm gelen trafiği reddetmektir. Bu yüzden önce kuralları ayarlayın, sonra güvenlik duvarını etkinleştirin.
Varsayılan Politikayı Ayarlama
Varsayılan politika, bir bağlantı için açık bir kural yoksa ne olacağını belirler. En iyi ve en güvenli durum şudur:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Bu, açıkça izin vermediğiniz sürece tüm gelen trafiğin engelleneceği ve tüm giden trafiğin (güncellemeler ve DNS yanıtları gibi) serbest olduğu anlamına gelir. Bu politika, güvenli bir sunucunun temelidir.
Etkinleştirmeden Önce Gerekli Portları Açma
Şimdi gerçekten ihtiyacınız olan portları açmalısınız. Bunu güvenlik duvarını etkinleştirmeden önce yapın, böylece bağlantı kesilme riski sıfıra iner.
SSH Portunu Açma (En Önemli Kural)
SSH'niz standart 22 numaralı portta çalışıyorsa:
sudo ufw allow ssh
SSH portunu değiştirdiyseniz (örneğin 2222'ye), portu açıkça belirtmelisiniz:
sudo ufw allow 2222/tcp
allow ssh komutunun allow 22/tcp ile eşdeğer olduğunu unutmayın. Standart olmayan bir portunuz varsa, protokolü de belirttiğinizden emin olun. Bu, UDP portunun yanlışlıkla açılmasını önler.
Web ve Yaygın Hizmet Portlarını Açma
Web sunucusu için (HTTP ve HTTPS):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
MySQL veya MariaDB'ye uzaktan bağlanıyorsanız (her yerden değil, yalnızca kendi IP'nizden):
sudo ufw allow from 203.0.113.10 to any port 3306/tcp
Bu kural yalnızca belirtilen IP'nin MySQL'e bağlanmasına izin verir. Bu, portu herkese açmaktan çok daha iyi bir yöntemdir. DNS, SMTP ve diğer hizmetler için de aynı şekilde ilerleyin:
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw allow 25/tcp
Oyun veya Belirli Bir Uygulama için Port Açma
UDP portunda çalışan bir oyun veya uygulamanız varsa (bazı çevrimiçi oyunlar gibi), protokolü mutlaka belirtin:
sudo ufw allow 27015/udp
Güvenlik Duvarını Etkinleştirme ve Kuralları Kontrol Etme
Gerekli tüm portları açtıktan sonra, artık güvenlik duvarını etkinleştirebilirsiniz:
sudo ufw enable
Sistem sizden onay isteyecek ve bu işlemin SSH'yi kesebileceği konusunda uyaracaktır. SSH kuralını zaten eklediğiniz için güvenle y yazın. Etkinleştirdikten sonra durumu kontrol edin:
sudo ufw status verbose
Çıktı şuna benzer olmalıdır:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
3306/tcp ALLOW IN 203.0.113.10
Kural Yönetimi: Ekleme, Silme ve Değiştirme
Sunucunun ömrü boyunca her zaman kuralları değiştirme ihtiyacı duyacaksınız. Bu bölümü aklınızda tutun.
Bir Kuralı Silme
Bir kuralı silmek için iki yönteminiz var. İlk yöntem kural numarasıyladır. Önce numaraları görün:
sudo ufw status numbered
Çıktı, her satırın başında numarayla gösterilir. Ardından silin:
sudo ufw delete 3
İkinci yöntem, kuralın kendisiyle silmektir:
sudo ufw delete allow 80/tcp
Bir Kuralı Değiştirme
UFW kuralları düzenlemez; silip yeniden eklemeniz gerekir. Örneğin, MySQL kuralındaki izin verilen IP'yi değiştirmek için:
sudo ufw delete allow from 203.0.113.10 to any port 3306/tcp
sudo ufw allow from 198.51.100.20 to any port 3306/tcp
Port Aralığı Açma
Bir port aralığını açmak için (örneğin 8000-8100):
sudo ufw allow 8000:8100/tcp
Yaygın Hata: Sunucunun Dışında Kilitlenme ve Kurtarma Yolları
Acemilerin yaptığı en önemli hata, SSH kuralını eklemeden önce güvenlik duvarını etkinleştirmek veya SSH kuralını yanlış yazmaktır (örneğin, portu yanlış protokolle açmak). Sonuç: SSH erişimi kesilir ve sunucunun dışında kilitlenirsiniz.
Bu olursa, birkaç kurtarma yolunuz var:
- Yönetim panelinden konsol erişimi: Sunucunuz bir veri merkezinde veya ServerNet gibi bir hosting şirketindeyse, genellikle web tabanlı bir konsolunuz (noVNC veya IPMI gibi) vardır. Oradan giriş yapın ve
sudo ufw disablekomutunu çalıştırın. - Ağ ayarlarıyla yeniden başlatma: Konsolunuz yoksa, yönetim panelinden sunucuyu yeniden başlatın. UFW varsayılan olarak yeniden başlatmanın ardından etkin kalır, bu nedenle bu yöntem genellikle işe yaramaz, önyüklemede güvenlik duvarını sıfırlayan bir kuralınız olmadığı sürece.
- Etkinleştirmeden önce bir fail-safe kuralı oluşturun: Bu en iyi yoldur. 5 dakika sonra güvenlik duvarını otomatik olarak devre dışı bırakacak bir kural ekleyin. Her şey yolundaysa, bu kuralı silin:
sudo sh -c "echo 'sudo ufw disable' | at now + 5 minutes"
Bu komut at aracını kullanır. Kurulu değilse, sudo apt install at ile kurun. Güvenlik duvarını etkinleştirdikten sonra SSH çalışıyorsa, bu zamanlanmış kuralı sudo atrm $(atq | awk '{print $1}') ile silin.
Mevcut Bağlantıyı Kesmeden Kuralları Test Etme
Bir başka akıllı yöntem: Ana güvenlik duvarına kuralları uygulamadan önce ikinci bir SSH oturumu açın ve onu açık tutun. İlk oturum kesilirse, sorunu çözmek için ikinci oturumu kullanın. Bu, sunucu yöneticileri arasında yazılmamış bir kuraldır.
Günlükleme ve Sorun Giderme
UFW varsayılan olarak günlük tutar. Günlükleri görmek için:
sudo tail -f /var/log/ufw.log
Bu günlük, hangi paketlerin reddedildiğini gösterir. Bir hizmet dışarıdan erişilemiyorsa, önce bu günlüğü kontrol edin. Genellikle, paketin ilgili IP'den ilgili porta BLOCK edildiğini görürsünüz. Bu, kuralınızın yanlış olduğu veya hiç olmadığı anlamına gelir.
Dışarıdan bağlantıyı test etmek için nc (netcat) gibi araçları kullanabilirsiniz:
nc -zv your-server-ip 443
Port açıksa, succeeded mesajını görürsünüz. Kapalıysa, Connection refused veya timeout alırsınız.
Özet ve Son İpuçları
Ubuntu'da UFW güvenlik duvarını yapılandırmak zor bir iş değildir, ancak dikkat gerektirir. Altın kuralların özeti:
- Etkinleştirmeden önce her zaman SSH kuralını ekleyin.
deny incomingveallow outgoingvarsayılan politikasını kullanın.- Yalnızca gerçekten ihtiyacınız olan portları açın.
- MySQL gibi hassas hizmetler için erişimi belirli bir IP ile sınırlayın.
- Her zaman ikinci bir SSH oturumunu açık tutun.
- Neyin reddedildiğini anlamak için günlükleri kontrol edin.
Bu ipuçlarına uyarak, UFW güvenlik duvarı Ubuntu sunucunuz için güvenilir bir kalkan haline gelir ve artık sunucunun dışında kilitlenme konusunda endişelenmezsiniz. Sunucunuz bulut veya özel altyapıda barındırılıyorsa, yönetim panelinizin konsol aracını mutlaka öğrenin; bu araç acil durumlarda kurtarıcıdır.