Nginx Proxy Yöneticisi (NPM) ile Ters Proxy Nasıl Kurulur

 

Nginx Proxy Manager (NPM), ters proxy yapılandırmalarını yönetmek için kullanımı kolay bir araçtır. Esasen, yüksek performanslı Nginx web sunucusu için kullanıcı dostu bir arayüz görevi görür ve ayrıca arka planda Let’s Encrypt’ı kullanarak ücretsiz SSL sertifikaları verir ve böylece proxy’li hizmetlere HTTPS bağlantısı sağlar.

Nginx, Caddy veya Traefik gibi diğer ters proxy çözümleriyle karşılaştırıldığında, NPM’nin asıl çekiciliği, proxy ayarlarını, SSL/TLS sertifikalarını ve erişim kontrollerini yönetmek için kullanışlı bir grafiksel kullanıcı arayüzü sağlama yeteneğinde yatmaktadır; bu sayede, çok az komut satırı deneyimi olan kişiler bile bunu erişilebilir hale getirmektedir.

Ancak, diğer ters proxy seçeneklerini denemek istiyorsanız, Nginx ve Caddy için takip etmesi kolay kılavuzlarımıza güvenebilirsiniz. Şimdi konuya geri dönelim. İşte Nginx Proxy Manager’ın başlıca satış noktaları.

NPM’yi Ters Proxy Olarak Neden Kullanmalıyız?

Nginx Proxy Manager’ı ters proxy olarak kullanmanın birçok avantajı olabilir:

  • Kullanımı Kolay: Çok teknik bilgiye sahip olmasanız bile, sadece 20-30 dakikada tam fonksiyonlu bir ters proxy kurabilirsiniz.
  • Güvenlik: Arka uç sunucularının özelliklerini ve ayrıntılarını gizleyerek ek bir güvenlik katmanı sunabilir.
  • Yük Dengeleme: NPM, trafiği birden fazla sunucuya dağıtarak web uygulamalarının performansını ve güvenilirliğini artırabilir.
  • SSL Management: Şifrelenmiş trafik için otomatik ve kolay SSL kurulumu ve yenileme süreçleri, HTTPS ile web sitesi güvenliğinin artırılması.

Kurulumun Açıklaması

NPM bir Docker konteynerinde çalışır. Bu nedenle, Docker’ın yüklü olduğu bir sunucunuz olduğundan emin olun. Ancak henüz yoksa endişelenmeyin; sizi düşündük. Ubuntu, Debian, Fedora, Linux Mint, Pop!_OS, Alma ve Rocky Linux gibi hemen hemen tüm büyük Linux dağıtımlarına Docker’ı yüklemeye yönelik kılavuzlarımız, sizi adımlarda kolayca yönlendirecektir.

Şimdi kurulumumuzu açıklığa kavuşturalım. Sunucumuzda, trafiği proxy’leyeceğimiz iki konteynerize örnek uygulamamız var: FreshRSS okuyucu ve sırasıyla 1080 ve 5230 portlarında çalışan Memos not alma uygulaması.

Elbette, çok daha fazlasıyla çalışıyor olabilirsiniz. Nginx Proxy Manager bu kadar ağır yükleri hiçbir sorun yaşamadan yönetebilir. İşleri olabildiğince basit ve açık tutmak için sadece iki uygulama seçtik.

Ayrıca, sahip olduğumuz ve testler için kullandığımız bir alan adı olan “tmplinux.com”u kullanıyoruz. FreshRSS uygulaması için “rss.tmplinux.com” ve Memos not alma uygulaması için “memos.tmplinux.com” olmak üzere iki alt alan adı DNS A kaydını, Nginx Proxy Manager’ın çalıştığı sunucu genelinin IP adresine yönlendireceğiz.Görsel olarak daha iyi anlamanız için üretim sürecimizi aşağıda bulabilirsiniz.

How Nginx Proxy Manager works

Ancak, kendi etki alanınız yoksa, “/etc/hosts” dosyanızda her zaman keyfi bir giriş için statik bir giriş ayarlayabilirsiniz.

Ancak bu yaklaşımı benimserseniz NPM’den geçerli bir SSL sertifikası alamayacağınızı unutmayın çünkü bunu yapmak için bir alan adına sahip olmanız ve bunu gerçek bir genel IP adresine bağlamanız gerekir.

Artık her şey netleştiğine göre, konuya girelim: Nginx Proxy Manager’ı ters proxy görevlerini yönetecek şekilde ayarlamak.

Nginx Proxy Yöneticisini yükleyin

NPM’yi kurmadan önce, öncelikle yeni bir Docker ağı kurmalıyız. Bu ağ, NPM’yi etkileşim kurması gereken diğer kapsayıcılara bağlayacaktır. Bunu yapmazsak, Nginx Proxy Yöneticisi bu kapsayıcılarla etkileşime giremeyecek ve onlara trafik gönderemeyecektir.

Docker ağımızı “reverse_proxy” ismini seçerek oluşturalım.

docker network create reverse_proxy

Daha sonra her şeyin yolunda olduğunu ve ağın kullanılabilir olduğunu doğrulayacağız.

docker network ls
Setting up a docker network.
Docker ağının kurulması.

“reverse_proxy” Docker ağı oluşturulduktan sonra, Nginx Proxy Manager’ın kurulumuna geçelim. İlk adım olarak, “npm” dizini oluşturun ve içine girin.

mkdir npm
cd npm

NPM’yi Docker Compose kullanarak dağıtacağız. Metin düzenleyicinizi açın ve bir “docker-compose.yaml“ dosyası oluşturun. Aşağıda verilen içeriği yapıştırın, kaydedin ve çıkın.

nano docker-compose.yaml
services:
  app:
    container_name: npm
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    networks:
      - reverse_proxy
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

networks:
  reverse_proxy:
    name: reverse_proxy
    external: true

Gördüğünüz gibi, bu oldukça basit bir Compose dosyası. 80 ve 443 portlarının Nginx Proxy Manager’ın istekleri alacağı yer olduğunu, 81 portunun ise NPM’nin web yönetici arayüzüne erişmenizi sağladığını belirtmek önemlidir.

Ayrıca, NPM yapılandırma verilerini ve SSL sertifikalarını güvende tutmak için geçerli dizinde iki birim de kuruyoruz. Bu çok önemlidir çünkü Docker, tasarımı gereği verileri kalıcı olarak kaydetmez; bu birimler olmadan, konteyner yeniden başlatıldığında herhangi bir veri kaybolur.

NPM’yi dağıtmadan önce, Nginx Proxy Manager için gerekli olan 80 ve 443 portlarını başka hiçbir hizmetin kullanmadığından emin olalım. Bu portlar zaten kullanılıyorsa, bunları kullanan hizmetleri durdurmanız gerekir. Aksi takdirde, NPM başlamaz ve bir hata gösterir.Hangi portların kullanımda olduğunu görmek için netstat komutunu kullanacağız ve 80 ve 443 portları için çıktısına bakacağız. Listede değillerse sorun yok.

netstat -tulnp
Check the ports in use.
Kullanılan portları kontrol edin.

Artık Nginx Proxy Manager konteynerini dağıtmaya hazırız:

docker compose up -d
Starting the Nginx Proxy Manager container.
Nginx Proxy Manager konteynerini başlatıyoruz.

Konteynerleri NPM’nin Docker Ağına Bağlama

Bir kez daha, Nginx Proxy Yöneticisi, isteklerini ilettiği konteynerlerle iletişim kurabilmek için aynı ağı paylaşmalıdır. Bu, dağıtımlarını değiştirmeyi gerektirir.

Örneğin, FreshRSS dağıtımımıza yaptığımız ayarlama, aşağıda gösterildiği gibi bir “reverse_proxy” ağ parçasının eklenmesini içeriyor:

Linking containers to Docker's NPM network.
Konteynerleri Docker’ın NPM ağına bağlamak.

Değişikliklerin ardından konteynerlerinizi yeniden başlattığınızdan emin olun.

Daha önce kurduğumuz “reverse_proxy” ağına halihazırda çalışan konteynerları da aşağıdaki komutu kullanarak bağlayabilirsiniz:

docker network connect reverse_proxy CONTAINER_NAME

Veya bunları başlattığınızda, tek bir docker run komutu kullanırsanız, bunları gerekli ağa bağlayın:

docker run --network=reverse_proxy YOUR-OTHER-OPTIONS-HERE

Çalışan konteynerlerin ihtiyaç duyduğunuz Docker ağını paylaşıp paylaşmadığını kontrol etmek için aşağıdaki komutu kullanın.

docker ps --format "table {{.Names}}\t{{.Networks}}"
A list of running Docker containers along with the network they belong to.
Çalışan Docker konteynerlerinin ve ait oldukları ağların listesi.

Nginx Proxy Yöneticisi Panosuna Erişim

Tarayıcınızı açın ve sunucunuzun 81 numaralı bağlantı noktasındaki IP adresine gidin (“http://server-ip-address:81”), buradan NPM yönetici arayüzüne erişebilirsiniz. Varsayılan kimlik bilgilerini kullanarak oturum açın:

Nginx Proxy Manager UI
Nginx Proxy Yöneticisi Kullanıcı Arayüzü

Yönetici hesap bilgilerinizi güncellemenizi isteyen bir açılır pencere görünecektir. Tam adınızı, kullanıcı adınızı ve geçerli bir e-posta adresi girin, ardından değişikliklerinizi onaylamak için “Kaydet” düğmesine tıklayın.

Update admin account information.
Yönetici hesabı bilgilerini güncelleyin.

Yönetici parolasını güncellemeniz için yeni bir pencere açılacaktır. “Mevcut Parola” alanına “changeme” yazın ve ardından aşağıdaki iki alana yeni bir güvenli parola seçip girin. Değişiklikleri uygulamak için “Kaydet”e tıklayın.

Changge NPM admin's password.
NPM admin şifresini değiştirin.

Bu sizi kullanıcı sayfasına götürecek ve burada yönetici hesabınızın güncellendiğini göreceksiniz.

Nginx Proxy Manager users.
Nginx Proxy Yöneticisi kullanıcıları.

SSL Sertifikasının Verilmesi

Hizmetlerimizin HTTPS üzerinden güvenli bir şekilde bağlanabilmesi için geçerli bir SSL sertifikası vermeye hazırız. Sadece Nginx Proxy Manager’ı yeni kurduğunuz sunucunun genel IP adresine işaret eden geçerli (çözülebilir) bir DNS “A” kaydı ayarladığınızdan emin olun.

Bunu nslookup veya dig komutuyla hızlıca doğrulayabilirsiniz. Örneğin, “memos.tmplinux.com” ana bilgisayarı için bir SSL sertifikası alıyoruz. Hızlı bir kontrol, doğru IP adresini işaret ettiğini doğrular.

Checking the DNS record.
DNS kaydı kontrol ediliyor.

Ana menüden “SSL Sertifikaları”nı seçin. Ardından, sertifikanızı Nginx Proxy Manager web arayüzü üzerinden almak için “SSL Sertifikası Ekle” düğmesine tıklayın.

Issuance of SSL certificate.
SSL sertifikasının verilmesi.

Bir sonraki ekranda aşağıdakileri yapın:

  1. “Alan Adları” bölümüne sertifika vermek istediğiniz alan adını girin.
  2. Geçerli bir e-posta adresi girin.
  3. Let’s Encrypt şartlarını kabul edin.
  4. Sertifikanızı almaya başlamak için “Kaydet” butonuna tıklayın.
Issuance of SSL certificate with Nginx Proxy Manager.
Nginx Proxy Manager ile SSL sertifikasının verilmesi.

NPM perde arkasında hızla çalışmaya başlayacak ve sertifikanın kurulumunun tamamı 20-30 saniyeden fazla sürmeyecek.

Issuance of SSL certificate.
SSL sertifikasının verilmesi.

Sayfa otomatik olarak yeniden yüklenecek ve her şey başarılı olursa belirtilen alan adına ait yeni SSL sertifikanız hazır görünecektir.

Issuance of SSL certificate.
SSL sertifikasının verilmesi.

Nginx Proxy Yöneticisi ile Ters Proxy Kurulumu

Şimdi en heyecan verici kısımdayız: Nginx Proxy Manager kullanarak ters proxy’mizi kurmak. İki senaryoyu inceleyeceğiz: birincisi güvenli bir HTTPS bağlantısı için SSL sertifikası kullandığımız senaryo ve diğeri ise yalnızca HTTP kullanarak sertifika olmadan ters proxy kurduğumuz senaryo. Başlayalım.

SSL Sertifikalı NPM Ters Proxy

Ana menüye gidin, “Ana Bilgisayarlar”ı seçin ve ardından açılan alt menüden “Proxy Ana Bilgisayarlar”ı seçin.

Adding a host.
Bir ana bilgisayar ekleniyor.

Bir sonraki sayfada “Proxy Host Ekle” butonuna tıklayın.

Adding a host.
Bir ana bilgisayar ekleniyor.

Başarılı bir ters proxy bağlantısı kurmak için bu bölüm çok önemlidir, bu nedenle aşağıda her seçeneği ayrıntılı olarak açıkladık.

Adding a proxy host to Nginx Proxy Manager.
Nginx Proxy Manager’a proxy sunucusu ekleme.

“Ayrıntılar” sekmesinden, “Alan Adları” alanına, Nginx Proxy Manager’ın ters proxy oluşturmasını istediğiniz alan adını girin. Bizim durumumuzda, bu, önceki adımda bir SSL sertifikası verdiğimiz addır, yani “memos.tmplinux.com.”

“Şema” bölümü kritik öneme sahiptir. Burada “http” ve “https” arasında seçim yapabilirsiniz. Bu seçim, Docker konteynerinin HTTP veya HTTPS isteklerini dinleyip dinlemediğini gösterir. Neredeyse tüm durumlarda, Docker konteynerleri varsayılan olarak HTTPS’yi işlemek üzere ayarlanmamıştır, bu nedenle genellikle burada “http” kullanmak isteyeceksiniz.

“Forward Hostname/IP” kutusuna sadece Docker hizmetinin adını yazın. Hem NPM konteynerine hem de diğer Docker konteynerlerine aynı Docker ağını paylaşmak için trafik gönderdiğimizden, Nginx Proxy Manager onlara hizmet adlarını kullanarak bağlanır.Hizmetin adının ne olduğundan emin değil misiniz? Aşağıdaki resme bir göz atın.

Docker service name.
Docker servis adı.

“Forward Port” alanına, gelen istekleri almak için Docker konteynerinin port numarasını yazın. Tekrar ediyorum, bu, NPM konteynerinin kendisinin dinlediği 80 ve 443 portlarıyla karıştırılmamalıdır.

Eğer portlardan emin değilseniz, aşağıdaki komutu kullanarak bunları kolayca kontrol edebilirsiniz:

docker ps --format "table {{.Names}}\t{{.Ports}}"
Check which ports are being used by running Docker containers.
Docker konteynerlarını çalıştırarak hangi portların kullanıldığını kontrol edin.

Sadece işleri açıklığa kavuşturmak için, örneğin “1080->80” gördüğünüzde, Docker konteynerinin kendi dahili 80 portunu ana bilgisayardaki 1080 portuna bağladığı anlamına gelir. Başka bir deyişle, dinlediği Docker konteynerinin portu 1080 değil 80’dir.

Son olarak, yaygın siber saldırılara karşı daha iyi koruma sağlamak için “Yaygın Saldırıları Engelle” seçeneğini açmanızı öneririz.”Kaydet” butonuna tıklamak için acele etmeyin; bunun yerine “SSL” sekmesine geçin. “SSL Sertifikası” menüsünden, biraz önce verdiğiniz Let’s Encrypt sertifikasını seçin.

Set SSL certificate in Nginx Proxy Manager.
Nginx Proxy Manager’da SSL sertifikasını ayarlayın.

Bu ayarları etkinleştirin:

  • Force SSL“: Bu, güvenli tarama için trafiği otomatik olarak HTTP’den HTTPS’ye yönlendirir.
  • HTTP/2 Support“: Günümüzde kullanılan önerilen HTTP protokol sürümü.
  • HSTS Enabled“: Bu, bazı kötü amaçlı saldırılara karşı koruma sağlamaya yardımcı olur.
Set SSL certificate in Nginx Proxy Manager.
Nginx Proxy Manager’da SSL sertifikasını ayarlayın.

Son olarak değişikliklerinizi uygulamak için “Kaydet”e tıklayın.

Configuring a reverse proxy in NPM.
NPM’de ters proxy yapılandırma.

Gerçek an! Tarayıcınızı NPM’de ayarladığınız adrese yönlendirin. Uygulamanız, adres çubuğundaki asma kilit simgesiyle gösterildiği gibi HTTPS üzerinden güvenli bir şekilde çalışıyor olmalıdır. Tebrikler dışında ne ekleyebilirim!

NPM reverse proxy successfully configured.
NPM ters proxy başarıyla yapılandırıldı.

SSL’siz NPM Ters Proxy

SSL sertifikası kullanmayan bir ana bilgisayara NPM’de ters proxy eklemek önceki örneğe benzer, ancak yapmanız gereken her şey “Ayrıntılar” sekmesindedir. Başka bir deyişle, “SSL” sekmesine dokunmanıza gerek yoktur.

İkinci Docker konteynerimize işaret eden “rss.tmplinux.com” için bir giriş ekleyeceğiz. Bunu alıştığınız şekilde yapmak için ana menüye gidin ve “Hosts”u, ardından “Proxy Hosts”u seçin. Bundan sonra sadece “Add Proxy Host” düğmesine tıklayın.

Şema “http” ve Docker servisi “freshrss” olarak adlandırılıyor. Konteyner 80 portunu kullanıyor. Durumunuz için gerekli bilgileri doldurun ve yaptığınız ayarları uygulayın, “Kaydet” butonuyla onaylayın.

Adding a proxy host to Nginx Proxy Manager.
Nginx Proxy Manager’a proxy sunucusu ekleme.

İlk sunucumuz olan ve SSL sertifikası kullanımını yayınlayıp yapılandırdığımız “memos.tmplinux.com”un aksine, yeni adresimizin “yalnızca HTTP” olarak işaretlendiğini unutmayın.

Configuring a reverse proxy (without using SSL) in NPM.
NPM’de ters proxy (SSL kullanmadan) yapılandırma.

Tarayıcımızı adrese yönlendirdiğimizde, NPM trafiği yalnızca güvenli olmayan bir HTTP bağlantısı üzerinden yönlendirir.

NPM reverse proxy successfully configured.
NPM ters proxy başarıyla yapılandırıldı.

Örneğin, hizmeti yalnızca ev ağınız içinde kullanacaksanız bu seçeneği kullanmanızı önerdiğimizi belirtmek önemlidir. Ancak, hizmetiniz internet üzerinden erişilebilirse, güvenli HTTPS bağlantılarını etkinleştirmek için Nginx Proxy Manager’da bir SSL sertifikası ayarlayın.

Nginx Proxy Yöneticisinde IP Adresine Göre Erişimi Kısıtlama

Güvenliği artırmanın etkili bir yolu, erişimi IP adreslerine göre kısıtlamaktır. Nginx Proxy Manager bu süreci inanılmaz derecede hızlı ve basit hale getirir ve sadece birkaç tıklama gerektirir. Hadi sizi bu konuda yönlendirelim.

“Erişim Listeleri” bölümüne gidin ve “Erişim Listesi Ekle” butonuna tıklayın.

Restricting access by IP address in Nginx Proxy Manager.
Nginx Proxy Manager’da IP adresine göre erişimi kısıtlama.

Bir modal pencere açılacaktır. “Detaylar” bölümünde, istediğiniz tanımlayıcı bir isim belirtin.

Creating a new access list in NPM.
NPM’de yeni bir erişim listesi oluşturma.

“Erişim” sekmesine geçin. Özel ev ağınızın IP aralığı olan “192.168.xx” ve belirli bir genel IP adresi olan “1.2.3.4“e erişimi kısıtlamak istediğinizi varsayalım.

Durumunuza uygun adresleri girin, son girişin “reddet” yönergesinin “tümü” olarak ayarlandığından emin olun. Ayarları yapılandırmayı tamamladığınızda, değişiklikleri uygulamak için “Kaydet” düğmesine tıklayın.

Creating a new access list in NPM.
NPM’de yeni bir erişim listesi oluşturma.

Eğer ilk defa bir erişim listesi oluşturuyorsanız, listenin en üstünde görünecektir. Değişiklik yapmanız gerekirse endişelenmeyin; sağdaki üç nokta simgesine tıklayıp “Düzenle”yi seçerek istediğiniz zaman kolayca düzenleyebilirsiniz.

Access lists.
Erişim listeleri.

Şimdi erişim listesini ana bilgisayarlarımızdan biri olan “memos.tmplinux.com”a uygulayalım. “Ana Bilgisayarlar” -> “Proxy Ana Bilgisayarlar”a gidin, ardından sağdaki üç nokta simgesine tıklayın ve “Düzenle”yi seçin.

Applying an NPM access list to the host.
NPM erişim listesinin ana bilgisayara uygulanması.

“Erişim Listesi” açılır menüsünden, yakın zamanda oluşturulan “Erişim Listemi” seçin ve onaylamak için “Kaydet”e tıklayın.

Applying an NPM access list to the host.
NPM erişim listesinin ana bilgisayara uygulanması.

Ve bu kadar. Şimdi, “Erişim Listem”de izin verilenler dışında bir IP adresinden hizmete erişmeye çalışırsak, Nginx Proxy Manager aşağıda gösterilen “403 Yasak” sayfasını gösterecektir.

Deny access with NPM.
NPM ile erişimi engelleyin.

 

 

Yazının orijinalini buradan okuyabilirsiniz.