Aracılığıyla paylaş


Bölüm 2.4 - Yerel güvenlik duvarını kullanarak Linux'un güvenliğini sağlama ve uzaktan HTTP erişimine izin verme

Şunlar için geçerlidir: .NET Core 2.1, .NET Core 3.1, .NET 5

Bu makalede, Linux sanal makinenizin (VM) güvenliğini sağlamak için yerel bir güvenlik duvarının nasıl yapılandırılması anlatılmaktadır.

Önkoşullar

Öğreticinin bu bölümünü tamamlamak için önkoşul yoktur.

Bu bölümün hedefi

Bir güvenlik duvarı yapılandırarak Linux VM'nizin güvenliğini sağlamayı öğreneceksiniz.

Bu bölüm için herhangi bir önkoşul olmasa da ideal kurulum önceki bölümlerdeki yönergeleri izler. Aşağıdakilere sahip olmanız gerekir:

  • Nginx otomatik olarak çalışıyor ve 80 numaralı bağlantı noktasında gönderilen istekleri dinliyor
  • Nginx, 5000 numaralı bağlantı noktasında dinleyen bir ASP.NET Core uygulamasına ters ara sunucu olarak yapılandırıldı ve gelen istekleri yönlendirdi.
  • Sunucu yeniden başlatıldıktan veya işlem durdurulduğunda veya kilitlendiğinde otomatik olarak başlatacak şekilde yapılandırılan ASP.NET Core uygulaması

Uzak bilgisayarlardan erişime izin vermek için yerel güvenlik duvarı yapılandırma

Neredeyse tüm Linux dağıtımları iptables adlı yerel bir güvenlik duvarı içerir. Bu başlangıç kılavuzu hızlı bir başlangıç için yeterlidir. Iptable'lar, trafiğe izin vermek veya trafiği engellemek için ilke zincirlerini kullanan basit ancak güçlü bir güvenlik duvarıdır.

Ubuntu topluluk yardım sayfasına göre, iptable'lar varsayılan olarak tüm resmi Ubuntu dağıtımlarına yüklenir ve tüm trafiğe izin verecek şekilde yapılandırılır.

Iptable'lar basit bir güvenlik duvarı olsa da kalıcı kuralları yönetmek kolay değildir. Neyse ki, Linux'ta güvenlik duvarı kurallarını yapılandırma görevini çok daha kolay hale getiren birkaç güvenlik duvarı yapılandırma aracı vardır. Resmi Ubuntu güvenlik duvarı belgelerine göre, Ubuntu için varsayılan güvenlik duvarı yapılandırma aracıdırufw. Bu araç, iptable'ların IPv4 veya IPv6 konak tabanlı güvenlik duvarı oluşturmak için sağladığından daha kullanıcı dostu bir yöntem sağlar.

Not

ufw varsayılan olarak devre dışıdır. Bu nedenle kullanabilmesi için etkinleştirmeniz gerekir.

Bu öğretici boyunca kullanılan Linux VM herhangi bir güvenlik duvarı kuralı tarafından korunmaz. Bunun nedeni iptable'ların yüklü ve çalışıyor olmasına rağmen tanımlı kural olmamasıdır.

sudo iptables komutunun ekran görüntüsü.

Burada amaç, yalnızca HTTP ve SSH (Secure Shell) trafiğinin sanal makineye dışarıdan erişmesine izin vermektir. Bunu başarmak için şu adımları izleyin:

  1. 'yi etkinleştirmeden ufwönce, varsayılan ilke kuralının izin verecek şekilde ayarlandığından emin olun. Aksi takdirde, VM'ye SSH bağlantısını kaybetme riskiyle karşılaşırsınız. Varsayılan kural, başka bir kural eşleştirilmemişse işlenen kuraldır. Varsayılan "izin ver" kuralının etkinleştirilmesi, gelen SSH trafiğinin engellenmemesini sağlar. Bu noktada hiçbir "reddetme" kuralı yoktur. Bu nedenle tüm gelen trafiğe izin verilir.
  2. Önemli

    SSH ve HTTP "allow" kurallarını açıkça ekleyin. Ayrıca, SSH bağlantı noktasını varsayılan değer olan 22'den farklı bir değere yapılandırdıysanız, bu bağlantı noktasına izin vermelisiniz. Örneğin, SSH bağlantı noktasını 2222 olarak değiştirdiyseniz şu komutu çalıştırmanız gerekir: sudo ufw allow 2222.

  3. Varsayılan kuralı "reddetme" kuralı olarak ayarlayın. Bu, protokol SSH veya HTTP'den farklı bir şeyse varsayılan "reddetme" kuralının trafiği reddetmesini sağlar. Örneğin, gelen HTTP trafiği reddedilir.
  4. öğesini ufwetkinleştirin.

Bu adımların komutları aşağıdaki ekran görüntüsünde listelenmiştir.

Altı sudo komutu ekran görüntüsü.

Her adımda gerçekleşen budur.

  1. komutunu çalıştırarak sudo ufw status verbose ufw'un durumunu denetler. Varsayılan olarak, ufw etkin değildir ve etkin değildir.

  2. komutunu çalıştırır sudo ufw default allow . Varsayılan "izin ver" kuralından başka bir kural olmadığından, VM'de her bağlantı noktasının açık olduğu kabul edilir.

  3. Önemli

    komutunu çalıştırarak SSH protokolunu sudo ufw allow ssh izin verilenler listesine ekleyin. Protocol.ssh bilinen bir protokoldür ve /etc/services dosyasında tanımlanır. Bu nedenle, "22" yerine "ssh" kullanılabilir. SSH hizmetini varsayılan 22 bağlantı noktası dışında bir bağlantı noktasında dinleyecek şekilde yapılandırdığınızda, diğer bağlantı noktasını açıkça eklemeniz gerektiğini unutmayın. Örneğin, SSH'yi 2222 numaralı bağlantı noktasını dinleyecek şekilde yapılandırdıysanız şu komutu çalıştırın: sudo ufw allow 2222.

  4. komutunu çalıştırarak sudo ufw allow httpHTTP protokolüne izin verin. HTTP, /etc/services dosyasında tanımlanan bilinen bir protokoldür. Bu nedenle, protokol adı kullanılabilir ve sudo ufw allow http komut çalıştırılabilir. Çalıştırmak sudo ufw allow 80 da mükemmel bir şekilde geçerlidir.

    Not

    Hem SSH hem de HTTP protokollerine izin verdikten sonra, diğer tüm protokolleri "reddet" listesine eklemek istersiniz.

  5. Komutunu çalıştırarak sudo ufw default deny varsayılan kuralı reddedecek şekilde değiştirerek bunu yapabilirsiniz. Yalnızca SSH ve HTTP protokollerine izin verilir. Diğer protokoller reddedilir.

  6. ufw öğesini etkinleştirin.

Bu yordamı tamamladıktan sonra çıkış aşağıdadır sudo ufw status verbose .

sudo ufw status verbose komutunun ekran görüntüsü.

Güvenlik duvarı yapılandırıldıktan sonra çalışıp çalışmadığını test edin.

Yerel güvenlik duvarını test edin

Güvenlik duvarını test etmek kolaydır: HTTP protokolü için bir "reddetme" kuralı oluşturun ve siteye başka bir bilgisayardan erişmeyi deneyin. İstek engellenmelidir.

Bu "reddet" kuralını oluşturmadan önce, uygulamanın geçerli yapılandırmasında tarayıcı tarafından erişilebilir olduğundan emin olun. Bunu yapmak için buggyamb konak adını ekleyerek ve Linux VM'nizin genel IP adresini kullanarak istemci bilgisayardaki C:\Windows\System32\drivers\etc\hosts dosyasını düzenleyin. Buggyamb ana bilgisayar adı Linux VM IP adresini çözümler. Konak dosyanıza herhangi bir konak adı ekleyebilir veya Doğrudan Linux VM'nizin genel IP adresine bağlanmayı deneyebilirsiniz.

Hoş geldiniz sayfasının ekran görüntüsü.

HTTP isteklerinin VM'ye ulaşabildiğini doğruladıktan sonra, HTTP trafiğini engelleyen bir kuralı etkinleştirmeyi deneyin. Bu, güvenlik duvarının çalıştığından emin olmaktır. Bunu yapmak için komutunu çalıştırarak sudo ufw deny httpHTTP için bir "reddetme" kuralı ekleyin. Bu, HTTP protokolü (bağlantı noktası 80'de) için iki "reddetme" kuralı ekler. Biri IPv4, diğeri IPv6 içindir.

sudo ufw deny http komutunun ekran görüntüsü.

Tarayıcıyı yeniden açın ve Linux'ta çalışan ASP.NET Core uygulamasına erişmeyi deneyin.

Geçersiz sayfanın ekran görüntüsü.

Bu ekran görüntüsü beklenen sonucu gösterir.

Komutunu kullanarak wget benzer bir testi doğrudan Linux VM'nin içinde çalıştırabilirsiniz. Aşağıdaki ekran görüntüsünde, komutunu çalıştırarak wgetaynı test için gerekli adımlar gösterilmektedir.

Sudo four komutlarının ekran görüntüsü.

Her adımda gerçekleşen budur.

  1. HTTP protokolü için "reddet" kuralı eklendi.

  2. Komut wget buggyamb-external çalıştırıldı. Tahmin edebileceğiniz gibi, "buggyamb-external" ana bilgisayar adı Linux VM'nin genel IP adresini çözümler. Bunu yapmak için vi kullanarak /etc/hosts dosyayı düzenleyin. Gösterildiği gibi, wget bağlanmaya çalıştı, ancak hiçbir zaman başarılı olmadı. İşlemden çıkmak için CTRL+C tuşlarına basmanız gerekiyordu.

  3. HTTP protokolü için bir "izin ver" kuralı eklendi.

  4. komutu yeniden çalıştırılırken wget buggyamb-external farklı sonuçlar elde edilir. Bu kez HTTP wget protokolüne izin verildiği için bağlanabildi. Gösterildiği gibi, wget Index.html dosyasını geçerli dizininize indirir.

Artık ASP.NET Core uygulamasında hata ayıklamak için gerekli yapılandırmayı tamamlamaya bir adım daha yaklaştınız. Sonraki bölüme geçmeden önce yerel güvenlik duvarında hem SSH hem de HTTP'ye izin verildiğinden emin olun.

sudo ufw status komutunun ekran görüntüsü.

Sonraki adımlar

Bölüm 2.5 - Geliştirme ortamınızdaki dosyaları Linux VM'sine kopyalayın ve sonra dosyaları Linux'ta ayıklayın.