Pomerium Proxy’yi Kurma ve Yapılandırma

Proxy sunucusu, kullanıcılar ile internet arasında ağ geçidi görevi gören bir yönlendiricidir. Son kullanıcılar ile çevrimiçi olarak ziyaret ettikleri web sayfaları arasında yer aldığından genellikle aracı olarak anılır. Proxy, sistem için bir güvenlik katmanı sağlar. Sistemi kötü amaçlı yazılım gibi internet tehditlerinden korumak için bir web filtresi veya güvenlik duvarı görevi görebilir. Proxy, aşağıdakileri içeren çeşitli görevleri gerçekleştirmek için kullanılabilir:

  • Ofisteki web sitesi çalışanlarının ve personelin erişimini kontrol edin
  • Kuruluştaki güvenliği artırın.
  • Çökmeleri önlemek için internet trafiğini dengeleyin
  • Dosyaları önbelleğe alarak veya gelen trafiği sıkıştırarak bant genişliğinden tasarruf edin

Piyasada birçok proxy sunucusu türü vardır; bunlar arasında ileri proxy, şeffaf proxy, anonim proxy, yüksek anonimlik proxy’si, bozucu proxy, Veri merkezi proxy’si, yerleşik proxy, genel proxy, paylaşılan proxy, SSL Proxy, dönen proxy ve ters proxy bulunur. . Bu proxy’ler kullanıcılarına farklı işlevler sunar.

Bu kılavuzda, Hizmetleriniz için Pomerium Proxy’nin nasıl kurulacağını ve yapılandırılacağını sistematik olarak ele alacağız.

Pomerium Proxy nedir?

Pomerium, uygulamalara ve hizmetlere belirli ölçekte erişimi güvence altına almak için kullanılan, kimlik ve bağlama duyarlı bir ters proxy’dir. Hizmete TCP tüneli oluşturarak MySQL, Redis, SSH vb. hizmetlere güvenli bağlantı oluşturma yeteneğine sahiptir. Uygulamanın kendisinde yetkilendirme/kimlik doğrulama yerleşik olmasa bile uygulamalara erişim kontrolü eklemek için standartlaştırılmış bir arayüz sağlar.

Genellikle bir VPN alternatifi olarak kullanılır, ancak VPN’den farklı olarak bağlantı için bir istemci gerektirmez. Erişimi belirlemek için ağ konumunu değil kimlik ve bağlamı kullanır.

Pomerium Proxy aşağıdaki durumlarda yaygın olarak kullanılır:

  • Dahili uygulamalara tek oturum açma ağ geçidi sağlama.
  • Bağlam, kimlik ve cihaz kimliğine dayalı dinamik erişim politikasını uygulama
  • Erişim günlüklerini ve telemetri verilerini toplama.

Pomerium Proxy’nin sunduğu özellikler şunlardır:

  • Bağlam odaklı erişim: güvenilmeyen bağlantılardan dahili uygulamalara, sunuculara vb. güvenli erişim sağlamak için kimlik ve bağlamı kullanır.
  • Verileriniz üzerindeki kontrolü elinizde tutun: Veri kiracılığı üzerindeki kontrolden vazgeçmeden mevcut mimarinizde uyumluluğu öne çıkarın
  • Herhangi bir uygulamayı, herhangi bir platformda destekleyin: Grafana, Prometheus vb. gibi bir dizi uygulamayı ve entegrasyonu destekler.
  • Tercih ettiğiniz kimlik sağlayıcınızı kullanın: Kullanıcılar tek oturum açma kimlik doğrulamasını ve yetkilendirmesini herhangi bir uygulamaya kolayca ekleyebilir. Tüm kimlik sağlayıcılarını destekler.
  • Herhangi bir uygulamaya erişim kontrolü ekleyin: Herhangi bir uygulamaya/sunucuya kimlik doğrulama ve yetkilendirme ekleyerek kuruluş için merkezi bir yönetim paneli sağlar.

Başlarken

Pomerium Proxy’yi kurmanın pek çok yolu vardır. Bunlar şunları içerir:

  • Kurulum Dosyasından
  • Kaynak Koddan
  • Kubernetes’te

Bu kılavuzda Pomerium Proxy’nin ikili dosyalar kullanılarak nasıl kurulacağını anlatacağız. Bu kılavuzun en iyi şekilde çalışması için şunlara ihtiyacınız vardır:

Öncelikle sistemi güncelleyin ve gerekli paketleri yükleyin.

##Debian/Ubuntu'da
sudo apt update && sudo apt install vim curl -y

##RedHat/Alma Linux/Rocky Linux'ta
sudo yum install vim curl -y

Devam edin ve sisteminizde sunucu adını ayarlayın.

sudo hostnamectl set-hostname authenticate.localhost.pomerium.io

Kendi IP adresinizi ve sunucu adınızı içerecek şekilde /etc/hosts dosyasını değiştirin.

$ sudo vim /etc/hosts
192.168.200.51 authenticate.localhost.pomerium.io redis.localhost.pomerium.io ssh.localhost.pomerium.io

Bu kılavuz için MKcert kullanılarak oluşturulabilen Kendinden imzalı sertifikaları kullanacağız. Yapılacak ilk şey Mkcert ikili dosyalarını GitHub sürümler sayfasından indirmektir.

Mevcut sürümü kontrol edin ve şu komutla dışa aktarın:

VER=v1.4.4

Ardından şu komutu kullanarak ikili dosyaları indirin:

##AMD64 
wget https://github.com/FiloSottile/mkcert/releases/download/$VER/mkcert-$VER-linux-amd64

##ARM64
wget https://github.com/FiloSottile/mkcert/releases/download/$VER/mkcert-$VER-linux-arm64

##ARM
wget https://github.com/FiloSottile/mkcert/releases/download/$VER/mkcert-$VER-linux-arm

Dosyayı yürütülebilir hale getirin ve PATH’inize taşıyın

chmod +x mkcert-$VER-linux-* 
sudo mv mkcert-$VER-linux-* /usr/local/bin/mkcert

Şimdi sertifikaları şu komutla oluşturun:

mkcert -install
   mkcert '*.localhost.pomerium.io'

Bundan sonra sertifikaya _wildcard.localhost.pomerium.io.pem ve anahtara _wildcard.localhost.pomerium.io-key.pem sahip olacaksınız. Ayrıca $(mkcert -CAROOT)/rootCA.pem’de bir CA’nız olacaktır. SSL sertifikası uyarılarından kaçınmak için CA’yı istemcinize kopyalayıp kullanabilirsiniz.

#1. Pomerium Proxy’yi Linux’a yükleyin

Pomerium Proxy Linux’a kolaylıkla kurulabilir. Cloudsmith deposunu kurarak başlayın. Bu, aşağıdaki komutlarla yapılabilir:

##Debian/Ubuntu'da
curl -1sLf \
  'https://dl.cloudsmith.io/public/pomerium/pomerium/setup.deb.sh' \
  | sudo -E bash

##RedHat/Alma Linux/Rocky Linux'ta
curl -1sLf \
  'https://dl.cloudsmith.io/public/pomerium/pomerium/setup.rpm.sh' \
  | sudo -E bash

Depo eklendikten sonra Pomerium Proxy’yi şu komutla yükleyin:

##Debian/Ubuntu'da
sudo apt update && sudo apt install pomerium

##RedHat/Alma Linux/Rocky Linux'ta
sudo yum install pomerium pomerium-cli

#2. Linux’ta Pomerium Proxy’yi Yapılandırma

Kurulduktan sonra Pomerium Proxy’ye istediğiniz konfigürasyonları yapabilirsiniz. Varsayılan yapılandırma dosyası /etc/pomerium/config.yaml konumunda saklanır, ancak yine de config.yaml dosyasını tercih ettiğiniz bir konumda oluşturabilirsiniz.

Bu dosyayı düzenlemek için açın:

sudo vim /etc/pomerium/config.yaml

Bu dosya Pomerium’un yapılandırma ayarlarını, rotalarını ve erişim politikalarını saklar ve belirler. Pomerium, TCP tüneli oluşturarak hizmetlerinize güvenli bağlantılar oluşturma yeteneğine sahiptir. Bu kılavuzda hizmetleriniz için nasıl TCP rotası oluşturulacağını göstereceğim.

Bağlama bağlantı noktasını, sertifika yolunu, paylaşılan base64’ü ve çerez sırlarını ayarlayın:

# To run on :443 set AmbientCapabilities=CAP_NET_BIND_SERVICE
# in a systemd override
address: :443

authenticate_service_url: https://authenticate.localhost.pomerium.iocertificates:
  - cert: /etc/pomerium/cert.pem
    key: /etc/pomerium/key.pem
shared_secret: <provide base64 string here>
cookie_secret: <provide base64 string here> 
idp_provider: "github"
idp_client_id: "REDACTED"       // github application ID 
idp_client_secret: "REDACTED"   // github application secret  

routes:
...

Yukarıdaki dosyada, bilgilerinizi sağlayın

  • idp_provider: Github, Google, Azure AD, AUth0, Okta, Apple vb. olabilir. Kimlik sağlayıcınızı nasıl yapılandıracağınızı buradan görebilirsiniz.
  • idp_client_id: Github için bu, uygulama kimliğiniz olacaktır
  • idp_client_secret: Github için bu, GitHub uygulama sırrınız olacaktır

Bu kılavuz için Kimlik sağlayıcı olarak Github’u kullandık. GitHub OAuth 2.0 Uygulaması oluşturmak için Github hesabınızda oturum açın ve Geliştirici ayarları ➞ OAuth Uygulamaları’na gidin ve Yeni OAuth Uygulaması’nı seçin. Gösterildiği gibi gerekli bilgileri sağlayın.

Oluşturulduktan sonra Client ID ile birlikte Client Secret da alacaksınız.

Shared_secret ve cookie_secret için 32 baytlık base64 dizesini oluşturmak için, created plus sitesini veya terminalden şu komutu kullanabilirsiniz:

echo -n 'my-32-bytes-character-string-here' | base64

Örneğin

echo -n 'abcdefghijklmnopqrstuvwxyz012345' | base64

Sırlar sağlandıktan sonra ilerleyin ve bir rota oluşturun.

TCP Rotası Oluşturma

Yeni bir TCP rotası belirtmek için, Kimden alanına bir bağlantı noktasıyla birlikte tcp+ önekini eklemeniz gerekir. Örneğin:

  - from: tcp+https://ssh.localhost.pomerium.io:22

Kime alanı, dinlenilecek adresi ve bağlantı noktasını belirterek tcp://’yi protokol olarak kullanır. Örneğin:

    to: tcp://127.0.0.1:22

Aşağıda SSH hizmetinin ana makineye nasıl yönlendirileceğine dair iyi bir örnek verilmiştir. Açılan dosyada, rotaların altına aşağıdaki satırları ekleyin/değiştirin

routes:
.......
  - from: tcp+https://ssh.localhost.pomerium.io:22
    to: tcp://ssh:22
    preserve_host_header: true
    policy:
      - allow:
          or:
            - email:
                is: [email protected]

Yukarıdaki dosyada sunucu adını ve e-posta adresini doğru şekilde değiştirin. aşağıda Redis için başka bir örnek verilmiştir (/etc/redis/redis.conf dosyasında uzaktan erişim etkinleştirilmiş):

  - from: tcp+https://redis.localhost.pomerium.io:6379
    to: tcp://redis:6379
    policy:
      - allow:
          or:
            - email:
                is: [email protected]

Aşağıda konfigürasyonumuzun nasıl göründüğüne dair bir örnek verilmiştir:

Değişiklikler yapıldıktan sonra dosyayı kaydedin, devam edin ve daha önce oluşturduğumuz sertifikaları ayarlanan yola kopyalayın:

sudo cp _wildcard.localhost.pomerium.io.pem /etc/pomerium/cert.pem
sudo cp _wildcard.localhost.pomerium.io-key.pem /etc/pomerium/key.pem

Sertifikalar için gerekli izinleri ayarlayın:

sudo chmod 775 /etc/pomerium/cert.pem
sudo chmod 775 /etc/pomerium/key.pem

Ayrıca Pomerium’un 443 numaralı bağlantı noktasına (varsayılan HTTPS bağlantı noktası) bağlanmasına izin vermek için aşağıdaki komutu çalıştırın.

echo -e "[Service]\nAmbientCapabilities=CAP_NET_BIND_SERVICE" | sudo SYSTEMD_EDITOR=tee systemctl edit pomerium

Şimdi hizmeti başlatın ve etkinleştirin:

sudo systemctl enable --now pomerium

Hizmetin durumunu kontrol edin:

$ systemctl status pomerium.service
● pomerium.service - Pomerium
     Loaded: loaded (/lib/systemd/system/pomerium.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-12-01 09:19:50 EAT; 3s ago
   Main PID: 5382 (pomerium)
      Tasks: 15 (limit: 4575)
     Memory: 98.8M
     CGroup: /system.slice/pomerium.service
             ├─5382 /usr/sbin/pomerium -config /etc/pomerium/config.yaml
             └─5391 /tmp/pomerium-envoy3127998534/envoy -c envoy-config.yaml --log-level info --log-format [LOG_FORMAT]%l--%n--%v --log-format-escaped --use-dynamic-base-id --base-id-path /tmp/pomerium-envoy-base-id

Etkinleştirilmiş bir güvenlik duvarınız varsa bağlantı noktasının buradan geçmesine izin verin:

## UFW için
sudo ufw allow 443

##Güvenlik Duvarı için
sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --reload

#3. Pomerium İstemcisini Kurma ve Yapılandırma

Rota oluşturulduktan sonra pomerium-cli’yi kullanarak servise bağlanabilirsiniz. CLI, yukarıda eklenen depodan veya GitHub yayın sayfasındaki ikili dosyalar kullanılarak kurulabilir.

En son sürümü dışa aktararak istediğiniz sürümü çekin:

VER=v0.22.0

Şimdi ikili dosyayı çekin:

##AMD64 için
wget https://github.com/pomerium/cli/releases/download/$VER/pomerium-cli-linux-amd64.tar.gz

##Arm64 için
wget https://github.com/pomerium/cli/releases/download/$VER/pomerium-cli-linux-arm64.tar.gz

##Armv6 için
wget https://github.com/pomerium/cli/releases/download/$VER/pomerium-cli-linux-armv6.tar.gz

İndirdikten sonra arşivi çıkarın:

tar -xvf pomerium-cli-linux-*.tar.gz

İkili dosyaları PATH’inize taşıyın:

sudo mv pomerium-cli /usr/local/bin

Kurulumunuzu doğrulayın:

$ pomerium-cli
Usage:
  pomerium-cli [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  k8s         commands for the kubernetes credential plugin
  tcp         creates a TCP tunnel through Pomerium
  version     version

Flags:
  -h, --help      help for pomerium-cli
  -v, --version   version for pomerium-cli

Use "pomerium-cli [command] --help" for more information about a command.

TPC komutlarının nasıl kullanılacağını öğrenmek için şunu çalıştırın:

$ pomerium-cli tcp --help
creates a TCP tunnel through Pomerium

Usage:
  pomerium-cli tcp destination [flags]

Flags:
      --alternate-ca-path string      path to CA certificate to use for HTTP requests
      --browser-cmd string            custom browser command to run when opening a URL
      --ca-cert string                base64-encoded CA TLS certificate to use for HTTP requests
      --client-cert string            (optional) PEM-encoded client certificate
      --client-key string             (optional) PEM-encoded client certificate
      --disable-tls-verification      disables TLS verification
  -h, --help                          help for tcp
      --listen string                 local address to start a listener on (default "127.0.0.1:0")
      --pomerium-url string           the URL of the pomerium server to connect to
      --service-account string        the service account JWT to use for authentication
      --service-account-file string   a file containing the service account JWT to use for authentication

Yapılacak bir sonraki şey, istemcinin Pomerium sunucu etki alanına çözümlenmesini sağlamaktır. /etc/hosts dosyasını gösterildiği gibi değiştirin:

$ sudo vim /etc/hosts
192.168.200.51 authenticate.localhost.pomerium.io redis.localhost.pomerium.io ssh.localhost.pomerium.io

Şimdi hizmetinize bir TCP tüneli kurmak için aşağıdaki sözdizimine sahip komutu kullanın:

pomerium-cli tcp [hostname]:[port]

Örneğin oluşturulan SSH rotası için bağlantıyı şu komutlarla kuracağız:

  • Güvenilir SSL sertifikalarıyla:
pomerium-cli tcp ssh.localhost.pomerium.io:22 --listen localhost:2222 &
  • Güvenilir SSL sertifikaları ve özel bağlantı noktasıyla:

Hizmet arka planda da başlatılabilir ve çalıştırılabilir. 443 dışında başka bir bağlantı noktası kullanırsanız aşağıdaki komutu alırsınız:

pomerium-cli tcp tcp+https://ssh.localhost:pomerium.io:8443/ssh.localhost.pomerium.io:2222 --listen localhost:2222 &
  • Kendinden imzalı sertifikalarla:

Bu kılavuz için –disable-tls-verificationflag’i kullanacağız çünkü kendinden imzalı sertifikalar kullanıyoruz:

$ pomerium-cli tcp ssh.localhost.pomerium.io:22 --listen localhost:2222 --disable-tls-verification &
2022/12/01 09:54:12 listening on 127.0.0.1:2222

Redis için komut şöyle olacaktır:

pomerium-cli tcp redis.localhost.pomerium.io:6379 --listen 0.0.0.0:6379 --disable-tls-verification &

#4. İstemcideki Hizmetinize Bağlanma

Şimdi Pomerium tünelini kullanarak servise bağlantı kurun.

SSH için komutu sözdizimiyle birlikte kullanın:

ssh username@localhost -p 2222

Where “username” is the user available on the Pomerium server or where the tunnel has been directed.

Her şey yolundaysa, varsayılan web tarayıcınız başlatılacaktır.

Bu sertifika uyarısını göreceksiniz, dikkate almayın ve gelişmiş seçeneğe tıklayarak ilerleyin. Yapılacak bir sonraki şey, hizmetin kimliğini doğrulamaktır. Örneğin, Tanımlayıcı Sağlayıcı olarak Github’la şuna sahip olacaksınız:

Uygulamayı yetkilendirin:

Yönlendirme gerçekleşecek ve gösterildiği gibi kimliğinizin doğrulanması gerekir:

Terminale döndüğünüzde bağlantınız şimdi gerçekleşmelidir.

Redis için de benzer adımlar yapılabilir. Bağlantı kurmak için redis-cli aracına sahip olduğunuzdan emin olun ve şu komutu çalıştırın:

redis-cli

Örnek Çıktı:

Burada TCP rotalarının nasıl oluşturulacağı ve örneklerin nasıl görüntüleneceği hakkında daha fazla bilgi edinin.

Ayrıca https://domain_name URL’sini kullanarak Pomerium kontrol paneline giriş yapabilirsiniz.

Yazının orijinalini buradan okuyabilirsiniz.