Takip et

OpenLDAP Yapılandırma ve Yönetimsel LDAP Görevlerini Gerçekleştirme Rehberi

OpenLDAP Yapılandırma ve Yönetimsel LDAP Görevlerini Gerçekleştirme Rehberi Günümüzün karmaşık ağ ortamlarında, kullanıcı kimlik bilgilerini, grupları ve diğer ağ kaynaklarını merkezi bir konumda yönetmek, güvenlik ve verimlilik açısından kritik öneme sahiptir.

OpenLDAP Yapılandırma ve Yönetimsel LDAP Görevlerini Gerçekleştirme Rehberi

Günümüzün karmaşık ağ ortamlarında, kullanıcı kimlik bilgilerini, grupları ve diğer ağ kaynaklarını merkezi bir konumda yönetmek, güvenlik ve verimlilik açısından kritik öneme sahiptir. Lightweight Directory Access Protocol (LDAP), bu ihtiyacı karşılamak üzere tasarlanmış, dağıtılmış dizin hizmetlerine erişim için standart bir protokoldür. OpenLDAP ise, bu protokolün açık kaynaklı ve yaygın olarak kullanılan bir uygulamasıdır. Bu makale, OpenLDAP sunucusunu nasıl yapılandıracağınızı ve günlük yönetimsel LDAP görevlerini nasıl gerçekleştireceğinizi adım adım açıklayacaktır. Amacımız, OpenLDAP’ın temel prensiplerinden başlayarak, kurulumdan gelişmiş yapılandırma ve yönetimsel komutlara kadar geniş bir yelpazede bilgi sunmaktır.

LDAP ve OpenLDAP’a Giriş

LDAP, X.500 standartlarına dayanan, ancak daha hafif (lightweight) bir protokol olarak ortaya çıkmıştır. Temel olarak, dizin hizmetlerine erişim, arama ve değişiklik yapma yeteneği sağlar. Bu dizin hizmetleri, hiyerarşik bir yapıda düzenlenmiş verileri depolar; genellikle kullanıcı hesapları, şifreler, e-posta adresleri, telefon numaraları, grup üyelikleri ve ağ kaynakları gibi bilgiler içerir. LDAP’ın en büyük avantajlarından biri, farklı uygulamaların ve sistemlerin aynı merkezi kimlik doğrulama ve yetkilendirme altyapısını kullanabilmesidir.

OpenLDAP, Linux ve Unix benzeri sistemlerde en popüler LDAP sunucu uygulamalarından biridir. Yüksek performans, ölçeklenebilirlik ve esneklik sunar. Birçok kurumsal ortamda, kullanıcı yönetimi, e-posta sunucusu entegrasyonu, VPN kimlik doğrulaması ve diğer ağ hizmetleri için merkezi bir kimlik deposu olarak kullanılır. OpenLDAP, slapd (stand-alone LDAP daemon) adlı bir sunucu programı ve dizin üzerinde işlem yapmak için kullanılan bir dizi istemci aracı (ldapadd, ldapmodify, ldapdelete, ldapsearch, ldappasswd vb.) içerir.

OpenLDAP Kurulumu

OpenLDAP kurulumu, kullanılan Linux dağıtımına göre değişiklik gösterebilir. Aşağıda Debian/Ubuntu ve CentOS/RHEL tabanlı sistemler için genel adımlar verilmiştir.

Debian/Ubuntu Üzerinde Kurulum

Öncelikle sistem paket listesini güncelleyin ve gerekli paketleri kurun:

sudo apt update
sudo apt install slapd ldap-utils

Kurulum sırasında slapd paketi sizden yönetici (admin) parolası belirlemenizi isteyecektir. Bu parola, LDAP dizinindeki kök kullanıcı (cn=admin,dc=example,dc=com gibi) için kullanılacaktır. Parolanızı güvenli bir yere not edin.

Kurulum tamamlandıktan sonra, slapd servisinin durumunu kontrol edebilirsiniz:

sudo systemctl status slapd

CentOS/RHEL Üzerinde Kurulum

CentOS/RHEL sistemlerinde epel-release deposunu etkinleştirmeniz gerekebilir. Ardından paketleri kurun:

sudo yum install openldap openldap-servers openldap-clients

Veya daha yeni sürümler için:

sudo dnf install openldap openldap-servers openldap-clients

Kurulumdan sonra slapd servisini başlatın ve sistem başlangıcında otomatik başlaması için etkinleştirin:

sudo systemctl start slapd
sudo systemctl enable slapd
sudo systemctl status slapd

CentOS/RHEL’de ilk yapılandırma biraz daha farklıdır. Genellikle slaptest ve slapadd gibi araçlarla başlangıç yapılandırması yapılır. Ancak modern OpenLDAP sürümleri genellikle OLC (Online Configuration) modunu kullanır, bu da yapılandırmanın doğrudan LDAP protokolü üzerinden yapılmasını sağlar.

OpenLDAP Temel Yapılandırması (OLC – cn=config)

Modern OpenLDAP sürümlerinde, yapılandırma dosyaları (slapd.conf) yerine OLC (Online Configuration) sistemi kullanılır. Bu sistem, yapılandırmayı LDAP dizininin kendisinde depolar (cn=config). Bu, sunucu çalışırken yapılandırma değişiklikleri yapılmasına olanak tanır ve yeniden başlatma gerektirmez.

OLC Yapılandırma Dizini

OpenLDAP, yapılandırma verilerini /etc/ldap/slapd.d (Debian/Ubuntu) veya /etc/openldap/slapd.d (CentOS/RHEL) dizininde depolar. Bu dizin içeriği doğrudan düzenlenmemelidir; bunun yerine ldapmodify gibi araçlar kullanılmalıdır.

Kök DSE (Dizin Bilgi Ağacı) Yapılandırması

İlk adım, dizininizin kökünü (suffix) ve yönetici kullanıcıyı (rootdn) tanımlamaktır. Varsayılan olarak, Debian/Ubuntu kurulumu temel bir yapılandırma yapar. Bunu kendi etki alanınıza göre değiştirmelisiniz.

1. Varsayılan Yapılandırmayı Anlama:
Debian/Ubuntu’da slapd kurulumu sırasında, dizininiz için bir varsayılan suffix (örneğin dc=example,dc=com) ve yönetici kullanıcı (cn=admin,dc=example,dc=com) ayarlanır. Bu bilgileri /etc/ldap/ldap.conf dosyasında görebilirsiniz.

2. Kendi Etki Alanınıza Göre Yapılandırma:
Eğer varsayılan etki alanı (örneğin dc=example,dc=com) size uymuyorsa, bunu değiştirmeniz gerekir. Bu işlem biraz karmaşık olabilir, çünkü OLC dizinindeki mevcut girdileri değiştirmeniz gerekecektir.

Öncelikle, OLC dizinindeki mevcut suffix’i ve rootdn’i değiştirmek için bir LDIF dosyası oluşturmanız gerekir.
Örnek olarak, dc=example,dc=com yerine dc=mycompany,dc=com kullanmak istediğinizi varsayalım.

Bir chdomain.ldif dosyası oluşturun:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mycompany,dc=com

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=mycompany,dc=com

Bu dosyayı uygulamak için:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif

EXTERNAL kimlik doğrulama yöntemi, slapd‘nin yerel Unix soketi üzerinden erişildiğinde geçerlidir ve genellikle root yetkisi gerektirir.

3. Yönetici Parolasını Ayarlama/Değiştirme:
Yönetici parolasını güvenli bir şekilde ayarlamak veya değiştirmek için slappasswd komutunu kullanın. Bu komut, bir parola için SSHA karması oluşturur.

slappasswd

Çıktı şöyle olacaktır: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Bu karmayı bir LDIF dosyası ile uygulayın. chrootpw.ldif adında bir dosya oluşturun:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Uygulamak için:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

Şema Yönetimi

LDAP dizinindeki her giriş (entry) bir veya daha fazla “objectClass”a sahiptir ve bu objectClass’lar, o girişin hangi niteliklere (attributes) sahip olabileceğini tanımlayan şemalar tarafından belirlenir. OpenLDAP, varsayılan olarak bazı temel şemaları (core, cosine, nis vb.) yükler. Ek şemalar (örneğin, Active Directory uyumluluğu için microsoft.schema veya daha spesifik uygulamalar için) yüklemeniz gerekebilir.

Şema dosyaları genellikle /etc/ldap/schema veya /etc/openldap/schema dizininde bulunur. Bir şemayı OLC’ye yüklemek için, şema dosyasını LDIF formatına dönüştürmeniz ve ardından ldapadd ile eklemeniz gerekir.

Örnek olarak, cosine.ldif şemasını yüklemek:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif

Diğer şemalar için de aynı adımı tekrarlayın. Genellikle core.ldif, cosine.ldif, nis.ldif, inetorgperson.ldif gibi şemalar temel kurulum için yeterlidir.

Erişim Kontrol Listeleri (ACL’ler)

ACL’ler, LDAP dizinindeki verilere kimlerin erişebileceğini ve hangi işlemleri (okuma, yazma, ekleme, silme) yapabileceğini tanımlar. Bu, güvenlik için kritik bir adımdır. ACL’ler olcAccess niteliği ile yapılandırılır.

Varsayılan olarak, yönetici kullanıcı dışındaki kullanıcıların dizini okuması veya yazması kısıtlı olabilir. Basit bir ACL kuralı örneği:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by dn="cn=admin,dc=mycompany,dc=com" write by * none
olcAccess: {1}to  by dn="cn=admin,dc=mycompany,dc=com" write by  read

Bu ACL kuralları:
* {0}to attrs=userPassword: userPassword niteliğine erişimi kontrol eder.
* by self write: Kullanıcı kendi parolasını değiştirebilir.
* by anonymous auth: Anonim kullanıcılar kimlik doğrulaması yapabilir (parola ile).
* by dn="cn=admin,dc=mycompany,dc=com" write: Yönetici parolaları yazabilir.
by none: Diğer herkesin parola niteliğine erişimi yoktur.
{1}to : Diğer tüm niteliklere erişimi kontrol eder.
* by dn="cn=admin,dc=mycompany,dc=com" write: Yönetici tüm nitelikleri yazabilir.
by read: Diğer tüm kimlik doğrulanmış kullanıcılar tüm nitelikleri okuyabilir.

Bu LDIF dosyasını (örneğin acl.ldif) kaydedin ve uygulayın:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f acl.ldif

Yönetimsel LDAP Görevleri

OpenLDAP ile çalışırken kullanacağınız temel istemci araçları ldapadd, ldapmodify, ldapdelete, ldapsearch ve ldappasswd‘dir. Bu araçlar, dizin üzerinde CRUD (Create, Read, Update, Delete) işlemleri yapmanızı sağlar.

Genel istemci komut yapısı:
ldaptool -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -f file.ldif

* -x: Basit kimlik doğrulama kullan (parola istemi için).
* -D: Dizin yöneticisi DN’si.
* -W: Parola istemi.
* -H: LDAP sunucusunun adresi ve portu. ldaps:// SSL/TLS için veya ldapi:/// yerel soket için.
* -f: İşlem yapılacak LDIF dosyasının yolu.

1. Kuruluş Birimi (Organizational Unit – OU) Ekleme

LDAP dizini hiyerarşik bir yapıya sahiptir. Kullanıcıları ve grupları düzenlemek için kuruluş birimleri (OU’lar) oluşturmak iyi bir uygulamadır.

ou_users.ldif dosyası oluşturalım:

dn: ou=users,dc=mycompany,dc=com
objectClass: organizationalUnit
ou: users
description: All users in mycompany

Bu OU’yu eklemek için:

ldapadd -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -f ou_users.ldif

Aynı şekilde ou=groups veya ou=services gibi başka OU’lar da ekleyebilirsiniz.

2. Kullanıcı Ekleme

Kullanıcıları genellikle inetOrgPerson objectClass’ı ile temsil ederiz. Bir kullanıcı eklemek için user.ldif adında bir dosya oluşturalım:

dn: uid=john.doe,ou=users,dc=mycompany,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: John Doe
sn: Doe
givenName: John
uid: john.doe
mail: john.doe@mycompany.com
userPassword: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 'slappasswd' ile oluşturulan karma parola

Parolayı slappasswd ile oluşturmayı unutmayın. Ardından kullanıcıyı ekleyin:

ldapadd -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -f user.ldif

3. Grup Ekleme

Gruplar, kullanıcıları bir araya getirerek yetkilendirme işlemlerini basitleştirir. groupOfNames veya groupOfUniqueNames objectClass’ları kullanılır.

group_admins.ldif dosyası oluşturalım:

dn: cn=admins,ou=groups,dc=mycompany,dc=com
objectClass: top
objectClass: groupOfNames
cn: admins
description: Administrators group
member: uid=john.doe,ou=users,dc=mycompany,dc=com

Grubu eklemek için:

ldapadd -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -f group_admins.ldif

Bir kullanıcıyı gruba eklemek için, grubun member niteliğini ldapmodify ile düzenleyebilirsiniz.

4. Kullanıcı Niteliklerini Değiştirme

Mevcut bir kullanıcının niteliklerini değiştirmek için ldapmodify kullanılır. Örneğin, John Doe’nun e-posta adresini değiştirelim.

modify_email.ldif dosyası:

dn: uid=john.doe,ou=users,dc=mycompany,dc=com
changetype: modify
replace: mail
mail: john.doe.new@mycompany.com

Değişikliği uygulamak için:

ldapmodify -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -f modify_email.ldif

5. Kullanıcı Parolasını Değiştirme

Bir kullanıcının parolasını değiştirmek için ldappasswd komutu kullanılır. Bu, kullanıcının kendi parolasını değiştirmesi için de uygundur (eğer ACL’ler izin veriyorsa).

ldappasswd -x -D "uid=john.doe,ou=users,dc=mycompany,dc=com" -W -H ldap://localhost:389 -A -S

* -A: Parola için etkileşimli olarak sor.
* -S: Yeni parola için etkileşimli olarak sor.

Yönetici olarak başka bir kullanıcının parolasını değiştirmek için:

ldappasswd -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -s "yeniparola" "uid=john.doe,ou=users,dc=mycompany,dc=com"

6. Dizin İçinde Arama Yapma

ldapsearch komutu, dizindeki bilgileri sorgulamak için kullanılır. Bu, en sık kullanacağınız yönetimsel araçlardan biridir.

Tüm kullanıcıları listelemek:

ldapsearch -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -b "dc=mycompany,dc=com" "(objectClass=inetOrgPerson)"

Belirli bir kullanıcının bilgilerini aramak:

ldapsearch -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -b "ou=users,dc=mycompany,dc=com" "(uid=john.doe)"

Sadece belirli nitelikleri göstermek:

ldapsearch -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -b "ou=users,dc=mycompany,dc=com" "(uid=john.doe)" cn sn mail

7. Girişleri (Entry) Silme

Bir kullanıcıyı veya OU’yu silmek için ldapdelete kullanılır.

delete_user.ldif dosyası:

dn: uid=john.doe,ou=users,dc=mycompany,dc=com
changetype: delete

Silme işlemini gerçekleştirmek için:

ldapdelete -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 -f delete_user.ldif

Veya doğrudan komut satırında:

ldapdelete -x -D "cn=admin,dc=mycompany,dc=com" -W -H ldap://localhost:389 "uid=john.doe,ou=users,dc=mycompany,dc=com"

Bir OU’yu silmeden önce, altındaki tüm girişleri silmeniz gerektiğini unutmayın.

Gelişmiş OpenLDAP Konfigürasyonları

OpenLDAP’ın yetenekleri temel kullanıcı ve grup yönetiminin ötesine geçer. İşte bazı gelişmiş konulara kısa bir bakış:

1. TLS/SSL Yapılandırması

LDAP iletişimini şifrelemek, özellikle hassas kimlik bilgileri aktarılırken hayati öneme sahiptir. OpenLDAP, TLS/SSL (LDAPS) desteği sunar. Bunun için bir SSL sertifikası ve özel anahtarınız olmalıdır.

Sertifikaları ve anahtarları /etc/ssl/certs/slapd_cert.pem ve /etc/ssl/private/slapd_key.pem gibi bir yere yerleştirin. Ardından OLC’ye aşağıdaki gibi ekleyin:

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ca_certificates.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/slapd_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/slapd_key.pem

Bu LDIF’i uyguladıktan sonra, ldaps:// protokolü üzerinden bağlantı kurabilirsiniz.

2. Çoğaltma (Replication)

Yüksek erişilebilirlik ve yük dengeleme için OpenLDAP çoğaltma mekanizmaları sunar. En yaygın olanları master-slave (tek yönlü) ve multi-master (çok yönlü) çoğaltmadır. Bu, birden fazla LDAP sunucusunun aynı dizin verilerini tutmasını sağlar. Çoğaltma genellikle syncrepl ve olcSincProvider nitelikleri ile OLC üzerinden yapılandırılır.

3. Entegrasyonlar

OpenLDAP, çeşitli sistemlerle entegre edilebilir:
* PAM (Pluggable Authentication Modules) ve NSS (Name Service Switch): Linux sistemlerinin kullanıcı kimlik doğrulamasını ve kullanıcı/grup bilgilerini LDAP’tan almasını sağlar. Bu, sistem genelinde merkezi kimlik yönetimi için kritik öneme sahiptir. libnss-ldap ve libpam-ldap veya nslcd ve sssd gibi paketler kullanılır.
* E-posta Sunucuları (Postfix, Dovecot): Kullanıcı hesapları ve e-posta adresleri için LDAP’ı kullanır.
* Web Sunucuları (Apache, Nginx): HTTP kimlik doğrulaması için LDAP’ı kullanabilir.
* VPN Sunucuları (OpenVPN): Kullanıcı kimlik doğrulaması için LDAP’ı kullanabilir.

4. Yedekleme ve Geri Yükleme

OpenLDAP dizinini düzenli olarak yedeklemek çok önemlidir. OLC dizinini ve veri tabanını yedekleyebilirsiniz.
Veri tabanı yedekleme için slapcat komutu kullanılır:

sudo slapcat -l /var/backups/ldap_backup.ldif

Bu, tüm dizin içeriğini bir LDIF dosyasına dışa aktarır. Geri yüklemek için, boş bir slapd veritabanına slapadd ile bu dosyayı içe aktarabilirsiniz.

sudo systemctl stop slapd
sudo rm -rf /var/lib/ldap/* # Veritabanını temizle
sudo slapadd -l /var/backups/ldap_backup.ldif
sudo systemctl start slapd

OLC yapılandırmasını yedeklemek için /etc/ldap/slapd.d dizinini (/etc/openldap/slapd.d) kopyalamak yeterlidir.

Sorun Giderme ve Hata Ayıklama

OpenLDAP yapılandırması bazen karmaşık olabilir ve hatalarla karşılaşmak doğaldır. İşte bazı yaygın sorunlar ve çözümleri:

* Bağlantı Sorunları:
* ldapsearch veya diğer komutlar bağlanamıyorsa, slapd servisinin çalışıp çalışmadığını kontrol edin (sudo systemctl status slapd).
* Güvenlik duvarının (firewall) LDAP portlarını (varsayılan olarak 389 ve 636) engellemediğinden emin olun.
* Kimlik Doğrulama Hataları:
* Yanlış yönetici DN’si veya parolası kullanıyor olabilirsiniz. Yönetici DN’sinin doğru olduğundan ve parolanın doğru girildiğinden emin olun.
* ACL’ler, belirli kullanıcıların veya grupların dizine erişmesini engelliyor olabilir. ACL’lerinizi kontrol edin.
* LDIF Dosyası Hataları:
* LDIF dosyalarınızda sözdizimi hataları (örneğin, boş satır, yanlış nitelik adı) olabilir. ldapadd veya ldapmodify komutunun çıktısını dikkatlice okuyun.
* objectClass eksikliği veya yanlış objectClass kullanımı sık karşılaşılan bir hatadır. Bir girişin sahip olması gereken tüm objectClass‘lara sahip olduğundan emin olun.
* Şema Hataları:
* Bir nitelik veya objectClass kullanmaya çalışıyorsunuz ancak ilgili şema yüklenmemiş olabilir. Gerekli tüm şemaların OLC’ye yüklendiğinden emin olun.
* Günlükleri Kontrol Etme:
* OpenLDAP günlükleri, sorunları teşhis etmek için en iyi kaynaktır. Genellikle /var/log/syslog veya /var/log/auth.log (Debian/Ubuntu) ya da /var/log/messages (CentOS/RHEL) içinde bulunurlar. slapd‘nin daha fazla ayrıntı günlüğe kaydetmesini sağlamak için olcLogLevel niteliğini OLC’de ayarlayabilirsiniz. Örneğin, olcLogLevel: 256 (bilgi mesajları) veya daha yüksek bir değer (hata ayıklama için).

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: 256

Bu, slapd‘nin daha fazla ayrıntı günlüğe kaydetmesini sağlayacaktır.

Sonuç

OpenLDAP, merkezi kimlik ve erişim yönetimi için güçlü ve esnek bir araçtır. Bu makalede, OpenLDAP’ı kurmaktan, OLC tabanlı temel yapılandırmaları yapmaya ve ldapadd, ldapmodify, ldapdelete, ldapsearch, ldappasswd gibi temel yönetimsel araçları kullanmaya kadar geniş bir yelpazede bilgi sunduk. Ayrıca, TLS/SSL şifrelemesi, çoğaltma, diğer sistemlerle entegrasyon ve yedekleme gibi gelişmiş konulara da değindik. OpenLDAP’ın tam potansiyelini kullanmak, iyi bir planlama, dikkatli yapılandırma ve düzenli yönetim gerektirir. Bu rehber, OpenLDAP dünyasına adım atmanız için sağlam bir temel oluşturacaktır. Güvenli ve verimli bir LDAP dizini için en iyi uygulamaları takip etmek ve düzenli olarak dokümantasyonu incelemek her zaman önemlidir.

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

Gönder

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.
Exit mobile version