Ana Sayfa » *nix » 389 Directory Server (LDAP) Kurulum ve Yapılandırması

389 Directory Server (LDAP) Kurulum ve Yapılandırması


BerbatKötüİdare EderGüzelHarika (Henüz Puan Verilmedi. Oy kullanarak siz de katkı yapabilirsiniz.)
Loading...

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYqKoP9Q' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349

ve açık kaynak kod teknolojiler barındıran altyapılar için, merkezi kimlik denetimi işleri için bir ldap dizin servisi ihtiyacı olduğu zaman OpenLDAP dahil kullanılabilecek bir kaç alternatif var. Multi Master replikasyon desteği, yüksek performans, LDAPv3 uyumluluğu gibi güzel özellikleri ve kullanışlı bir arayüze sahip olmasından dolayı “389 Directory Server” alternatifler arasında iyi bir tercih olmaktadır. RHEL tarafından geliştirilmekte olan 389-DS hemen her tür operasyonu da online olarak gerçekleştirebilmesinden mütevellit, üretim ortamları için de çok uygun bir directory serverdır.

Bu yazıda, tüm özelliklerine http://directory.fedoraproject.org/docs/389ds/FAQ/features.html adresinden erişelebilecek olan 389 Directory Server'ın, CentOS 6.6 sürümü üzerinde nasıl kurulacağı; temel ve genel güvenlik ayarlarının yapılarak nasıl servisin nasıl devreye alınabileceğine değineceğim. Yazının sonraki bölümlerinde ise Master & Slave replication ve SSSD üzerinden SSH servisinin ve SUDO entegrasyonlarından bahsedeceğim.

Kurulum

Öncelikle dizin servisinin düzgün çalışabilmesi için hostname, alan adı ve çözümleme konularında herhangi bir aksaklık olmaması gerekiyor. Bu nedenle sunucunuza ait tam ismi (FQDN) DNS sunucunuza -olmadı hosts- dosyanıza eklemeniz gerekiyor. Benim test ortamında 389-ds kurulumunu yapacağım sunucunun hostname'i ldap01, domain'i linuxakademi.lab ve ip adresi 10.10.10.10 bu nedenle hosts dosyama aşağıdaki şekilde bir kayıt ekliyorum.

# echo "10.10.10.10 ldap01.linuxakademi.lab ldap01" >> /etc/hosts

Aynı şekilde ilgili kaydı DNS sunucunuzda da tanımlayarak, networkünüzün her node'undan aynı isimle erişilebildiğinden emin olun.

Ardından iptables'a gerekli kuralları ekliyoruz:

# iptables -A INPUT -i eth0 -p tcp --dport 389 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp --dport 636 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp --dport 9830 -j ACCEPT
# /etc/init.d/iptables save
/etc/init.d/iptables reload

Şimdi de SELinux'u kapatalım:

# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# setenforce 0

Sonra file descriptor ve tcp stack üzerinde küçük bir iki tanımlama ile performance tuning yapalım:

# echo "net.ipv4.tcp_keepalive_time = 300" >> /etc/sysctl.conf
# echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf
# echo "*               soft     nofile          8192" > /etc/security/limits.d/90-nofile.conf     
# echo "*               hard     nofile          8192" >> /etc/security/limits.d/90-nofile.conf
# echo "ulimit -n 8192" >> /etc/profile
# echo "session     required     /lib64/security/pam_limits.so" >> /etc/pam.d/system-auth

Ayrıca, /proc/sys/fs/file-max dosyasındaki değerin, 64000'den büyük olduğuna emin olalım. Modern sistemlerde bu değer genelde daha büyük olacaktır, ancak eğer değilse minimum 64000 yapmalısınız.

Şimdi özellikle tuning ayarlarının aktif olması için sistemi reboot edelim.

# reboot

Sistem açıldıktan sonra, 389 ds'i paket yöneticisinden kurmak üzere EPEL ve remi repolarının sisteme ekleyelim:

# rpm -Uvh http://ftp.linux.org.tr/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Ardından 389-ds paketeni sisteme kuruyoruz:

# yum install -y 389-ds

Kurulumlar tamamlandıktan sonra dizin servisinin yapılandırılması işlemine geçiyoruz:

Genel Yapılandırma

Yapılandırmaya başlamadan önce, 389-ds paketi ile birlikte gelen ve sistemi tarayıp gerekli paketlerin ve yamaları, yeterli memory olup olmadığını ve diğer sistem ayarlarını check eden “dsktune” isimli uygulamayı çalıştırıyoruz:

# dsktune

Bu araç, sistemi tarayacak ve herhangi bir sorun olmaması durumunda aşağıdakine benzer bir çıktı verecektir.

389 Directory Server system tuning analysis version 23-FEBRUARY-2012.

NOTICE : System is x86_64-unknown-linux3.8.13-68.1.3.el6uek.x86_64 (2 processor).

Sizdeki çıktıda herhangi bir WARNING var ise bahsi geçen problemi gidermeniz ve dsktune'u yeniden çalıştırmanız gerekmektedir.

Herşeyin yolunda olduğu rapor edildiyse, aşağıdaki komut ile yapılandırma işlemine başlıyoruz:

# setup-ds-admin.pl

Bu komutu çalıştırdığınız zaman, yapılandırma işlemleri için bir takım sorular sorulacaktır. Yapılandırma işlemlerinin tam bir çıktısı ve sorulan soruların anlamları aşağıda bold ve kırmızı olarak verilmiştir. İlgili ibareleri izleyerek kendi tanımlamalarınızı da bu şekilde yapınız:

==============================================================================
This program will set up the 389 Directory and Administration Servers.

It is recommended that you have "root" privilege to set up the software.
 for using this program:
  - Press "Enter" to choose the default and go to the next screen
  - Type "Control-B" then "Enter" to go back to the previous screen
  - Type "Control-C" to cancel the setup program

Would you like to continue with set up? [yes]:
Setup'a devam etmek isteyip istemediğinizi soran ilk soru; yes diyerek devam edin.
==============================================================================
Your system has been scanned for potential problems, missing patches,
etc.  The following output is a report of the items found that need to
be addressed before running this software in a production
environment.

389 Directory Server system tuning analysis version 23-FEBRUARY-2012.

NOTICE : System is x86_64-unknown-linux2.6.32-504.3.3.el6.x86_64 (1 processor).

Would you like to continue? [no]: yes
dsktune aracı bir daha çalıştırıldı ve sistem check edildi. Herhangi bir warning verilmedi. Devam etmek istiyor muyuz ? Evet.
==============================================================================
Choose a setup type:

   1. Express
       Allows you to quickly set up the servers using the most
       common options and pre-defined defaults. Useful for quick
       evaluation of the products.

   2. Typical
       Allows you to specify common defaults and options.

   3. Custom
       Allows you to specify more advanced options. This is
       recommended for experienced server administrators only.

To accept the default shown in brackets, press the Enter key.

Choose a setup type [2]:
Ne tip bir kurulum yapacağız ? Express, Typical ya da Custom seçeneklerinden birini seçebiliriz. Biz tipik bir kurulum yapacağımız için 2 diyerek devam ediyoruz.
==============================================================================
Enter the fully qualified domain name of the computer
on which you're setting up server software. Using the form
.
Example: eros.example.com.

To accept the default shown in brackets, press the Enter key.

Warning: This step may take a few minutes if your DNS servers
can not be reached or if DNS is not configured correctly.  If
you would rather not wait, hit Ctrl-C and run this program again
with the following command line option to specify the hostname:

    General.FullMachineName=your.hostname.domain.name

Computer name [ldap01.linuxakademi.lab]:
Bu alanda sistemimizin tam alan adını belirtiyoruz. Bu nokta servisin düzgün çalışması için önemlidir. Kurulumun FQDN'i kendisinin detect etmesi herşeyin yolunda olduğunu gösterir.

==============================================================================
The servers must run as a specific user in a specific group.
It is strongly recommended that this user should have no privileges
on the computer (i.e. a non-root user).  The setup procedure
will give this user/group some permissions in specific paths/files
to perform server-specific operations.

If you have not yet created a user and group for the servers,
create this user and group using your native operating
system utilities.

System User [nobody]:
System Group [nobody]:
Servisin hangi user ve grup üzerinden çalıştırılacağını belirlediğimiz bölüm. Burada, default olarak nobody seçiyoruz.
==============================================================================
Server information is stored in the configuration directory server.
This information is used by the console and administration server to
configure and manage your servers.  If you have already set up a
configuration directory server, you should register any servers you
set up or create with the configuration server.  To do so, the
following information about the configuration server is required: the
fully qualified host name of the form
.(e.g. hostname.example.com), the port number
(default 389), the suffix, the DN and password of a user having
permission to write the configuration information, usually the
configuration directory administrator, and if you are using security
(TLS/SSL).  If you are using TLS/SSL, specify the TLS/SSL (LDAPS) port
number (default 636) instead of the regular LDAP port number, and
provide the CA certificate (in PEM/ASCII format).

If you do not yet have a configuration directory server, enter 'No' to
be prompted to set up one.

Do you want to register this software with an existing
configuration directory server? [no]:
Sistem üzerinde daha önceden yapılandırılmış bir dizin servisini olup olmadığını ve bu kurulumu register edip etmek isteyip istemediğimizi soran bölüm. Biz yeni kurulum yapıyor olduğumuzdan burada "no" diyoruz.

==============================================================================
Please enter the administrator ID for the configuration directory
server.  This is the ID typically used to log in to the console.  You
will also be prompted for the password.

Configuration directory server
administrator ID [admin]:
Password:
Password (confirm):
Dizin servisinin konsoluna bağlanma ve management işlemleri sırasında kullanılacakusername / password ikilisini set ettiğimiz bölüm. Burada kullanıcı ve şifremizi tanımlıyoruz.
==============================================================================
The information stored in the configuration directory server can be
separated into different Administration Domains.  If you are managing
multiple software releases at the same time, or managing information
about multiple domains, you may use the Administration Domain to keep
them separate.

If you are not using administrative domains, press Enter to select the
default.  Otherwise, enter some descriptive, unique name for the
administration domain, such as the name of the organization
responsible for managing the domain.

Administration Domain [linuxakademi.lab]:
Yönetici domainin ne olacağını belirten bölüm. Bizim sadece bir alanımız olduğu için burada linuxakademi.lab şeklinde beliryiroruz.

==============================================================================
The standard directory server network port number is 389.  However, if
you are not logged as the superuser, or port 389 is in use, the
default value will be a random unused port number greater than 1024.
If you want to use port 389, make sure that you are logged in as the
superuser, that port 389 is not in use.

Directory server network port [389]:
Dizin servisinin portu. Default 389.
==============================================================================
Each instance of a directory server requires a unique identifier.
This identifier is used to name the various
instance specific files and directories in the file system,
as well as for other uses as a server instance identifier.

Directory server identifier [ldap01]:
Dizin servisinin tanımlayıcısı. Burada hostname'imizi kullanıyoruz.

==============================================================================
The suffix is the root of your directory tree.  The suffix must be a valid DN.
It is recommended that you use the dc=domaincomponent suffix convention.
For example, if your domain is example.com,
you should use dc=example,dc=com for your suffix.
Setup will create this initial suffix for you,
but you may have more than one suffix.
Use the directory server utilities to create additional suffixes.

Suffix [dc=linuxakademi, dc=lab]:
Sistemdeki kök dizin ağacını tanımlıyoruz. Default dc=linuxakademi, dc=lab

==============================================================================
Certain directory server operations require an administrative user.
This user is referred to as the Directory Manager and typically has a
bind Distinguished Name (DN) of cn=Directory Manager.
You will also be prompted for the password for this user.  The password must
be at least 8 characters long, and contain no spaces.
Press Control-B or type the word "back", then Enter to back up and start over.

Directory Manager DN [cn=Directory Manager]:
Password:
Password (confirm):
Administrative user'ımız. Burada default olarak "cn=Directory Manager" DN'ini kullanacağız ve 8 karakterli bir şifre tanımlayacağız. (Bir önce tanımladığımız admin user'ı ile aynı şifreyi verebilirsiniz.)
==============================================================================
The Administration Server is separate from any of your web or application
servers since it listens to a different port and access to it is
restricted.

Pick a port number between 1024 and 65535 to run your Administration
Server on. You should NOT use a port number which you plan to
run a web or application server on, rather, select a number which you
will remember and which will not be used for anything else.

Administration port [9830]:
Yönetimsel işlemler için kullanılacak (consol) port. Default 9830. 

==============================================================================
The interactive phase is complete.  The script will now set up your
servers.  Enter No or go Back if you want to change something.

Are you ready to set up your servers? [yes]:
Son olarak yapılandırmanın tamamlanması için evet diyoruz.
==============================================================================

Yapılandırmanın sorunsuz tamamlandığını belirten çıktıdan sonra, dirsrv isimli dizin servisi süreci ve dirsrv-admin isimli console servisi start edilecek ve erişime hazır duruma gelecektir.
Kullanmaya başlamadan önce bu iki servisi startup'a ekliyoruz:

# chkconfig dirsrv on
# chkconfig dirsrv-admin on

Şu anda servis sorunsuz olarak çalışıyor olmalıdır, test etmek için aşağıdaki ldapsearch komutunu kullanalım:

# ldapsearch -x -b "dc=linuxakademi,dc=lab"

Komut herhangi bir hata vermeden, dizin şemasını aşağıdakine benzer şekilde görüntüleyecektir.


Böylece dizin servisinin düzgün olaraç çalıştığını test etmiş oluyoruz. Ancak yukarıdaki ldapseach komutunda farketmiş olabileceğiniz gibi şu anda dizin servisi herhangi bir kimlik doğrulaması yapmaksızın sorgulanabiliyor. Bu güvenli bir durum olmayacağı için öncesinde Anonymous Access'i kapatmak ve güvenli erişim için TLS/SSL yapılandırmasını tamamlamak gerekiyor. Bunun için şimdi TLS/SSL için kullanılacak sertifika otoritelerinin ve sertifikaların oluşturulma işlemlerini tamamlayalım.

TLS/SSL Yapılandırmaları

Öncelikli olarak şu anda çalışmakta olan yapılandırmayı yedekliyoruz.

# cd /etc/dirsrv/slapd-ldap01  
# mkdir /ldap-backups/ && tar -cf /ldap-backups/db-backup.tar *

Ardından, sertifika oluşturma vs. işleri için bir şifre belirleyip, tmp dizini altında pwdfile ismli dosya içerisine yazıyoruz:

# echo "sifreburaya" > /tmp/pwdfile

Daha sonra LDAP servisi için bir sertifika database'i oluşturalım:

# cd /etc/dirsrv/slapd-ldap01
# certutil -N -d . -f /tmp/pwdfile

Şimdi de ldap servisi için oluşturacağımız ssl sertifikasını imzalayacağımız CA sertifikamızı oluşturuyoruz:

certutil -S -n "CA certificate" -s "cn=LinuxAkademi CA Cert,dc=linuxakademi,dc=lab" -2 -x -t "CT,," -m 1000 -v 120 -d . -k rsa -f /tmp/pwdfile

Not: Burada CA sertifikasnın ismi ve domainini düzgün verdiğinize dikkat edin. Sertfika isimlerinde yapılan hatalar ya da tutarsızlıklar SSL üzerinden LDAP servisi verme işleminin çalışmamasına neden olacaktır. Ben örnekte sertifikayı “LinuAkademi CA Cert” ismi ile linuxakademi.lab domainine ait olacak şekilde oluşturuyorum.

Bu komutu verdiğiniz zaman aşağıdakine benzer bir şekilde, key'in üretilebilmesi için klavyeden ramdom girişler yapmanızı isteyecek ve progress bar sona geldiği zaman iki soru sorarak cevaba göre işlemi tamamlayacaktır. İlki bunun bir CA sertifikası mı olduğunu soran bu soruların ikisine de “y” tuşu ile evet diyerek işlemi tamamlıyoruz:

A random seed must be generated that will be used in the
creation of your key.  One of the easiest ways to create a
random seed is to use the timing of keystrokes on a keyboard.

To begin, type keys on the keyboard until this progress meter
is full.  DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD!


Continue typing until the progress meter is full:

|************************************************************|

Finished.  Press enter to continue:


Generating key.  This may take a few moments...

Is this a CA certificate [y/N]?
y
Enter the path length constraint, enter to skip [
Is this a critical extension [y/N]?
y

Bu şekilde CA sertifikamız oluşturulmuş oluyor. Böylece bu CA cert ile ldap servisi için bir self-signed SSL sertifikası imzalayabiliriz.

Bu işlem için gene aynı dizindeşu komutu giriyoruz:

certutil -S -n "Server-Cert" -s "cn=ldap01.linuxakademi.lab,ou=Directory Server" -c "CA certificate" -t "u,u,u" -m 1001 -v 120 -d . -k rsa -f /tmp/pwdfile

Bu komut, ldap01.linuakademi.lab ismi için “CA certificate” isimli CA'i kullanarak bir sertifika oluşturulmasını söylemektedir. Burada da isimlere dikkat etmek gerekmekte. Ldap servisi için oluşturulan sertifikanın mutlak olarak ilgili sunucunun tam fqdn'i için oluşturulması ve base domain ile aynı olması gerekir.

Bu komut da sizden gene rastgele girişler yapmanızı isteyecek ve aşağıdaki gibi tamamlanacaktır:

A random seed must be generated that will be used in the
creation of your key.  One of the easiest ways to create a
random seed is to use the timing of keystrokes on a keyboard.

To begin, type keys on the keyboard until this progress meter
is full.  DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD!


Continue typing until the progress meter is full:

|************************************************************|

Finished.  Press enter to continue:


Generating key.  This may take a few moments...

Notice: Trust flag u is set automatically if the private key is present.

Bu şekilde ldap servisi için sertifika oluşturma işlemini tamamlamış oluyoruz. Son olarak ilgili CA sertifikamıza ait pub key'i ldap servisine ssl üzerinden erişecek servislerin kullanımı için export edelim:

# certutil -d . -L -n "CA certificate" -a > cacert.asc

Ldap servisi için SSL sertifikasının oluşturulmasının ardından ikinci olarak, Ldap servisini bir GUI üzerinden yönetmeye olanak sağlayan “Admin Server” için de benzer şekilde bir SSL sertifikası oluşturmamız gerekiyor.

Öncelikle certutil ile admin server için key database'ini oluşturulım:

# cd /etc/dirsrv/admin-serv
# certutil -N -d . -f /tmp/pwdfile

Ardından, Admin server'a ait CA sertifikasını oluşturalım:

# certutil -S -n "CA certificate" -s "cn=LinuxAkademi Admin Server CA Cert,dc=linuxakademi,dc=lab" -2 -x -t "CT,," -m 1000 -v 120 -d . -k rsa -f /tmp/pwdfile

CA sertifikasının oluşturulması işleminde alan adına ve sertifika ismine dikkat ederek bir önce oluşturduğumuz sertifkalarda olduğu gibi prosedürü tamamlayalım.

CA oluşturulduktan sonra bu sertifika ile admin server için bir sertifika oluşturuyoruz:

# certutil -S -n "Server-Cert" -s "cn=ldap01.linuxakademi.lab,ou=Admin Server" -c "CA certificate" -t "u,u,u" -m 1001 -v 120 -d . -k rsa -f /tmp/pwdfile

Hem dirsrv hem de admin server için sertifikaların oluşturulmasının ardından artık ilgili servislerin başlatılması sırasında /tmp/pwdfile dosyasına kaydetmiş olduğumuz şifrenin girilmesi gerekecektir. İşte bu durumun otomatize edilmesi için aşağıdaki adımları gerçekleştirelim:

/etc/dirsrv/admin-serv/nss.conf dosyasını editleyin ve NSSPassPhraseDialog satırını aşağıdaki şekilde düzenleyin:

NSSPassPhraseDialog  file://///etc/dirsrv/admin-serv/password.conf

Ardından /etc/dirsrv/admin-serv/password.conf dosyasını oluşturup gerekli izinleri tanımlayalım:

# touch /etc/dirsrv/admin-serv/password.conf
# chmod 600 /etc/dirsrv/admin-serv/password.conf
# chown nobody /etc/dirsrv/admin-serv/password.conf

Şimdi de ilgili dosya içerisine şifremizi yazalım:

# LDAPPWD=$(cat /tmp/pwdfile)
# echo "internal:$LDAPPWD" > /etc/dirsrv/admin-serv/password.conf

Admin server için yaptığımız bu tanımlamanın bir benzerini dir server için yapıyoruz:

# touch /etc/dirsrv/slapd-ldapslave01/pin.txt
# chmod 600 /etc/dirsrv/slapd-ldapslave01/pin.txt
# chown nobody /etc/dirsrv/slapd-ldapslave01/pin.txt
# LDAPPWD=$(cat /tmp/pwdfile)
# echo "Internal (Software) Token:$LDAPPWD" > /etc/dirsrv/slapd-ldapslave01/pin.txt

Böylece TLS ile ilgili temel tanımlamaları yapmış oluyoruz. Şimdi herşeyin doğru olup olmadığını test etmek için her iki servisi de restart edelim:

# /etc/init.d/dirsrv restart
# /etc/init.d/dirsrv-admin restart

Bu şekilde servisler normak bir şekilde restart edilmiş olmalıdır.

Şimdi hem admin server'a hem de console'a erişimlerin encrypt olmasını default olarak set ayarlayacağız. Normalde bu işlemi komut satırından yapabileceğiniz gibi 389-console uygulaması üzerinden de yapmak mümkün. 389-console uygulamasını client olarak kullanmak üzere sisteminize paket yöneticiniz üzerinden yükleyebilirsiniz.

Örnek olarak Kali gibi debian tabanlı dağıtımlarda:

# apt-get install 389-console

Fedora gibi RHEL tabanlı sistemlerse ise:

# yum install 389-console

şeklinde kurabilirsiniz.

Böylece 389-console uygulaması üzerinden LDAP servisine erişebilirsiniz. İlgili console ait bir ekran görüntüsü aşağıdaki gibidir:

389-console

389 dizin servisine login olmak üzere, -aksini belirtlediğiniz sürece- default kullanıcı “cn=Directory Manager”‘dır ve şifre setup-ds-admin.pl ile yapılandırma işlemlerini belirlediğimiz şifredir.

Not: Biz dizin servisine erişimlerde, TLS kullanılabilecek şekilde yapılandırdık sistemi ancak bu özelliği henüz devreye almadığımız için console erişimleri http üzerinden yapılmaktadır. Dolayısı ile şifreler ağda plaintext olarak iletilecektir. Bu nedenle -işlemler grafik arabirim üzerinden yapılabildiğinden dolayıayrıca anlatmayacağım üzere- sisteme ilk login olmanızın ardından “Configure Admin Server” ve “Configure DS” segmelerinden Encryption ve Secure Connection tanımlamalarını yerine getirin. Bu işlemin ardından dizin ve admin servislerini yeniden restart ettikten sonra sisteme encrypt olarak ( örn: https://ldap01.linuxakademi.com.tr:9830 ) erişebilirsiniz.

Visited 7.156 times, 1 visit(s) today
Kategoriler: *nix |

Bu yazılar da ilginizi çekebilir:


- Webmin – Web-Based Unix Management
- CentOS 7.0 Üzerinde Zimbra Server 8.0 Kurulumu
- Backtrack 4 Üzerine Nessus Kurulumu
- Two-Factor Auth Destekli OpenVPN Server Kurulumu
- FreeBSD 6.2 Kurulumu – Part IV: Post-Installation

Yorumlar


  1. Vedat ELÇİGİL | (Haziran 22nd, 2015 10:58 am)

    Teşekkürler Hocam Ellerinize Sağlık,,
    Güzel bir kaynak Olmuş.

    [Cevapla]

  2. Bora AKAYDIN | (Temmuz 7th, 2015 7:03 pm)

    Yazıyı inceledim ve kendi ağımdaki makinalara uyguladım. Uzaktaki LDAP sunucusundan SSH ve Xforwarding (Xming) ile 389-console uygulamasını Windows masaüstüne almaya çalışırken anlamsız bir hata verip bağlanamıyor. Biraz araştırdığımda console uygulamasının Windows için yazılmış sürümü olduğunu farkettim. Bu istemciyle bağlanınca sorun düzeliyor.

    Saygılarımla

    [Cevapla]

Trackbacks

Yorumda bulunun.