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:
- Yapılandırılmış bir kimlik sağlayıcı
- TLS certificates
Ö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.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.