Giriş
UFW veya Karmaşık Olmayan Güvenlik Duvarı, iptables ve nftables gibi daha düşük seviyeli paket filtreleme teknolojilerinin karmaşıklığını gizleyen basitleştirilmiş bir güvenlik duvarı yönetim arayüzüdür. Ağınızın güvenliğini sağlamaya başlamak istiyorsanız ve hangi aracı kullanacağınızdan emin değilseniz, UFW sizin için doğru seçim olabilir.
Bu eğitim size Ubuntu 20.04 üzerinde UFW ile bir güvenlik duvarının nasıl kurulacağını gösterecektir.
Ön Koşullar
Bu öğreticiyi takip etmek için şunlara ihtiyacınız olacak:
Ubuntu 20.04 ile İlk olarak sudo non-root kullanıcılı bir Ubuntu 20.04 sunucusu.
UFW Ubuntu’da varsayılan olarak yüklüdür. Herhangi bir nedenle kaldırılmışsa sudo apt install ufw ile yükleyebilirsiniz.
Adım 1 – UFW ile IPv6 Kullanımı (İsteğe Bağlı)
Bu eğitim IPv4 göz önünde bulundurularak yazılmıştır, ancak etkinleştirdiğiniz sürece IPv6 için de çalışacaktır. Ubuntu sunucunuzda IPv6 etkinse, UFW’nin IPv6’yı destekleyecek şekilde yapılandırıldığından emin olun, böylece IPv4’e ek olarak IPv6 için güvenlik duvarı kurallarını da yönetecektir. Bunu yapmak için, UFW yapılandırmasını nano veya favori düzenleyicinizle açın.
sudo nano /etc/default/ufw
Ardından IPV6 değerinin evet olduğundan emin olun. Bu şekilde görünmelidir:
IPV6=yes
Dosyayı kaydedin ve kapatın. Şimdi, UFW etkinleştirildiğinde, hem IPv4 hem de IPv6 güvenlik duvarı kurallarını yazacak şekilde yapılandırılacaktır. Ancak, UFW’yi etkinleştirmeden önce, güvenlik duvarınızın SSH üzerinden bağlanmanıza izin verecek şekilde yapılandırıldığından emin olmak isteyeceğiz. Varsayılan ilkeleri ayarlamakla başlayalım.
Adım 2 – Varsayılan Politikaları Ayarlama
Güvenlik duvarınızı kullanmaya yeni başlıyorsanız, tanımlamanız gereken ilk kurallar varsayılan ilkelerinizdir. Bu kurallar, diğer kurallarla açıkça eşleşmeyen trafiğin nasıl ele alınacağını kontrol eder. Varsayılan olarak, UFW tüm gelen bağlantıları reddedecek ve tüm giden bağlantılara izin verecek şekilde ayarlanmıştır. Bu, sunucunuza ulaşmaya çalışan herhangi birinin bağlanamayacağı, sunucu içindeki herhangi bir uygulamanın ise dış dünyaya ulaşabileceği anlamına gelir.
UFW kurallarınızı varsayılanlara geri ayarlayalım, böylece bu öğreticiyi takip edebileceğinizden emin olabiliriz. UFW tarafından kullanılan varsayılanları ayarlamak için şu komutları kullanın:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Bu komutlar gelen bağlantıları reddetmek ve giden bağlantılara izin vermek için varsayılanları ayarlar. Bu güvenlik duvarı varsayılanları tek başına kişisel bir bilgisayar için yeterli olabilir, ancak sunucuların genellikle dışarıdaki kullanıcılardan gelen isteklere yanıt vermesi gerekir. Bunu daha sonra inceleyeceğiz.
Adım 3 – SSH Bağlantılarına İzin Verme
UFW güvenlik duvarımızı şimdi etkinleştirirsek, gelen tüm bağlantıları reddedecektir. Bu, sunucumuzun bu tür isteklere yanıt vermesini istiyorsak, meşru gelen bağlantılara (örneğin SSH veya HTTP bağlantıları) açıkça izin veren kurallar oluşturmamız gerektiği anlamına gelir. Bir bulut sunucusu kullanıyorsanız, sunucunuza bağlanabilmek ve sunucunuzu yönetebilmek için muhtemelen gelen SSH bağlantılarına izin vermek isteyeceksiniz.
Sunucunuzu gelen SSH bağlantılarına izin verecek şekilde yapılandırmak için bu komutu kullanabilirsiniz:
sudo ufw allow ssh
Bu, SSH arka plan programının varsayılan olarak dinlediği bağlantı noktası olan 22 numaralı bağlantı noktasındaki tüm bağlantılara izin verecek güvenlik duvarı kuralları oluşturacaktır. UFW, /etc/services dosyasında bir hizmet olarak listelendiği için ssh’a izin verilen portun ne anlama geldiğini bilir.
Bununla birlikte, aslında hizmet adı yerine bağlantı noktasını belirterek eşdeğer kuralı yazabiliriz. Örneğin, bu komut yukarıdaki ile aynı şekilde çalışır:
sudo ufw allow 22
SSH daemon’unuzu farklı bir port kullanacak şekilde yapılandırdıysanız, uygun portu belirtmeniz gerekecektir. Örneğin, SSH sunucunuz 2222 numaralı bağlantı noktasını dinliyorsa, bu bağlantı noktasındaki bağlantılara izin vermek için bu komutu kullanabilirsiniz:
sudo ufw allow 2222
Artık güvenlik duvarınız gelen SSH bağlantılarına izin verecek şekilde yapılandırıldığına göre, bunu etkinleştirebiliriz.
Adım 4 – UFW’nin Etkinleştirilmesi
UFW’yi etkinleştirmek için bu komutu kullanın:
sudo ufw enable
Komutun mevcut SSH bağlantılarını bozabileceğini söyleyen bir uyarı alacaksınız. Zaten SSH bağlantılarına izin veren bir güvenlik duvarı kuralı oluşturduk, bu yüzden devam etmenizde bir sorun olmayacaktır. Komut istemine y ile yanıt verin ve ENTER tuşuna basın.
Güvenlik duvarı artık aktif. Ayarlanan kuralları görmek için sudo ufw status verbose komutunu çalıştırın. Bu eğitimin geri kalanında UFW’nin nasıl kullanılacağı, farklı bağlantı türlerine izin verme veya reddetme gibi daha ayrıntılı olarak ele alınacaktır.
Adım 5 – Diğer Bağlantılara İzin Verme
Bu noktada, sunucunuzun yanıt vermesi gereken diğer tüm bağlantılara izin vermelisiniz. İzin vermeniz gereken bağlantılar özel ihtiyaçlarınıza bağlıdır. Neyse ki, bir hizmet adına veya bağlantı noktasına göre bağlantılara izin veren kuralların nasıl yazılacağını zaten biliyorsunuz; bunu 22 numaralı bağlantı noktasındaki SSH için zaten yapmıştık. Bunu ayrıca şunlar için de yapabilirsiniz:
Şifrelenmemiş web sunucularının kullandığı 80 numaralı bağlantı noktasındaki HTTP için sudo ufw allow http
veya sudo ufw allow 80
portları aktif edilebilir.
Şifrelenmiş web sunucularının kullandığı 443 numaralı bağlantı noktasında sudo ufw allow https
veya sudo ufw allow 443
kullanarak HTTPS portları aktif edilebilir.
Bir bağlantı noktası veya bilinen bir hizmet belirtmenin yanı sıra, diğer bağlantılara izin vermenin birkaç yolu daha vardır.
Belirli Port Aralıkları
UFW ile bağlantı noktası aralıkları belirleyebilirsiniz. Bazı uygulamalar tek bir bağlantı noktası yerine birden fazla bağlantı noktası kullanır.
Örneğin, 6000-6007 bağlantı noktalarını kullanan X11 bağlantılarına izin vermek için bu komutları kullanın:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
UFW ile bağlantı noktası aralıklarını belirlerken, kuralların uygulanması gereken protokolü (tcp veya udp) belirtmelisiniz. Bundan daha önce bahsetmedik çünkü protokolü belirtmemek otomatik olarak her iki protokole de izin verir, bu da çoğu durumda uygundur.
Belirli IP Adresleri
UFW ile çalışırken IP adreslerini de belirtebilirsiniz. Örneğin, 203.0.113.4 iş veya ev IP adresi gibi belirli bir IP adresinden bağlantılara izin vermek istiyorsanız, önce from, ardından IP adresini belirtmeniz gerekir:
sudo ufw allow from 203.0.113.4
Ayrıca, IP adresinin bağlanmasına izin verilen belirli bir bağlantı noktasını, herhangi bir bağlantı noktasını ve ardından bağlantı noktası numarasını ekleyerek de belirtebilirsiniz. Örneğin, 203.0.113.4’ün 22 numaralı bağlantı noktasına (SSH) bağlanmasına izin vermek istiyorsanız, bu komutu kullanın:
sudo ufw allow from 203.0.113.4 to any port 22
Subnets
IP adreslerinin bir alt ağına izin vermek istiyorsanız, bunu bir netmask belirtmek için CIDR gösterimini kullanarak yapabilirsiniz. Örneğin, 203.0.113.1 ile 203.0.113.254 arasındaki tüm IP adreslerine izin vermek istiyorsanız bu komutu kullanabilirsiniz:
sudo ufw allow from 203.0.113.0/24
Aynı şekilde, 203.0.113.0/24 alt ağının bağlanmasına izin verilen hedef bağlantı noktasını da belirtebilirsiniz. Yine örnek olarak 22 numaralı bağlantı noktasını (SSH) kullanacağız:
sudo ufw allow from 203.0.113.0/24 to any port 22
Belirli Bir Ağ Arayüzüne Bağlantılar
Yalnızca belirli bir ağ arabirimine uygulanacak bir güvenlik duvarı kuralı oluşturmak istiyorsanız, bunu “allow in on” ve ardından ağ arabiriminin adını belirterek yapabilirsiniz.
Devam etmeden önce ağ arabirimlerinize bakmak isteyebilirsiniz. Bunu yapmak için bu komutu kullanın:
ip addr
Output Excerpt2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
Vurgulanan çıktı ağ arayüzü adlarını gösterir. Bunlar genellikle eth0 veya enp3s2 gibi bir şekilde adlandırılır.
Dolayısıyla, sunucunuzun eth0 adında genel bir ağ arayüzü varsa, bu komutla HTTP trafiğine (port 80) izin verebilirsiniz:
sudo ufw allow in on eth0 to any port 80
Bunu yapmak, sunucunuzun genel internetten HTTP istekleri almasına izin verecektir.
Ya da MySQL veritabanı sunucunuzun (port 3306) örneğin eth1 özel ağ arayüzündeki bağlantıları dinlemesini istiyorsanız bu komutu kullanabilirsiniz:
sudo ufw allow in on eth1 to any port 3306
Bu, özel ağınızdaki diğer sunucuların MySQL veritabanınıza bağlanmasına izin verecektir.
Adım 6 – Bağlantıları Reddetme
Gelen bağlantılar için varsayılan ilkeyi değiştirmediyseniz, UFW gelen tüm bağlantıları reddedecek şekilde yapılandırılır. Genel olarak bu, belirli bağlantı noktalarına ve IP adreslerine açıkça izin veren kurallar oluşturmanızı gerektirerek güvenli bir güvenlik duvarı ilkesi oluşturma sürecini basitleştirir.
Ancak, bazen kaynak IP adresine veya alt ağa dayalı olarak belirli bağlantıları reddetmek isteyebilirsiniz, çünkü belki de sunucunuzun buradan saldırıya uğradığını biliyorsunuzdur. Ayrıca, varsayılan gelen ilkenizi izin ver olarak değiştirmek isterseniz (ki bu önerilmez), bağlantılara izin vermek istemediğiniz tüm hizmetler veya IP adresleri için reddetme kuralları oluşturmanız gerekir.
Reddetme kuralları yazmak için, yukarıda açıklanan komutları allow yerine deny yazarak kullanabilirsiniz.
Örneğin, HTTP bağlantılarını reddetmek için şu komutu kullanabilirsiniz:
sudo ufw deny http
Ya da 203.0.113.4 adresinden gelen tüm bağlantıları reddetmek istiyorsanız bu komutu kullanabilirsiniz:
sudo ufw deny from 203.0.113.4
Şimdi kuralların nasıl silineceğine bir göz atalım.
Adım 7 – Kuralları Silme
Güvenlik duvarı kurallarının nasıl silineceğini bilmek, kuralların nasıl oluşturulacağını bilmek kadar önemlidir. Hangi kuralların silineceğini belirtmenin iki farklı yolu vardır: kural numarasına göre veya asıl kurala göre (kurallar oluşturulurken nasıl belirtildiğine benzer şekilde). Daha kolay olduğu için kural numarasına göre silme yöntemiyle başlayacağız.
Kural Numarasına Göre
Güvenlik duvarı kurallarını silmek için kural numarasını kullanıyorsanız, yapmak isteyeceğiniz ilk şey güvenlik duvarı kurallarınızın bir listesini almaktır. UFW status komutu, burada gösterildiği gibi, her kuralın yanında numaraları görüntülemek için bir seçeneğe sahiptir:
sudo ufw status numbered
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Port 80 (HTTP) bağlantılarına izin veren kural 2’yi silmek istediğimize karar verirsek, bunu aşağıdaki gibi bir UFW silme komutunda belirtebiliriz:
sudo ufw delete 2
Bu, bir onay istemi gösterecek ve ardından HTTP bağlantılarına izin veren kural 2’yi silecektir. IPv6’yı etkinleştirdiyseniz, ilgili IPv6 kuralını da silmek isteyeceğinizi unutmayın.
Gerçek Kurala Göre
Kural numaralarına alternatif olarak, silinecek gerçek kuralı belirtmek de mümkündür. Örneğin, http’ye izin ver kuralını kaldırmak istiyorsanız, bunu şu şekilde yazabilirsiniz:
sudo ufw delete allow http
Kuralı hizmet adı yerine izin 80 ile de belirtebilirsiniz:
sudo ufw delete allow 80
Bu yöntem, varsa hem IPv4 hem de IPv6 kurallarını silecektir.
Adım 8 – UFW Durumunu ve Kurallarını Kontrol Etme
İstediğiniz zaman bu komutla UFW’nin durumunu kontrol edebilirsiniz:
sudo ufw status verbose
UFW devre dışı bırakılmışsa, ki varsayılan olarak öyledir, buna benzer bir şey görürsünüz:
Output
Status: inactive
UFW etkinse, ki Adım 3’ü izlediyseniz etkin olması gerekir, çıktı etkin olduğunu söyleyecek ve ayarlanmış tüm kuralları listeleyecektir. Örneğin, güvenlik duvarı herhangi bir yerden SSH (port 22) bağlantılarına izin verecek şekilde ayarlanmışsa, çıktı aşağıdaki gibi görünebilir:
Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
UFW’nin güvenlik duvarını nasıl yapılandırdığını kontrol etmek istiyorsanız status komutunu kullanın.
Adım 9 – UFW’yi Devre Dışı Bırakma veya Sıfırlama (isteğe bağlı)
UFW kullanmak istemediğinize karar verirseniz, bu komutla devre dışı bırakabilirsiniz:
sudo ufw disable
UFW ile oluşturduğunuz tüm kurallar artık etkin olmayacaktır. Daha sonra etkinleştirmeniz gerekirse her zaman sudo ufw enable komutunu çalıştırabilirsiniz.
UFW kurallarını zaten yapılandırdıysanız ancak baştan başlamak istediğinize karar verirseniz, sıfırlama komutunu kullanabilirsiniz:
sudo ufw reset
Bu işlem UFW’yi devre dışı bırakacak ve daha önce tanımlanmış olan tüm kuralları silecektir. Herhangi bir noktada değiştirdiyseniz, varsayılan ilkelerin orijinal ayarlarına değişmeyeceğini unutmayın. Bu size UFW ile yeni bir başlangıç sağlayacaktır.
Sonuç
Güvenlik duvarınız artık (en azından) SSH bağlantılarına izin verecek şekilde yapılandırılmıştır. Gereksiz bağlantıları sınırlarken sunucunuzun ihtiyaç duyduğu diğer gelen bağlantılara izin verdiğinizden emin olun, böylece sunucunuz işlevsel ve güvenli olacaktır.