Takip et

Ubuntu 14.04 Üzerinde Docker Konteynerinde OpenVPN Çalıştırma Rehberi

Ubuntu 14.04 Üzerinde Docker Konteynerinde OpenVPN Çalıştırma Rehberi Giriş: OpenVPN, Docker ve Ubuntu 14.04 Günümüzün dijital dünyasında

Ubuntu 14.04 Üzerinde Docker Konteynerinde OpenVPN Çalıştırma Rehberi

Giriş: OpenVPN, Docker ve Ubuntu 14.04

Günümüzün dijital dünyasında, güvenli iletişim ve ağ erişimi her zamankinden daha kritik hale gelmiştir. Sanal Özel Ağlar (VPN’ler), internet üzerinden güvenli ve şifreli bağlantılar kurarak bu ihtiyacı karşılar. OpenVPN, açık kaynaklı, esnek ve oldukça güvenli bir VPN çözümüdür. Diğer yandan, Docker, uygulamaları konteynerler içinde izole bir şekilde çalıştırmayı sağlayan bir platformdur. Bu, uygulamaların farklı ortamlarda tutarlı bir şekilde çalışmasını garanti eder ve dağıtım ile yönetimi kolaylaştırır.

Bu makalede, Ubuntu 14.04 işletim sistemi üzerinde Docker kullanarak bir OpenVPN sunucusunu nasıl kuracağınızı ve yöneteceğinizi adım adım açıklayacağız. Ubuntu 14.04 eski bir sürüm olsa da, belirli senaryolarda (örneğin, eski bir sunucuyu yeniden kullanma veya belirli bir uyumluluk gereksinimini karşılama) bu sürüm üzerinde OpenVPN’i çalıştırma ihtiyacı doğabilir. Docker’ın esnekliği sayesinde, eski bir işletim sistemi üzerinde bile modern ve güncel bir OpenVPN kurulumu gerçekleştirebiliriz.

Bu rehber, OpenVPN’in kurulumunu basitleştirmek, bağımlılık sorunlarını minimize etmek ve sunucunun taşınabilirliğini artırmak için Docker’ın avantajlarından faydalanacaktır. Konteynerleştirilmiş bir OpenVPN sunucusu, ana sistemden izole çalışır, bu da güvenlik ve yönetim açısından önemli faydalar sağlar.

Ön Koşullar

Bu rehbere başlamadan önce aşağıdaki ön koşulların yerine getirildiğinden emin olun:

* Ubuntu 14.04 Sunucusu: Kurulumu yapılmış ve çalışan bir Ubuntu 14.04 (Trusty Tahr) sunucusu.
* Sudo Yetkileri: Sunucuda sudo komutunu kullanabilecek bir kullanıcı hesabına sahip olmak.
* İnternet Bağlantısı: Sunucunun internete erişimi olması gerekmektedir.
* Temel Linux Bilgisi: Komut satırı kullanımı ve temel Linux komutlarına aşinalık.
* Ağ Bilgisi: Temel ağ kavramları (IP adresleri, portlar, güvenlik duvarları) hakkında bilgi sahibi olmak faydalıdır.

Adım 1: Ubuntu 14.04 Sistemini Güncelleme ve Gerekli Paketleri Kurma

İlk olarak, sisteminizin güncel olduğundan ve Docker kurulumu için gerekli temel paketlere sahip olduğundan emin olalım. Ubuntu 14.04 eski bir sürüm olduğundan, bazı depoların artık aktif olmayabileceğini unutmayın.

sudo apt-get update
sudo apt-get upgrade -y

Bu komutlar, paket listelerinizi günceller ve mevcut paketlerinizi en son sürümlerine yükseltir. Ardından, Docker’ın bağımlılıkları için gerekli olabilecek paketleri kuralım:

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

* apt-transport-https: APT’nin HTTPS üzerinden depoları kullanmasını sağlar.
* ca-certificates: SSL/TLS sertifikalarını doğrulamak için gereklidir.
* curl: Web sayfalarını ve dosyaları indirmek için kullanılır.
* software-properties-common: Depo eklemek için add-apt-repository komutunu sağlar.

Adım 2: Ubuntu 14.04 Üzerine Docker Kurulumu

Ubuntu 14.04 için Docker’ın en güncel sürümünü yüklemek yerine, o döneme uygun olan ve hala çalışabilen bir sürümü kurmamız gerekecek. Docker’ın resmi deposunu ekleyerek bu işlemi gerçekleştirebiliriz.

1. Docker GPG Anahtarını Ekleme:
Docker’ın resmi deposundan paketleri indirmek için GPG anahtarını sisteminize eklemeniz gerekir.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Bu komut, Docker’ın resmi GPG anahtarını indirir ve sisteminize ekler. OK çıktısını görmelisiniz.

2. Docker Deposunu Ekleme:
Şimdi, Docker’ın Ubuntu 14.04 (trusty) için deposunu sisteminize ekleyelim.

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable"

Bu komut, Docker’ın stable (kararlı) sürümünü içeren depoyu /etc/apt/sources.list.d/ altına ekler.

3. Paket Listesini Güncelleme ve Docker Kurulumu:
Yeni depoyu ekledikten sonra paket listesini tekrar güncellemeli ve Docker CE’yi (Community Edition) kurmalıyız.

sudo apt-get update
    sudo apt-get install -y docker-ce

Bu komut docker-ce paketini kuracaktır. Kurulum sırasında bağımlılıklar da otomatik olarak yüklenecektir.

4. Docker Kurulumunu Doğrulama:
Docker’ın doğru bir şekilde kurulup kurulmadığını kontrol etmek için aşağıdaki komutu çalıştırın:

sudo systemctl status docker # veya sudo service docker status
    sudo docker run hello-world

hello-world konteynerinin başarıyla çalışıp bir mesaj göstermesi, Docker’ın düzgün çalıştığını gösterir.
Eğer systemctl komutu bulunamazsa, Ubuntu 14.04 upstart kullanıyor olabilir. Bu durumda sudo service docker status komutunu kullanın.

5. Kullanıcıyı docker Grubuna Ekleme (Opsiyonel ama Önerilir):
sudo kullanmadan Docker komutlarını çalıştırmak için kullanıcınızı docker grubuna ekleyebilirsiniz.

sudo usermod -aG docker $USER

Bu değişikliklerin etkili olması için oturumu kapatıp tekrar açmanız veya sistemi yeniden başlatmanız gerekebilir: newgrp docker.

Adım 3: OpenVPN Konteyneri İçin Uygun Bir Docker İmajı Seçimi

OpenVPN sunucusu kurmak için birçok Docker imajı bulunmaktadır. Bu rehberde, popüler ve iyi bakımı yapılan kylemanna/openvpn imajını kullanacağız. Bu imaj, OpenVPN sunucusunu hızlı ve kolay bir şekilde kurmak için gerekli tüm araçları (Easy-RSA gibi) içerir.

Adım 4: OpenVPN Sunucusunu Yapılandırma ve Başlatma

OpenVPN sunucusunu Docker üzerinde çalıştırmak, kalıcı veri depolaması için bir Docker volume (hacim) oluşturmayı ve ardından sunucuyu başlatmak için gerekli komutları çalıştırmayı içerir.

4.1. Veri Hacmi Oluşturma

OpenVPN sunucu yapılandırması, sertifikalar ve anahtarlar gibi önemli veriler konteyner silindiğinde kaybolmamalıdır. Bu nedenle, kalıcı bir veri hacmi (volume) oluşturacağız.

docker volume create ovpn-data

Bu komut ovpn-data adında bir Docker hacmi oluşturur. Bu hacim, OpenVPN konteynerinin içindeki /etc/openvpn dizinine bağlanacaktır.

4.2. OpenVPN Sunucu Yapılandırmasını Oluşturma

kylemanna/openvpn imajı, sunucu yapılandırmasını ve PKI’yı (Public Key Infrastructure) başlatmak için kullanışlı komutlar sunar. İlk olarak, sunucu yapılandırma dosyasını (server.conf) oluşturacağız. Bu işlem sırasında sunucunuzun harici IP adresini veya alan adını belirtmeniz gerekecektir.

docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://

* -v ovpn-data:/etc/openvpn: ovpn-data hacmini konteyner içindeki /etc/openvpn dizinine bağlar.
* --log-driver=none: Bu komutun günlüklerini kaydetmez (geçici bir işlem olduğu için).
* --rm: Komut tamamlandığında konteyneri otomatik olarak siler.
* kylemanna/openvpn: Kullanılacak Docker imajı.
* ovpn_genconfig -u udp://: OpenVPN yapılandırma dosyasını oluşturur. yerine sunucunuzun herkese açık IP adresini veya bir alan adını yazın (örneğin, vpn.example.com). udp protokolünü kullanıyoruz, bu varsayılan ve genellikle daha hızlıdır.

Eğer VPN istemcilerinin internete erişmesini istiyorsanız, VPN ağına bir DNS sunucusu atamanız gerekir. Bunu ovpn_genconfig komutuna ekleyebilirsiniz:

docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp:// -e "push \"dhcp-option DNS 8.8.8.8\"" -e "push \"dhcp-option DNS 8.8.4.4\""

Bu komut, Google’ın DNS sunucularını (8.8.8.8 ve 8.8.4.4) VPN istemcilerine iletecektir.

4.3. PKI’yı Başlatma

OpenVPN, güvenliği sağlamak için PKI kullanır. Bu adımda, bir Sertifika Yetkilisi (CA), sunucu anahtarı ve Diffie-Hellman parametreleri oluşturacağız. Bu işlem biraz zaman alabilir.

docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki

Bu komutu çalıştırdığınızda, CA için bir parola belirlemeniz istenecektir. Güçlü bir parola seçin ve unutmayın. Ayrıca, “Common Name” (Ortak Ad) sorulduğunda, varsayılan değeri (genellikle ) onaylamak için Enter tuşuna basabilirsiniz.

4.4. OpenVPN Sunucusunu Başlatma

Artık yapılandırma ve PKI hazır olduğuna göre, OpenVPN sunucusunu bir Docker konteyneri olarak başlatabiliriz.

docker run -d \
    --name openvpn-server \
    --restart=always \
    --cap-add=NET_ADMIN \
    -p 1194:1194/udp \
    -v ovpn-data:/etc/openvpn \
    kylemanna/openvpn

Bu komutun açıklaması:

* -d: Konteyneri arka planda (detached mode) çalıştırır.
* --name openvpn-server: Konteynere openvpn-server adını verir. Bu adı daha sonra konteyneri yönetmek için kullanabilirsiniz.
* --restart=always: Konteynerin her zaman otomatik olarak yeniden başlatılmasını sağlar (sistem yeniden başlatıldığında veya konteyner çöktüğünde).
* --cap-add=NET_ADMIN: Konteynerin ağ arayüzlerini değiştirmesine ve yönlendirme tablolarını ayarlamasına izin veren NET_ADMIN yeteneğini ekler. OpenVPN için bu gereklidir.
* -p 1194:1194/udp: Ana sistemin 1194/UDP portunu konteynerin 1194/UDP portuna yönlendirir. OpenVPN varsayılan olarak bu portu kullanır.
* -v ovpn-data:/etc/openvpn: ovpn-data hacmini konteynerin /etc/openvpn dizinine bağlar.
* kylemanna/openvpn: Kullanılacak Docker imajı.

Konteynerin çalıştığını doğrulamak için:

docker ps

openvpn-server adlı bir konteynerin çalıştığını görmelisiniz.

Adım 5: Ağ Yönlendirmeyi Etkinleştirme ve Güvenlik Duvarı Kuralları

OpenVPN istemcilerinin sunucu üzerinden internete erişebilmesi için, sunucunuzda IP yönlendirmeyi etkinleştirmeniz ve uygun güvenlik duvarı (NAT) kurallarını ayarlamanız gerekir.

5.1. IP Yönlendirmeyi Etkinleştirme

Sunucunun IP paketlerini bir ağ arayüzünden diğerine yönlendirmesi için IP yönlendirmeyi etkinleştirmemiz gerekir.

sudo sysctl -w net.ipv4.ip_forward=1

Bu komut, IP yönlendirmeyi hemen etkinleştirir. Ancak, sistem yeniden başlatıldığında bu ayar kaybolacaktır. Kalıcı hale getirmek için /etc/sysctl.conf dosyasını düzenlemelisiniz:

sudo nano /etc/sysctl.conf

Dosyanın içinde aşağıdaki satırı bulun veya ekleyin:

net.ipv4.ip_forward = 1

Değişiklikleri kaydedin ve dosyayı kapatın (Ctrl+O, Enter, Ctrl+X). Değişikliklerin etkili olması için:

sudo sysctl -p

5.2. Güvenlik Duvarı (NAT) Kurallarını Ayarlama

OpenVPN istemcileri sunucuya bağlandığında, sunucu bu istemcilerin internete erişimi için bir NAT (Network Address Translation) görevi görmelidir. Bu, iptables kuralları ile yapılır.

Öncelikle, sunucunuzun ana ağ arayüzünün adını bulmanız gerekir (örneğin, eth0, enp0s3).

ip route show default

Çıktıda dev kısmını arayın. Örneğin, default via 192.168.1.1 dev eth0 ise arayüz adınız eth0‘dır.

Şimdi, NAT kuralını ekleyelim. yerine kendi arayüz adınızı yazın.

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o  -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o  -j ACCEPT
sudo iptables -A FORWARD -i  -o tun0 -j ACCEPT

* 10.8.0.0/24: Bu, OpenVPN sunucusunun istemcilere atadığı varsayılan IP aralığıdır. Eğer ovpn_genconfig sırasında farklı bir aralık belirttiyseniz, onu kullanın.
* tun0: OpenVPN’in oluşturduğu sanal ağ arayüzüdür.

Güvenlik Duvarı Kurallarını Kalıcı Hale Getirme:
iptables kuralları, sistem yeniden başlatıldığında kaybolur. Bunları kalıcı hale getirmek için iptables-persistent paketini kullanabiliriz.

sudo apt-get install -y iptables-persistent

Kurulum sırasında mevcut iptables kurallarını kaydetmek isteyip istemediğiniz sorulacaktır. Evet’i seçin. Eğer daha sonra kuralları manuel olarak kaydetmeniz gerekirse:

sudo netfilter-persistent save

Adım 6: İstemci Yapılandırma Dosyalarını Oluşturma

VPN istemcilerinin sunucuya bağlanabilmesi için .ovpn uzantılı bir yapılandırma dosyasına ihtiyaçları vardır. Bu dosyalar, istemcinin kimlik doğrulama için kullanacağı sertifikaları ve anahtarları içerir.

6.1. İstemci Sertifikası ve Anahtarı Oluşturma

Her istemci için benzersiz bir sertifika ve anahtar çifti oluşturmalısınız. <İSTEMCİ_ADI> yerine istemciniz için açıklayıcı bir ad kullanın (örneğin, laptop_user, mobile_phone).

docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full <İSTEMCİ_ADI> nopass

* nopass: İstemci anahtarı için parola istemez. Eğer parola korumalı bir anahtar istiyorsanız, nopass kısmını çıkarın.

Bu komutu çalıştırdığınızda, daha önce belirlediğiniz CA parolasını girmeniz istenecektir.

6.2. İstemci Yapılandırma Dosyasını Dışarı Aktarma

Oluşturulan istemci sertifikaları ve anahtarları, ovpn-data hacminin içindedir. Bu verileri içeren .ovpn dosyasını sunucunuzun dosya sistemine aktarmamız gerekiyor.

docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient <İSTEMCİ_ADI> > <İSTEMCİ_ADI>.ovpn

Bu komut, ovpn-data içindeki gerekli tüm bilgileri toplar ve <İSTEMCİ_ADI>.ovpn adında tek bir yapılandırma dosyası oluşturur. Bu dosya, komutu çalıştırdığınız dizine kaydedilecektir.

6.3. İstemci Dosyasını Dağıtma

Oluşturduğunuz .ovpn dosyasını, VPN’e bağlanmak isteyen istemci cihazına güvenli bir şekilde aktarın (örneğin, SCP, SFTP veya USB bellek aracılığıyla). Bu dosyayı e-posta ile göndermek güvenli değildir.

İstemci tarafında, OpenVPN yazılımını kurmanız (Windows, macOS, Linux için) veya mobil uygulamayı (Android, iOS için) kullanmanız gerekecektir. .ovpn dosyasını OpenVPN istemcisine aktarın ve bağlantıyı kurun.

Adım 7: Gelişmiş Yapılandırmalar ve Yönetim

7.1. Sertifika İptali

Bir istemcinin erişimini iptal etmeniz gerektiğinde (örneğin, cihaz çalındıysa veya kullanıcı artık erişime ihtiyaç duymuyorsa), istemcinin sertifikasını iptal edebilirsiniz.

docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa revoke <İSTEMCİ_ADI>

CA parolasını girmeniz istenecektir. Ardından, iptal listesini (CRL) güncellemeli ve OpenVPN sunucusunu yeniden başlatmalısınız:

docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -E
docker restart openvpn-server

7.2. Özel OpenVPN Direktifleri Ekleme

OpenVPN sunucu yapılandırmasına ek direktifler eklemek isterseniz, ovpn_genconfig komutunu kullanarak bunu yapabilirsiniz. Örneğin, TCP protokolünü kullanmak veya farklı bir port belirtmek için:

docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u tcp://:443 -e "push \"dhcp-option DNS 8.8.8.8\""

Bu durumda, sunucu başlatma komutundaki port yönlendirmesini de değiştirmeniz gerekir: -p 443:443/tcp.

7.3. Sunucu Günlüklerini Kontrol Etme

OpenVPN sunucusunun düzgün çalışıp çalışmadığını veya bağlantı sorunlarını gidermek için konteynerin günlüklerini kontrol edebilirsiniz:

docker logs openvpn-server

Daha fazla ayrıntı için -f (follow) veya --tail seçeneklerini kullanabilirsiniz.

Adım 8: Sorun Giderme

OpenVPN kurulumu sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:

* Bağlantı Kurulamıyor:
* Güvenlik Duvarı: Sunucunuzdaki güvenlik duvarının (UFW veya iptables) 1194/UDP (veya belirlediğiniz başka bir port/protokol) portuna gelen bağlantılara izin verdiğinden emin olun.
* IP Yönlendirme: net.ipv4.ip_forward ayarının 1 olduğundan emin olun (sudo sysctl net.ipv4.ip_forward).
* NAT Kuralları: iptables NAT kurallarının doğru olduğundan ve ana ağ arayüzünüzü içerdiğinden emin olun.
* Sunucu IP’si/Alan Adı: İstemci .ovpn dosyasındaki sunucu IP adresinin veya alan adının doğru ve erişilebilir olduğundan emin olun.
* Konteyner Çalışıyor mu? docker ps komutu ile openvpn-server konteynerinin çalıştığını doğrulayın.
* Konteyner Günlükleri: docker logs openvpn-server komutu ile herhangi bir hata olup olmadığını kontrol edin.

* İstemciler İnternete Erişemiyor:
* NAT Kuralları: iptables NAT kurallarının doğru bir şekilde ayarlandığından ve kaydedildiğinden emin olun. Özellikle MASQUERADE kuralı kritiktir.
* IP Yönlendirme: Sunucuda IP yönlendirme etkin mi?
* DNS Ayarları: ovpn_genconfig komutunda DNS sunucularını doğru bir şekilde push ettiğinizden emin olun.

* Sertifika Hataları:
* Tarih ve Saat: Sunucu ve istemci cihazlarının tarih ve saatlerinin doğru olduğundan emin olun. Sertifika geçerliliği için bu önemlidir.
* CA Parolası: PKI oluştururken kullanılan CA parolasını doğru girdiğinizden emin olun.

* “Permission denied” Hataları:
* docker komutlarını çalıştırırken sudo kullandığınızdan veya kullanıcınızın docker grubuna ekli olduğundan emin olun.

Adım 9: Güvenlik Hususları

OpenVPN sunucunuzu çalıştırırken aşağıdaki güvenlik hususlarını göz önünde bulundurun:

* Güçlü CA Parolası: PKI’yı başlatırken belirlediğiniz CA parolasının güçlü ve benzersiz olduğundan emin olun. Bu parola, yeni sertifikalar oluşturmak veya mevcut sertifikaları iptal etmek için gereklidir.
* İstemci Sertifikalarının Güvenliği: Oluşturduğunuz .ovpn dosyalarını güvenli bir şekilde saklayın ve dağıtın. Bu dosyalar, VPN’e erişim için anahtarlardır.
* Gereksiz Portları Kapatma: Sunucunuzda OpenVPN için gerekli olan portlar dışındaki tüm gereksiz portları güvenlik duvarı ile kapatın.
* Yazılım Güncellemeleri: Ubuntu 14.04 eski bir sürüm olsa da, sisteminizdeki ve Docker’daki paketleri düzenli olarak güncel tutmaya çalışın (mümkün olduğunca). Docker imajlarını da düzenli olarak güncelleyerek bilinen güvenlik açıklarından korunabilirsiniz. kylemanna/openvpn imajının güncel tutulduğundan emin olun.
* Erişim Kontrolü: Sadece yetkili kullanıcıların VPN sunucusuna erişebilmesi için sertifika bazlı kimlik doğrulamayı kullanın.
* Günlükleri İzleme: Sunucunuzun ve OpenVPN konteynerinin günlüklerini düzenli olarak kontrol ederek anormal etkinlikleri veya güvenlik ihlallerini tespit edin.
* Ubuntu 14.04’ün Eskiliği: Ubuntu 14.04’ün resmi desteğinin sona erdiğini unutmayın. Bu, güvenlik güncellemelerinin artık sağlanmadığı anlamına gelir. Mümkünse, daha yeni ve desteklenen bir Ubuntu sürümüne yükseltmeyi düşünün. Bu rehber, belirli bir senaryo için 14.04 üzerinde kurulumu göstermekle birlikte, genel güvenlik için modern bir işletim sistemi tercih edilmelidir.

Sonuç

Bu kapsamlı rehberde, Ubuntu 14.04 işletim sistemi üzerinde Docker kullanarak güvenli bir OpenVPN sunucusunu nasıl kuracağınızı, yapılandıracağınızı ve yöneteceğinizi adım adım öğrendiniz. Docker’ın sağladığı izolasyon ve kolay yönetim sayesinde, eski bir işletim sistemi üzerinde bile modern ve işlevsel bir VPN çözümü elde ettik.

OpenVPN’i Docker konteynerinde çalıştırmanın temel faydaları arasında kolay dağıtım, bağımlılık sorunlarının azalması, tutarlı çalışma ortamı ve taşınabilirlik yer alır. Bu kurulum, ev ağınızı korumak, coğrafi kısıtlamaları aşmak veya uzak sunucularınıza güvenli bir şekilde erişmek için güçlü bir temel sağlar.

Unutulmamalıdır ki, Ubuntu 14.04’ün destek ömrünün sona ermesi nedeniyle, bu tür bir kurulumu üretim ortamlarında kullanırken güvenlik risklerini dikkatle değerlendirmek ve mümkün olan en kısa sürede daha güncel bir işletim sistemine geçmeyi planlamak önemlidir. Ancak, bu rehber, belirli ihtiyaçlar doğrultusunda eski sistemler üzerinde bile modern teknolojileri nasıl uygulayabileceğinize dair değerli bir bakış açısı sunmaktadır. Güvenli ve özel internet deneyimleriniz için artık sağlam bir OpenVPN altyapınız var.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.